public void CheckComparerCorrectlySortsByAimSequenceNumber()
        {
            var comparer = new AimAndDeliverableComparer();

            var model1 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2",
                ConRefNumber   = "2",
                LearnStartDate = new DateTime(2018, 11, 10),
                AimSeqNumber   = 4
            };

            var model2 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2",
                ConRefNumber   = "2",
                LearnStartDate = new DateTime(2018, 11, 10),
                AimSeqNumber   = 3
            };

            var model3 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2",
                ConRefNumber   = "2",
                LearnStartDate = new DateTime(2018, 11, 10),
                AimSeqNumber   = 2
            };

            var model4 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2",
                ConRefNumber   = "2",
                LearnStartDate = new DateTime(2018, 11, 10),
                AimSeqNumber   = 1
            };

            var models = new List <AimAndDeliverableModel>
            {
                model1,
                model2,
                model2,
                model3,
                model4
            };

            models.Sort(comparer);

            Assert.True(models[0].AimSeqNumber == 1);
            Assert.True(models[4].AimSeqNumber == 4);
        }
        public AimAndDeliverableReport(
            IDateTimeProvider dateTimeProvider,
            IStreamableKeyValuePersistenceService storage,
            IReferenceDataCache referenceDataCache,
            IValidRepository validRepository,
            IFM70Repository fm70Repository,
            IValueProvider valueProvider,
            IAimAndDeliverableComparer comparer)
            : base(dateTimeProvider, valueProvider)
        {
            _storage            = storage;
            _referenceDataCache = referenceDataCache;
            _validRepository    = validRepository;
            _fm70Repository     = fm70Repository;
            _comparer           = comparer as AimAndDeliverableComparer;

            ReportFileName = "ESF Aim and Deliverable Report";
        }
        public void CheckComparerCorrectlySortsByContractReference()
        {
            var comparer = new AimAndDeliverableComparer();

            var model1 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2",
                ConRefNumber   = "4"
            };

            var model2 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2",
                ConRefNumber   = "3"
            };

            var model3 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2",
                ConRefNumber   = "2"
            };

            var model4 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2",
                ConRefNumber   = "1"
            };

            var models = new List <AimAndDeliverableModel>
            {
                model1,
                model2,
                model2,
                model3,
                model4
            };

            models.Sort(comparer);

            Assert.True(models[0].ConRefNumber == "1");
            Assert.True(models[4].ConRefNumber == "4");
        }
        public void CheckComparerCorrectlySortsByLearnerReference()
        {
            var comparer = new AimAndDeliverableComparer();

            var model1 = new AimAndDeliverableModel
            {
                LearnRefNumber = string.Empty
            };

            var model2 = new AimAndDeliverableModel
            {
                LearnRefNumber = "1"
            };

            var model3 = new AimAndDeliverableModel
            {
                LearnRefNumber = "2"
            };

            var model4 = new AimAndDeliverableModel
            {
                LearnRefNumber = null
            };

            var models = new List <AimAndDeliverableModel>
            {
                model4,
                model3,
                model2,
                model1
            };

            models.Sort(comparer);

            Assert.True(models[0].LearnRefNumber == null);
            Assert.True(models[3].LearnRefNumber == "2");
        }
        public async Task TestAimAndDeliverableReportGeneration()
        {
            var csv      = string.Empty;
            var dateTime = DateTime.UtcNow;
            var filename = $"10005752_2_ESF Aim and Deliverable Report {dateTime:yyyyMMdd-HHmmss}";

            var dateTimeProviderMock = new Mock <IDateTimeProvider>();

            dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(dateTime);
            dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(It.IsAny <DateTime>())).Returns(dateTime);

            var storage = new Mock <IStreamableKeyValuePersistenceService>();

            storage.Setup(x => x.SaveAsync($"{filename}.csv", It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Callback <string, string, CancellationToken>((key, value, ct) => csv = value)
            .Returns(Task.CompletedTask);

            var refRepoMock = new Mock <IReferenceDataCache>();

            refRepoMock.Setup(m =>
                              m.GetContractDeliverableCodeMapping(It.IsAny <IList <string> >(), It.IsAny <CancellationToken>()))
            .Returns(ReferenceDataBuilder.BuildContractDeliverableCodeMapping());
            refRepoMock.Setup(m => m.GetLarsLearningDelivery(It.IsAny <IList <string> >(), It.IsAny <CancellationToken>()))
            .Returns(ReferenceDataBuilder.BuildLarsLearningDeliveries());

            var validRepoMock = new Mock <IValidRepository>();

            validRepoMock.Setup(m => m.GetLearners(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(ValidLearnerModelsBuilder.BuildLearners());
            validRepoMock.Setup(m => m.GetLearningDeliveries(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(ValidLearnerModelsBuilder.BuildLearningDeliveries());
            validRepoMock.Setup(m => m.GetLearningDeliveryFAMs(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(ValidLearnerModelsBuilder.BuildLearningDeliveryFams());
            validRepoMock.Setup(m => m.GetDPOutcomes(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <DPOutcome>());
            validRepoMock.Setup(m =>
                                m.GetProviderSpecDeliveryMonitorings(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <ProviderSpecDeliveryMonitoring>());
            validRepoMock
            .Setup(m => m.GetProviderSpecLearnerMonitorings(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <ProviderSpecLearnerMonitoring>());

            var fm70RepoMock = new Mock <IFM70Repository>();

            fm70RepoMock.Setup(m => m.GetLearningDeliveries(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(FM70ModelsBuilder.BuildLearningDeliveries());
            fm70RepoMock.Setup(m => m.GetLearningDeliveryDeliverables(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(FM70ModelsBuilder.BuildLearningDeliveryDeliverables());
            fm70RepoMock.Setup(m =>
                               m.GetLearningDeliveryDeliverablePeriods(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(FM70ModelsBuilder.BuildDeliveryDeliverablePeriods());
            fm70RepoMock.Setup(m => m.GetOutcomes(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <ESF_DPOutcome>());

            var comparer      = new AimAndDeliverableComparer();
            var valueProvider = new ValueProvider();

            var aimAndDeliverableReport = new AimAndDeliverableReport(
                dateTimeProviderMock.Object,
                storage.Object,
                refRepoMock.Object,
                validRepoMock.Object,
                fm70RepoMock.Object,
                valueProvider,
                comparer);

            var wrapper = new SupplementaryDataWrapper
            {
                SupplementaryDataModels = new List <SupplementaryDataModel>()
            };
            SourceFileModel sourceFile = GetEsfSourceFileModel();

            await aimAndDeliverableReport.GenerateReport(wrapper, sourceFile, null, CancellationToken.None);

            Assert.True(!string.IsNullOrEmpty(csv));
        }