예제 #1
0
        /// <summary>
        /// Creates a new tenant on the server. Check the server documentation for the required permissions.
        /// </summary>
        /// <param name="tenant"></param>
        /// <returns></returns>
        public async Task <Guid> PostTenantAsync(TenantCreateDto tenant)
        {
            var newId = await PostGuidEntityAsync(tenantsEndpoint, tenant);

            tenant.TenantDetails.Id = newId.ToString();
            return(newId);
        }
        public void Post_Should_Return_Created_Response_And_Call_Add()
        {
            // Given
            var newId               = Guid.NewGuid();
            var tenantService       = Substitute.For <IService <Tenant> >();
            var tenantCreator       = Substitute.For <ITenantCreator>();
            var logger              = Substitute.For <ILogger <TenantController> >();
            var accountService      = Substitute.For <IAccountService>();
            var inspectionService   = Substitute.For <IInspectionService>();
            var employeeService     = Substitute.For <IEmployeeService>();
            var branchOfficeService = Substitute.For <IService <BranchOffice> >();
            var departmentService   = Substitute.For <IService <Department> >();

            var tenantController = new TenantController(
                tenantService,
                tenantCreator,
                accountService,
                inspectionService,
                employeeService,
                branchOfficeService,
                departmentService,
                logger);

            var createTenantDto = new TenantCreateDto {
                TenantDetails = new TenantDto
                {
                    Name           = "Demo tenant 1",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "John Doe"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceExpireDate = DateTime.Now.Date + TimeSpan.FromDays(366)
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    FirstName   = "Ivanov",
                    LastName    = "Konstantin",
                    Patronymic  = "Mikhaylovich",
                    UserName    = "******",
                    Email       = "*****@*****.**",
                    NewPassword = "******"
                }
            };

            // When
            var response = tenantController.Post(createTenantDto);

            // Then
            tenantCreator.Received().CreateNewTenant(
                Arg.Is <Tenant>(v => v.Name == createTenantDto.TenantDetails.Name),
                Arg.Is <UserDto>(v => v.FirstName == createTenantDto.AdminUserDetails.FirstName),
                Arg.Is <string>(v => v == createTenantDto.AdminUserDetails.NewPassword)
                );
            var createdResponse = (CreatedResult)response.Result;

            Assert.That(createdResponse.Location, Is.EqualTo(nameof(TenantController.GetTenant)));
        }
예제 #3
0
 public void TenantAdminModel_ToAppUser()
 {
     var createTenantDto = new TenantCreateDto
     {
         TenantDetails = new TenantDto
         {
             Name           = "Demo tenant 1",
             PrimaryContact = new ContactInfoDto
             {
                 FullName = "John Doe"
             },
             ServiceDetails = new ServiceDetailsDto
             {
                 ServiceExpireDate = DateTime.Now.Date + TimeSpan.FromDays(366)
             }
         },
         AdminUserDetails = new TenantCreateAdminDto
         {
             FirstName   = "Ivanov",
             LastName    = "Konstantin",
             Patronymic  = "Mikhaylovich",
             UserName    = "******",
             Email       = "*****@*****.**",
             NewPassword = "******"
         }
     };
     var user = Mapper.Map <UserDto>(createTenantDto.AdminUserDetails);
 }
예제 #4
0
 public virtual async Task <TenantDto> CreateAsync(TenantCreateDto input)
 {
     return(await RequestAsync <TenantDto>(nameof(CreateAsync), new ClientProxyRequestTypeValue
     {
         { typeof(TenantCreateDto), input }
     }));
 }
예제 #5
0
    public virtual async Task <TenantDto> CreateAsync(TenantCreateDto input)
    {
        var tenant = await TenantManager.CreateAsync(input.Name);

        input.MapExtraPropertiesTo(tenant);

        await TenantRepository.InsertAsync(tenant);

        await CurrentUnitOfWork.SaveChangesAsync();

        await DistributedEventBus.PublishAsync(
            new TenantCreatedEto
        {
            Id         = tenant.Id,
            Name       = tenant.Name,
            Properties =
            {
                { "AdminEmail",    input.AdminEmailAddress },
                { "AdminPassword", input.AdminPassword     }
            }
        });

        using (CurrentTenant.Change(tenant.Id, tenant.Name))
        {
            //TODO: Handle database creation?
            // TODO: Seeder might be triggered via event handler.
            await DataSeeder.SeedAsync(
                new DataSeedContext(tenant.Id)
                .WithProperty("AdminEmail", input.AdminEmailAddress)
                .WithProperty("AdminPassword", input.AdminPassword)
                );
        }

        return(ObjectMapper.Map <Tenant, TenantDto>(tenant));
    }
        public void Post_ShouldFail_WithoutContact()
        {
            // Given
            // an instance of TenantDto without PrimaryContact value
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "AAA",
                    Slug           = "aaa",
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79991234567"
                }
            };
            // When
            // a request is made to create a new tenant with the specified attributes
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            // Then
            // the request fails with BadRequest status code
            Assert.That(response.Result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
        }
        public void Post_ShouldFail_WithoutAdminData()
        {
            // Given
            // an instance of TenantDto without PrimaryContact value
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "AAA-4",
                    Slug           = "aaa-4",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                }
            };
            // When
            // a request is made to create a new tenant with the specified attributes
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            // Then
            // the request fails with BadRequest status code
            Assert.That(response.Result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
        }
예제 #8
0
        public async Task <IActionResult> Post([FromBody] TenantCreateDto newTenantDto)
        {
            if (newTenantDto == null)
            {
                return(InvalidRequestBodyJson(nameof(TenantCreateDto)));
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (newTenantDto.TenantDetails.PrimaryContact == null)
            {
                AddErrors(new[] { "TenantDetails model must have contact information defined" });
                return(BadRequest(ModelState));
            }
            if (newTenantDto.TenantDetails.ServiceDetails == null)
            {
                AddErrors(new[] { "TenantDetails model must have service information defined" });
                return(BadRequest(ModelState));
            }
            var newTenant      = Mapper.Map <Tenant>(newTenantDto.TenantDetails);
            var newUser        = Mapper.Map <UserDto>(newTenantDto.AdminUserDetails);
            var creationResult = await _tenantCreator.CreateNewTenant(
                newTenant, newUser, newTenantDto.AdminUserDetails.NewPassword);

            return(Created(nameof(GetTenant), new CreatedWithGuidDto {
                Id = newTenant.Id
            }));
        }
예제 #9
0
        public async Task <TenantDto> CreateAsync(TenantCreateDto input)
        {
            var tenant = await _tenantManager.CreateAsync(input.Name);

            await _tenantRepository.InsertAsync(tenant);

            return(ObjectMapper.Map <Tenant, TenantDto>(tenant));
        }
        public void Login_Should_Succeed_With_Slug_Case_Mismatch()
        {
            var lowerCaseSlug = "lower-case-slug";
            // Given
            // an instance of TenantDto with a Slug value in upper case
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "Bad slug",
                    Slug           = lowerCaseSlug,
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79991234567"
                }
            };
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            response.Result.EnsureSuccessStatusCode();

            // When
            // an authentication request is made with upper-case slug

            var upperCaseSlug = lowerCaseSlug.ToUpper();

            _apiClient.SignInWithUserPassword_WithSlug_Async(
                tenant.AdminUserDetails.UserName, tenant.AdminUserDetails.NewPassword,
                _httpClient, upperCaseSlug
                ).Wait();

            // Then
            // the request should succeed
        }
        public void Post_And_Sign_In_As_Tenant_Admin_Should_Succeed()
        {
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "ZZZ",
                    Slug           = "zzz",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79993456789"
                }
            };
            // When
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            // Then
            // 1.
            response.Result.EnsureSuccessStatusCode();
            Assert.That(response.Result.StatusCode, Is.EqualTo(HttpStatusCode.Created));
            // 2.
            var createdEntityInfo = response.Result.Content
                                    .ReadAsJsonAsync <CreatedWithGuidDto>().Result;
            // 3.
            var createdEntityResponse = _httpClient.GetAsync(_url + createdEntityInfo.Id.ToString());

            createdEntityResponse.Result.EnsureSuccessStatusCode();
            // 4.
            _apiClient.SignInWithUserPassword_WithSlug_Async(
                tenant.AdminUserDetails.UserName, tenant.AdminUserDetails.NewPassword,
                _httpClient, tenant.TenantDetails.Slug).Wait();
        }
        public void Post_ShouldSucceed_WithDuplicateAdminUsername()
        {
            // Given
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "CCC123456789",
                    Slug           = "abcdefghijklmnopqrstuvwxyz-0123456789_",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79992345678"
                }
            };

            var response1 = _httpClient.PostAsJsonAsync(_url, tenant);

            Console.WriteLine(response1.Result.Content.ReadAsStringAsync().Result);
            response1.Result.EnsureSuccessStatusCode();

            // When
            tenant.TenantDetails.Name += "___";
            tenant.TenantDetails.Slug += "___";
            tenant.TenantDetails.Id    = Guid.NewGuid().ToString();
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            Console.WriteLine(response.Result.Content.ReadAsStringAsync().Result);

            // Then
            response.Result.EnsureSuccessStatusCode();
        }
        public void Post_Should_Fail_With_Duplicate_Slug_Nocase()
        {
            // Given
            // a tenant with the specified slug value
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "AAA222",
                    Slug           = "aaa222",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79991234567"
                }
            };
            var response1 = _httpClient.PostAsJsonAsync(_url, tenant);

            response1.Result.EnsureSuccessStatusCode();

            // When
            // a request is made to create a new tenant with the specified attributes
            tenant.TenantDetails.Name += "__nocase";
            tenant.TenantDetails.Slug  = tenant.TenantDetails.Slug.ToUpper();

            var response2 = _httpClient.PostAsJsonAsync(_url, tenant);

            // Then
            // the request fails with BadRequest status code
            Assert.That(response2.Result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
        }
        public void Post_ShouldFail_GivenPasswordIsTooSimple()
        {
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "AAA-44",
                    Slug           = "aaa-4a",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79991234567"
                }
            };
            // When
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            // Then
            // 1.
            Assert.That(response.Result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));

            // 2.
            var errorInfo = response.Result.Content.ReadAsJsonAsync <ApiErrorDto>().Result;

            Assert.That(!string.IsNullOrEmpty(errorInfo.Error));

            // should contain 'assword' (simple match for 'Password' and 'password')
            Assert.That(errorInfo.Error, Contains.Substring("assword"));
        }
        public void Post_ShouldFail_WithDuplicateTenantName()
        {
            // Given
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "post_shouldfail_withduplicatetenantname",
                    Slug           = "post_shouldfail_withduplicatetenantname",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79991234567"
                }
            };
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            Console.WriteLine(response.Result.Content.ReadAsStringAsync().Result);
            response.Result.EnsureSuccessStatusCode();

            // When
            tenant.TenantDetails.Id    = Guid.NewGuid().ToString();
            tenant.TenantDetails.Slug += "_duplicatename";
            var response2 = _httpClient.PostAsJsonAsync(_url, tenant);

            Console.WriteLine(response2.Result.Content.ReadAsStringAsync().Result);

            // Then
            Assert.That(response2.Result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
        }
예제 #16
0
        public void PostTenant_ShouldFail_Given_Tenant_User()
        {
            // Given
            // _client authenticated as a Gryffindor user

            // When
            // the user tries to post a new tenant
            var newTenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "AAA",
                    Slug           = "aaa",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    FirstName   = "Neville",
                    Patronymic  = "Frankovich",
                    LastName    = "Longbottom",
                    PhoneNumber = "+79990987654",
                    NewPassword = "******"
                }
            };
            var response = _httpClient.PostAsJsonAsync(_url, newTenant);

            // Then
            // Server returns 'Forbidden' status code
            Assert.That(response.Result.StatusCode, Is.EqualTo(HttpStatusCode.Forbidden));
        }
        public void Post_ShouldSucceed_WithSecondTenant()
        {
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "BBB",
                    Slug           = "bbb",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79992345678"
                }
            };
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            response.Result.EnsureSuccessStatusCode();
            Assert.That(response.Result.StatusCode, Is.EqualTo(HttpStatusCode.Created));
            var createdEntityInfo = response.Result.Content.ReadAsJsonAsync <PskOnline.Client.Api.Models.CreatedWithGuidDto>().Result;

            var createdEntityResponse = _httpClient.GetAsync(_url + createdEntityInfo.Id.ToString());

            createdEntityResponse.Result.EnsureSuccessStatusCode();
        }
예제 #18
0
        public virtual async Task <TenantDto> CreateAsync(TenantCreateDto input)
        {
            var tenant = await TenantManager.CreateAsync(input.Name);

            input.MapExtraPropertiesTo(tenant);

            await TenantRepository.InsertAsync(tenant);

            await CurrentUnitOfWork.SaveChangesAsync();

            using (CurrentTenant.Change(tenant.Id, tenant.Name))
            {
                //TODO: Handle database creation?

                await DataSeeder.SeedAsync(
                    new DataSeedContext(tenant.Id)
                    .WithProperty("AdminEmail", input.AdminEmailAddress)
                    .WithProperty("AdminPassword", input.AdminPassword)
                    );
            }

            return(ObjectMapper.Map <Tenant, TenantDto>(tenant));
        }
예제 #19
0
 public Task <TenantDto> CreateAsync(TenantCreateDto input)
 {
     return(_service.CreateAsync(input));
 }
예제 #20
0
 public virtual Task <TenantDto> CreateAsync(TenantCreateDto input)
 {
     ValidateModel();
     return(TenantAppService.CreateAsync(input));
 }
예제 #21
0
        public static async Task <TenantContainer> CreateTenantWithRolesAndUsers(IApiClient client, HttpClient httpClient, TenantDto t)
        {
            IMapper mapper = new AutoMapperConfig().CreateMapper();
            // pretend we are the site user...

            var tenantSpecification = new TenantContainer(t);

            var newT = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Name           = t.Name,
                    Slug           = t.Slug,
                    Comment        = t.Comment,
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName          = "John Smith",
                        MobilePhoneNumber = "+79998887766",
                        StreetAddress     = "931 Baker street",
                        Email             = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxEmployees        = 1000,
                        ServiceMaxUsers            = 10,
                        ServiceExpireDate          = DateTime.Now + TimeSpan.FromDays(730),
                        ServiceMaxStorageMegabytes = 40960
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    UserName    = tenantSpecification.AdminName,
                    FirstName   = "John",
                    LastName    = "Doe",
                    Email       = tenantSpecification.AdminName + "@somedomain.com",
                    NewPassword = tenantSpecification.AdminPassword
                }
            };

            var newTenantId = client.PostTenantAsync(newT).Result;

            tenantSpecification.Tenant.Id = newTenantId.ToString();
            tenantSpecification.TenantId  = newTenantId;

            // now read any details of the Tenant
            await client.SignInWithUserPassword_WithSlug_Async(newT.AdminUserDetails.UserName, newT.AdminUserDetails.NewPassword,
                                                               httpClient, newT.TenantDetails.Slug);

            var tenantRoles = await client.GetRolesAsync();

            tenantSpecification.TenantAdminRole   = tenantRoles.First(r => r.Name.Contains("admin", StringComparison.InvariantCultureIgnoreCase));
            tenantSpecification.TenantAdminRoleId = Guid.Parse(tenantSpecification.TenantAdminRole.Id);

            var tenantUsers = await client.GetUsersAsync();

            var tenantAdminUser = tenantUsers.First(
                u => !string.IsNullOrEmpty(u.UserName) && u.UserName.Contains("admin", StringComparison.InvariantCultureIgnoreCase));

            tenantSpecification.AdminUser = mapper.Map <UserEditDto>(tenantAdminUser);
            tenantSpecification.AdminUser.CurrentPassword = newT.AdminUserDetails.NewPassword;
            newT.AdminUserDetails.NewPassword             = null;

            return(tenantSpecification);
        }
        public async Task Post_ShouldSucceed()
        {
            var tenant = new TenantCreateDto
            {
                TenantDetails = new TenantDto
                {
                    Id             = Guid.NewGuid().ToString(),
                    Name           = "AAA",
                    Slug           = "aaa",
                    PrimaryContact = new ContactInfoDto
                    {
                        FullName = "Neville Longbottom",
                        Email    = "*****@*****.**"
                    },
                    ServiceDetails = new ServiceDetailsDto
                    {
                        ServiceMaxUsers = 10
                    }
                },
                AdminUserDetails = new TenantCreateAdminDto
                {
                    Email       = "*****@*****.**",
                    UserName    = "******",
                    NewPassword = "******",
                    FirstName   = "John",
                    Patronymic  = "Alfredovich",
                    LastName    = "Lennon",
                    PhoneNumber = "+79991234567"
                }
            };
            // When
            var response = _httpClient.PostAsJsonAsync(_url, tenant);

            // Then
            // 1.
            response.Result.EnsureSuccessStatusCode();
            Assert.That(response.Result.StatusCode, Is.EqualTo(HttpStatusCode.Created));
            // 2.
            var createdEntityInfo = response.Result.Content
                                    .ReadAsJsonAsync <CreatedWithGuidDto>().Result;

            // remember the ID -- it will be used in next tests

            _createdTenantGuid = createdEntityInfo.Id;
            Console.WriteLine("Tenant created: " + _createdTenantGuid);
            // 3.
            var createdEntityResponse = _httpClient.GetAsync(_url + createdEntityInfo.Id.ToString());

            createdEntityResponse.Result.EnsureSuccessStatusCode();
            // 4. there is a user created in the new tenant
            var allUsersResponse = _httpClient.GetAsync("/api/account/users/").Result;

            allUsersResponse.EnsureSuccessStatusCode();
            var allUsers = allUsersResponse.Content.ReadAsJsonAsync <UserDto[]>().Result;

            Assert.That(allUsers.Any(
                            u => 0 == string.Compare(u.TenantId, createdEntityInfo.Id.ToString(), true)));

            // 5. and the user can authenticate with the credentials
            await _apiClient.SignInWithUserPassword_WithSlug_Async(
                tenant.AdminUserDetails.UserName, tenant.AdminUserDetails.NewPassword,
                _httpClient, tenant.TenantDetails.Slug);

            var id_token = _apiClient.GetIdToken();

            // 6. and the id_token contains proper TenantId claim
            Console.WriteLine(JObject.FromObject(id_token).ToString());

            var tenantIdClaimValue = id_token.Claims.First(claim => claim.Type == CustomClaimTypes.TenantId).Value;

            Console.WriteLine("Token contains tenant ID = " + tenantIdClaimValue);

            Assert.That(tenantIdClaimValue, Is.EqualTo(createdEntityInfo.Id.ToString()));

            // 7. and there are only standard roles created for the tenant
            var rolesResponse = _httpClient.GetAsync("/api/account/roles/").Result;

            rolesResponse.EnsureSuccessStatusCode();

            Console.WriteLine(rolesResponse.Content.ReadAsStringAsync().Result);

            var roles = rolesResponse.Content.ReadAsJsonAsync <RoleDto[]>().Result;

            Assert.That(roles.Length, Is.EqualTo(4));
        }