Example #1
0
        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());
        }
Example #3
0
        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");
        }
Example #6
0
        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);
        }