Skip to content

Commit

Permalink
[Feature Flags] Handle anonymous users (#7021)
Browse files Browse the repository at this point in the history
See: #7019
  • Loading branch information
loic-sharma committed Mar 29, 2019
1 parent c968679 commit 9cbe3cc
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 28 deletions.
11 changes: 5 additions & 6 deletions src/NuGetGallery.Core/Features/FeatureFlagClientExtensions.cs
@@ -1,7 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using NuGet.Services.Entities;
using NuGet.Services.FeatureFlags;

Expand All @@ -15,12 +14,12 @@ public static class FeatureFlagClientExtensions
User user,
bool defaultValue)
{
if (user == null)
{
throw new ArgumentNullException(nameof(user));
}
// The user object is null if the user isn't logged in.
var flightUser = (user != null)
? new FlightUser(user)
: null;

return client.IsEnabled(flight, new FlightUser(user), defaultValue);
return client.IsEnabled(flight, flightUser, defaultValue);
}

private class FlightUser : IFlightUser
Expand Down
10 changes: 5 additions & 5 deletions src/NuGetGallery.Core/NuGetGallery.Core.csproj
Expand Up @@ -219,19 +219,19 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NuGet.Services.Entities">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.FeatureFlags">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.Messaging.Email">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.Validation">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.Validation.Issues">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.StrongName.AnglicanGeek.MarkdownMailer">
<Version>1.2.0</Version>
Expand Down
10 changes: 5 additions & 5 deletions src/NuGetGallery/NuGetGallery.csproj
Expand Up @@ -2124,7 +2124,7 @@
<Version>2.2.0</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.Licenses">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.StrongName.AnglicanGeek.MarkdownMailer">
<Version>1.2.0</Version>
Expand Down Expand Up @@ -2348,16 +2348,16 @@
<Version>5.0.0-preview1.5665</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.KeyVault">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.Logging">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.Owin">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="NuGet.Services.Sql">
<Version>2.44.0</Version>
<Version>2.46.0</Version>
</PackageReference>
<PackageReference Include="Owin">
<Version>1.0.0</Version>
Expand Down
Expand Up @@ -24,6 +24,45 @@ public void ConvertsUser()
Roles = new List<Role>()
};

// Act
FeatureFlagClientExtensions.IsEnabled(client.Object, "flight", user, defaultValue: true);

// Assert
client.Verify(
c => c.IsEnabled(
"flight",
It.Is<IFlightUser>(u =>
u.Username == "a" &&
u.EmailAddress == "a@a.com" &&
u.IsSiteAdmin == false),
true));
}

[Fact]
public void ConvertsAnonymousUser()
{
// Arrange - anonymous users are represented as a null user object
var client = new Mock<IFeatureFlagClient>();

User user = null;

// Act
FeatureFlagClientExtensions.IsEnabled(client.Object, "flight", user, defaultValue: true);

// Assert
client.Verify(
c => c.IsEnabled(
"flight",
It.Is<IFlightUser>(u => u == null),
true));
}

[Fact]
public void ConvertsAdmins()
{
// Arrange
var client = new Mock<IFeatureFlagClient>();

var admin = new User
{
Username = "b",
Expand All @@ -35,22 +74,12 @@ public void ConvertsUser()
};

// Act
FeatureFlagClientExtensions.IsEnabled(client.Object, "flightA", user, defaultValue: true);
FeatureFlagClientExtensions.IsEnabled(client.Object, "flightB", admin, defaultValue: true);
FeatureFlagClientExtensions.IsEnabled(client.Object, "flight", admin, defaultValue: true);

// Assert
client.Verify(
c => c.IsEnabled(
"flightA",
It.Is<IFlightUser>(u =>
u.Username == "a" &&
u.EmailAddress == "a@a.com" &&
u.IsSiteAdmin == false),
true));

client.Verify(
c => c.IsEnabled(
"flightB",
"flight",
It.Is<IFlightUser>(u =>
u.Username == "b" &&
u.EmailAddress == "b@b.com" &&
Expand Down

0 comments on commit 9cbe3cc

Please sign in to comment.