public async Task MutateAsync()
        {
            var cancellationToken = CancellationToken.None;
            var easUploadTime     = new DateTime(2020, 8, 1, 9, 0, 0);

            var refDataModel = new ReferenceDataRoot
            {
                MetaDatas = new MetaData
                {
                    ReferenceDataVersions = new ReferenceDataVersion
                    {
                        EasFileDetails = new EasFileDetails
                        {
                            FileName       = "1/EAS-1-2.csv",
                            UploadDateTime = easUploadTime
                        }
                    }
                }
            };


            var reportServiceDependentData = new Mock <IReportServiceDependentData>(MockBehavior.Strict);

            reportServiceDependentData.Setup(x => x.Get <ReferenceDataRoot>()).Returns(refDataModel);
            reportServiceDependentData.Setup(x => x.Contains <ReferenceDataRoot>()).Returns(true);

            IReportServiceContext contextIn = new ReportServiceJobContextMessageContextStub(1, "1/ILR-1-2.xml", "1/ILR-1-2.xml", new DateTime(2020, 8, 2, 9, 0, 0));

            var dateTimeProviderMock = new Mock <IDateTimeProvider>();

            dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(contextIn.SubmissionDateTimeUtc)).Returns(new DateTime(2020, 8, 2, 8, 0, 0));
            dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(easUploadTime)).Returns(new DateTime(2020, 8, 1, 8, 0, 0));

            var mutator = new ReportServiceContextKeysMutator(dateTimeProviderMock.Object);


            var contextOut = await mutator.MutateAsync(contextIn, reportServiceDependentData.Object, cancellationToken);

            contextOut.IlrReportingFilename.Should().Be("ILR-1-2.xml");
            contextOut.EasReportingFilename.Should().Be("EAS-1-2.csv");
            contextOut.LastIlrFileUpdate.Should().Be("02/08/2020 08:00:00");
            contextOut.LastEasFileUpdate.Should().Be("01/08/2020 08:00:00");
        }
        public async Task MutateAsync()
        {
            var cancellationToken = CancellationToken.None;
            var ilrUploadDate     = new DateTime(2020, 8, 1, 9, 0, 0);

            IEnumerable <FileDetail> submissionsList = new List <FileDetail>
            {
                new FileDetail {
                    UKPRN = 1, SubmittedTime = new DateTime(2020, 8, 1), Filename = "1/ILR-1-1.xml"
                },
                new FileDetail {
                    UKPRN = 1, SubmittedTime = ilrUploadDate, Filename = "1/ILR-1-2.xml"
                },
                new FileDetail {
                    UKPRN = 2, SubmittedTime = new DateTime(2020, 9, 1), Filename = "2/ILR-2-1.xml"
                }
            };

            var ilrDbMock = submissionsList.AsQueryable().BuildMockDbSet();

            var IlrMock = new Mock <IILR2021_DataStoreEntities>();

            IlrMock.Setup(x => x.FileDetails).Returns(ilrDbMock.Object);

            Func <IILR2021_DataStoreEntities> ilrFunc = () => { return(IlrMock.Object); };

            IReportServiceContext contextIn = new ReportServiceJobContextMessageContextStub(1, "1/EAS-1-2.csv", "1/EAS-1-2.csv", new DateTime(2020, 8, 2, 9, 0, 0));

            var dateTimeProviderMock = new Mock <IDateTimeProvider>();

            dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(contextIn.SubmissionDateTimeUtc)).Returns(new DateTime(2020, 8, 2, 8, 0, 0));
            dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(ilrUploadDate)).Returns(new DateTime(2020, 8, 2, 8, 0, 0));

            var mutator = new ReportServiceContextKeysMutator(ilrFunc, dateTimeProviderMock.Object);

            var contextOut = await mutator.MutateAsync(contextIn, null, cancellationToken);

            contextOut.IlrReportingFilename.Should().Be("ILR-1-2.xml");
            contextOut.EasReportingFilename.Should().Be("EAS-1-2.csv");
            contextOut.LastIlrFileUpdate.Should().Be("02/08/2020 08:00:00");
            contextOut.LastEasFileUpdate.Should().Be("02/08/2020 08:00:00");
        }
        public async Task MutateAsync_NoDependentData_ValidationFailReport()
        {
            var cancellationToken = CancellationToken.None;
            var errors            = new List <ValidationError>
            {
                new ValidationError
                {
                    Message  = "Message",
                    RuleName = "Rule1"
                },
                new ValidationError
                {
                    Message  = "Message",
                    RuleName = "Rule2"
                }
            };

            var reportServiceDependentData = new Mock <IReportServiceDependentData>(MockBehavior.Strict);

            reportServiceDependentData.Setup(x => x.Get <List <ValidationError> >()).Returns(errors);
            reportServiceDependentData.Setup(x => x.Contains <ReferenceDataRoot>()).Returns(false);

            IReportServiceContext contextIn = new ReportServiceJobContextMessageContextStub(1, "1/ILR-1-2.xml", "1/ILR-1-2.xml", new DateTime(2020, 8, 2));

            var dateTimeProviderMock = new Mock <IDateTimeProvider>();

            dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(contextIn.SubmissionDateTimeUtc)).Returns(new DateTime(2020, 8, 2, 8, 0, 0));

            var mutator = new ReportServiceContextKeysMutator(dateTimeProviderMock.Object);


            var contextOut = await mutator.MutateAsync(contextIn, reportServiceDependentData.Object, cancellationToken);

            contextOut.IlrReportingFilename.Should().Be("ILR-1-2.xml");
            contextOut.EasReportingFilename.Should().Be("N/A");
            contextOut.LastIlrFileUpdate.Should().Be("02/08/2020 08:00:00");
            contextOut.LastEasFileUpdate.Should().Be("N/A");
        }