private async Task RecordPeriodEndJob(PeriodEndTaskType taskType, PeriodEndEvent periodEndEvent)
        {
            logger.LogDebug($"Recording period end job. Type: {taskType:G}");
            var generatedMessage = new GeneratedMessage
            {
                MessageId   = periodEndEvent.EventId,
                MessageName = periodEndEvent.GetType().FullName,
                StartTime   = periodEndEvent.EventTime
            };

            if (taskType == PeriodEndTaskType.PeriodEndStart ||
                taskType == PeriodEndTaskType.PeriodEndRun ||
                taskType == PeriodEndTaskType.PeriodEndStop ||
                taskType == PeriodEndTaskType.PeriodEndSubmissionWindowValidation ||
                taskType == PeriodEndTaskType.PeriodEndReports)
            {
                var job = CreatePeriodEndJob(taskType);

                job.JobId             = periodEndEvent.JobId;
                job.CollectionYear    = periodEndEvent.CollectionPeriod.AcademicYear;
                job.CollectionPeriod  = periodEndEvent.CollectionPeriod.Period;
                job.GeneratedMessages = new List <GeneratedMessage> {
                    generatedMessage
                };

                await jobClient.StartPeriodEndJob(job).ConfigureAwait(false);
            }
            else
            {
                throw new InvalidOperationException($"Unhandled period end task type: {taskType:G}");
            }
        }
Exemplo n.º 2
0
        private static JobContextMessage CreatePeriodEndJobContextMessage(PeriodEndTaskType taskType)
        {
            var jobContextMessage = new JobContextMessage
            {
                JobId  = 1,
                Topics = new List <ITopicItem>
                {
                    new TopicItem
                    {
                        SubscriptionName = "PeriodEnd",
                        Tasks            = new List <ITaskItem>
                        {
                            new TaskItem
                            {
                                SupportsParallelExecution = false,
                                Tasks = new List <string> {
                                    taskType.ToString()
                                }
                            }
                        }
                    }
                },
                KeyValuePairs = new Dictionary <string, object>
                {
                    { JobContextMessageConstants.KeyValuePairs.ReturnPeriod, 10 },
                    { JobContextMessageConstants.KeyValuePairs.CollectionYear, 1819 }
                }
            };

            return(jobContextMessage);
        }
        private void SetRecordPeriodEndJobType(PeriodEndTaskType periodEndTask)
        {
            switch (periodEndTask)
            {
            case PeriodEndTaskType.PeriodEndStart:
                periodEndJob = fixture.Create <RecordPeriodEndStartJob>();
                break;

            case PeriodEndTaskType.PeriodEndRun:
                periodEndJob = fixture.Create <RecordPeriodEndRunJob>();
                break;

            case PeriodEndTaskType.PeriodEndStop:
                periodEndJob = fixture.Create <RecordPeriodEndStopJob>();
                break;

            case PeriodEndTaskType.PeriodEndSubmissionWindowValidation:
                periodEndJob = fixture.Create <RecordPeriodEndSubmissionWindowValidationJob>();
                break;

            case PeriodEndTaskType.PeriodEndReports:
                periodEndJob = fixture.Create <RecordPeriodEndRequestReportsJob>();
                break;

            default:
                Assert.Fail();
                break;
            }
        }
        public async Task WhenStartingPeriodEndJob_ThenSendsTheCorrectMessage(PeriodEndTaskType taskType)
        {
            //Arrange
            SetRecordPeriodEndJobType(taskType);

            //Act
            await sut.StartPeriodEndJob(periodEndJob);

            //Assert
            messageSessionMock.Verify(x => x.Send(It.Is <RecordPeriodEndJob>(y => y.GetType().Name != nameof(RecordPeriodEndJob)), It.IsAny <SendOptions>()), Times.Once());
        }
        private async Task RecordPeriodEndJob(PeriodEndTaskType taskType, PeriodEndEvent periodEndEvent)
        {
            logger.LogDebug($"Recording period end job. Type: {taskType:G}");
            var generatedMessage = new GeneratedMessage
            {
                MessageId   = periodEndEvent.EventId,
                MessageName = periodEndEvent.GetType().FullName,
                StartTime   = periodEndEvent.EventTime
            };

            switch (taskType)
            {
            case PeriodEndTaskType.PeriodEndStart:
                await jobClient.RecordPeriodEndStart(periodEndEvent.JobId, periodEndEvent.CollectionPeriod.AcademicYear,
                                                     periodEndEvent.CollectionPeriod.Period, new List <GeneratedMessage> {
                    generatedMessage
                }).ConfigureAwait(false);

                break;

            case PeriodEndTaskType.PeriodEndRun:
                await jobClient.RecordPeriodEndRun(periodEndEvent.JobId, periodEndEvent.CollectionPeriod.AcademicYear,
                                                   periodEndEvent.CollectionPeriod.Period, new List <GeneratedMessage> {
                    generatedMessage
                }).ConfigureAwait(false);

                break;

            case PeriodEndTaskType.PeriodEndStop:
                await jobClient.RecordPeriodEndStop(periodEndEvent.JobId, periodEndEvent.CollectionPeriod.AcademicYear,
                                                    periodEndEvent.CollectionPeriod.Period, new List <GeneratedMessage> {
                    generatedMessage
                }).ConfigureAwait(false);

                break;

            case PeriodEndTaskType.PeriodEndSubmissionWindowValidation:
                await jobClient.RecordPeriodEndSubmissionWindowValidation(periodEndEvent.JobId, periodEndEvent.CollectionPeriod.AcademicYear,
                                                                          periodEndEvent.CollectionPeriod.Period, new List <GeneratedMessage> {
                    generatedMessage
                }).ConfigureAwait(false);

                break;

            default:
                throw new InvalidOperationException($"Unhandled period end task type: {taskType:G}");
            }
        }
        private JobType GetJobType(PeriodEndTaskType periodEndTaskType)
        {
            switch (periodEndTaskType)
            {
            case PeriodEndTaskType.PeriodEndStart:
                return(JobType.PeriodEndStartJob);

            case PeriodEndTaskType.PeriodEndRun:
                return(JobType.PeriodEndRunJob);

            case PeriodEndTaskType.PeriodEndStop:
                return(JobType.PeriodEndStopJob);

            default:
                throw new InvalidOperationException($"Cannot handle period end task type: '{periodEndTaskType:G}'");
            }
        }
Exemplo n.º 7
0
        private PeriodEndEvent CreatePeriodEndEvent(PeriodEndTaskType taskType)
        {
            switch (taskType)
            {
            case PeriodEndTaskType.PeriodEndStart:
                return(new PeriodEndStartedEvent());

            case PeriodEndTaskType.PeriodEndRun:
                return(new PeriodEndRunningEvent());

            case PeriodEndTaskType.PeriodEndStop:
                return(new PeriodEndStoppedEvent());

            default:
                throw new InvalidOperationException($"Cannot handle period end task type: '{taskType:G}'");
            }
        }
        private RecordPeriodEndJob CreatePeriodEndJob(PeriodEndTaskType periodEndTaskType)
        {
            switch (periodEndTaskType)
            {
            case PeriodEndTaskType.PeriodEndStart:
                return(new RecordPeriodEndStartJob());

            case PeriodEndTaskType.PeriodEndRun:
                return(new RecordPeriodEndRunJob());

            case PeriodEndTaskType.PeriodEndStop:
                return(new RecordPeriodEndStopJob());

            case PeriodEndTaskType.PeriodEndSubmissionWindowValidation:
                return(new RecordPeriodEndSubmissionWindowValidationJob());

            case PeriodEndTaskType.PeriodEndReports:
                return(new RecordPeriodEndRequestReportsJob());

            default:
                throw new InvalidOperationException($"Unhandled period end task type: {periodEndTaskType:G}");
            }
        }
        WhenStartingPeriodEndJob_ThenCorrectlyLogsJobType_AndJobId_AndCollectionYear_AndCollectionPeriod(PeriodEndTaskType taskType)
        {
            //Arrange
            SetRecordPeriodEndJobType(taskType);
            var expectedName = periodEndJob.GetType().Name;

            //Act
            await sut.StartPeriodEndJob(periodEndJob);

            //Assert
            loggerMock.Verify(x =>
                              x.LogDebug(
                                  It.IsRegex($".*{expectedName}.*{periodEndJob.JobId}.*{periodEndJob.CollectionYear}.*{periodEndJob.CollectionPeriod}"),
                                  It.IsAny <object[]>(), It.IsAny <long>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()));
        }