public async Task Handle_GivenInvalidRequest_ShouldThrowPlayerDoesNotHaveALinkedSteamAccountException() { // Arrange var command = new CreateTeamCommand { Name = "ValidTeam", Description = "SomeDescriptionIDontKnow", TournamentFormatId = 2, TeamImage = It.IsAny <IFormFile>() }; var playersRepository = new EfDeletableEntityRepository <Player>(this.dbContext); var userAccessorMock = new Mock <IUserAccessor>(); userAccessorMock.Setup(x => x.UserId).Returns("Foo2"); var sut = new CreateTeamCommandHandler( It.IsAny <IDeletableEntityRepository <Team> >(), It.IsAny <IDeletableEntityRepository <TournamentFormat> >(), It.IsAny <IDeletableEntityRepository <PlayerTeam> >(), playersRepository, It.IsAny <ICloudinaryHelper>(), It.IsAny <IMapper>(), userAccessorMock.Object); // Act & Assert await Should.ThrowAsync <PlayerDoesNotHaveALinkedSteamAccountException>(sut.Handle(command, It.IsAny <CancellationToken>())); }
public async void Given_TeamDoesNotExist_When_CreateTeam_Then_TeamIsReturned() { // Arrange var teams = new List <Team>(); var contextMock = MockDbContext(teams.AsQueryable()); var handler = new CreateTeamCommandHandler(contextMock.Object); //Act var result = await handler.Handle(new CreateTeamCommand { Name = "Liverpool" }, CancellationToken.None); //Assert result.Should().Be(Unit.Value); contextMock.Verify(mock => mock.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Once()); }
public async Task Handle_GivenNullRequest_ShouldThrowArgumentNullException() { // Arrange var sut = new CreateTeamCommandHandler( It.IsAny <IDeletableEntityRepository <Team> >(), It.IsAny <IDeletableEntityRepository <TournamentFormat> >(), It.IsAny <IDeletableEntityRepository <PlayerTeam> >(), It.IsAny <IDeletableEntityRepository <Player> >(), It.IsAny <ICloudinaryHelper>(), It.IsAny <IMapper>(), It.IsAny <IUserAccessor>()); // Act & Assert await Should.ThrowAsync <ArgumentNullException>(sut.Handle(null, It.IsAny <CancellationToken>())); }
public void Given_TeamDoesExists_When_CreateExistingTeam_Then_ThrowException() { // Arrange var teams = new List <Team> { new Team { Name = "Liverpool" } }; var contextMock = MockDbContext(teams.AsQueryable()); var handler = new CreateTeamCommandHandler(contextMock.Object); //Act Func <Task> func = async() => await handler.Handle(new CreateTeamCommand { Name = "Liverpool" }, CancellationToken.None); //Assert func.Should().Throw <TeamAlreadyExistsException>(); }
public async Task HandleShouldFailWhenRecordWithSameNameAlreadyExist() { // Arrange var id = Guid.NewGuid(); var version = 1; var name = "name"; var image = "image"; var description = "description"; var layout = "layout"; var teamWriteRepositoryMock = new Mock <ITeamWriteRepository>(); teamWriteRepositoryMock.Setup(x => x.CreateAsync(It.IsAny <Team>())).Throws <UniqueKeyException>(); var teamWriteRepository = teamWriteRepositoryMock.Object; var identifierProviderMock = new Mock <IIdentifierProvider>(); identifierProviderMock.Setup(x => x.Generate()).Returns(id); var identifierProvider = identifierProviderMock.Object; var versionProviderMock = new Mock <IVersionProvider>(); versionProviderMock.Setup(x => x.Generate()).Returns(version); var versionProvider = versionProviderMock.Object; var command = new CreateTeamCommand(name, image, description, layout); var handler = new CreateTeamCommandHandler(teamWriteRepository, identifierProvider, versionProvider); // Act var result = await handler.Handle(command, CancellationToken.None); // Assert result.IsFailure.Should().BeTrue(); result.Failures.Should().OnlyContain(x => x.Code == HandlerFaultCode.Conflict.Name && x.Message == HandlerFailures.ConflictTeam && x.Target == "name"); }
public async Task Handle_GivenValidRequest_ShouldCreateTeam() { // Arrange var command = new CreateTeamCommand { Name = "ValidTeam", Description = "SomeDescriptionIDontKnow", TournamentFormatId = 2, TeamImage = new Mock <IFormFile>().Object }; var cloudinaryMock = new Mock <ICloudinaryHelper>(); cloudinaryMock.Setup(x => x.UploadImage(It.IsAny <IFormFile>(), It.IsAny <string>(), It.IsAny <Transformation>())) .ReturnsAsync("http://abcdef.g/123.jpg"); var tournamentFormatsRepository = new EfDeletableEntityRepository <TournamentFormat>(this.dbContext); var playerTeamsRepository = new EfDeletableEntityRepository <PlayerTeam>(this.dbContext); var playersRepository = new EfDeletableEntityRepository <Player>(this.dbContext); var userAccessorMock = new Mock <IUserAccessor>(); userAccessorMock.Setup(x => x.UserId).Returns("Foo1"); var sut = new CreateTeamCommandHandler(this.deletableEntityRepository, tournamentFormatsRepository, playerTeamsRepository, playersRepository, cloudinaryMock.Object, this.mapper, userAccessorMock.Object); // Act var id = await sut.Handle(command, It.IsAny <CancellationToken>()); // Assert id.ShouldBeGreaterThan(0); var createdTeam = this.deletableEntityRepository.AllAsNoTracking().SingleOrDefault(x => x.Name == "ValidTeam"); createdTeam.Description.ShouldBe("SomeDescriptionIDontKnow"); createdTeam.ImageUrl.ShouldBe("http://abcdef.g/123.jpg"); createdTeam.TournamentFormatId.ShouldBe(2); }
public async Task HandleShouldReturnOk() { // Arrange var id = Guid.NewGuid(); var version = 1; var name = "name"; var image = "image"; var description = "description"; var layout = "layout"; var teamWriteRepositoryMock = new Mock <ITeamWriteRepository>(); teamWriteRepositoryMock.Setup(x => x.CreateAsync(It.IsAny <Team>())).Returns(Task.CompletedTask); var teamWriteRepository = teamWriteRepositoryMock.Object; var identifierProviderMock = new Mock <IIdentifierProvider>(); identifierProviderMock.Setup(x => x.Generate()).Returns(id); var identifierProvider = identifierProviderMock.Object; var versionProviderMock = new Mock <IVersionProvider>(); versionProviderMock.Setup(x => x.Generate()).Returns(version); var versionProvider = versionProviderMock.Object; var command = new CreateTeamCommand(name, image, description, layout); var handler = new CreateTeamCommandHandler(teamWriteRepository, identifierProvider, versionProvider); // Act var result = await handler.Handle(command, CancellationToken.None); // Assert result.IsFailure.Should().BeFalse(); result.Should().BeOfType(typeof(Result <Guid>)); }
public async Task HandleShouldReturnFailWhenDatabaseSpecificErrorOccurs() { // Arrange var id = Guid.NewGuid(); var version = 1; var name = "name"; var image = "image"; var description = "description"; var layout = "layout"; var teamWriteRepositoryMock = new Mock <ITeamWriteRepository>(); teamWriteRepositoryMock.Setup(x => x.CreateAsync(It.IsAny <Team>())).Throws <SomeDatabaseSpecificException>(); var teamWriteRepository = teamWriteRepositoryMock.Object; var identifierProviderMock = new Mock <IIdentifierProvider>(); identifierProviderMock.Setup(x => x.Generate()).Returns(id); var identifierProvider = identifierProviderMock.Object; var versionProviderMock = new Mock <IVersionProvider>(); versionProviderMock.Setup(x => x.Generate()).Returns(version); var versionProvider = versionProviderMock.Object; var command = new CreateTeamCommand(name, image, description, layout); var handler = new CreateTeamCommandHandler(teamWriteRepository, identifierProvider, versionProvider); // Act var result = await handler.Handle(command, CancellationToken.None); // Assert result.IsFailure.Should().BeTrue(); result.Failures.Should().OnlyContain(x => x.Message == CustomFailures.CreateTeamFailure); }