public void MismatchedSectorFramework(bool strictEtlValidation)
        {
            _configurationService.Setup(x => x.Get <ProcessConfiguration>())
            .Returns(new ProcessConfiguration
            {
                VacancyAboutToExpireNotificationHours = VacancyAboutToExpireNotificationHours,
                StrictEtlValidation = strictEtlValidation
            });

            var processor = new ApprenticeshipSummaryUpdateProcessor(
                _logService.Object,
                _serviceBus.Object,
                _configurationService.Object,
                _vacancyIndexer.Object,
                _referenceDataService.Object);

            SetupReferenceDataService(_referenceDataService);

            processor.Process(new ApprenticeshipSummaryUpdate
            {
                Category    = ASector,
                SubCategory = AnotherSubcategory
            });

            _vacancyIndexer.Verify(vi => vi.Index(It.IsAny <ApprenticeshipSummaryUpdate>()), Times.Once);

            if (strictEtlValidation)
            {
                _logService.Verify(ls => ls.Warn(It.IsAny <string>(), It.IsAny <object[]>()));
            }
            else
            {
                _logService.Verify(ls => ls.Info(It.IsAny <string>(), It.IsAny <object[]>()));
            }
        }
        public void IndexVacancy()
        {
            var processor = new ApprenticeshipSummaryUpdateProcessor(
                _logService.Object,
                _serviceBus.Object,
                _configurationService.Object,
                _vacancyIndexer.Object,
                _referenceDataService.Object);

            SetupReferenceDataService(_referenceDataService);

            processor.Process(new ApprenticeshipSummaryUpdate
            {
                Category    = ASector,
                SubCategory = ASubcategory
            });

            _vacancyIndexer.Verify(vi => vi.Index(It.IsAny <ApprenticeshipSummaryUpdate>()), Times.Once);
            _serviceBus.Verify(mb => mb.PublishMessage(It.IsAny <VacancyAboutToExpire>()));
            _logService.Verify(ls => ls.Warn(It.IsAny <string>(), It.IsAny <object[]>()), Times.Never);
        }
        public void ShouldQueueTheVacancyIfTheVacancyIsAboutToExpire()
        {
            const int aVacancyId = 5;

            var processor = new ApprenticeshipSummaryUpdateProcessor(
                _logService.Object,
                _serviceBus.Object,
                _configurationService.Object,
                _vacancyIndexer.Object,
                _referenceDataService.Object);

            var vacancySummary = new ApprenticeshipSummaryUpdate
            {
                Id          = aVacancyId,
                ClosingDate = DateTime.UtcNow.AddHours(VacancyAboutToExpireNotificationHours - 1)
            };

            processor.QueueVacancyIfExpiring(vacancySummary, VacancyAboutToExpireNotificationHours);

            _serviceBus.Verify(x => x.PublishMessage(It.Is <VacancyAboutToExpire>(m => m.Id == aVacancyId)));
        }