Skip to content

Commit 9cbe3cc

Browse files
authored
[Feature Flags] Handle anonymous users (#7021)
See: #7019
1 parent c968679 commit 9cbe3cc

4 files changed

Lines changed: 56 additions & 28 deletions

File tree

src/NuGetGallery.Core/Features/FeatureFlagClientExtensions.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4-
using System;
54
using NuGet.Services.Entities;
65
using NuGet.Services.FeatureFlags;
76

@@ -15,12 +14,12 @@ public static bool IsEnabled(
1514
User user,
1615
bool defaultValue)
1716
{
18-
if (user == null)
19-
{
20-
throw new ArgumentNullException(nameof(user));
21-
}
17+
// The user object is null if the user isn't logged in.
18+
var flightUser = (user != null)
19+
? new FlightUser(user)
20+
: null;
2221

23-
return client.IsEnabled(flight, new FlightUser(user), defaultValue);
22+
return client.IsEnabled(flight, flightUser, defaultValue);
2423
}
2524

2625
private class FlightUser : IFlightUser

src/NuGetGallery.Core/NuGetGallery.Core.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -219,19 +219,19 @@
219219
</ItemGroup>
220220
<ItemGroup>
221221
<PackageReference Include="NuGet.Services.Entities">
222-
<Version>2.44.0</Version>
222+
<Version>2.46.0</Version>
223223
</PackageReference>
224224
<PackageReference Include="NuGet.Services.FeatureFlags">
225-
<Version>2.44.0</Version>
225+
<Version>2.46.0</Version>
226226
</PackageReference>
227227
<PackageReference Include="NuGet.Services.Messaging.Email">
228-
<Version>2.44.0</Version>
228+
<Version>2.46.0</Version>
229229
</PackageReference>
230230
<PackageReference Include="NuGet.Services.Validation">
231-
<Version>2.44.0</Version>
231+
<Version>2.46.0</Version>
232232
</PackageReference>
233233
<PackageReference Include="NuGet.Services.Validation.Issues">
234-
<Version>2.44.0</Version>
234+
<Version>2.46.0</Version>
235235
</PackageReference>
236236
<PackageReference Include="NuGet.StrongName.AnglicanGeek.MarkdownMailer">
237237
<Version>1.2.0</Version>

src/NuGetGallery/NuGetGallery.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2124,7 +2124,7 @@
21242124
<Version>2.2.0</Version>
21252125
</PackageReference>
21262126
<PackageReference Include="NuGet.Services.Licenses">
2127-
<Version>2.44.0</Version>
2127+
<Version>2.46.0</Version>
21282128
</PackageReference>
21292129
<PackageReference Include="NuGet.StrongName.AnglicanGeek.MarkdownMailer">
21302130
<Version>1.2.0</Version>
@@ -2348,16 +2348,16 @@
23482348
<Version>5.0.0-preview1.5665</Version>
23492349
</PackageReference>
23502350
<PackageReference Include="NuGet.Services.KeyVault">
2351-
<Version>2.44.0</Version>
2351+
<Version>2.46.0</Version>
23522352
</PackageReference>
23532353
<PackageReference Include="NuGet.Services.Logging">
2354-
<Version>2.44.0</Version>
2354+
<Version>2.46.0</Version>
23552355
</PackageReference>
23562356
<PackageReference Include="NuGet.Services.Owin">
2357-
<Version>2.44.0</Version>
2357+
<Version>2.46.0</Version>
23582358
</PackageReference>
23592359
<PackageReference Include="NuGet.Services.Sql">
2360-
<Version>2.44.0</Version>
2360+
<Version>2.46.0</Version>
23612361
</PackageReference>
23622362
<PackageReference Include="Owin">
23632363
<Version>1.0.0</Version>

tests/NuGetGallery.Core.Facts/Features/FeatureFlagClientExtensionsFacts.cs

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,45 @@ public void ConvertsUser()
2424
Roles = new List<Role>()
2525
};
2626

27+
// Act
28+
FeatureFlagClientExtensions.IsEnabled(client.Object, "flight", user, defaultValue: true);
29+
30+
// Assert
31+
client.Verify(
32+
c => c.IsEnabled(
33+
"flight",
34+
It.Is<IFlightUser>(u =>
35+
u.Username == "a" &&
36+
u.EmailAddress == "[email protected]" &&
37+
u.IsSiteAdmin == false),
38+
true));
39+
}
40+
41+
[Fact]
42+
public void ConvertsAnonymousUser()
43+
{
44+
// Arrange - anonymous users are represented as a null user object
45+
var client = new Mock<IFeatureFlagClient>();
46+
47+
User user = null;
48+
49+
// Act
50+
FeatureFlagClientExtensions.IsEnabled(client.Object, "flight", user, defaultValue: true);
51+
52+
// Assert
53+
client.Verify(
54+
c => c.IsEnabled(
55+
"flight",
56+
It.Is<IFlightUser>(u => u == null),
57+
true));
58+
}
59+
60+
[Fact]
61+
public void ConvertsAdmins()
62+
{
63+
// Arrange
64+
var client = new Mock<IFeatureFlagClient>();
65+
2766
var admin = new User
2867
{
2968
Username = "b",
@@ -35,22 +74,12 @@ public void ConvertsUser()
3574
};
3675

3776
// Act
38-
FeatureFlagClientExtensions.IsEnabled(client.Object, "flightA", user, defaultValue: true);
39-
FeatureFlagClientExtensions.IsEnabled(client.Object, "flightB", admin, defaultValue: true);
77+
FeatureFlagClientExtensions.IsEnabled(client.Object, "flight", admin, defaultValue: true);
4078

4179
// Assert
4280
client.Verify(
4381
c => c.IsEnabled(
44-
"flightA",
45-
It.Is<IFlightUser>(u =>
46-
u.Username == "a" &&
47-
u.EmailAddress == "[email protected]" &&
48-
u.IsSiteAdmin == false),
49-
true));
50-
51-
client.Verify(
52-
c => c.IsEnabled(
53-
"flightB",
82+
"flight",
5483
It.Is<IFlightUser>(u =>
5584
u.Username == "b" &&
5685
u.EmailAddress == "[email protected]" &&

0 commit comments

Comments
 (0)