Skip to content

Commit a308141

Browse files
xavierdecosterskofman1
authored andcommitted
SecurityPolicyService.IsSubscribed should ignore state (#6753)
* SecurityPolicyService.IsSubscribed should ignore state #1970 * Added unit test * improve assertion
1 parent a0a85e4 commit a308141

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/NuGetGallery/Security/SecurityPolicyService.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,10 @@ public bool IsSubscribed(User user, IUserSecurityPolicySubscription subscription
354354
var subscribed = FindPolicies(user, subscription);
355355
var required = subscription.Policies;
356356

357-
return required.All(rp => subscribed.Any(sp => sp.Equals(rp)));
357+
return required.All(rp =>
358+
subscribed.Any(sp =>
359+
string.Equals(sp.Name, rp.Name, StringComparison.OrdinalIgnoreCase)
360+
&& string.Equals(sp.Subscription, rp.Subscription, StringComparison.OrdinalIgnoreCase)));
358361
}
359362

360363
/// <summary>

tests/NuGetGallery.Facts/Areas/Admin/Controllers/SecurityPolicyControllerFacts.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,30 @@ public async Task UpdateUnsubscribesUsers()
188188
policyService.MockEntitiesContext.Verify(c => c.SaveChangesAsync(), Times.Exactly(2));
189189
}
190190

191+
[Fact]
192+
public void IsSubscribedIgnoresPolicyState()
193+
{
194+
// Arrange.
195+
var users = TestUsers.ToList();
196+
var policyService = new TestSecurityPolicyService();
197+
var entitiesMock = policyService.MockEntitiesContext;
198+
entitiesMock.Setup(c => c.Users).Returns(users.MockDbSet().Object);
199+
var controller = new SecurityPolicyController(entitiesMock.Object, policyService);
200+
var subscription = policyService.Mocks.UserPoliciesSubscription.Object;
201+
202+
users.ForEach(async u => await policyService.SubscribeAsync(u, subscription));
203+
policyService.MockEntitiesContext.ResetCalls();
204+
205+
// Act.
206+
// Simulates changes to the configurable state of all existing policy subscriptions
207+
users.ForEach(u =>
208+
u.SecurityPolicies.Where(p => p.Subscription == subscription.SubscriptionName).ToList().ForEach(p =>
209+
p.Value = Guid.NewGuid().ToString()));
210+
211+
// Assert.
212+
Assert.All(users, u => Assert.True(policyService.IsSubscribed(u, subscription)));
213+
}
214+
191215
[Fact]
192216
public async Task UpdateIgnoresBadUsers()
193217
{

0 commit comments

Comments
 (0)