public void GetValidRequestContextFromCache_InvalidUserName(string userName)
        {
            var cache = new IdentityProviderContextCache();
            var requestContextData = cache.GetRequestContextData(RequestContext.TenantId, WellKnownAliases.CurrentTenant.ReadiNowIdentityProviderInstance, userName, true);

            Assert.IsNull(requestContextData, "Context data should be null");
        }
        public void GetValidRequestContextFromCache_UnmappedOidcUser()
        {
            var entitiesToSave = new List <IEntity>();

            // Setup provider, provider user and user account
            var provider = new OidcIdentityProvider {
                Name = "ID Provider " + Guid.NewGuid()
            };

            entitiesToSave.Add(provider);

            var userAccount = new UserAccount {
                Name = "Test User " + Guid.NewGuid(), AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Active
            };

            entitiesToSave.Add(userAccount);

            // Provider user has no associated user account
            var providerUser = new OidcIdentityProviderUser
            {
                Name = "Provider User" + Guid.NewGuid(),
                IdentityProviderForUser = provider.As <IdentityProvider>()
            };

            entitiesToSave.Add(providerUser);

            Entity.Save(entitiesToSave);

            var cache = new IdentityProviderContextCache();
            var requestContextData = cache.GetRequestContextData(RequestContext.TenantId, provider.Id, providerUser.Name, true);

            Assert.IsNull(requestContextData, "Context data should be null");
        }
        public void GetValidRequestContextFromCache_InvalidTenant(long tenantId)
        {
            var userAccount = new UserAccount {
                Name = "Test User " + Guid.NewGuid( ), AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Active
            };

            userAccount.Save( );

            var cache = new IdentityProviderContextCache( );

            cache.GetRequestContextData(tenantId, WellKnownAliases.CurrentTenant.ReadiNowIdentityProviderInstance, userAccount.Name, true);
        }
        public void GetValidRequestContextFromCache_InvalidProvider(long providerId)
        {
            var userAccount = new UserAccount {
                Name = "Test User " + Guid.NewGuid(), AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Active
            };

            userAccount.Save();

            var cache = new IdentityProviderContextCache();
            var requestContextData = cache.GetRequestContextData(RequestContext.TenantId, providerId, userAccount.Name, true);

            Assert.IsNull(requestContextData, "Context data should be null");
        }
        public void GetValidRequestContextFromCache_DisabledToActiveUserAccount()
        {
            var entitiesToSave = new List <IEntity>();

            // Setup provider, provider user and user account
            var provider = new OidcIdentityProvider {
                Name = "ID Provider " + Guid.NewGuid()
            };

            entitiesToSave.Add(provider);

            var userAccount = new UserAccount {
                Name = "Test User " + Guid.NewGuid(), AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Disabled
            };

            entitiesToSave.Add(userAccount);

            // Provider user has no associated user account
            var providerUser = new OidcIdentityProviderUser
            {
                AssociatedUserAccount = userAccount,
                Name = "Provider User" + Guid.NewGuid(),
                IdentityProviderForUser = provider.As <IdentityProvider>()
            };

            entitiesToSave.Add(providerUser);

            Entity.Save(entitiesToSave);

            var cache = new IdentityProviderContextCache();
            var requestContextData = cache.GetRequestContextData(RequestContext.TenantId, provider.Id, providerUser.Name, false);

            Assert.IsNotNull(requestContextData, "Context data should not be null");

            requestContextData = cache.GetRequestContextData(RequestContext.TenantId, provider.Id, providerUser.Name, true);

            Assert.IsNull(requestContextData, "Context data should be null");

            // Change the account to active
            userAccount.AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Active;
            userAccount.Save();

            cache.CacheInvalidator.OnEntityChange(new IEntity[] { userAccount }, InvalidationCause.Save, null);

            requestContextData = cache.GetRequestContextData(RequestContext.TenantId, provider.Id, providerUser.Name, true);

            Assert.IsNotNull(requestContextData, "Context data should not be null");
        }
        public void GetValidRequestContextFromCache_OidcProviderInvalidateOnUserChange()
        {
            var entitiesToSave = new List <IEntity>();

            // Setup provider, provider user and user account
            var provider = new OidcIdentityProvider {
                Name = "ID Provider " + Guid.NewGuid()
            };

            entitiesToSave.Add(provider);

            var userAccount = new UserAccount {
                Name = "Test User " + Guid.NewGuid(), AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Active
            };

            entitiesToSave.Add(userAccount);

            var providerUser = new OidcIdentityProviderUser
            {
                AssociatedUserAccount = userAccount,
                Name = "Provider User" + Guid.NewGuid(),
                IdentityProviderForUser = provider.As <IdentityProvider>()
            };

            entitiesToSave.Add(providerUser);

            Entity.Save(entitiesToSave);

            var cache = new IdentityProviderContextCache();
            var requestContextData = cache.GetRequestContextData(RequestContext.TenantId, provider.Id, providerUser.Name, true);

            Assert.IsNotNull(requestContextData, "Context data should not be null.");
            Assert.AreEqual(userAccount.Id, requestContextData.Identity.Id, "The context identity user id is invalid.");
            Assert.AreEqual(userAccount.Name, requestContextData.Identity.Name, "The context identity user name is invalid.");
            Assert.AreEqual(provider.Id, requestContextData.Identity.IdentityProviderId, "The context identity provider is invalid.");
            Assert.AreEqual(providerUser.Id, requestContextData.Identity.IdentityProviderUserId, "The context identity provider user id is invalid.");
            Assert.AreEqual(provider.IsOfType[0].Alias, requestContextData.Identity.IdentityProviderTypeAlias, "The context identity provider alias is invalid.");

            // This should invalidate the cache
            providerUser.AssociatedUserAccount = null;
            providerUser.Save();

            cache.CacheInvalidator.OnEntityChange(new IEntity[] { providerUser }, InvalidationCause.Save, null);

            requestContextData = cache.GetRequestContextData(RequestContext.TenantId, provider.Id, providerUser.Name, true);
            Assert.IsNull(requestContextData, "Context data should be null.");
        }
        public void GetValidRequestContextFromCache_ReadiNowProvider()
        {
            var userAccount = new UserAccount {
                Name = "Test User " + Guid.NewGuid(), AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Active
            };

            userAccount.Save();

            var cache = new IdentityProviderContextCache();
            var requestContextData = cache.GetRequestContextData(RequestContext.TenantId, WellKnownAliases.CurrentTenant.ReadiNowIdentityProviderInstance, userAccount.Name, true);

            var identityProvider = Entity.Get <ReadiNowIdentityProvider>(WellKnownAliases.CurrentTenant.ReadiNowIdentityProviderInstance);

            Assert.IsNotNull(requestContextData, "Context data should not be null.");
            Assert.AreEqual(userAccount.Id, requestContextData.Identity.Id, "The context identity user id is invalid.");
            Assert.AreEqual(userAccount.Name, requestContextData.Identity.Name, "The context identity user name is invalid.");
            Assert.AreEqual(WellKnownAliases.CurrentTenant.ReadiNowIdentityProviderInstance, requestContextData.Identity.IdentityProviderId,
                            "The context identity provider is invalid.");
            Assert.AreEqual(userAccount.Id, requestContextData.Identity.IdentityProviderUserId, "The context identity provider user id is invalid.");
            Assert.AreEqual(identityProvider.IsOfType[0].Alias, requestContextData.Identity.IdentityProviderTypeAlias, "The context identity provider alias is invalid.");
        }
        public void Constructor()
        {
            var cache = new IdentityProviderContextCache();

            Assert.IsNotNull(cache, "Cache should not be null.");
        }