public void NewResults()
        {
            var candidateId          = Guid.NewGuid();
            var candidateSavedSearch = new CandidateSavedSearches {
                CandidateId = candidateId
            };

            var existingSearchResults = new ApprenticeshipSearchResultsBuilder().WithResultCount(2).Build();
            var dateProcessed         = new DateTime(2015, 01, 01);
            var savedSearches         = new Fixture().Build <SavedSearch>()
                                        .With(s => s.AlertsEnabled, true)
                                        .With(s => s.LastResultsHash, existingSearchResults.Results.GetResultsHash())
                                        .With(s => s.DateProcessed, dateProcessed)
                                        .CreateMany(1).ToList();

            var savedSearchReadRepository = new Mock <ISavedSearchReadRepository>();

            savedSearchReadRepository.Setup(r => r.GetForCandidate(candidateId)).Returns(savedSearches);
            var userReadRepository = new Mock <IUserReadRepository>();

            userReadRepository.Setup(r => r.Get(candidateId)).Returns(new UserBuilder(candidateId).Activated(true).Build);
            var candidateReadRepository = new Mock <ICandidateReadRepository>();

            candidateReadRepository.Setup(r => r.Get(candidateId)).Returns(new CandidateBuilder(candidateId).EnableSavedSearchAlertsViaEmailAndText(true).Build);
            var vacancySearchProvider = new Mock <IVacancySearchProvider <ApprenticeshipSearchResponse, ApprenticeshipSearchParameters> >();

            vacancySearchProvider.Setup(p => p.FindVacancies(It.IsAny <ApprenticeshipSearchParameters>())).Returns(new ApprenticeshipSearchResultsBuilder().WithResultCount(3).Build);
            var savedSearchAlertRepository    = new Mock <ISavedSearchAlertRepository>();
            SavedSearchAlert savedSearchAlert = null;

            savedSearchAlertRepository.Setup(r => r.Save(It.IsAny <SavedSearchAlert>())).Callback <SavedSearchAlert>(a => { savedSearchAlert = a; });
            var         savedSearchWriteRepository = new Mock <ISavedSearchWriteRepository>();
            SavedSearch savedSearch = null;

            savedSearchWriteRepository.Setup(r => r.Save(It.IsAny <SavedSearch>())).Callback <SavedSearch>(s => { savedSearch = s; });
            var processor = new SavedSearchProcessorBuilder().With(savedSearchReadRepository).With(userReadRepository).With(candidateReadRepository).With(vacancySearchProvider).With(savedSearchAlertRepository).With(savedSearchWriteRepository).Build();

            processor.ProcessCandidateSavedSearches(candidateSavedSearch);

            savedSearchWriteRepository.Verify(r => r.Save(It.IsAny <SavedSearch>()), Times.Once);
            savedSearch.Should().NotBeNull();
            savedSearch.LastResultsHash.Should().NotBeNullOrEmpty();
            savedSearch.DateProcessed.HasValue.Should().BeTrue();
            savedSearch.DateProcessed.Should().BeAfter(dateProcessed);
            savedSearchAlertRepository.Verify(r => r.GetUnsentSavedSearchAlert(It.IsAny <SavedSearch>()), Times.Once);
            savedSearchAlertRepository.Verify(r => r.Save(It.IsAny <SavedSearchAlert>()), Times.Once);
            savedSearchAlert.Should().NotBeNull();
            savedSearchAlert.Parameters.Should().Be(savedSearches.First());
            savedSearchAlert.Results.Should().NotBeNull();
            var results = savedSearchAlert.Results.ToList();

            results.Count.Should().Be(3);
            savedSearchAlert.BatchId.HasValue.Should().BeFalse();
            savedSearchAlert.SentDateTime.HasValue.Should().BeFalse();
        }
        public void ShouldNotQueueCandidateTwice()
        {
            // Arrange.
            var processor = new CandidateProcessor(
                _mockLogger.Object,
                _mockConfigurationService.Object,
                _mockMessageBus.Object,
                _mockUserReadRepository.Object,
                _mockCandidateReadRepository.Object);

            var users = new Fixture()
                        .Build <User>()
                        .CreateMany(2)
                        .ToList();

            var candidates = new Fixture()
                             .Build <Domain.Entities.Candidates.Candidate>()
                             .CreateMany(3)
                             .ToList();

            users.First().EntityId = candidates.Last().EntityId = Guid.NewGuid();

            var candidateIds = new List <Guid>();
            var userStatuses = new[] { UserStatuses.PendingActivation, UserStatuses.PendingDeletion };

            var uniqueCandidateIds = candidates
                                     .Select(each => each.EntityId)
                                     .Union(users.Select(each => each.EntityId))
                                     .ToList();

            _mockUserReadRepository.Setup(mock =>
                                          mock.GetUsersWithStatus(userStatuses))
            .Returns(users.Select(u => u.EntityId));

            _mockCandidateReadRepository.Setup(mock =>
                                               mock.GetCandidatesWithPendingMobileVerification())
            .Returns(candidates.Select(c => c.EntityId));

            _mockMessageBus.Setup(mock =>
                                  mock.PublishMessages(It.IsAny <IEnumerable <CandidateHousekeeping> >()))
            .Callback <IEnumerable <CandidateHousekeeping> >(messages => candidateIds.AddRange(messages.Select(cid => cid.CandidateId)));

            // Act.
            processor.QueueCandidates();

            // Assert.
            _mockMessageBus.Verify(mock =>
                                   mock.PublishMessages(It.IsAny <IEnumerable <CandidateHousekeeping> >()), Times.Once);

            uniqueCandidateIds.Count().Should().Be(users.Count() + candidates.Count() - 1);
            candidateIds.Count().Should().Be(uniqueCandidateIds.Count());
            candidateIds.Should().BeEquivalentTo(uniqueCandidateIds);
        }
        public void PostcodeAndLine1SingleResult_PASS()
        {
            //Arrange
            var input            = new Fixture().Build <ConciseEmployerStructure>().Create();
            var foundAddressList = new Fixture().Build <PostalAddress>()
                                   .With(x => x.ValidationSourceCode, "PCA").CreateMany(1); //the single result

            _mockPostalAddressSearchService.Setup(
                m => m.GetValidatedAddress(It.IsNotNull <string>(), It.IsNotNull <string>())).Returns(foundAddressList);
            //Act
            var result = _serviceUnderTest.GetVerifiedOrganisationSummary(input);

            //Assert
            Assert.AreEqual(foundAddressList.First().ValidationSourceKeyValue, result.Address.ValidationSourceKeyValue);
            Assert.AreEqual("PCA", result.Address.ValidationSourceCode);
        }
        public void ShouldQueueUniqueCommunicationsForHousekeeping()
        {
            // Arrange.
            var statusAlertHousekeepingRequests = new Fixture()
                                                  .Build <CommunicationHousekeepingRequest>()
                                                  .CreateMany(3)
                                                  .ToList();

            _mockApplicationStatusAlertCommunicationHousekeeper.Setup(mock => mock
                                                                      .GetHousekeepingRequests())
            .Returns(statusAlertHousekeepingRequests);

            var expiringDraftAlertHousekeepingRequests = new Fixture()
                                                         .Build <CommunicationHousekeepingRequest>()
                                                         .CreateMany(5)
                                                         .ToList();

            _mockExpiringDraftApplicationAlertCommunicationHousekeeper.Setup(mock => mock
                                                                             .GetHousekeepingRequests())
            .Returns(expiringDraftAlertHousekeepingRequests);

            var savedSearchAlertHousekeepingRequests = new Fixture()
                                                       .Build <CommunicationHousekeepingRequest>()
                                                       .CreateMany(7)
                                                       .ToList();

            _mockSavedSearchAlertCommunicationHousekeeper.Setup(mock => mock
                                                                .GetHousekeepingRequests())
            .Returns(savedSearchAlertHousekeepingRequests);

            statusAlertHousekeepingRequests.First().CommunicationId =
                expiringDraftAlertHousekeepingRequests.First().CommunicationId =
                    savedSearchAlertHousekeepingRequests.First().CommunicationId;

            // Act.
            var count = _housekeeper.QueueHousekeepingRequests();

            // Assert.
            var expectedUniqueCount =
                statusAlertHousekeepingRequests.Count +
                expiringDraftAlertHousekeepingRequests.Count +
                savedSearchAlertHousekeepingRequests.Count - 2;

            count.Should().Be(expectedUniqueCount);
        }
        public void ShouldNotQueueDuplicateApplicationsForHousekeeping()
        {
            // Arrange.
            var draftApplicationHousekeepingRequests = new Fixture()
                                                       .Build <ApplicationHousekeepingRequest>()
                                                       .CreateMany(3)
                                                       .ToList();

            var submittedApplicationHousekeepingRequests = new Fixture()
                                                           .Build <ApplicationHousekeepingRequest>()
                                                           .CreateMany(2)
                                                           .ToList();

            draftApplicationHousekeepingRequests.First().ApplicationId = submittedApplicationHousekeepingRequests.Last().ApplicationId;

            var queue = new List <ApplicationHousekeepingRequest>();

            _mockServiceBus.Setup(mock =>
                                  mock.PublishMessages(It.IsAny <IEnumerable <ApplicationHousekeepingRequest> >()))
            .Callback <IEnumerable <ApplicationHousekeepingRequest> >(queue.AddRange).Returns <IEnumerable <ApplicationHousekeepingRequest> >(messages => messages.Count());

            _mockDraftApplicationForExpiredVacancyHousekeeper
            .Setup(mock => mock
                   .GetHousekeepingRequests())
            .Returns(draftApplicationHousekeepingRequests);

            _mockSubmittedApplicationHousekeeper
            .Setup(mock => mock
                   .GetHousekeepingRequests())
            .Returns(submittedApplicationHousekeepingRequests);

            // Act.
            var count         = _housekeeper.QueueHousekeepingRequests();
            var expectedCount = draftApplicationHousekeepingRequests.Count + submittedApplicationHousekeepingRequests.Count - 1;

            // Assert.
            _mockDraftApplicationForExpiredVacancyHousekeeper.Verify(mock =>
                                                                     mock.GetHousekeepingRequests(), Times.Once);

            _mockSubmittedApplicationHousekeeper.Verify(mock =>
                                                        mock.GetHousekeepingRequests(), Times.Once);

            count.Should().Be(expectedCount);
            queue.ShouldAllBeEquivalentTo(draftApplicationHousekeepingRequests.Union(submittedApplicationHousekeepingRequests));
        }
Example #6
0
        static void Main(string[] args)
        {
            var factory   = new FeedManagerFactory();
            var feedItems = new Fixture().CreateMany <FeedItem>(10);

            // for getting errors
            feedItems.First().PrincipalId    = null;
            feedItems.Last().SourceAccountId = null;

            var deltaOneManager = factory.CreateFeedManager(FeedType.DeltaOne);

            deltaOneManager.Process(feedItems);

            var emManager = factory.CreateFeedManager(FeedType.Em);

            emManager.Process(feedItems);

            Console.ReadKey();
        }
Example #7
0
        public async Task DynamoDbService_Should_List_Records_In_A_DynamoDb_Table()
        {
            var       tableName   = Guid.NewGuid().ToString();
            const int recordCount = 5;

            var dynamoDbOperationConfig = new DynamoDBOperationConfig()
            {
                OverrideTableName = tableName
            };

            await CreateTestTable(tableName);

            Table targetTable = DynamoDbContext.GetTargetTable <MovieEntity>(dynamoDbOperationConfig);
            IList <MovieEntity> movieEntities = new Fixture().CreateMany <MovieEntity>(recordCount).ToList();
            List <Document>     documents     = movieEntities
                                                .Select(entity =>
            {
                string serialize = JsonSerializer.Serialize(entity);
                Document item    = Document.FromJson(serialize);

                return(item);
            })
                                                .ToList();

            foreach (Document document in documents)
            {
                await targetTable.PutItemAsync(document);
            }


            dynamoDbOperationConfig.IndexName = TestConstants.MoiveTableMovieIdGsi;
            List <MovieEntity> returnedMovieEntities = await DynamoDbContext.ScanAsync <MovieEntity>(new List <ScanCondition>(), dynamoDbOperationConfig).GetRemainingAsync();

            Assert.NotNull(movieEntities);
            Assert.NotEmpty(movieEntities);
            Assert.Equal(recordCount, movieEntities.Count);
            Assert.All(returnedMovieEntities, movieEntity =>
            {
                MovieEntity entity = movieEntities.First(e => e.MovieId == movieEntity.MovieId);

                Assert.True(movieEntity.DeepEquals(entity));
            });
        }
Example #8
0
        public void TagShouldReturnAllSessionsWithThatTag()
        {
            const int numberOfSessions = 5;

            var sessionsReturnedByRepo = new Fixture()
                                         .Build <SessionModel>()
                                         .With(s => s.Links, new List <LinkModel>()).With(s => s.Id, 1)
                                         .CreateMany(numberOfSessions)
                                         .ToList();

            var sessionsController = new SessionsControllerBuilder()
                                     .Returning(sessionsReturnedByRepo).Build();

            var response = sessionsController.Get(sessionsReturnedByRepo.First().Tags.First().Name);

            var okResult =
                (OkNegotiatedContentResult <List <SessionModel> >)response;

            okResult.Content.Should().HaveCount(1);
        }
        public void PostcodeAloneManyResults_PASS(int findCount)
        {
            //Arrange
            var input = new Fixture().Build <ConciseEmployerStructure>()
                        .With(x => x.Address, new BSaddressStructure()
            {
                PostCode = "FAKE", PAON = null
            }).Create();                                                                                   //not providing addressLine1, so should not try to obtain address with this

            var foundAddressList = new Fixture().Build <PostalAddress>()
                                   .With(x => x.ValidationSourceCode, "PCA").CreateMany(findCount).ToList();

            _mockPostalAddressSearchService.Setup(
                m => m.GetValidatedAddresses(It.IsNotNull <string>())).Returns(foundAddressList);
            //Act
            var result = _serviceUnderTest.GetVerifiedOrganisationSummary(input);

            //Assert
            _mockPostalAddressSearchService.Verify(m => m.GetValidatedAddress(It.IsAny <string>(), It.IsAny <string>()), Times.Never);
            Assert.AreEqual(foundAddressList.First().ValidationSourceKeyValue, result.Address.ValidationSourceKeyValue);
            Assert.AreEqual("PCA", result.Address.ValidationSourceCode);
        }
        public async Task ShallRemoveDevicesWithFilter()
        {
            //arrange 
            var devicesGenerator = new Fixture().Create<Generator<Device>>();
            fixture.Customize<Device>(c => c.Without(x => x.State));
            fixture.Customize<IEnumerable<Device>>(
                c =>
                c.FromFactory(
                    () => Enum.GetValues(typeof(DeviceState)).Cast<DeviceState>()
                              .Select(s => devicesGenerator.First(u => u.State == s))));

            var devices = fixture.Create<IEnumerable<Device>>(); // returns devices with all supported states
            Expression<Func<Device, bool>> disabledDevicesFilter
                = x => x.State == DeviceState.Disabled;

            using (var db = this.dbFactory.Open())
            {
                foreach (var device in devices)
                {
                    db.Insert(device);
                }

                var totalCount = await db.CountAsync<Device>();
                Assert.AreEqual(devices.Count(), totalCount);

                //act
                var removedCount = await this.cut.DeleteAsync(disabledDevicesFilter);

                //assert
                Assert.AreEqual(1, removedCount);
                var remainingDevices = db.Select<Device>();
                Assert.IsFalse(remainingDevices
                    .Any(x => x.State == DeviceState.Disabled));
            }
        }
        public void ApproveMultilocationVacancy(int locationAddressCount)
        {
            //Arrange
            var vacancyReferenceNumber = 1;
            var parentVacancyId        = 2;
            var locationAddresses      = new Fixture().Build <VacancyLocation>()
                                         .CreateMany(locationAddressCount).ToList();

            var vacancy = new Fixture().Build <Vacancy>()
                          .With(x => x.VacancyReferenceNumber, vacancyReferenceNumber)
                          .With(x => x.IsEmployerLocationMainApprenticeshipLocation, false)
                          .With(x => x.VacancyId, parentVacancyId)
                          .Create();

            var vacanyLockingService  = new Mock <IVacancyLockingService>();
            var vacancyPostingService = new Mock <IVacancyPostingService>();

            vacancyPostingService.Setup(r => r.GetVacancyByReferenceNumber(vacancyReferenceNumber))
            .Returns(vacancy);
            vacancyPostingService.Setup(s => s.GetVacancyLocations(vacancy.VacancyId)).Returns(locationAddresses);

            //set up so that a bunch of vacancy reference numbers are created that are not the same as the one supplied above
            var fixture = new Fixture {
                RepeatCount = locationAddressCount - 1
            };
            var vacancyNumbers = fixture.Create <List <int> >();

            vacancyPostingService.Setup(r => r.GetNextVacancyReferenceNumber()).ReturnsInOrder(vacancyNumbers.ToArray());

            vacanyLockingService.Setup(vls => vls.IsVacancyAvailableToQABy(It.IsAny <string>(), It.IsAny <Vacancy>()))
            .Returns(true);

            var vacancyProvider =
                new VacancyProviderBuilder()
                .With(vacancyPostingService)
                .With(vacanyLockingService)
                .Build();

            //Act
            vacancyProvider.ApproveVacancy(vacancyReferenceNumber);

            //Assert
            //get the submitted vacancy once
            vacancyPostingService.Verify(r => r.GetVacancyByReferenceNumber(vacancyReferenceNumber), Times.Once);
            //save the original vacancy with a status of Live and itself as a parent vacancy
            vacancyPostingService.Verify(
                r =>
                r.UpdateVacancy(
                    It.Is <Vacancy>(
                        av =>
                        av.VacancyReferenceNumber == vacancyReferenceNumber &&
                        av.Status == VacancyStatus.Live &&
                        av.ParentVacancyId == parentVacancyId &&
                        av.IsEmployerLocationMainApprenticeshipLocation.Value &&
                        av.Address.Postcode == locationAddresses.First().Address.Postcode&&
                        av.Address.AddressLine1 == locationAddresses.First().Address.AddressLine1&&
                        av.Address.AddressLine2 == locationAddresses.First().Address.AddressLine2&&
                        av.Address.AddressLine3 == locationAddresses.First().Address.AddressLine3&&
                        av.Address.AddressLine4 == locationAddresses.First().Address.AddressLine4&&
                        av.Address.AddressLine5 == locationAddresses.First().Address.AddressLine5&&
                        av.NumberOfPositions == locationAddresses.First().NumberOfPositions)));

            //save new vacancies with a status of Live
            foreach (var number in vacancyNumbers)
            {
                vacancyPostingService.Verify(r =>
                                             r.CreateVacancy(It.Is <Vacancy>(av => av.VacancyReferenceNumber == number &&
                                                                             av.Status == VacancyStatus.Live &&
                                                                             av.ParentVacancyId ==
                                                                             parentVacancyId &&
                                                                             av.IsEmployerLocationMainApprenticeshipLocation
                                                                             .Value)), Times.Once);
            }

            //save new vacancies with only one of the new addresses and the position count
            foreach (var location in locationAddresses.Skip(1))
            {
                vacancyPostingService.Verify(r => r.CreateVacancy(It.Is <Vacancy>(av
                                                                                  => av.Address.Postcode == location.Address.Postcode &&
                                                                                  av.Address.AddressLine1 == location.Address.AddressLine1 &&
                                                                                  av.Address.AddressLine2 == location.Address.AddressLine2 &&
                                                                                  av.Address.AddressLine3 == location.Address.AddressLine3 &&
                                                                                  av.Address.AddressLine4 == location.Address.AddressLine4 &&
                                                                                  av.Address.AddressLine5 == location.Address.AddressLine5 &&
                                                                                  av.NumberOfPositions == location.NumberOfPositions)));
            }

            //save the submitted vacancy once
            vacancyPostingService.Verify(r => r.UpdateVacancy(It.IsAny <Vacancy>()), Times.Once);

            //Create each child vacancy once
            vacancyPostingService.Verify(r => r.CreateVacancy(It.IsAny <Vacancy>()),
                                         Times.Exactly(locationAddressCount - 1));

            vacancyPostingService.Verify(s => s.DeleteVacancyLocationsFor(vacancy.VacancyId));
        }