Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        public void Run()
        {
            if (_currentDateTime.Now < _academicYearProvider.LastAcademicYearFundingPeriod)
            {
                _logger.Info($"The {nameof(AcademicYearEndExpiryProcessor)} job cannot run before last academic year funding period. ({_academicYearProvider.LastAcademicYearFundingPeriod}) , JobId: {_jobId}");
                return;
            }

            try
            {
                var t1 = _academicYearProcessor.RunApprenticeshipUpdateJob($"{_jobId}.ChangeOfCircs")
                         .ContinueWith(t => WhenDone(t, _logger, "ChangeOfCircs"));

                var t2 = _academicYearProcessor.RunDataLock($"{_jobId}.DataLocks")
                         .ContinueWith(t => WhenDone(t, _logger, "DataLocks"));

                Task.WaitAll(t1, t2);
            }
            catch (Exception ex)
            {
                _logger.Error(ex, $"Error running {nameof(AcademicYearEndExpiryProcessor)}.WebJob");
            }
        }