public void BadSerialNumber()
        {
            // Arrange
            var badSerialNumber = "I Am a Serial Number";
            var request         = _fixture.Build <EnterCompetition>()
                                  .With(x => x.SerialNumber, badSerialNumber)
                                  .Create();
            var productServiceMock = new Mock <IProductService>();

            productServiceMock.Setup(x => x.IsSerialNumberValid(badSerialNumber)).ReturnsAsync(false);
            var competitionRepoMock = new Mock <ICompetitionRepository>();
            var validator           = new EnterCompetitionValidator(productServiceMock.Object, competitionRepoMock.Object);

            // Act
            var result = validator.TestValidate(request);

            // Assert
            result.ShouldHaveValidationErrorFor(x => x.SerialNumber).WithErrorMessage("You must provide a valid serial number to enter competition.");
        }
        public void EligiableValidSerialNumber()
        {
            // Arrange
            var validSerialNumber = "I Am a Serial Number";
            var request           = _fixture.Build <EnterCompetition>()
                                    .With(x => x.SerialNumber, validSerialNumber)
                                    .Create();
            var productServiceMock = new Mock <IProductService>();

            productServiceMock.Setup(x => x.IsSerialNumberValid(validSerialNumber)).ReturnsAsync(true);
            var competitionRepoMock = new Mock <ICompetitionRepository>();

            competitionRepoMock.Setup(x => x.IsSerialNumberEligible(validSerialNumber)).ReturnsAsync(true);
            var validator = new EnterCompetitionValidator(productServiceMock.Object, competitionRepoMock.Object);

            // Act
            var result = validator.TestValidate(request);

            // Assert
            result.ShouldNotHaveValidationErrorFor(x => x.SerialNumber);
        }
        public async Task ValidSerialNumber_NotEligiable()
        {
            // Arrange
            var validSerialNumber = "I Am a Serial Number";
            var request           = _fixture.Build <EnterCompetition>()
                                    .With(x => x.SerialNumber, validSerialNumber)
                                    .Create();
            var productServiceMock = new Mock <IProductService>();

            productServiceMock.Setup(x => x.IsSerialNumberValid(validSerialNumber)).ReturnsAsync(true);
            var competitionRepoMock = new Mock <ICompetitionRepository>();

            competitionRepoMock.Setup(x => x.IsSerialNumberEligible(validSerialNumber)).ReturnsAsync(false);
            var validator = new EnterCompetitionValidator(productServiceMock.Object, competitionRepoMock.Object);

            // Act
            var result = await validator.TestValidateAsync(request);

            // Assert
            result.ShouldHaveValidationErrorFor(x => x.SerialNumber).WithErrorMessage("Serial number is no longer eligiable to enter draw.");
        }
        public async Task NoValidationErrors()
        {
            // Arrange
            var request = _fixture.Build <EnterCompetition>()
                          .With(x => x.Email, "*****@*****.**")
                          .With(x => x.AcceptsTerms, true)
                          .With(x => x.ConfirmsCorrectAge, true)
                          .Create();
            var productServiceMock = new Mock <IProductService>();

            productServiceMock.Setup(x => x.IsSerialNumberValid(request.SerialNumber)).ReturnsAsync(true);
            var competitionRepoMock = new Mock <ICompetitionRepository>();

            competitionRepoMock.Setup(x => x.IsSerialNumberEligible(request.SerialNumber)).ReturnsAsync(true);
            var validator = new EnterCompetitionValidator(productServiceMock.Object, competitionRepoMock.Object);

            // Act
            var result = await validator.TestValidateAsync(request);

            // Assert
            result.ShouldNotHaveAnyValidationErrors();
        }
 public EnterCompetitionValidatorTest()
 {
     _fixture   = new Fixture();
     _validator = new EnterCompetitionValidator(new Mock <IProductService>().Object, new Mock <ICompetitionRepository>().Object);
 }