public async Task Then_The_StandardsFunding_Items_Are_Imported_From_The_Client(
            FrameworkResponse apiResponse,
            [Frozen] Mock <IApiClient> apiClient,
            [Frozen] Mock <IProviderCommitmentsDbContext> context,
            ImportFrameworksJob importFrameworksJob
            )
        {
            //Arrange
            apiClient.Setup(x => x.Get <FrameworkResponse>(It.IsAny <GetFrameworksRequest>())).ReturnsAsync(apiResponse);
            var importedStandardFunding = new List <FundingPeriodItem>();

            context.Setup(d => d.ExecuteSqlCommandAsync("EXEC ImportFrameworksFunding @frameworksFunding", It.IsAny <SqlParameter>()))
            .Returns(Task.CompletedTask)
            .Callback <string, object[]>((s, p) =>
            {
                var sqlParameter = (SqlParameter)p[0];
                var dataTable    = (DataTable)sqlParameter.Value;

                importedStandardFunding.AddRange(dataTable.AsEnumerable().Select(r => new FundingPeriodItem
                {
                    FrameworkId   = (string)r[0],
                    FundingCap    = (int)r[1],
                    EffectiveFrom = (DateTime?)r[2],
                    EffectiveTo   = (DateTime?)r[3],
                }));
            });

            //Act
            await importFrameworksJob.Import(null);

            //Assert
            var expectedItems = new List <FundingPeriodItem>();

            foreach (var responseStandard in apiResponse.Frameworks)
            {
                var frameworkId = responseStandard.Id;
                expectedItems.AddRange(responseStandard.FundingPeriods.Select(fundingPeriod => new FundingPeriodItem
                {
                    FrameworkId   = frameworkId,
                    EffectiveFrom = fundingPeriod.EffectiveFrom,
                    EffectiveTo   = fundingPeriod.EffectiveTo,
                    FundingCap    = fundingPeriod.FundingCap
                }));
            }
            importedStandardFunding.Should().BeEquivalentTo(expectedItems);
        }
        public async Task Then_The_Frameworks_Are_Imported_From_The_Client(
            FrameworkResponse apiResponse,
            [Frozen] Mock <IApiClient> apiClient,
            [Frozen] Mock <IProviderCommitmentsDbContext> context,
            ImportFrameworksJob importFrameworksJob
            )
        {
            //Arrange
            apiClient.Setup(x => x.Get <FrameworkResponse>(It.IsAny <GetFrameworksRequest>())).ReturnsAsync(apiResponse);
            var importedStandards = new List <FrameworkSummary>();

            context.Setup(d => d.ExecuteSqlCommandAsync("EXEC ImportFrameworks @frameworks", It.IsAny <SqlParameter>()))
            .Returns(Task.CompletedTask)
            .Callback <string, object[]>((s, p) =>
            {
                var sqlParameter = (SqlParameter)p[0];
                var dataTable    = (DataTable)sqlParameter.Value;

                importedStandards.AddRange(dataTable.AsEnumerable().Select(r => new FrameworkSummary()
                {
                    Id            = (string)r[0],
                    FrameworkCode = (int)r[1],
                    FrameworkName = (string)r[2],
                    Level         = (int)r[3],
                    PathwayCode   = (int)r[4],
                    PathwayName   = (string)r[5],
                    ProgrammeType = (int)r[6],
                    Title         = (string)r[7],
                    Duration      = (int)r[8],
                    MaxFunding    = (int)r[9],
                    EffectiveFrom = (DateTime?)r[10],
                    EffectiveTo   = (DateTime?)r[11],
                }));
            });

            //Act
            await importFrameworksJob.Import(null);

            //Assert
            importedStandards.Should().BeEquivalentTo(apiResponse.Frameworks, options => options.Excluding(c => c.FundingPeriods));
        }
Esempio n. 3
0
        /// <summary>
        /// Returns all known Cybersecurity Framework questions and tiers along
        /// with any selected tiers.
        /// </summary>
        /// <param name="assessmentId"></param>
        /// <returns></returns>
        public FrameworkResponse GetFrameworks(int assessmentId)
        {
            FrameworkResponse resp = new FrameworkResponse();

            using (var db = new CSET_Context())
            {
                // get any existing answers for this assessment
                var answers = db.FRAMEWORK_TIER_TYPE_ANSWER.Where(ans => ans.Assessment_Id == assessmentId);
                // TODO:  If we add a 'sequence' column to this table, we can sort the sections
                //        because they appear in a different order in CSET 8.1.  Does the order even matter?


                foreach (FRAMEWORK_TIER_TYPE ftt in db.FRAMEWORK_TIER_TYPE.ToList())
                {
                    FrameworkTierType f = new FrameworkTierType()
                    {
                        TierType = ftt.TierType
                    };

                    // Create a group name for radio button behavior
                    f.GroupName = f.TierType.Replace(" ", "-").ToLower();

                    resp.TierTypes.Add(f);


                    var tierDefs = from ftd in db.FRAMEWORK_TIER_DEFINITIONS
                                   join ft in db.FRAMEWORK_TIERS on ftd.Tier equals ft.Tier
                                   orderby ftd.TierType, ft.TierOrder
                    where ftd.TierType == f.TierType
                    select ftd;

                    var listTierDefinitions = tierDefs.ToList();


                    foreach (FRAMEWORK_TIER_DEFINITIONS tierDef in listTierDefinitions)
                    {
                        bool selected = answers.Where(x => x.TierType == f.TierType && x.Tier == tierDef.Tier).Any();

                        FrameworkTier tier = new FrameworkTier()
                        {
                            TierName = tierDef.Tier,
                            Question = tierDef.TierQuestion,
                            Selected = selected
                        };

                        // mark the selected tier in this definition
                        if (selected)
                        {
                            f.SelectedTier = tier.TierName;
                        }

                        // create a unique control ID for use on the front end
                        tier.ControlId = (f.TierType.Replace(" ", "-") + "-" + tier.TierName.Replace(" ", "-")).ToLower();



                        f.Tiers.Add(tier);
                    }

                    // default Tier 1 if no tier is selected
                    if (string.IsNullOrEmpty(f.SelectedTier))
                    {
                        f.SelectedTier = "Tier 1";
                    }
                }
            }

            return(resp);
        }