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)); }
/// <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); }