public async Task ReturnGameSuccessfully() { var login = new LoginBuilder().Build(); var loginRepository = new LoginRepositoryBuilder().Build(); var gameService = new GameServiceBuilder(loginRepository).Build(); var friendService = new FriendServiceBuilder(loginRepository).Build(); await loginRepository.Add(login); await gameService.Add(_gameDto, login.Id); await friendService.Add(_friendDto, login.Id); var insertedGame = login.Games.Single(); var insertedFriend = login.Friends.Single(); var gameLoanDto = new GameLoanDto(insertedGame.Id, insertedFriend.Id); await gameService.Lend(gameLoanDto, login.Id); var gameReturnDto = new GameReturnDto(insertedGame.Id); var result = await gameService.Return(gameReturnDto, login.Id); Assert.True(result.Success); Assert.Null(insertedGame.FriendId); }
public async Task <Result> Lend(GameLoanDto gameLoanDto, int loginId) { try { var login = await GetLoginIfExists(loginId); var game = GetGame(login, gameLoanDto.GameId); var friend = GetFriend(login, gameLoanDto.FriendId); if (game.FriendId != null) { return(new Result(false, "This game is already lent")); } login.LendGame(game.Id, friend.Id); await _loginRepository.Update(login); return(new Result(true, "Game lent")); } catch (Exception exception) { return(new Result(false, exception.Message)); } }
public async Task <ActionResult <Result> > Lend(GameLoanDto gameLoanDto) { var loginId = await GetLoginId(); var result = await _gameService.Lend(gameLoanDto, loginId); return(Ok(result)); }
public async Task DontLendGameThatIsAlreadyLent() { var login = new LoginBuilder().Build(); var loginRepository = new LoginRepositoryBuilder().Build(); var gameService = new GameServiceBuilder(loginRepository).Build(); var friendService = new FriendServiceBuilder(loginRepository).Build(); await loginRepository.Add(login); await gameService.Add(_gameDto, login.Id); await friendService.Add(_friendDto, login.Id); var insertedGame = login.Games.Single(); var insertedFriend = login.Friends.Single(); var gameLoanDto = new GameLoanDto(insertedGame.Id, insertedFriend.Id); await gameService.Lend(gameLoanDto, login.Id); // Try to lend again var result = await gameService.Lend(gameLoanDto, login.Id); Assert.False(result.Success); }