@Test public void should_create_property() { PropertyDefinition def = PropertyDefinition.builder("hello") .name("Hello") .defaultValue("world") .category("categ") .options("de", "en") .description("desc") .type(PropertyType.FLOAT) .onlyOnQualifiers(Qualifiers.MODULE) .multiValues(true) .propertySetKey("set") .build(); assertThat(def.key()).isEqualTo("hello"); assertThat(def.name()).isEqualTo("Hello"); assertThat(def.defaultValue()).isEqualTo("world"); assertThat(def.category()).isEqualTo("categ"); assertThat(def.options()).containsOnly("de", "en"); assertThat(def.description()).isEqualTo("desc"); assertThat(def.type()).isEqualTo(PropertyType.FLOAT); assertThat(def.global()).isFalse(); assertThat(def.qualifiers()).containsOnly(Qualifiers.MODULE); assertThat(def.multiValues()).isTrue(); assertThat(def.propertySetKey()).isEqualTo("set"); assertThat(def.fields()).isEmpty(); }
@Test public void onlyOnQualifiers_with_list_parameter_fails_with_IAE_when_qualifier_is_not_supported() { failsWithIAEForUnsupportedQualifiers((builder, qualifier) -> builder.onlyOnQualifiers(Collections.singletonList(qualifier))); failsWithIAEForUnsupportedQualifiers((builder, qualifier) -> builder.onlyOnQualifiers(Arrays.asList("TRK", qualifier, "BRC"))); }
@Test public void onlyOnQualifiers_with_list_parameter_fails_with_NPE_when_qualifier_is_null() { failsWithNPEForNullQualifiers(builder -> builder.onlyOnQualifiers(Collections.singletonList(null))); failsWithNPEForNullQualifiers(builder -> builder.onlyOnQualifiers(Arrays.asList("TRK", null, "BRC"))); }
static PropertyDefinition create(Property annotation) { Builder builder = PropertyDefinition.builder(annotation.key()) .name(annotation.name()) .defaultValue(annotation.defaultValue()) .description(annotation.description()) .category(annotation.category()) .type(annotation.type()) .options(Arrays.asList(annotation.options())) .multiValues(annotation.multiValues()) .propertySetKey(annotation.propertySetKey()) .fields(PropertyFieldDefinition.create(annotation.fields())) .deprecatedKey(annotation.deprecatedKey()); List<String> qualifiers = newArrayList(); if (annotation.project()) { qualifiers.add(Qualifiers.PROJECT); } if (annotation.module()) { qualifiers.add(Qualifiers.MODULE); } if (annotation.global()) { builder.onQualifiers(qualifiers); } else { builder.onlyOnQualifiers(qualifiers); } return builder.build(); }
static PropertyDefinition create(Property annotation) { Builder builder = PropertyDefinition.builder(annotation.key()) .name(annotation.name()) .defaultValue(annotation.defaultValue()) .description(annotation.description()) .category(annotation.category()) .type(annotation.type()) .options(asList(annotation.options())) .multiValues(annotation.multiValues()) .propertySetKey(annotation.propertySetKey()) .fields(PropertyFieldDefinition.create(annotation.fields())) .deprecatedKey(annotation.deprecatedKey()); List<String> qualifiers = new ArrayList<>(); if (annotation.project()) { qualifiers.add(Qualifiers.PROJECT); } if (annotation.module()) { qualifiers.add(Qualifiers.MODULE); } if (annotation.global()) { builder.onQualifiers(qualifiers); } else { builder.onlyOnQualifiers(qualifiers); } return builder.build(); }
.category(CoreProperties.CATEGORY_GENERAL) .subCategory(CoreProperties.SUBCATEGORY_MODULES) .onlyOnQualifiers(Qualifiers.PROJECT) .type(PropertyType.TEXT) .build(),
.description("Force the provider to be used to get SCM information for this project. By default auto-detection is done. Example: svn, git.") .category(CoreProperties.CATEGORY_SCM) .onlyOnQualifiers(Qualifiers.PROJECT) .build(), PropertyDefinition.builder(ORGANIZATION)
static PropertyDefinition create(Property annotation) { Builder builder = PropertyDefinition.builder(annotation.key()) .name(annotation.name()) .defaultValue(annotation.defaultValue()) .description(annotation.description()) .category(annotation.category()) .type(annotation.type()) .options(asList(annotation.options())) .multiValues(annotation.multiValues()) .propertySetKey(annotation.propertySetKey()) .fields(PropertyFieldDefinition.create(annotation.fields())) .deprecatedKey(annotation.deprecatedKey()); List<String> qualifiers = new ArrayList<>(); if (annotation.project()) { qualifiers.add(Qualifiers.PROJECT); } if (annotation.module()) { qualifiers.add(Qualifiers.MODULE); } if (annotation.global()) { builder.onQualifiers(qualifiers); } else { builder.onlyOnQualifiers(qualifiers); } return builder.build(); }
@Test public void should_group_by_category() { PropertyDefinitions def = new PropertyDefinitions( PropertyDefinition.builder("global1").name("Global1").category("catGlobal1").build(), PropertyDefinition.builder("global2").name("Global2").category("catGlobal1").build(), PropertyDefinition.builder("global3").name("Global3").category("catGlobal2").build(), PropertyDefinition.builder("project").name("Project").category("catProject").onlyOnQualifiers(Qualifiers.PROJECT).build(), PropertyDefinition.builder("module").name("Module").category("catModule").onlyOnQualifiers(Qualifiers.MODULE).build(), PropertyDefinition.builder("view").name("View").category("catView").onlyOnQualifiers(Qualifiers.VIEW).build(), PropertyDefinition.builder("app").name("Application").category("catApp").onlyOnQualifiers(Qualifiers.APP).build()); assertThat(def.propertiesByCategory(null).keySet()).contains(new Category("catGlobal1"), new Category("catGlobal2")); assertThat(def.propertiesByCategory(Qualifiers.PROJECT).keySet()).containsOnly(new Category("catProject")); assertThat(def.propertiesByCategory(Qualifiers.MODULE).keySet()).containsOnly(new Category("catModule")); assertThat(def.propertiesByCategory(Qualifiers.VIEW).keySet()).containsOnly(new Category("catView")); assertThat(def.propertiesByCategory(Qualifiers.APP).keySet()).containsOnly(new Category("catApp")); assertThat(def.propertiesByCategory("Unkown").keySet()).isEmpty(); }
@Test public void fail_when_global_with_property_only_on_projects() { definitions.addComponent(PropertyDefinition .builder("my.key") .name("foo") .description("desc") .category("cat") .subCategory("subCat") .type(PropertyType.INTEGER) .defaultValue("default") .onlyOnQualifiers(Qualifiers.PROJECT) .build()); expectedException.expect(BadRequestException.class); expectedException.expectMessage("Setting 'my.key' cannot be global"); callForGlobalSetting("my.key", "42"); }
@Test public void onlyOnQualifiers_with_varargs_parameter_accepts_supported_qualifiers() { acceptsSupportedQualifiers((builder, qualifier) -> builder.onlyOnQualifiers(qualifier)); }
@Test public void onQualifiers_with_list_parameter_fails_with_NPE_when_qualifier_is_null() { failsWithNPEForNullQualifiers(builder -> builder.onQualifiers(Collections.singletonList(null))); failsWithNPEForNullQualifiers(builder -> builder.onlyOnQualifiers("TRK", null, "BRC")); }
@Test public void onlyOnQualifiers_with_varargs_parameter_fails_with_IAE_when_qualifier_is_not_supported() { failsWithIAEForUnsupportedQualifiers((builder, qualifier) -> builder.onlyOnQualifiers(qualifier)); failsWithIAEForUnsupportedQualifiers((builder, qualifier) -> builder.onlyOnQualifiers("TRK", qualifier, "BRC")); }
@Test public void should_not_authorize_defining_ony_on_qualifiers_and_hidden() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Cannot be hidden and defining qualifiers on which to display"); PropertyDefinition.builder("foo").name("foo").onlyOnQualifiers(Qualifiers.PROJECT).hidden().build(); }
@Test public void onlyOnQualifiers_with_list_parameter_accepts_supported_qualifiers() { acceptsSupportedQualifiers((builder, qualifier) -> builder.onlyOnQualifiers(Collections.singletonList(qualifier))); }
@Test public void return_only_properties_available_for_component_qualifier() { logInAsProjectUser(); propertyDefinitions.addComponents(asList( PropertyDefinition.builder("global").build(), PropertyDefinition.builder("global-and-project").onQualifiers(PROJECT).build(), PropertyDefinition.builder("only-on-project").onlyOnQualifiers(PROJECT).build(), PropertyDefinition.builder("only-on-module").onlyOnQualifiers(MODULE).build())); ListDefinitionsWsResponse result = executeRequest(project.getDbKey()); assertThat(result.getDefinitionsList()).extracting("key").containsOnly("global-and-project", "only-on-project"); }
@Test public void return_only_global_properties_when_no_component_parameter() { logInAsProjectUser(); propertyDefinitions.addComponents(asList( PropertyDefinition.builder("global").build(), PropertyDefinition.builder("global-and-project").onQualifiers(PROJECT).build(), PropertyDefinition.builder("only-on-project").onlyOnQualifiers(PROJECT).build(), PropertyDefinition.builder("only-on-module").onlyOnQualifiers(MODULE).build())); ListDefinitionsWsResponse result = executeRequest(); assertThat(result.getDefinitionsList()).extracting("key").containsOnly("global", "global-and-project"); }
@Test public void fail_when_not_global_and_no_component() { logInAsSystemAdministrator(); definitions.addComponent(PropertyDefinition.builder("foo") .onlyOnQualifiers(VIEW) .build()); expectedException.expect(BadRequestException.class); expectedException.expectMessage("Setting 'foo' cannot be global"); executeRequestOnGlobalSetting("foo"); }
@Test public void onlyOnQualifiers_with_varargs_parameter_fails_with_NPE_when_qualifier_is_null() { failsWithNPEForNullQualifiers(builder -> builder.onlyOnQualifiers((String) null)); failsWithNPEForNullQualifiers(builder -> builder.onlyOnQualifiers("TRK", null, "BRC")); }
@Test public void should_not_authorize_defining_on_qualifiers_and_only_on_qualifiers() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Cannot define both onQualifiers and onlyOnQualifiers"); PropertyDefinition.builder("foo").name("foo").onQualifiers(Qualifiers.MODULE).onlyOnQualifiers(Qualifiers.PROJECT).build(); }