Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test PR 1189 #377

Closed
wants to merge 15 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions src/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<NuGetAuditMode>direct</NuGetAuditMode>
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
<NoWarn>S1135</NoWarn>
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
<NoWarn>S1135</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="AngleSharp" Version="1.1.2" />
Expand Down Expand Up @@ -56,19 +56,22 @@
<PackageVersion Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="11.0.0" />
<PackageVersion Include="Microsoft.ApplicationInsights" Version="2.22.0" />
<PackageVersion Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.22.0" />
<PackageVersion Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0"/>
<PackageVersion Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Version="8.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="8.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="8.0.8" />
<PackageVersion Include="Microsoft.Azure.AppConfiguration.AspNetCore" Version="8.0.0" />
<PackageVersion Include="Microsoft.Azure.Functions.Worker" Version="1.23.0" />
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.2.0" />
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.3.2" />
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.4" />
<PackageVersion Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.3.0" />
<PackageVersion Include="Microsoft.FeatureManagement" Version="4.0.0" />
<PackageVersion Include="Microsoft.FeatureManagement.AspNetCore" Version="4.0.0" />
<PackageVersion Include="Microsoft.OpenApi.Readers" Version="1.6.15" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.2" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.8" />
Expand All @@ -80,7 +83,7 @@
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.8" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.8" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite" Version="8.0.8" />
<PackageVersion Include="SQLitePCLRaw.bundle_sqlite3" Version="2.1.10" >
<PackageVersion Include="SQLitePCLRaw.bundle_sqlite3" Version="2.1.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageVersion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
<PackageReference Include="Microsoft.Extensions.Caching.SqlServer" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" />
<PackageReference Include="Microsoft.Extensions.Hosting" />
<PackageReference Include="Microsoft.FeatureManagement" />
<PackageReference Include="NetEscapades.AspNetCore.SecurityHeaders" />
<PackageReference Include="NetEscapades.AspNetCore.SecurityHeaders.TagHelpers" />
<PackageReference Include="SonarAnalyzer.CSharp">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
using Microsoft.Extensions.Configuration;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using Microsoft.Extensions.Configuration;
using Microsoft.FeatureManagement;

namespace FamilyHubs.SharedKernel.Razor.FamilyHubsUi.Options.Configure;

public class FamilyHubsUiOptionsConfigure : IConfigureOptions<FamilyHubsUiOptions>
{
private readonly IConfiguration _configuration;
private readonly IFeatureManager _featureManager;

public FamilyHubsUiOptionsConfigure(IConfiguration configuration)
public FamilyHubsUiOptionsConfigure(IConfiguration configuration, IFeatureManager featureManager)
{
_configuration = configuration;
_featureManager = featureManager;
}

public void Configure(FamilyHubsUiOptions options)
Expand All @@ -21,7 +25,7 @@ private void Configure(FamilyHubsUiOptions options, string? altName, FamilyHubsU
options.SetAlternative(altName, parent);

ConfigureLink(options.Header.ServiceNameLink, options);
ConfigureLinks(options.Header.NavigationLinks, options);
ConfigureNavigationLinks(options.Header.NavigationLinks, options);
ConfigureLinks(options.Header.ActionLinks, options);
ConfigureLinks(options.Footer.Links, options);

Expand All @@ -36,6 +40,23 @@ private void Configure(FamilyHubsUiOptions options, string? altName, FamilyHubsU
}
}

private void ConfigureNavigationLinks(FhLinkOptions[] linkOptions, FamilyHubsUiOptions options)
{
ConfigureLinks(linkOptions, options);

IEnumerable<string> featureFlags = _featureManager.GetFeatureNamesAsync().ToBlockingEnumerable();

if (!featureFlags.Contains(FeatureFlag.ConnectDashboard))
{
return;
}

if (!_featureManager.IsEnabledAsync(FeatureFlag.ConnectDashboard).Result)
{
options.Header.NavigationLinks = [ options.Header.NavigationLinks[0] ];
}
}

private void ConfigureLinks(FhLinkOptions[] linkOptions, FamilyHubsUiOptions options)
{
foreach (var link in linkOptions)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace FamilyHubs.SharedKernel.Razor.FeatureFlags;

public static class FeatureFlag
{
public const string ConnectDashboard = "ConnectDashboard";
public const string VcfsServices = "VCFSServices";
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,36 @@
using Microsoft.Extensions.Configuration;
using System.Text.Json;
using FamilyHubs.SharedKernel.Razor.FamilyHubsUi.Options.Configure;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using FamilyHubs.SharedKernel.Razor.UnitTests.FamilyHubsUi.Configure.Helpers;
using FluentAssertions;
using Microsoft.FeatureManagement;
using NSubstitute;

namespace FamilyHubs.SharedKernel.Razor.UnitTests.FamilyHubsUi.Configure;

public class FamilyHubsUiOptionsConfigureTests : FamilyHubsUiOptionsTestBase
{
private readonly IConfiguration _configuration;
private readonly IFeatureManager _featureManager;
private readonly FamilyHubsUiOptionsConfigure _familyHubsUiOptionsConfigure;

public FamilyHubsUiOptionsConfigureTests()
{
_configuration = Substitute.For<IConfiguration>();
_familyHubsUiOptionsConfigure = new FamilyHubsUiOptionsConfigure(_configuration);
_featureManager = Substitute.For<IFeatureManager>();

_featureManager.IsEnabledAsync(FeatureFlag.ConnectDashboard).Returns(true);
_featureManager.GetFeatureNamesAsync().Returns(GetFeatureFlags());

_familyHubsUiOptionsConfigure = new FamilyHubsUiOptionsConfigure(_configuration, _featureManager);
}

private static async IAsyncEnumerable<string> GetFeatureFlags()
{
yield return FeatureFlag.ConnectDashboard;

await Task.CompletedTask;
}

[Fact]
Expand All @@ -29,6 +44,27 @@ public void Configure_NoMutationTest()
FamilyHubsUiOptions.Should().BeEquivalentTo(expectedFamilyHubsUiOptions);
}

[Fact]
public void Configure_FeatureFlag_ConnectDashboard_Enabled()
{
_familyHubsUiOptionsConfigure.Configure(FamilyHubsUiOptions);

FamilyHubsUiOptions.Header.NavigationLinks.Should().HaveCount(2);
FamilyHubsUiOptions.Header.NavigationLinks[0].Text.Should().Be("Search for a Service");
FamilyHubsUiOptions.Header.NavigationLinks[1].Text.Should().Be("My Requests");
}

[Fact]
public void Configure_FeatureFlag_ConnectDashboard_Disabled()
{
_featureManager.IsEnabledAsync(FeatureFlag.ConnectDashboard).Returns(false);

_familyHubsUiOptionsConfigure.Configure(FamilyHubsUiOptions);

FamilyHubsUiOptions.Header.NavigationLinks.Should().ContainSingle();
FamilyHubsUiOptions.Header.NavigationLinks[0].Text.Should().Be("Search for a Service");
}

[Theory]
[InlineData("/lower", "lower")]
[InlineData("/mix", "MiX")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,14 @@ public FamilyHubsUiOptionsTestBase()
{
new FhLinkOptions
{
Text = "header navigation link",
Url = "https://example.com/navigation",
Text = "Search for a Service",
Url = "https://example.com/first",
ConfigUrl = null
},
new FhLinkOptions
{
Text = "My Requests",
Url = "https://example.com/second",
ConfigUrl = null
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
using FamilyHubs.ServiceDirectory.Shared.Dto.Metrics;
using FamilyHubs.ServiceDirectory.Shared.Enums;
using FamilyHubs.ServiceDirectory.Shared.Models;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using Microsoft.FeatureManagement;

namespace FamilyHubs.Referral.Core.ApiClients;

Expand Down Expand Up @@ -37,8 +39,11 @@ Guid correlationId

public class OrganisationClientService : ApiService, IOrganisationClientService
{
public OrganisationClientService(HttpClient client) : base(client)
private readonly IFeatureManager _featureManager;

public OrganisationClientService(HttpClient client, IFeatureManager featureManager) : base(client)
{
_featureManager = featureManager;
}

public async Task<List<KeyValuePair<TaxonomyDto, List<TaxonomyDto>>>> GetCategories()
Expand Down Expand Up @@ -80,6 +85,15 @@ public async Task<List<KeyValuePair<TaxonomyDto, List<TaxonomyDto>>>> GetCategor
HttpResponseMessage? response
)> GetLocalOffers(LocalOfferFilter filter)
{
if (!await _featureManager.IsEnabledAsync(FeatureFlag.VcfsServices))
{
// TODO: When Connect is updated to support LA Services..
// TODO: Just manipulate filter.ServiceType here instead.
// TODO: E.g., Flag is ENABLED -> filter.ServiceType = null (LA + VCFS returned)
// TODO: Flag is DISABLED -> filter.ServiceType = ServiceType.FamilyExperience (LA only returned)
return (new PaginatedList<ServiceDto>(), new HttpResponseMessage(HttpStatusCode.OK));
}

if (string.IsNullOrEmpty(filter.Status))
filter.Status = "Active";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<ItemGroup>
<PackageReference Include="libphonenumber-csharp" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" />
<PackageReference Include="Microsoft.FeatureManagement" />
<PackageReference Include="Polly.Contrib.WaitAndRetry" />
<PackageReference Include="SonarAnalyzer.CSharp">
<PrivateAssets>all</PrivateAssets>
Expand All @@ -24,6 +25,7 @@
<ProjectReference Include="..\..\..\..\shared\referral-shared\src\FamilyHubs.ReferralService.Shared\FamilyHubs.ReferralService.Shared.csproj" />
<ProjectReference Include="..\..\..\..\shared\service-directory-shared\src\FamilyHubs.ServiceDirectory.Shared\FamilyHubs.ServiceDirectory.Shared.csproj" />
<ProjectReference Include="..\..\..\..\shared\shared-kernel\src\fh-shared-kernel.shared-kernel\FamilyHubs.SharedKernel.csproj" />
<ProjectReference Include="..\..\..\..\shared\web-components\src\FamilyHubs.SharedKernel.Razor\FamilyHubs.SharedKernel.Razor.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
<ItemGroup>
<PackageReference Include="Enums.NET" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" />
<PackageReference Include="Microsoft.Azure.AppConfiguration.AspNetCore" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
<PackageReference Include="Microsoft.FeatureManagement.AspNetCore" />
<PackageReference Include="Serilog.AspNetCore" />
<PackageReference Include="Serilog.Extensions.Hosting" />
<PackageReference Include="Serilog.Sinks.ApplicationInsights" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@
using Microsoft.AspNetCore.Mvc;
using FamilyHubs.ReferralService.Shared.Dto.CreateUpdate;
using FamilyHubs.ReferralService.Shared.Dto.Metrics;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using Microsoft.FeatureManagement.Mvc;
using ReferralOrganisationDto = FamilyHubs.ReferralService.Shared.Dto.OrganisationDto;

namespace FamilyHubs.Referral.Web.Pages.ProfessionalReferral;

[FeatureGate(FeatureFlag.ConnectDashboard)]
public class CheckDetailsModel : ProfessionalReferralCacheModel
{
private readonly IReferralClientService _referralClientService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
using FamilyHubs.Referral.Core.DistributedCache;
using FamilyHubs.SharedKernel.Identity;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using FamilyHubs.SharedKernel.Razor.Header;
using FamilyHubs.SharedKernel.Razor.Links;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.FeatureManagement.Mvc;

namespace FamilyHubs.Referral.Web.Pages.ProfessionalReferral;

[Authorize(Roles = RoleGroups.LaProfessionalOrDualRole)]
[FeatureGate(FeatureFlag.ConnectDashboard)]
public class ConfirmationModel : PageModel, IFamilyHubsHeader
{
private readonly IConnectionRequestDistributedCache _connectionRequestCache;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
using FamilyHubs.Referral.Core.DistributedCache;
using FamilyHubs.Referral.Core.Models;
using FamilyHubs.Referral.Web.Pages.Shared;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using FamilyHubs.SharedKernel.Razor.FullPages.Radios;
using FamilyHubs.SharedKernel.Razor.FullPages.Radios.Common;
using Microsoft.AspNetCore.Mvc;
using Microsoft.FeatureManagement.Mvc;

namespace FamilyHubs.Referral.Web.Pages.ProfessionalReferral;

[FeatureGate(FeatureFlag.ConnectDashboard)]
public class ConsentModel : ProfessionalReferralCacheModel, IRadiosPageModel
{
public string DescriptionPartial => "/Pages/ProfessionalReferral/ConsentContent.cshtml";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
using FamilyHubs.Referral.Core.Models;
using FamilyHubs.Referral.Core.ValidationAttributes;
using FamilyHubs.Referral.Web.Pages.Shared;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using Microsoft.AspNetCore.Mvc;
using Microsoft.FeatureManagement.Mvc;

namespace FamilyHubs.Referral.Web.Pages.ProfessionalReferral;

[FeatureGate(FeatureFlag.ConnectDashboard)]
public class ContactByPhoneModel : ProfessionalReferralCacheModel
{
[BindProperty]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using FamilyHubs.Referral.Core.DistributedCache;
using FamilyHubs.Referral.Core.Models;
using FamilyHubs.Referral.Web.Pages.Shared;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using FamilyHubs.SharedKernel.Razor.FullPages.Checkboxes;
using Microsoft.AspNetCore.Mvc;
using Microsoft.FeatureManagement.Mvc;

namespace FamilyHubs.Referral.Web.Pages.ProfessionalReferral;

[FeatureGate(FeatureFlag.ConnectDashboard)]
public class ContactDetailsModel(IConnectionRequestDistributedCache connectionRequestCache)
: ProfessionalReferralCacheModel(ConnectJourneyPage.ContactDetails, connectionRequestCache), ICheckboxesPageModel
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
using FamilyHubs.Referral.Core.Models;
using FamilyHubs.Referral.Web.Models;
using FamilyHubs.Referral.Web.Pages.Shared;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using Microsoft.AspNetCore.Mvc;
using Microsoft.FeatureManagement.Mvc;

namespace FamilyHubs.Referral.Web.Pages.ProfessionalReferral;

[FeatureGate(FeatureFlag.ConnectDashboard)]
public class ContactMethodsModel : ProfessionalReferralCacheModel, ITellTheServicePageModel
{
public string DescriptionPartial => "/Pages/ProfessionalReferral/ContactMethodsContent.cshtml";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
using FamilyHubs.Referral.Web.Pages.Shared;
using FamilyHubs.Referral.Core.DistributedCache;
using System.Web;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using FamilyHubs.SharedKernel.Razor.FullPages.SingleTextbox;
using Microsoft.FeatureManagement.Mvc;

namespace FamilyHubs.Referral.Web.Pages.ProfessionalReferral;

[FeatureGate(FeatureFlag.ConnectDashboard)]
public class EmailModel : ProfessionalReferralCacheModel, ISingleEmailTextboxPageModel
{
public string HeadingText { get; set; } = "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@
using FamilyHubs.Referral.Core.ValidationAttributes;
using FamilyHubs.Referral.Web.Pages.Shared;
using FamilyHubs.SharedKernel.Razor.ErrorNext;
using FamilyHubs.SharedKernel.Razor.FeatureFlags;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.FeatureManagement.Mvc;

namespace FamilyHubs.Referral.Web.Pages.ProfessionalReferral;

[FeatureGate(FeatureFlag.ConnectDashboard)]
public class LetterModel : ProfessionalReferralCacheModel
{
//todo: consistency with nullable
Expand Down
Loading