Skip to content

Commit

Permalink
added server side validation for gamer
Browse files Browse the repository at this point in the history
  • Loading branch information
WTobor committed Jul 8, 2018
1 parent e6db6e7 commit 3a069f2
Show file tree
Hide file tree
Showing 6 changed files with 203 additions and 8 deletions.
1 change: 1 addition & 0 deletions BoardGamesNook.Tests/BoardGamesNook.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
</Choose>
<ItemGroup>
<Compile Include="BoardGameServiceTest.cs" />
<Compile Include="GamerValidationTest.cs" />
<Compile Include="GameTableValidationTest.cs" />
<Compile Include="GameResultValidationTest.cs" />
<Compile Include="GameResultTest.cs" />
Expand Down
146 changes: 146 additions & 0 deletions BoardGamesNook.Tests/GamerValidationTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
using BoardGamesNook.Validators;
using BoardGamesNook.ViewModels.Gamer;
using FluentValidation.TestHelper;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace BoardGamesNook.Tests
{
[TestClass]
public class GamerValidationTest
{
private readonly GamerValidator _gamerValidator;

public GamerValidationTest()
{
_gamerValidator = new GamerValidator();
}

[DataTestMethod]
[DataRow("")]
[DataRow("a")]
[DataRow("aa")]
public void NicknameThrowsError(string nick)
{
var gamer = new GamerViewModel
{
Nickname = nick
};
_gamerValidator.ShouldHaveValidationErrorFor(x => x.Nickname, gamer);
}

[DataTestMethod]
[DataRow("aaa")]
[DataRow("aaaa")]
public void NicknamePasses(string nick)
{
var gamer = new GamerViewModel
{
Nickname = nick
};
_gamerValidator.ShouldNotHaveValidationErrorFor(x => x.Nickname, gamer);
}

[DataTestMethod]
[DataRow("")]
[DataRow("a")]
[DataRow("aa")]
[DataRow("1234")]
public void NameThrowsError(string name)
{
var gamer = new GamerViewModel
{
Name = name
};
_gamerValidator.ShouldHaveValidationErrorFor(x => x.Name, gamer);
}

[DataTestMethod]
[DataRow("aaa")]
[DataRow("aaaa")]
public void NamePasses(string name)
{
var gamer = new GamerViewModel
{
Name = name
};
_gamerValidator.ShouldNotHaveValidationErrorFor(x => x.Name, gamer);
}

[DataTestMethod]
[DataRow("")]
[DataRow("a")]
[DataRow("aa")]
[DataRow("1234")]
public void SurnameThrowsError(string surname)
{
var gamer = new GamerViewModel
{
Surname = surname
};
_gamerValidator.ShouldHaveValidationErrorFor(x => x.Surname, gamer);
}

[DataTestMethod]
[DataRow("aaa")]
[DataRow("aaaa")]
public void SurnamePasses(string surname)
{
var gamer = new GamerViewModel
{
Surname = surname
};
_gamerValidator.ShouldNotHaveValidationErrorFor(x => x.Surname, gamer);
}

[DataTestMethod]
[DataRow("")]
[DataRow("a")]
[DataRow("aa@")]
public void EmailThrowsError(string email)
{
var gamer = new GamerViewModel
{
Email = email
};
_gamerValidator.ShouldHaveValidationErrorFor(x => x.Email, gamer);
}

[DataTestMethod]
[DataRow("test@test.pl")]
[DataRow("a@test.com")]
public void EmailPasses(string email)
{
var gamer = new GamerViewModel
{
Email = email
};
_gamerValidator.ShouldNotHaveValidationErrorFor(x => x.Email, gamer);
}

[DataTestMethod]
[DataRow("")]
[DataRow("a")]
[DataRow("aa")]
[DataRow("1234")]
public void CityThrowsError(string city)
{
var gamer = new GamerViewModel
{
City = city
};
_gamerValidator.ShouldHaveValidationErrorFor(x => x.City, gamer);
}

[DataTestMethod]
[DataRow("aaa")]
[DataRow("aaaa")]
public void CityPasses(string city)
{
var gamer = new GamerViewModel
{
City = city
};
_gamerValidator.ShouldNotHaveValidationErrorFor(x => x.City, gamer);
}
}
}
1 change: 1 addition & 0 deletions BoardGamesNook/BoardGamesNook.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@
<Compile Include="MapperProfiles\GameTableProfile.cs" />
<Compile Include="MapperProfiles\UserProfile.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Validators\GamerValidator.cs" />
<Compile Include="Validators\GameResultValidator.cs" />
<Compile Include="Validators\BoardGameValidator.cs" />
<Compile Include="Validators\GameTableValidator.cs" />
Expand Down
27 changes: 20 additions & 7 deletions BoardGamesNook/Controllers/GamerController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,29 @@ public JsonResult GetAll()
[HttpPost]
public JsonResult Add(GamerViewModel gamerViewModel)
{
if (!(Session["user"] is User loggedUser))
return Json(Errors.GamerNotLoggedIn, JsonRequestBehavior.AllowGet);
if (ModelState.IsValid)
{
if (!(Session["user"] is User loggedUser))
return Json(Errors.GamerNotLoggedIn, JsonRequestBehavior.AllowGet);

var gamer = GetGamerObj(gamerViewModel, loggedUser);
_gamerService.AddGamer(gamer);
var gamer = GetGamerObj(gamerViewModel, loggedUser);
_gamerService.AddGamer(gamer);

return Json(null, JsonRequestBehavior.AllowGet);
return Json(null, JsonRequestBehavior.AllowGet);
}

var errors = Helpers.GetErrorMessages(ModelState.Values);
return Json(errors, JsonRequestBehavior.AllowGet);
}

[HttpPost]
public JsonResult Edit(Gamer gamer)
public JsonResult Edit(GamerViewModel gamerViewModel)
{
if (!(Session["user"] is User loggedUser))
return Json(Errors.GamerNotLoggedIn, JsonRequestBehavior.AllowGet);

var gamer = GetGamerObj(gamerViewModel, loggedUser);

_gamerService.EditGamer(gamer);

return Json(null, JsonRequestBehavior.AllowGet);
Expand All @@ -71,7 +82,9 @@ public JsonResult Deactivate(string id)

public JsonResult GetCurrentGamerNickname()
{
var currentGamerNick = !(Session["gamer"] is Gamer currentGamer) ? string.Empty : currentGamer.Nickname;
var currentGamerNick = !(Session["gamerViewModel"] is Gamer currentGamer)
? string.Empty
: currentGamer.Nickname;
return Json(currentGamerNick, JsonRequestBehavior.AllowGet);
}

Expand Down
30 changes: 30 additions & 0 deletions BoardGamesNook/Validators/GamerValidator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using BoardGamesNook.ViewModels.Gamer;
using FluentValidation;

namespace BoardGamesNook.Validators
{
public class GamerValidator : AbstractValidator<GamerViewModel>
{
public GamerValidator()
{
RuleFor(gamer => gamer.Nickname)
.NotEmpty().WithMessage("Podaj nick!")
.MinimumLength(3).WithMessage("Nickname musi się składać z minimum 3 znaków!");
RuleFor(gamer => gamer.Name)
.NotEmpty().WithMessage("Podaj imię!")
.MinimumLength(3).WithMessage("Imię musi się składać z minimum 3 znaków!")
.Matches("^[a-zA-Z\\s]+$").WithMessage("Imię musi się składać z liter!");
RuleFor(gamer => gamer.Surname)
.NotEmpty().WithMessage("Podaj nazwisko!")
.MinimumLength(3).WithMessage("Nazwisko musi się składać z minimum 3 znaków!")
.Matches("^[a-zA-Z\\s]+$").WithMessage("Nazwisko musi się składać z liter!");
RuleFor(gamer => gamer.Email)
.NotEmpty().WithMessage("Podaj adres email!")
.EmailAddress().WithMessage("Nieprawidłowy adres email!");
RuleFor(gamer => gamer.City)
.NotEmpty().WithMessage("Podaj miasto!")
.MinimumLength(3).WithMessage("Nazwa miasta musi się składać z minimum 3 znaków!")
.Matches("^[a-zA-Z\\s]+$").WithMessage("Miasto musi się składać z liter!");
}
}
}
6 changes: 5 additions & 1 deletion BoardGamesNook/ViewModels/Gamer/GamerViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
namespace BoardGamesNook.ViewModels.Gamer
using BoardGamesNook.Validators;
using FluentValidation.Attributes;

namespace BoardGamesNook.ViewModels.Gamer
{
[Validator(typeof(GamerValidator))]
public class GamerViewModel
{
public string Id { get; set; }
Expand Down

0 comments on commit 3a069f2

Please sign in to comment.