예제 #1
0
        public async Task ShouldReturnIdOfTheAssociatedUser()
        {
            var userManager = new FakeUserManager();

            var sut = new UserAuthorizationService(userManager, Mock.Of <AllReadyContext>());

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            sut.AssociatedUserId.ShouldBe("123");
        }
예제 #2
0
        public async Task IsOrganizationAdmin_ShouldReturnFalse_WhenClaimsPrincipleDoesNotHaveOrgAdminClaim()
        {
            var userManager = new FakeUserManager();

            var sut = new UserAuthorizationService(userManager, Mock.Of <AllReadyContext>());

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            sut.IsOrganizationAdmin(1).ShouldBeFalse();
        }
예제 #3
0
        public async Task AssociateUser_ShouldCallUserManager_IfClaimsPrincipleIdentityIsAuthenticated()
        {
            var userManager = new FakeUserManager();

            var sut = new UserAuthorizationService(userManager, Mock.Of <AllReadyContext>());

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            userManager.FindByEmailAsyncCallCount.ShouldBe(1);
        }
        public async Task AssociateUser_ShouldThrowError_IfUserAlreadyAssociated()
        {
            var sut = new UserAuthorizationService(new FakeUserManager(), Mock.Of <AllReadyContext>());

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            Exception ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.AssociateUser(new ClaimsPrincipal()));

            ex.ShouldNotBeNull();
        }
예제 #5
0
        public async Task IsOrganizationAdmin_ShouldReturnFalse_WhenClaimsPrincipleDoesNotHaveOrgAdminClaim()
        {
            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(new ApplicationUser());
            var sut = new UserAuthorizationService(userManager.Object, Mock.Of <AllReadyContext>());

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            sut.IsOrganizationAdmin(1).ShouldBeFalse();
        }
예제 #6
0
        public async Task IsSiteAdmin_ShouldReturnTrue_WhenClaimsPrincipleHasSiteAdminClaim()
        {
            var userManager = new FakeUserManager();

            var sut = new UserAuthorizationService(userManager, Mock.Of <AllReadyContext>());

            var claimsIdentity = new ClaimsIdentity(new List <Claim> {
                new Claim(AllReady.Security.ClaimTypes.UserType, "SiteAdmin")
            }, "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            sut.IsSiteAdmin.ShouldBeTrue();
        }
예제 #7
0
        public async Task GetManagedCampaignIds_CallsContextOnFirstLoad()
        {
            var userManager = new FakeUserManager();

            var sut = new UserAuthorizationService(userManager, Context);

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            var managedCampaignIds = await sut.GetManagedCampaignIds();

            managedCampaignIds.Count.ShouldBe(1);
        }
예제 #8
0
        public async Task IsTeamLead_ReturnsFalse_WhenUserHasNoTeamLeadTaskSignupRecords()
        {
            var userManager = new FakeUserManagerForBasicUser();

            var sut = new UserAuthorizationService(userManager, Context);

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            var isEventManager = await sut.IsTeamLead();

            isEventManager.ShouldBe(false);
        }
예제 #9
0
        public async Task IsOrganizationAdmin_ShouldReturnFalse_WhenClaimsPrincipleHasOrgAdminClaimAndButDifferentOrganizationId()
        {
            var userManager = new FakeUserManager();

            var sut = new UserAuthorizationService(userManager, Mock.Of <AllReadyContext>());

            var claimsIdentity = new ClaimsIdentity(new List <Claim> {
                new Claim(AllReady.Security.ClaimTypes.UserType, "OrgAdmin"), new Claim(AllReady.Security.ClaimTypes.Organization, "1")
            }, "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            sut.IsOrganizationAdmin(100).ShouldBeFalse();
        }
예제 #10
0
        public async Task HasAssociatedUserShouldReturnTrue_WhenUserAssociated()
        {
            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(new ApplicationUser());

            var sut = new UserAuthorizationService(userManager.Object, Mock.Of <AllReadyContext>());

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            sut.HasAssociatedUser.ShouldBeTrue();
        }
예제 #11
0
        public async Task IsCampaignManager_ReturnsTrue_WhenUserHasManagedCampaignRecord()
        {
            var userManager = new FakeUserManager();

            var sut = new UserAuthorizationService(userManager, Context);

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            var isEventManager = await sut.IsCampaignManager();

            isEventManager.ShouldBe(true);
        }
예제 #12
0
        public async Task IsTeamLead_ReturnsFalse_WhenUserHasNoTeamLeadTaskSignupRecords()
        {
            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(new ApplicationUser());
            var sut = new UserAuthorizationService(userManager.Object, Context);

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            var isEventManager = await sut.IsTeamLead();

            isEventManager.ShouldBe(false);
        }
예제 #13
0
        public async Task AssociateUser_ShouldInvokeFindByEmailAsyncWithTheCorrectEmail_WhenClaimsPrincipleIdentityIsAuthenticated()
        {
            const string email = "email";

            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            var claimsIdentity = new ClaimsIdentity(new List <Claim> {
                new Claim(System.Security.Claims.ClaimTypes.Name, email)
            }, "CustomApiKeyAuth");

            var sut = new UserAuthorizationService(userManager.Object, Mock.Of <AllReadyContext>());

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            userManager.Verify(x => x.FindByEmailAsync(email), Times.Once);
        }
예제 #14
0
        public async Task IsOrganizationAdmin_ShouldReturnFalse_WhenClaimsPrincipleHasOrgAdminClaimAndButDifferentOrganizationId()
        {
            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(new ApplicationUser {
                Id = UserId
            });
            var sut = new UserAuthorizationService(userManager.Object, Mock.Of <AllReadyContext>());

            var claimsIdentity = new ClaimsIdentity(new List <Claim> {
                new Claim(AllReady.Security.ClaimTypes.UserType, nameof(UserType.OrgAdmin)), new Claim(AllReady.Security.ClaimTypes.Organization, "1")
            }, "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            sut.IsOrganizationAdmin(100).ShouldBeFalse();
        }
예제 #15
0
        public async Task GetLedItineraryIds_CallsContextOnFirstLoad()
        {
            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(new ApplicationUser {
                Id = UserId
            });
            var sut = new UserAuthorizationService(userManager.Object, Context);

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            var teamLeadIds = await sut.GetLedItineraryIds();

            teamLeadIds.Count.ShouldBe(1);
        }
예제 #16
0
        public async Task GetManagedEventIds_ReturnsExpectedEventIdsForUser()
        {
            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(new ApplicationUser {
                Id = UserId
            });
            var sut = new UserAuthorizationService(userManager.Object, Context);

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            var managedEventIds = await sut.GetManagedEventIds();

            managedEventIds.Count.ShouldBe(1);
        }
예제 #17
0
        public async Task AssociateUser_ShouldThrowError_IfUserAlreadyAssociatedWithDifferentEmail()
        {
            var sut = new UserAuthorizationService(new FakeUserManager(), Mock.Of <AllReadyContext>());

            var claimsIdentity1 = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            claimsIdentity1.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, "Email1"));

            var claimsIdentity2 = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            claimsIdentity2.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, "Email2"));

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity1));

            Exception ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.AssociateUser(new ClaimsPrincipal(claimsIdentity2)));

            ex.ShouldNotBeNull();
        }
예제 #18
0
        public async Task IsCampaignManager_ReturnsTrue_WhenUserHasManagedCampaignRecord()
        {
            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(new ApplicationUser {
                Id = UserId
            });

            var sut = new UserAuthorizationService(userManager.Object, Context);

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            var isEventManager = await sut.IsCampaignManager();

            isEventManager.ShouldBe(true);
        }
예제 #19
0
        public async Task AssociateUser_ShouldDoNothing_IfUserAlreadyAssociatedWithSameEmail()
        {
            var userManager = new FakeUserManager();
            var sut         = new UserAuthorizationService(userManager, Mock.Of <AllReadyContext>());

            var claimsIdentity1 = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            claimsIdentity1.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, "Email"));

            var claimsIdentity2 = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            claimsIdentity2.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, "Email"));

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity1));

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity2));

            Assert.Equal(1, userManager.FindByEmailAsyncCallCount);
        }
예제 #20
0
        public async Task AssociateUser_ShouldThrowError_IfUserAlreadyAssociatedWithDifferentEmail()
        {
            const string email = "Email";
            const string authentciationType = "CustomApiKeyAuth";

            var userManager = UserManagerMockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.FindByEmailAsync(email)).ReturnsAsync(new ApplicationUser());

            var sut = new UserAuthorizationService(userManager.Object, Mock.Of <AllReadyContext>());

            var claimsIdentity1 = new ClaimsIdentity(new List <Claim>(), authentciationType);

            claimsIdentity1.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, email));

            var claimsIdentity2 = new ClaimsIdentity(new List <Claim>(), authentciationType);

            claimsIdentity2.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, email));

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity1));

            await Assert.ThrowsAsync <InvalidOperationException>(() => sut.AssociateUser(new ClaimsPrincipal(claimsIdentity2)));
        }
예제 #21
0
        public async Task GetManagedCampaignIds_DoesNotCallContextOnSecondLoad()
        {
            var userManager = new FakeUserManager();

            var sut = new UserAuthorizationService(userManager, Context);

            var claimsIdentity = new ClaimsIdentity(new List <Claim>(), "CustomApiKeyAuth");

            await sut.AssociateUser(new ClaimsPrincipal(claimsIdentity));

            var managedCampaignIds = await sut.GetManagedCampaignIds();

            var manager = Context.CampaignManagers.First();

            Context.Remove(manager);
            Context.SaveChanges();

            Context.CampaignManagers.Count().ShouldBe(0);

            var managedCampaignIds2 = await sut.GetManagedCampaignIds();

            managedCampaignIds2.Count.ShouldBe(1);
        }
예제 #22
0
        public void ShouldReturnNull_WhenNoUserAssociated()
        {
            var sut = new UserAuthorizationService(UserManagerMockHelper.CreateUserManagerMock().Object, Mock.Of <AllReadyContext>());

            sut.AssociatedUserId.ShouldBeNull();
        }
예제 #23
0
        public void HasAssociatedUserShouldReturnFalse_WhenNoUserAssociated()
        {
            var sut = new UserAuthorizationService(UserManagerMockHelper.CreateUserManagerMock().Object, Mock.Of <AllReadyContext>());

            sut.HasAssociatedUser.ShouldBeFalse();
        }