Esempio n. 1
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);
        }
Esempio n. 2
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);
        }
Esempio n. 3
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);
        }
Esempio n. 4
0
        public async Task get_response_not_found_if_toggle_not_exist()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.Toggles.Get(productName: product.Name, featureName: feature.Name, toggleType: "non-existing-toggle"))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status404NotFound);
        }
        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 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 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);
        }
Esempio n. 8
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);
        }
Esempio n. 9
0
        public async Task not_allow_untag_a_feature_when_it_has_not_been_previously_tagged_with_the_tag()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

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

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

            await _fixture.Given.AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Tags.Untag(product.Name, feature.Name, tag: "performance"))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        public async Task get_back_the_list_of_tags_of_a_feature()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

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

            var tagPerformance = Builders.Tag()
                                 .WithName("performance")
                                 .Build();

            var tagUsability = Builders.Tag()
                               .WithName("usability")
                               .Build();

            var featureTagPerformance = Builders.FeatureTag()
                                        .WithFeature(feature)
                                        .WithTag(tagPerformance)
                                        .Build();

            var featureTagUsability = Builders.FeatureTag()
                                      .WithFeature(feature)
                                      .WithTag(tagUsability)
                                      .Build();

            feature.Toggles.Add(toggle1);
            feature.FeatureTags.Add(featureTagPerformance);
            feature.FeatureTags.Add(featureTagUsability);

            product.Features.Add(feature);
            await _fixture.Given.AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Tags.List(product.Name, feature.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

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

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

            content.Should().HaveCount(2);
        }
Esempio n. 12
0
        public async Task get_response_not_found_if_toggle_not_exist()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

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

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

            feature.Toggles
            .Add(toggle1);

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Toggles.Get(toggleId: toggle1.Id * 2))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status404NotFound);
        }
Esempio n. 13
0
        public async Task delete_response_badrequest_if_toggle_not_exist()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.Toggles.Delete(product.Name, feature.Name, "non-existing"))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

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

            await _fixture.Given
            .AddPermission(permission);

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

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

            var toggle1 = Builders.Toggle()
                          .WithType("toggle")
                          .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.V5.Statistics.Configuration())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

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

            var statistics = await response.Content
                             .ReadAs <ConfigurationStatisticsResponse>();

            statistics.TotalProducts
            .Should().Be(1);

            statistics.TotalFeatures
            .Should().Be(1);

            statistics.TotalDeployments
            .Should().Be(0);

            statistics.TotalToggles
            .Should().Be(1);
        }
Esempio n. 15
0
        public async Task addparameter_response_ok_if_toggle_already_exist_but_parameater_is_newer()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

            var deployment = Builders.Deployment()
                             .WithName(EsquioConstants.DEFAULT_DEPLOYMENT_NAME)
                             .WithDefault(true)
                             .Build();

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

            var toggle = Builders.Toggle()
                         .WithType(typeof(HostEnvironmentToggle).FullName)
                         .Build();

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            product.Deployments
            .Add(deployment);

            await _fixture.Given
            .AddProduct(product);

            var parameterToggleRequest = new AddParameterToggleRequest()
            {
                ProductName    = product.Name,
                FeatureName    = feature.Name,
                ToggleType     = toggle.Type,
                DeploymentName = deployment.Name,
                Name           = "Environments",
                Value          = "Development",
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.Toggles.PostParameter())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(parameterToggleRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status201Created);
        }
Esempio n. 16
0
        public async Task list_response_ok_and_use_skip_take_values()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

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

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

            product.Features
            .Add(feature);

            //this add new history also
            await _fixture.Given
            .AddProduct(product);

            await _fixture.Given
            .AddPermission(permission);

            var history1 = Builders.History()
                           .WithFeatureName(feature.Name)
                           .WithProductName(product.Name)
                           .WithOldValues("")
                           .WithNewValues("{environments:development}")
                           .Build();

            var history2 = Builders.History()
                           .WithFeatureName(feature.Name)
                           .WithProductName(product.Name)
                           .WithOldValues("")
                           .WithNewValues("{environments:development}")
                           .Build();

            await _fixture.Given
            .AddHistory(history1, history2);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Audit.List(pageIndex: 1, pageCount: 1))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(HttpStatusCode.OK);

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

            content.PageIndex.Should().Be(1);
            content.Count.Should().Be(1);
            content.Total.Should().Be(4); //add feature already add new history also
        }
Esempio n. 17
0
        public async Task add_response_badrequest_when_add_new_toggle_with_parameters_using_nonexisting_deployment()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var deployment = Builders.Deployment()
                             .WithName(EsquioConstants.DEFAULT_DEPLOYMENT_NAME)
                             .WithDefault(true)
                             .Build();

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

            product.Deployments.Add(deployment);

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

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var body = new AddToggleRequest()
            {
                ProductName    = product.Name,
                FeatureName    = feature.Name,
                ToggleType     = typeof(HostEnvironmentToggle).FullName,
                DeploymentName = "nonexisting",
                Parameters     = new List <AddToggleRequestDetailParameter>()
                {
                    new AddToggleRequestDetailParameter()
                    {
                        Name  = "Environments",
                        Value = "Development",
                        Type  = typeof(String).FullName
                    }
                }
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.Toggles.Post())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(body);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Esempio n. 18
0
        public async Task delete_response_no_content_if_toggle_exist_and_is_the_only_one()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

            var deployment = Builders.Deployment()
                             .WithName(EsquioConstants.DEFAULT_DEPLOYMENT_NAME)
                             .WithDefault(true)
                             .Build();

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

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

            var toggle = Builders.Toggle()
                         .WithType("toggle-type-1")
                         .Build();

            var parameter = Builders.Parameter()
                            .WithName("param1")
                            .WithValue("value1")
                            .WithRingName(deployment.Name)
                            .Build();

            toggle.Parameters
            .Add(parameter);

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            product.Deployments
            .Add(deployment);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.Toggles.Delete(product.Name, feature.Name, toggle.Type))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status204NoContent);
        }
Esempio n. 19
0
        public async Task post_response_bad_request_if_try_to_duplicate_toggle()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

            var toggle = Builders.Toggle()
                         .WithType(typeof(EnvironmentToggle).FullName)
                         .Build();

            var parameter = Builders.Parameter()
                            .WithName("Environments")
                            .WithValue("Development")
                            .Build();

            toggle.Parameters
            .Add(parameter);

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var body = new AddToggleRequest()
            {
                FeatureId  = feature.Id,
                Type       = typeof(EnvironmentToggle).FullName,
                Parameters = new List <AddToggleRequestDetailParameter>()
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Toggles.Post())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(body);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status400BadRequest);
        }
Esempio n. 20
0
        public async Task postparameter_response_ok_if_toggle_exist_but_is_new_parameter()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

            var toggle = Builders.Toggle()
                         .WithType(typeof(EnvironmentToggle).FullName)
                         .Build();

            var parameter = Builders.Parameter()
                            .WithName("Environments")
                            .WithValue("Development")
                            .Build();

            toggle.Parameters
            .Add(parameter);

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var parameterToggleRequest = new AddParameterToggleRequest()
            {
                Name  = "Environments",
                Value = "Production",
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Toggles.PostParameter(toggleId: toggle.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(parameterToggleRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status201Created);
        }
Esempio n. 21
0
        public async Task list_response_ok_and_use_default_skip_take_values()
        {
            var product = Builders.Product()
                          .WithName("product#1")
                          .Build();

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

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

            product.Features
            .Add(feature1);

            product.Features
            .Add(feature2);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Flags.List(product.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

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

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

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

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

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

            content.Result
            .First().Name
            .Should().BeEquivalentTo("feature#1");

            content.Result
            .Last().Name
            .Should().BeEquivalentTo("feature#2");
        }
Esempio n. 22
0
        public async Task add_response_bad_request_if_try_to_duplicate_toggle()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

            var deployment = Builders.Deployment()
                             .WithName(EsquioConstants.DEFAULT_DEPLOYMENT_NAME)
                             .Build();

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

            var toggle = Builders.Toggle()
                         .WithType(typeof(HostEnvironmentToggle).FullName)
                         .Build();

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var body = new AddToggleRequest()
            {
                ProductName = product.Name,
                FeatureName = feature.Name,
                ToggleType  = typeof(HostEnvironmentToggle).FullName,
                Parameters  = new List <AddToggleRequestDetailParameter>()
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.Toggles.Post())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(body);

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

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

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

            product.Features
            .Add(feature1);

            product.Features
            .Add(feature2);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Flags.List(product.Id, pageIndex: 10, pageCount: 10))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

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

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

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

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

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

            content.Result
            .Count
            .Should().Be(0);
        }
Esempio n. 24
0
        public async Task reveal_response_forbidden_if_user_is_not_authorized()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .WithReadPermission(false)
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

            var toggle = Builders.Toggle()
                         .WithType("Esquio.Toggles.EnvironmentToggle")
                         .Build();

            var parameter = Builders.Parameter()
                            .WithName("Environments")
                            .WithValue("Development")
                            .Build();

            toggle.Parameters
            .Add(parameter);

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Toggles.Reveal("Esquio.Toggles.EnvironmentToggle"))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status403Forbidden);
        }
Esempio n. 25
0
        public async Task allow_to_tag_features_with_existing_tags()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

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

            var tag = Builders.Tag()
                      .WithName("performance")
                      .Build();

            var featureTag = Builders.FeatureTag()
                             .WithFeature(feature1)
                             .WithTag(tag)
                             .Build();

            feature1.FeatureTags.Add(featureTag);
            product.Features.Add(feature1);
            product.Features.Add(feature2);

            await _fixture.Given.AddProduct(product);

            var request = new AddTagRequest("performance");

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

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status200OK);
        }
Esempio n. 26
0
        public async Task allow_to_tag_features_with_existing_tags()
        {
            var permission = Builders.Permission()
                             .WithManagementPermission()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

            var feature1 = Builders.Feature()
                           .WithName("barfeatureone")
                           .Build();

            var feature2 = Builders.Feature()
                           .WithName("barfeaturetwo")
                           .Build();

            var tag = Builders.Tag()
                      .WithName("performance")
                      .Build();

            var featureTag = Builders.FeatureTag()
                             .WithFeature(feature1)
                             .WithTag(tag)
                             .Build();

            feature1.FeatureTags.Add(featureTag);
            product.Features.Add(feature1);
            product.Features.Add(feature2);

            await _fixture.Given.AddProduct(product);

            var request = new AddTagRequest("performance");

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V5.Tags.Tag(product.Name, feature2.Name))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(request);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status204NoContent);
        }
Esempio n. 27
0
        public async Task delete_response_no_content_if_toggle_exist()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

            var toggle = Builders.Toggle()
                         .WithType("toggle-type-1")
                         .Build();

            var parameter = Builders.Parameter()
                            .WithName("param#1")
                            .WithValue("value#1")
                            .Build();

            toggle.Parameters
            .Add(parameter);

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Toggles.Delete(toggleId: toggle.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .DeleteAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status204NoContent);
        }
Esempio n. 28
0
        public async Task post_response_created_when_add_new_toggle()
        {
            var permission = Builders.Permission()
                             .WithAllPrivilegesForDefaultIdentity()
                             .Build();

            await _fixture.Given
            .AddPermission(permission);

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

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

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var body = new AddToggleRequest()
            {
                FeatureId  = feature.Id,
                Type       = typeof(EnvironmentToggle).FullName,
                Parameters = new List <AddToggleRequestDetailParameter>()
                {
                    new AddToggleRequestDetailParameter()
                    {
                        Name  = "Environments",
                        Value = "Development",
                        Type  = typeof(String).FullName
                    }
                }
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Toggles.Post())
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(body);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status201Created);
        }
Esempio n. 29
0
        public async Task reveal_response_forbidden_if_user_is_not_authorized()
        {
            var deployment = Builders.Deployment()
                             .WithName(EsquioConstants.DEFAULT_DEPLOYMENT_NAME)
                             .WithDefault(true)
                             .Build();

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

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

            var toggle = Builders.Toggle()
                         .WithType("Esquio.Toggles.EnvironmentToggle")
                         .Build();

            var parameter = Builders.Parameter()
                            .WithName("Environments")
                            .WithValue("Development")
                            .WithRingName(deployment.Name)
                            .Build();

            toggle.Parameters
            .Add(parameter);

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V3.Toggles.Reveal("Esquio.Toggles.EnvironmentToggle"))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .GetAsync();

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status403Forbidden);
        }
Esempio n. 30
0
        public async Task postparameter_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();

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

            var toggle = Builders.Toggle()
                         .WithType(typeof(EnvironmentToggle).FullName)
                         .Build();

            feature.Toggles
            .Add(toggle);

            product.Features
            .Add(feature);

            await _fixture.Given
            .AddProduct(product);

            var parameterToggleRequest = new AddParameterToggleRequest()
            {
                Name  = "Environments",
                Value = "Development",
            };

            var response = await _fixture.TestServer
                           .CreateRequest(ApiDefinitions.V1.Toggles.PostParameter(toggleId: toggle.Id))
                           .WithIdentity(Builders.Identity().WithDefaultClaims().Build())
                           .PostAsJsonAsync(parameterToggleRequest);

            response.StatusCode
            .Should()
            .Be(StatusCodes.Status403Forbidden);
        }