public async Task Create_without_workflow_option()
            {
                var options = new AccountCreationOptionsBuilder()
                {
                }.Build();

                await this.VerifyThat(options, resultsInQueryString : string.Empty);
            }
Example #2
0
        public static IAccount CreateAccount(IInternalSyncDataStore dataStoreSync, string accountsHref, IAccount account, Action <AccountCreationOptionsBuilder> creationOptionsAction)
        {
            var builder = new AccountCreationOptionsBuilder();

            creationOptionsAction(builder);
            var options = builder.Build();

            return(dataStoreSync.Create(accountsHref, account, options));
        }
Example #3
0
        public static Task <IAccount> CreateAccountAsync(IInternalAsyncDataStore dataStore, string accountsHref, IAccount account, Action <AccountCreationOptionsBuilder> creationOptionsAction, CancellationToken cancellationToken)
        {
            var builder = new AccountCreationOptionsBuilder();

            creationOptionsAction(builder);
            var options = builder.Build();

            return(dataStore.CreateAsync(accountsHref, account, options, cancellationToken));
        }
            public async Task Create_with_response_options()
            {
                var optionsBuilder = new AccountCreationOptionsBuilder();

                optionsBuilder.ResponseOptions.Expand(x => x.GetCustomData());
                var options = optionsBuilder.Build();

                await this.VerifyThat(options, resultsInQueryString : "?expand=customData");
            }
            public async Task Create_with_workflow_override_disabled()
            {
                var options = new AccountCreationOptionsBuilder()
                {
                    RegistrationWorkflowEnabled = false
                }.Build();

                await this.VerifyThat(options, resultsInQueryString : "?registrationWorkflowEnabled=false");
            }
            public async Task Create_with_all_options()
            {
                var optionsBuilder = new AccountCreationOptionsBuilder();

                optionsBuilder.RegistrationWorkflowEnabled = true;
                optionsBuilder.ResponseOptions.Expand(x => x.GetGroups(0, 10));
                var options = optionsBuilder.Build();

                await this.VerifyThat(options, resultsInQueryString : "?expand=groups(offset:0,limit:10)&registrationWorkflowEnabled=true");
            }
        private async Task AddObjectsToTenantAsync()
        {
            // Get client and tenant
            var client = TestClients.GetSAuthc1Client();

            var tenant = await client.GetCurrentTenantAsync();

            tenant.ShouldNotBe(null);
            tenant.Href.ShouldNotBeNullOrEmpty();
            this.TenantHref = tenant.Href;

            // Create applications
            try
            {
                // Create and verify applications
                var applicationsToCreate     = this.testData.GetTestApplications(client);
                var applicationCreationTasks = applicationsToCreate.Select(app =>
                                                                           tenant.CreateApplicationAsync(app, opt => opt.CreateDirectory = false));
                var resultingApplications = await Task.WhenAll(applicationCreationTasks);

                resultingApplications.ShouldNotContain(x => string.IsNullOrEmpty(x.Href));

                // Add them all to the teardown list
                this.CreatedApplicationHrefs.AddRange(resultingApplications.Select(x => x.Href));

                // Grab the one marked as primary
                this.PrimaryApplicationHref = resultingApplications.Where(x => x.Name.Contains("primary")).Single().Href;
            }
            catch (Exception e)
            {
                await this.RemoveObjectsFromTenantAsync();

                throw new ApplicationException("Could not create applications", e);
            }

            // Create organizations
            IOrganization primaryOrganization = null;

            try
            {
                var orgsToCreate     = this.testData.GetTestOrganizations(client);
                var orgCreationTasks = orgsToCreate.Select(o =>
                                                           tenant.CreateOrganizationAsync(o, opt => opt.CreateDirectory = true));
                var resultingOrgs = await Task.WhenAll(orgCreationTasks);

                resultingOrgs.ShouldNotContain(x => string.IsNullOrEmpty(x.Href));

                // Verify that directories were created, too
                var getDirectoryTasks    = resultingOrgs.Select(x => x.GetDefaultAccountStoreAsync());
                var resultingDirectories = await Task.WhenAll(getDirectoryTasks);

                resultingDirectories.ShouldNotContain(x => string.IsNullOrEmpty(x.Href));

                // Add them all to the teardown list
                this.CreatedOrganizationHrefs.AddRange(resultingOrgs.Select(x => x.Href));
                this.CreatedDirectoryHrefs.AddRange(resultingDirectories.Select(x => x.Href));

                // Grab the one marked as primary
                primaryOrganization             = resultingOrgs.Where(x => x.Name.Contains("primary")).Single();
                this.PrimaryOrganizationHref    = primaryOrganization.Href;
                this.PrimaryOrganizationNameKey = primaryOrganization.NameKey;
                this.PrimaryDirectoryHref       = (await primaryOrganization.GetDefaultAccountStoreAsync()).Href;
            }
            catch (Exception e)
            {
                await this.RemoveObjectsFromTenantAsync();

                throw new ApplicationException("Could not create organizations", e);
            }

            // Add primary organization to primary application as an account store
            var primaryApplication = await client.GetResourceAsync <IApplication>(this.PrimaryApplicationHref);

            var mapping = client.Instantiate <IApplicationAccountStoreMapping>()
                          .SetAccountStore(primaryOrganization)
                          .SetApplication(primaryApplication)
                          .SetDefaultAccountStore(true)
                          .SetDefaultGroupStore(true);
            await primaryApplication.CreateAccountStoreMappingAsync(mapping);

            // Create accounts in primary organization
            try
            {
                var accountsToCreate = this.testData.GetTestAccounts(client);
                var createOptions    = new AccountCreationOptionsBuilder()
                {
                    RegistrationWorkflowEnabled = false
                }.Build();

                var accountCreationTasks = accountsToCreate.Select(acct =>
                                                                   primaryOrganization.CreateAccountAsync(acct, createOptions));

                var resultingAccounts = await Task.WhenAll(accountCreationTasks);

                this.CreatedAccountHrefs.AddRange(resultingAccounts.Select(x => x.Href));
            }
            catch (Exception e)
            {
                await this.RemoveObjectsFromTenantAsync();

                throw new ApplicationException("Could not create accounts", e);
            }

            // Create groups
            try
            {
                var groupsToCreate     = this.testData.GetTestGroups(client);
                var groupCreationTasks = groupsToCreate.Select(g =>
                                                               primaryOrganization.CreateGroupAsync(g));

                var resultingGroups = await Task.WhenAll(groupCreationTasks);

                this.CreatedGroupHrefs.AddRange(resultingGroups.Select(x => x.Href));

                this.PrimaryGroupHref = resultingGroups.Where(x => x.Name.Contains("primary")).Single().Href;
            }
            catch (Exception e)
            {
                await this.RemoveObjectsFromTenantAsync();

                throw new ApplicationException("Could not create groups", e);
            }

            // Add some accounts to groups
            try
            {
                var luke = await primaryApplication.GetAccounts()
                           .Where(x => x.Email.StartsWith("lskywalker"))
                           .SingleAsync();

                await luke.AddGroupAsync(this.PrimaryGroupHref);

                // Stash an account for easy access
                this.PrimaryAccountHref = luke.Href;
            }
            catch (Exception e)
            {
                await this.RemoveObjectsFromTenantAsync();

                throw new ApplicationException("Could not add accounts to groups", e);
            }
        }