Skip to content

Commit

Permalink
merge with refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
WTobor committed Aug 26, 2018
2 parents 3a069f2 + ce66383 commit 49d5f58
Show file tree
Hide file tree
Showing 13 changed files with 226 additions and 51 deletions.
32 changes: 29 additions & 3 deletions BoardGamesNook.Services/GameResultService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,18 @@ namespace BoardGamesNook.Services
{
public class GameResultService : IGameResultService
{
private readonly IBoardGameRepository _boardGameRepository;
private readonly IGameResultRepository _gameResultRepository;
private readonly IGamerRepository _gamerRepository;
private readonly IGameTableRepository _gameTableRepository;

public GameResultService(IGameResultRepository gameResultRepository, IGamerRepository gamerRepository,
IGameTableRepository gameTableRepository)
IGameTableRepository gameTableRepository, IBoardGameRepository boardGameRepository)
{
_gameResultRepository = gameResultRepository;
_gamerRepository = gamerRepository;
_gameTableRepository = gameTableRepository;
_boardGameRepository = boardGameRepository;
}

public IEnumerable<GameResultDto> GetAllGameResults()
Expand All @@ -40,13 +42,22 @@ public IEnumerable<GameResultDto> GetAllByGamerNickname(string nickname)
return MapGameResultListToGameResultDtoList(gameResultList);
}

public void AddGameResult(GameResult gameResult)
public void AddGameResult(GameResultDto gameResultDto, Gamer gamer)
{
var gameResult = MapGameResultDtoToGameResultWithReferences(gameResultDto, gamer);
_gameResultRepository.Add(gameResult);
}

public void AddGameResults(List<GameResult> gameResults)
public void AddGameResults(List<GameResultDto> gameResultDtoList, Gamer gamer)
{
var gameResults = new List<GameResult>();
foreach (var gameResultDto in gameResultDtoList)
{
var gameResult = MapGameResultDtoToGameResultWithReferences(gameResultDto, gamer);
gameResult.CreatedGamerId = gamer.Id;
gameResults.Add(gameResult);
}

_gameResultRepository.AddMany(gameResults);
}

Expand Down Expand Up @@ -74,6 +85,21 @@ public GameResultDto GetGameResult(int id)
return gameResultDto;
}

private GameResult MapGameResultDtoToGameResultWithReferences(GameResultDto gameResultDto, Gamer gamer)
{
GameTable gameTable = null;
if (gameResultDto.GameTableId.HasValue)
gameTable = _gameTableRepository.Get(gameResultDto.GameTableId.Value);

var boardGame = _boardGameRepository.Get(gameResultDto.BoardGameId);

var gameResult = Mapper.Map<GameResultDto, GameResult>(gameResultDto);
Mapper.Map(gamer, gameResult);
Mapper.Map(gameTable, gameResult);
Mapper.Map(boardGame, gameResult);
return gameResult;
}

private IEnumerable<GameResultDto> MapGameResultListToGameResultDtoList(List<GameResult> gameResultList)
{
var gameResultDtoList =
Expand Down
4 changes: 2 additions & 2 deletions BoardGamesNook.Services/Interfaces/IGameResultService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ public interface IGameResultService

IEnumerable<GameResultDto> GetAllByGamerNickname(string nickname);

void AddGameResult(GameResult gameResult);
void AddGameResult(GameResultDto gameResult, Gamer gamer);

void AddGameResults(List<GameResult> gameResults);
void AddGameResults(List<GameResultDto> gameResults, Gamer gamer);

void EditGameResult(GameResult gameResult);

Expand Down
15 changes: 15 additions & 0 deletions BoardGamesNook.Services/MapperProfiles/GameResultDtoProfile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,24 @@ public GameResultDtoProfile()
.ForMember(dest => dest.GamerId, opt => opt.MapFrom(src => src.Gamer.Id))
.ForMember(dest => dest.GamerNickname, opt => opt.MapFrom(src => src.Gamer.Nickname));

CreateMap<GameResultDto, GameResult>()
.ForPath(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForPath(dest => dest.Gamer.Id, opt => opt.MapFrom(src => src.GamerId))
.ForPath(dest => dest.Gamer.Nickname, opt => opt.MapFrom(src => src.GamerNickname));

CreateMap<Gamer, GameResultDto>()
.ForMember(dest => dest.GamerId, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.GamerNickname, opt => opt.MapFrom(src => src.Nickname));

CreateMap<Gamer, GameResult>()
.ForMember(dest => dest.GamerId, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.Gamer, opt => opt.MapFrom(src => src));

CreateMap<GameTable, GameResult>()
.ForMember(dest => dest.GameTable, opt => opt.MapFrom(src => src));

CreateMap<BoardGame, GameResult>()
.ForMember(dest => dest.BoardGame, opt => opt.MapFrom(src => src));
}
}
}
163 changes: 151 additions & 12 deletions BoardGamesNook.Tests/GameResultTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using BoardGamesNook.Model;
using BoardGamesNook.Repository.Interfaces;
using BoardGamesNook.Services;
using BoardGamesNook.Services.Models;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;

Expand All @@ -13,6 +14,36 @@ namespace BoardGamesNook.Tests
[TestClass]
public class GameResultTest
{
private static readonly Guid _testGuid1 = Guid.NewGuid();
private static readonly Guid _testGuid2 = Guid.NewGuid();

private static readonly Gamer _testGamer1 = new Gamer
{
Id = _testGuid1
};

private static readonly Gamer _testGamer2 = new Gamer
{
Id = _testGuid2
};

private static readonly GameTable _testGameTable1 = new GameTable
{
Id = 1
};

private static readonly GameTable _testGameTable2 = new GameTable
{
Id = 2
};

private static readonly BoardGame _testBoardGame = new BoardGame
{
Id = 1
};

private readonly Mock<IBoardGameRepository> _boardGameRepositoryMock;

private readonly Mock<IGameResultRepository> _gameResultRepositoryMock;
private readonly Mock<IGamerRepository> _gamerRepositoryMock;
private readonly Mock<IGameTableRepository> _gameTableRepositoryMock;
Expand All @@ -21,16 +52,75 @@ public class GameResultTest
{
Id = 1,
GameTableId = 1,
GameTable = new GameTable(),
GamerId = Guid.NewGuid(),
Gamer = new Gamer()
GameTable = _testGameTable1,
GamerId = _testGuid1,
Gamer = _testGamer1,
BoardGameId = 1,
BoardGame = _testBoardGame
};

private readonly GameResultDto _testGameResultDto = new GameResultDto
{
Id = 1,
GameTableId = 1,
GamerId = _testGuid1.ToString(),
CreatedGamerId = _testGamer1.Id.ToString(),
CreatedGamerNickname = _testGamer1.Nickname,
BoardGameId = 1
};

private readonly List<GameResultDto> _testGameResultDtoList = new List<GameResultDto>
{
new GameResultDto
{
Id = 1,
GameTableId = 1,
GamerId = _testGuid1.ToString(),
CreatedGamerId = _testGamer1.Id.ToString(),
CreatedGamerNickname = _testGamer1.Nickname,
BoardGameId = 1
},
new GameResultDto
{
Id = 2,
GameTableId = 2,
GamerId = _testGuid2.ToString(),
CreatedGamerId = _testGamer1.Id.ToString(),
CreatedGamerNickname = _testGamer1.Nickname,
BoardGameId = 1
}
};

private readonly List<GameResult> _testGameResultList = new List<GameResult>
{
new GameResult
{
Id = 1,
GameTableId = 1,
GameTable = _testGameTable1,
GamerId = _testGuid1,
Gamer = _testGamer1,
BoardGameId = 1,
BoardGame = _testBoardGame
},
new GameResult
{
Id = 2,
GameTableId = 2,
GameTable = _testGameTable1,
GamerId = _testGuid2,
Gamer = _testGamer2,
BoardGameId = 1,
BoardGame = _testBoardGame
}
};

public GameResultTest()
{
_gameResultRepositoryMock = new Mock<IGameResultRepository>();
_gamerRepositoryMock = new Mock<IGamerRepository>();
_gameTableRepositoryMock = new Mock<IGameTableRepository>();
_boardGameRepositoryMock = new Mock<IBoardGameRepository>();
}

[TestMethod]
Expand All @@ -39,7 +129,7 @@ public void GetGameResultList()
//Arrange
_gameResultRepositoryMock.Setup(x => x.GetAll()).Returns(new List<GameResult> {new GameResult()});
var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object,
_gameTableRepositoryMock.Object);
_gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object);
Mapper.Reset();
Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); });
//Act
Expand All @@ -54,12 +144,61 @@ public void AddGameResultToGameResultsList()
{
//Arrange
_gameResultRepositoryMock.Setup(mock => mock.Add(It.IsAny<GameResult>()));
_gameTableRepositoryMock.Setup(mock => mock.Get(It.IsAny<int>())).Returns(_testGameTable1);
_boardGameRepositoryMock.Setup(mock => mock.Get(It.IsAny<int>())).Returns(_testBoardGame);
var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object,
_gameTableRepositoryMock.Object);
_gameTableRepositoryMock.Object,
_boardGameRepositoryMock.Object
);

Mapper.Reset();
Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); });
//Act
gameResultService.AddGameResult(_testGameResult);
gameResultService.AddGameResult(_testGameResultDto, _testGamer1);
//Assert
_gameResultRepositoryMock.Verify(mock => mock.Add(It.Is<GameResult>(x => x.Equals(_testGameResult))),
_gameResultRepositoryMock.Verify(mock => mock.Add(It.Is<GameResult>(
x => x.GameTableId == _testGameResult.GameTableId &&
x.GameTable.Id == _testGameResult.GameTable.Id &&
x.GamerId == _testGameResult.GamerId &&
x.Gamer == _testGameResult.Gamer &&
x.Place == _testGameResult.Place &&
x.PlayersNumber == _testGameResult.PlayersNumber &&
x.BoardGameId == _testGameResult.BoardGameId &&
x.BoardGame.Id == _testGameResult.BoardGame.Id &&
x.Active == _testGameResult.Active
)),
Times.Once());
}

[TestMethod]
public void AddManyGameResultToGameResultsList()
{
//Arrange
_gameResultRepositoryMock.Setup(mock => mock.AddMany(It.IsAny<List<GameResult>>()));
_gameTableRepositoryMock.Setup(mock => mock.Get(1)).Returns(_testGameTable1);
_gameTableRepositoryMock.Setup(mock => mock.Get(2)).Returns(_testGameTable2);
_boardGameRepositoryMock.Setup(mock => mock.Get(It.IsAny<int>())).Returns(_testBoardGame);
var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object,
_gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object);
Mapper.Reset();
Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); });
//Act
gameResultService.AddGameResults(_testGameResultDtoList, _testGamer1);
//Assert
_gameResultRepositoryMock.Verify(
mock => mock.AddMany(It.Is<List<GameResult>>(
x => x.Count == _testGameResultList.Count &&
x[0].BoardGameId ==
_testGameResultList[0].BoardGameId &&
x[0].BoardGame.Id ==
_testGameResultList[0].BoardGame.Id &&
x[0].GameTableId ==
_testGameResultList[0].GameTableId &&
x[0].GameTable.Id ==
_testGameResultList[0].GameTable.Id &&
x[0].GamerId == _testGameResultList[0].GamerId &&
x[0].Gamer.Id == _testGameResultList[0].Gamer.Id
)),
Times.Once());
}

Expand All @@ -71,7 +210,7 @@ public void GetGameResult()
_gamerRepositoryMock.Setup(mock => mock.Get(It.IsAny<Guid>())).Returns(new Gamer());
_gameTableRepositoryMock.Setup(mock => mock.Get(It.IsAny<int>())).Returns(new GameTable());
var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object,
_gameTableRepositoryMock.Object);
_gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object);
Mapper.Reset();
Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); });
//Act
Expand All @@ -89,7 +228,7 @@ public void GetAllByNickname()
_gameResultRepositoryMock.Setup(mock => mock.GetAllByGamerNickname(It.IsAny<string>()))
.Returns(new List<GameResult> {new GameResult()});
var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object,
_gameTableRepositoryMock.Object);
_gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object);
Mapper.Reset();
Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); });
//Act
Expand All @@ -109,7 +248,7 @@ public void GetByTable()
mock.GetAllByTableId(It.IsAny<int>()))
.Returns(new List<GameResult> {new GameResult()});
var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object,
_gameTableRepositoryMock.Object);
_gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object);
//Act
var gameResults = gameResultService.GetAllGameResultsByTableId(_testGameResult.GameTableId.Value);

Expand All @@ -126,7 +265,7 @@ public void EditGameResult()
//Arrange
_gameResultRepositoryMock.Setup(mock => mock.Edit(It.IsAny<GameResult>()));
var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object,
_gameTableRepositoryMock.Object);
_gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object);
//Act
gameResultService.EditGameResult(_testGameResult);
//Assert
Expand All @@ -140,7 +279,7 @@ public void DeactivateGameResult()
//Arrange
_gameResultRepositoryMock.Setup(mock => mock.Deactivate(It.IsAny<int>()));
var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object,
_gameTableRepositoryMock.Object);
_gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object);
//Act
gameResultService.DeactivateGameResult(_testGameResult.Id);
//Assert
Expand Down
4 changes: 3 additions & 1 deletion BoardGamesNook.Tests/GameTableServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ namespace BoardGamesNook.Tests
[TestClass]
public class GameTableServiceTest
{
private static readonly Guid testUserId = Guid.NewGuid();
private readonly Mock<IBoardGameRepository> _boardGameRepositoryMock;
private readonly Mock<IGameParticipationRepository> _gameParticipationRepositoryMock;
private readonly Mock<IGameResultRepository> _gameResultRepositoryMock;
Expand All @@ -25,7 +26,7 @@ public class GameTableServiceTest
new GameParticipation
{
Id = 1,
CreatedGamerId = Guid.NewGuid(),
CreatedGamerId = testUserId,
Gamer = new Gamer(),
GameTable = new GameTable(),
GameTableId = 1,
Expand All @@ -37,6 +38,7 @@ public class GameTableServiceTest
{
Id = 1,
BoardGames = new List<BoardGame>(),
CreatedGamerId = testUserId,
GameParticipations = null,
Active = true
};
Expand Down
2 changes: 1 addition & 1 deletion BoardGamesNook/BoardGamesNook.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -242,8 +242,8 @@
<Compile Include="MapperProfiles\GameParticipationProfile.cs" />
<Compile Include="MapperProfiles\GamerBoardGameProfile.cs" />
<Compile Include="MapperProfiles\GamerProfile.cs" />
<Compile Include="MapperProfiles\GameTableProfile.cs" />
<Compile Include="MapperProfiles\UserProfile.cs" />
<Compile Include="MapperProfiles\GameTableProfile.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Validators\GamerValidator.cs" />
<Compile Include="Validators\GameResultValidator.cs" />
Expand Down
Loading

0 comments on commit 49d5f58

Please sign in to comment.