public Job( IAcademicYearEndExpiryProcessor academicYearProcessor, ICurrentDateTime currentDateTime, IAcademicYearDateProvider academicYearProvider, ILog logger) { _academicYearProcessor = academicYearProcessor; _currentDateTime = currentDateTime; _academicYearProvider = academicYearProvider; _logger = logger; _jobId = $"AcademicYearEnd.WebJob.{DateTime.UtcNow.Ticks}"; }
public async Task ForAnyAcademicYearFromR14CutoffTimeThenExpirableItemsAreRetrievedAndExpired( int acYear, DateTime thisAcademicYearStartDate, DateTime thisAcademicYearEndDate, DateTime lastAcademicYearFundingPeriod, DateTime atTheTime ) { // ARRANGE var testDatalockStatusItems = DatalockStatusTestData.GetData(acYear); var currentDatetime = new StubCurrentDateTime(atTheTime); _academicYearProvider.Setup(y => y.CurrentAcademicYearStartDate).Returns(thisAcademicYearStartDate); _academicYearProvider.Setup(y => y.CurrentAcademicYearEndDate).Returns(thisAcademicYearEndDate); _academicYearProvider.Setup(y => y.LastAcademicYearFundingPeriod).Returns(lastAcademicYearFundingPeriod); _academicYearEndProcessor = new AcademicYearEndExpiryProcessor( _logger.Object, _academicYearProvider.Object, _dataLockRepository.Object, _apprenticeshipUpdateRepository.Object, currentDatetime, Mock.Of <IMessagePublisher>(), Mock.Of <IApprenticeshipRepository>()); _dataLockRepository.Setup(r => r.GetExpirableDataLocks(_academicYearProvider.Object.CurrentAcademicYearStartDate)).ReturnsAsync(testDatalockStatusItems); var id = "jobId"; // ACT await _academicYearEndProcessor.RunDataLock(id); //ASSERT _logger.Verify( x => x.Info( $"{nameof(AcademicYearEndExpiryProcessor)} run at {currentDatetime.Now} for Academic Year CurrentAcademicYearStartDate: {thisAcademicYearStartDate}, CurrentAcademicYearEndDate: {thisAcademicYearEndDate}, LastAcademicYearFundingPeriod: {lastAcademicYearFundingPeriod}, JobId: {id}"), Times.Once); _dataLockRepository.Verify(x => x.GetExpirableDataLocks(_academicYearProvider.Object.CurrentAcademicYearStartDate), Times.Once); _dataLockRepository.Verify(r => r.UpdateExpirableDataLocks(It.IsAny <long>(), It.IsAny <string>(), It.IsAny <DateTime>()), Times.Exactly(testDatalockStatusItems.Count)); _logger.Verify(x => x.Info($"{nameof(AcademicYearEndExpiryProcessor)} expired {testDatalockStatusItems.Count} items, JobId: {id}"), Times.Once); }