public async Task my_response_permissions_when_authorized_user_request()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);


            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Users.My())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);

            var content = await response.Content
                          .ReadAs <MyResponse>();

            content.ReadPermission
            .Should().BeTrue();

            content.WritePermission
            .Should().BeTrue();

            content.ManagementPermission
            .Should().BeTrue();
        }
Exemple #2
0
        public async Task importproduct_response_bad_request_if_product_to_import_already_exists()
        {
            var permission = Builders.Permission()
                             .WithContributorPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("default")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.Import())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(new ImportProductRequest()
            {
                Content = "{\"Name\":\"default\",\"Description\":\"this is default product\",\"Features\":[{\"Name\":\"MatchScore\",\"Description\":\"show the match score on products\",\"Archived\":false,\"FeatureTags\":[],\"FeatureStates\":[],\"Toggles\":[{\"Type\":\"Esquio.Toggles.FromToToggle,Esquio\",\"Parameters\":[{\"Name\":\"From\",\"Value\":\"2020-07-13 09:36:23\",\"DeploymentName\":\"Tests\"},{\"Name\":\"To\",\"Value\":\"2020-07-29 09:36:25\",\"DeploymentName\":\"Tests\"}]}]}],\"Deployments\":[{\"Name\":\"Tests\",\"ByDefault\":true},{\"Name\":\"production\",\"ByDefault\":false}]}"
            });

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #3
0
        public async Task add_response_badrequest_if_default_deployment_name_length_is_lower_than_5()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var productRequest = new AddProductRequest()
            {
                Name                  = "fooproduct",
                Description           = "some description",
                DefaultDeploymentName = new string('d', 4)
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.Add())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(productRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #4
0
        public async Task deletedeployment_response_noconent_when_success()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            var deployment = Builders.Deployment()
                             .WithName("production")
                             .Build();

            product.Deployments
            .Add(deployment);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.DeleteDeployment(product.Name, deployment.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status204NoContent);
        }
Exemple #5
0
        public async Task adddeployment_response_created_when_success()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.AddDeployment(product.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(new AddDeploymentRequest()
            {
                Name = "Production"
            });

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status201Created);
        }
Exemple #6
0
        public async Task update_response_forbidden_if_user_is_not_authorized()
        {
            var permission = Builders.Permission()
                             .WithReaderPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var request = new UpdateProductRequest()
            {
                Name        = "barpdroduct",
                Description = "description for product#2"
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.Update(product.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PutAsJsonAsync(request);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status403Forbidden);
        }
Exemple #7
0
        public async Task exportproduct_response_ok_when_success()
        {
            var permission = Builders.Permission()
                             .WithReaderPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.Export("fooproduct"))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);

            var content = await response.Content.ReadAsStringAsync();
        }
        public async Task delete_response_ok_when_product_and_feature_exist_and_feature_toggles_is_not_empty()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

            var feature = Builders.Feature()
                          .WithName("feature#1")
                          .Build();

            var toggle1 = Builders.Toggle()
                          .WithType("toggle#1")
                          .Build();

            feature.Toggles.Add(toggle1);

            product.Features.Add(feature);

            await _fixture.Given.AddProduct(product);


            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Flags.Delete(feature.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status204NoContent);
        }
Exemple #9
0
        public async Task delete_response_no_content_when_delete_product_without_features()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Product.Delete(product.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status204NoContent);
        }
        public async Task add_response_ok_when_create_the_feature()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var addFlagRequest = new AddFlagRequest()
            {
                Name        = "feature#1",
                Description = "description",
                Enabled     = true,
                ProductId   = product.Id
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Flags.Add())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(addFlagRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status201Created);
        }
        public async Task rollout_is_idempotent()
        {
            var product = Builders.Product()
                          .WithName("product#2")
                          .Build();

            var feature = Builders.Feature()
                          .WithName("feature")
                          .Build();

            product.Features.Add(feature);

            await _fixture.Given.AddProduct(product);


            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Flags.Rollout(featureId: feature.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PutAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);

            response = await _fixture.TestServer
                       .CreateRequest(ApiDefinitions.V1.Flags.Rollout(featureId: feature.Id))
                       .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                       .PutAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);
        }
        public async Task add_response_badrequest_if_feature_with_the_same_name_already_exist_on_same_product()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

            var feature1 = Builders.Feature()
                           .WithName("feature#1")
                           .Build();

            product.Features
            .Add(feature1);

            await _fixture.Given
            .AddProduct(product);

            var addFlagRequest = new AddFlagRequest()
            {
                Name        = "feature#1",
                Description = "description",
                Enabled     = true,
                ProductId   = product.Id
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Flags.Add())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(addFlagRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
        public async Task update_response_ok_when_create_the_feature()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

            var feature = Builders.Feature()
                          .WithName("feature1")
                          .WithEnabled(false)
                          .Build();

            product.Features.Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var updateFlagRequest = new UpdateFlagRequest()
            {
                Name        = "feature#1",
                Description = "description",
                Enabled     = true,
                FlagId      = feature.Id
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Flags.Update())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PutAsJsonAsync(updateFlagRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);
        }
        public async Task update_response_badrequest_if_write_is_false_but_management_is_true()
        {
            var requesterPermission = Builders.Permission()
                                      .WithAllPrivilegesForDefaultIdentity()
                                      .Build();

            var existingPermissionSubjectId = Guid.NewGuid().ToString();

            var existingPermission = Builders.Permission()
                                     .WithNameIdentifier(existingPermissionSubjectId)
                                     .WithReadPermission(true)
                                     .WithWritePermission(false)
                                     .WithManagementPermission(false)
                                     .Build();

            await _fixture.Given
            .AddPermission(requesterPermission, existingPermission);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Users.Add())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PutAsJsonAsync(new AddPermissionRequest()
            {
                SubjectId = existingPermissionSubjectId,
                Read      = false,
                Manage    = true,
                Write     = false
            });

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #15
0
        public async Task add_response_ok_and_use_default_validTo_if_is_not_specified()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var addApiKeyRequest = new AddApiKeyRequest()
            {
                Name  = "fooname",
                ActAs = nameof(ApplicationRole.Reader)
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.ApiKeys.Add())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(addApiKeyRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status201Created);

            var content = await response.Content
                          .ReadAs <AddApiKeyResponse>();

            content.Name
            .Should()
            .Be(addApiKeyRequest.Name);

            content.Key
            .Should()
            .NotBe(default);
Exemple #16
0
        public async Task update_response_bad_request_if_product_description_is_greater_than_2000()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var request = new UpdateProductRequest()
            {
                ProductId   = 1,
                Name        = "product#2",
                Description = new string('d', 2001)
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Product.Update())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PutAsJsonAsync(request);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #17
0
        public async Task get_response_ok_if_product_exist()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.Get(product.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);

            var content = await response.Content
                          .ReadAs <DetailsProductResponse>();

            content.Name
            .Should().BeEquivalentTo(product.Name);
        }
Exemple #18
0
        public async Task update_response_forbidden_if_user_is_not_authorized()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .WithWritePermission(false)
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var request = new UpdateProductRequest()
            {
                ProductId   = product.Id,
                Name        = "product#2",
                Description = "description for product#2"
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Product.Update())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PutAsJsonAsync(request);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status403Forbidden);
        }
Exemple #19
0
        public async Task update_response_no_content_if_product_is_updated()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var request = new UpdateProductRequest()
            {
                Name        = "barproduct",
                Description = "description for product#2"
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.Update(product.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PutAsJsonAsync(request);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status204NoContent);
        }
Exemple #20
0
        public async Task allow_to_tag_features()
        {
            var tag = "tag";

            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

            var feature = Builders.Feature()
                          .WithName("feature#1")
                          .Build();

            var toggle1 = Builders.Toggle()
                          .WithType("toggle#1")
                          .Build();

            feature.Toggles.Add(toggle1);
            product.Features.Add(feature);

            await _fixture.Given.AddProduct(product);

            var request = new AddTagRequest(tag);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Tags.Tag(feature.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(request);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);
        }
Exemple #21
0
        public async Task deletedeployment_response_badrequest_if_ring_is_default()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.DeleteDeployment(product.Name, EsquioConstants.DEFAULT_DEPLOYMENT_NAME))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #22
0
        public async Task not_allow_to_tag_features_when_it_has_been_previously_tagged_with_the_same_tag()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();
            var feature = Builders.Feature()
                          .WithName("feature#1")
                          .Build();
            var toggle1 = Builders.Toggle()
                          .WithType("toggle#1")
                          .Build();
            var tag = Builders.Tag()
                      .Build();
            var featureTag = Builders.FeatureTag()
                             .WithFeature(feature)
                             .WithTag(tag)
                             .Build();

            feature.Toggles.Add(toggle1);
            feature.FeatureTags.Add(featureTag);
            product.Features.Add(feature);
            await _fixture.Given.AddProduct(product);


            var request = new AddTagRequest(tag.Name);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Tags.Tag(feature.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(request);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #23
0
        public async Task adddeployment_response_badrequest_if_ring_name_grether_than_200_characters()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.AddDeployment(product.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(new AddDeploymentRequest()
            {
                Name = new string('c', 201)
            });

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #24
0
        public async Task allow_to_untag_features()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();
            var feature = Builders.Feature()
                          .WithName("feature#1")
                          .Build();
            var toggle1 = Builders.Toggle()
                          .WithType("toggle#1")
                          .Build();
            var tag = Builders.Tag()
                      .Build();
            var featureTag = Builders.FeatureTag()
                             .WithFeature(feature)
                             .WithTag(tag)
                             .Build();

            feature.Toggles.Add(toggle1);
            feature.FeatureTags.Add(featureTag);
            product.Features.Add(feature);

            await _fixture.Given.AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Tags.Untag(tag.Name, feature.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status204NoContent);
        }
Exemple #25
0
        public async Task list_response_ok_when_no_data()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.List())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);

            var content = await response.Content
                          .ReadAs <PaginatedResult <ListProductResponseDetail> >();

            content.Total
            .Should().Be(0);

            content.Count
            .Should().Be(0);

            content.PageIndex
            .Should().Be(0);

            content.Items
            .Count
            .Should().Be(0);
        }
Exemple #26
0
        public async Task not_allow_untag_a_feature_when_it_has_not_been_previously_tagged_with_the_tag()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();
            var feature = Builders.Feature()
                          .WithName("feature#1")
                          .Build();
            var toggle1 = Builders.Toggle()
                          .WithType("toggle#1")
                          .Build();

            feature.Toggles.Add(toggle1);
            product.Features.Add(feature);

            await _fixture.Given.AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Tags.Untag("tag", feature.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #27
0
        public async Task add_response_badrequest_if_product_name_already_exist()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var product = Builders.Product()
                          .WithName("fooproduct")
                          .Build();

            await _fixture.Given
            .AddProduct(product);

            var productRequest = new AddProductRequest()
            {
                Name        = product.Name,
                Description = "some description"
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.Add())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(productRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Exemple #28
0
        public async Task get_response_forbidden_when_user_is_not_authorized()
        {
            var permission = Builders.Permission()
                             .WithReaderPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var apiKey = Builders.ApiKey()
                         .WithName("fooname")
                         .Withkey("barkey")
                         .Build();

            await _fixture.Given
            .AddApiKey(apiKey);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.ApiKeys.Get(apiKey.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status403Forbidden);
        }
Exemple #29
0
        public async Task add_response_badrequest_when_ringname_is_not_valid()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var productRequest = new AddProductRequest()
            {
                Name                  = "fooproduct~#4",
                Description           = "some description",
                DefaultDeploymentName = "X"
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Product.Add())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(productRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
        public async Task details_response_ok_when_success()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Users.Details(permission.SubjectId))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);

            var content = await response.Content
                          .ReadAs <DetailsUsersResponse>();

            content.SubjectId
            .Should().BeEquivalentTo(permission.SubjectId);

            content.ReadPermission
            .Should().Be(permission.ReadPermission);

            content.WritePermission
            .Should().Be(permission.WritePermission);

            content.ManagementPermission
            .Should().Be(permission.ManagementPermission);
        }