From fb860b18ab4b5bb95641b9521ea6ca438ad4dc34 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 24 Jul 2015 16:54:31 +0200 Subject: [PATCH] Add administration ITs --- .travis.yml | 1 + it/it-plugins/pom.xml | 2 + it/it-plugins/property-sets-plugin/pom.xml | 42 +++ .../src/main/java/PropertySetsPlugin.java | 96 ++++++ .../sonar-subcategories-plugin/pom.xml | 58 ++++ .../src/main/java/SubCategoriesPlugin.java | 81 +++++ .../org/sonar/l10n/subcategories.properties | 3 + .../module_a1/sonar-project.properties | 1 + .../sonar/it/samples/modules/a1/HelloA1.xoo | 16 + .../samples/modules/a1/HelloA1.xoo.measures | 2 + .../module_a2/sonar-project.properties | 1 + .../sonar/it/samples/modules/a2/HelloA2.xoo | 20 ++ .../samples/modules/a2/HelloA2.xoo.measures | 2 + .../module_a/sonar-project.properties | 4 + .../module_b1/sonar-project.properties | 1 + .../sonar/it/samples/modules/b1/HelloB1.xoo | 12 + .../samples/modules/b1/HelloB1.xoo.measures | 2 + .../module_b2/sonar-project.properties | 1 + .../sonar/it/samples/modules/b2/HelloB2.xoo | 12 + .../samples/modules/b2/HelloB2.xoo.measures | 2 + .../module_b/sonar-project.properties | 4 + .../sonar-project.properties | 12 + .../xoo-sample/sonar-project.properties | 5 + .../xoo-sample/src/main/xoo/sample/Sample.xoo | 16 + .../src/main/xoo/sample/Sample.xoo.measures | 11 + .../suite/AdministrationTestSuite.java | 45 +++ .../administation/suite/BulkDeletionTest.java | 80 +++++ .../suite/ProjectAdministrationTest.java | 319 ++++++++++++++++++ .../administation/suite/PropertySetsTest.java | 93 +++++ .../suite/SubCategoriesTest.java | 70 ++++ .../remove_user_role.html | 109 ++++++ .../administration/auto-generated/create.html | 79 +++++ .../administration/auto-generated/update.html | 59 ++++ ...display-alerts-correctly-history-page.html | 64 ++++ ...hould-display-period-alerts-correctly.html | 54 +++ .../display-module-settings.html | 49 +++ .../create-profile-administrator.html | 124 +++++++ .../profile-admin/create-user.html | 84 +++++ .../multimodule-project-delete-version.html | 89 +++++ .../multimodule-project-modify-version.html | 109 ++++++ .../bulk-delete-filter-projects.html | 74 ++++ .../bulk-delete-selected-projects.html | 89 +++++ .../display-two-letters-long-project.html | 49 +++ .../filter-two-letters-long-project.html | 59 ++++ .../project-deletion/project-deletion.html | 99 ++++++ .../only-on-project-settings.html | 59 ++++ .../override-global-settings.html | 59 ++++ ...ate-impossible-because-duplicate-keys.html | 94 ++++++ ...lk-update-impossible-because-no-input.html | 64 ++++ ...lk-update-impossible-because-no-match.html | 89 +++++ .../bulk-update-success.html | 104 ++++++ .../fine-grained-update-impossible.html | 74 ++++ .../fine-grained-update-success.html | 79 +++++ .../property-sets/all_types.html | 134 ++++++++ .../administration/property-sets/create.html | 84 +++++ .../administration/property-sets/delete.html | 114 +++++++ .../property-sets/reference.html | 89 +++++ .../global-subcategories-no-default.html | 55 +++ .../subcategories/global-subcategories.html | 151 +++++++++ .../project-subcategories-no-default.html | 55 +++ .../subcategories/project-subcategories.html | 145 ++++++++ .../create_user_with_email.html | 84 +++++ ...register_to_new_violations_on_project.html | 59 ++++ 63 files changed, 3796 insertions(+) create mode 100644 it/it-plugins/property-sets-plugin/pom.xml create mode 100644 it/it-plugins/property-sets-plugin/src/main/java/PropertySetsPlugin.java create mode 100644 it/it-plugins/sonar-subcategories-plugin/pom.xml create mode 100644 it/it-plugins/sonar-subcategories-plugin/src/main/java/SubCategoriesPlugin.java create mode 100644 it/it-plugins/sonar-subcategories-plugin/src/main/resources/org/sonar/l10n/subcategories.properties create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/sonar-project.properties create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/src/main/xoo/com/sonar/it/samples/modules/a1/HelloA1.xoo create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/src/main/xoo/com/sonar/it/samples/modules/a1/HelloA1.xoo.measures create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/sonar-project.properties create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/src/main/xoo/com/sonar/it/samples/modules/a2/HelloA2.xoo create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/src/main/xoo/com/sonar/it/samples/modules/a2/HelloA2.xoo.measures create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_a/sonar-project.properties create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/sonar-project.properties create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/src/main/xoo/com/sonar/it/samples/modules/b1/HelloB1.xoo create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/src/main/xoo/com/sonar/it/samples/modules/b1/HelloB1.xoo.measures create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/sonar-project.properties create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/src/main/xoo/com/sonar/it/samples/modules/b2/HelloB2.xoo create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/src/main/xoo/com/sonar/it/samples/modules/b2/HelloB2.xoo.measures create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/module_b/sonar-project.properties create mode 100644 it/it-projects/shared/xoo-multi-modules-sample/sonar-project.properties create mode 100644 it/it-projects/shared/xoo-sample/sonar-project.properties create mode 100644 it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo create mode 100644 it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo.measures create mode 100644 it/it-tests/src/test/java/administation/suite/AdministrationTestSuite.java create mode 100644 it/it-tests/src/test/java/administation/suite/BulkDeletionTest.java create mode 100644 it/it-tests/src/test/java/administation/suite/ProjectAdministrationTest.java create mode 100644 it/it-tests/src/test/java/administation/suite/PropertySetsTest.java create mode 100644 it/it-tests/src/test/java/administation/suite/SubCategoriesTest.java create mode 100644 it/it-tests/src/test/resources/administration/anonymous_should_have_user_role_to_access_project/remove_user_role.html create mode 100644 it/it-tests/src/test/resources/administration/auto-generated/create.html create mode 100644 it/it-tests/src/test/resources/administration/auto-generated/update.html create mode 100644 it/it-tests/src/test/resources/administration/display-alerts-history-page/should-display-alerts-correctly-history-page.html create mode 100644 it/it-tests/src/test/resources/administration/display-alerts/should-display-period-alerts-correctly.html create mode 100644 it/it-tests/src/test/resources/administration/module-settings/display-module-settings.html create mode 100644 it/it-tests/src/test/resources/administration/profile-admin/create-profile-administrator.html create mode 100644 it/it-tests/src/test/resources/administration/profile-admin/create-user.html create mode 100644 it/it-tests/src/test/resources/administration/project-administration/multimodule-project-delete-version.html create mode 100644 it/it-tests/src/test/resources/administration/project-administration/multimodule-project-modify-version.html create mode 100644 it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-filter-projects.html create mode 100644 it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-selected-projects.html create mode 100644 it/it-tests/src/test/resources/administration/project-bulk-deletion/display-two-letters-long-project.html create mode 100644 it/it-tests/src/test/resources/administration/project-bulk-deletion/filter-two-letters-long-project.html create mode 100644 it/it-tests/src/test/resources/administration/project-deletion/project-deletion.html create mode 100644 it/it-tests/src/test/resources/administration/project-settings/only-on-project-settings.html create mode 100644 it/it-tests/src/test/resources/administration/project-settings/override-global-settings.html create mode 100644 it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-duplicate-keys.html create mode 100644 it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-input.html create mode 100644 it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-match.html create mode 100644 it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-success.html create mode 100644 it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-impossible.html create mode 100644 it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-success.html create mode 100644 it/it-tests/src/test/resources/administration/property-sets/all_types.html create mode 100644 it/it-tests/src/test/resources/administration/property-sets/create.html create mode 100644 it/it-tests/src/test/resources/administration/property-sets/delete.html create mode 100644 it/it-tests/src/test/resources/administration/property-sets/reference.html create mode 100644 it/it-tests/src/test/resources/administration/subcategories/global-subcategories-no-default.html create mode 100644 it/it-tests/src/test/resources/administration/subcategories/global-subcategories.html create mode 100644 it/it-tests/src/test/resources/administration/subcategories/project-subcategories-no-default.html create mode 100644 it/it-tests/src/test/resources/administration/subcategories/project-subcategories.html create mode 100644 it/it-tests/src/test/resources/administration/user-notif-settings/create_user_with_email.html create mode 100644 it/it-tests/src/test/resources/administration/user-notif-settings/register_to_new_violations_on_project.html diff --git a/.travis.yml b/.travis.yml index 70c51189aa5..4df94489435 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ env: - JOB=WEB - JOB=ITS IT_CATEGORY=issue - JOB=ITS IT_CATEGORY=analysis + - JOB=ITS IT_CATEGORY=administration - JOB=ITS IT_CATEGORY=plugins - JOB=ITS IT_CATEGORY=qualitygate - JOB=ITS IT_CATEGORY=ui diff --git a/it/it-plugins/pom.xml b/it/it-plugins/pom.xml index 295cf70e24b..ef5117becb0 100644 --- a/it/it-plugins/pom.xml +++ b/it/it-plugins/pom.xml @@ -31,6 +31,8 @@ l10n-fr-pack + property-sets-plugin sonar-fake-plugin + sonar-subcategories-plugin diff --git a/it/it-plugins/property-sets-plugin/pom.xml b/it/it-plugins/property-sets-plugin/pom.xml new file mode 100644 index 00000000000..21386137c0e --- /dev/null +++ b/it/it-plugins/property-sets-plugin/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + org.sonarsource.it + it-plugins + 5.2-SNAPSHOT + + + property-sets-plugin + 1.0-SNAPSHOT + sonar-plugin + Plugins :: Property Sets + + + UTF-8 + + + + + org.codehaus.sonar + sonar-plugin-api + ${apiVersion} + provided + + + + + + + org.codehaus.sonar + sonar-packaging-maven-plugin + 1.12.1 + true + + PropertySetsPlugin + + + + + diff --git a/it/it-plugins/property-sets-plugin/src/main/java/PropertySetsPlugin.java b/it/it-plugins/property-sets-plugin/src/main/java/PropertySetsPlugin.java new file mode 100644 index 00000000000..ab84cf6c6f0 --- /dev/null +++ b/it/it-plugins/property-sets-plugin/src/main/java/PropertySetsPlugin.java @@ -0,0 +1,96 @@ +import java.util.Collections; +import java.util.List; +import org.sonar.api.Properties; +import org.sonar.api.Property; +import org.sonar.api.PropertyField; +import org.sonar.api.PropertyType; +import org.sonar.api.SonarPlugin; + +@Properties({ + @Property( + key = "sonar.test.jira.servers", + name = "Jira Servers", + description = "List of jira server definitions", + global = true, + project = true, + category = "DEV", + fields = { + @PropertyField( + key = "key", + name = "Key", + type = PropertyType.STRING, + indicativeSize = 10), + @PropertyField( + key = "url", + name = "Url", + description = "l'url du serveur jira", + type = PropertyType.STRING, + indicativeSize = 20), + @PropertyField( + key = "port", + name = "Port", + type = PropertyType.INTEGER, + indicativeSize = 5)}), + @Property( + key = "sonar.demo", + name = "Demo", + global = true, + project = true, + category = "DEV", + fields = { + @PropertyField( + key = "text", + name = "text", + type = PropertyType.TEXT), + @PropertyField( + key = "boolean", + name = "boolean", + type = PropertyType.BOOLEAN), + @PropertyField( + key = "float", + name = "float", + type = PropertyType.FLOAT), + @PropertyField( + key = "license", + name = "license", + type = PropertyType.LICENSE), + @PropertyField( + key = "metric", + name = "metric", + type = PropertyType.METRIC), + @PropertyField( + key = "password", + name = "password", + type = PropertyType.PASSWORD), + @PropertyField( + key = "regexp", + name = "regexp", + type = PropertyType.REGULAR_EXPRESSION), + @PropertyField( + key = "list", + name = "list", + type = PropertyType.SINGLE_SELECT_LIST, + options = {"AAA", "BBB"})}), + @Property( + key = "sonar.autogenerated", + name = "Auto-generated", + global = true, + project = true, + category = "DEV", + fields = { + @PropertyField( + key = "value", + name = "value", + type = PropertyType.STRING)}), + @Property( + key = "sonar.test.jira", + name = "Jira", + project = true, + category = "DEV", + type = PropertyType.PROPERTY_SET, + propertySetKey = "sonar.test.jira.servers")}) +public class PropertySetsPlugin extends SonarPlugin { + public List getExtensions() { + return Collections.emptyList(); + } +} diff --git a/it/it-plugins/sonar-subcategories-plugin/pom.xml b/it/it-plugins/sonar-subcategories-plugin/pom.xml new file mode 100644 index 00000000000..69817d7a7db --- /dev/null +++ b/it/it-plugins/sonar-subcategories-plugin/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + + org.sonarsource.it + it-plugins + 5.2-SNAPSHOT + + + sonar-subcategories-plugin + 1.0-SNAPSHOT + sonar-plugin + + Plugins :: SubCategories + Plugins :: SubCategories + + + UTF-8 + + + + + org.codehaus.sonar + sonar-plugin-api + ${apiVersion} + provided + + + + + + + org.codehaus.sonar + sonar-packaging-maven-plugin + 1.12.1 + true + + SubCategoriesPlugin + + + + + + org.codehaus.mojo + native2ascii-maven-plugin + 1.0-beta-1 + + + + native2ascii + + + + + + + diff --git a/it/it-plugins/sonar-subcategories-plugin/src/main/java/SubCategoriesPlugin.java b/it/it-plugins/sonar-subcategories-plugin/src/main/java/SubCategoriesPlugin.java new file mode 100644 index 00000000000..21dbd27e63d --- /dev/null +++ b/it/it-plugins/sonar-subcategories-plugin/src/main/java/SubCategoriesPlugin.java @@ -0,0 +1,81 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import java.util.Arrays; +import java.util.List; +import org.sonar.api.SonarPlugin; +import org.sonar.api.config.PropertyDefinition; +import org.sonar.api.resources.Qualifiers; + +public class SubCategoriesPlugin extends SonarPlugin { + public List getExtensions() { + return Arrays.asList( + PropertyDefinition.builder("prop1") + .index(2) + .category("Category 1") + .subCategory("Sub category 1") + .description("Foo") + .onQualifiers(Qualifiers.PROJECT) + .build(), + PropertyDefinition.builder("prop2") + .index(1) + // SONAR-4501 category are case insensitive + .category("category 1") + .subCategory("Sub category 1") + .description("Foo") + .onQualifiers(Qualifiers.PROJECT) + .build(), + PropertyDefinition.builder("prop3") + .category("Category 1") + .subCategory("Sub category 2") + .description("Foo") + .onQualifiers(Qualifiers.PROJECT) + .build(), + PropertyDefinition.builder("prop5") + .category("Category 1") + // SONAR-4501 subcategory are case insensitive + .subCategory("sub category 2") + .description("Foo") + .onQualifiers(Qualifiers.PROJECT) + .build(), + PropertyDefinition.builder("prop4") + .category("Category 1") + .description("Foo") + .onQualifiers(Qualifiers.PROJECT) + .build(), + PropertyDefinition.builder("prop2_1") + .category("Category 2") + .subCategory("Sub category 1 of 2") + .description("Foo") + .onQualifiers(Qualifiers.PROJECT) + .build(), + PropertyDefinition.builder("prop2_2") + .category("Category 2") + .subCategory("Sub category 2 of 2") + .description("Foo") + .onQualifiers(Qualifiers.PROJECT) + .build(), + PropertyDefinition.builder("prop_only_on_project") + .category("project-only") + .description("Foo") + .onlyOnQualifiers(Qualifiers.PROJECT) + .build()); + } +} diff --git a/it/it-plugins/sonar-subcategories-plugin/src/main/resources/org/sonar/l10n/subcategories.properties b/it/it-plugins/sonar-subcategories-plugin/src/main/resources/org/sonar/l10n/subcategories.properties new file mode 100644 index 00000000000..c5cba9d826c --- /dev/null +++ b/it/it-plugins/sonar-subcategories-plugin/src/main/resources/org/sonar/l10n/subcategories.properties @@ -0,0 +1,3 @@ +property.category.category\ 1=Category 1 +property.category.category\ 1.sub\ category\ 1=Sub category 1 +property.category.category\ 1.sub\ category\ 2=Sub category 2 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/sonar-project.properties b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/sonar-project.properties new file mode 100644 index 00000000000..a081a0e6342 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/sonar-project.properties @@ -0,0 +1 @@ +sonar.projectName=Sub-module A1 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/src/main/xoo/com/sonar/it/samples/modules/a1/HelloA1.xoo b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/src/main/xoo/com/sonar/it/samples/modules/a1/HelloA1.xoo new file mode 100644 index 00000000000..74d29a4fa08 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/src/main/xoo/com/sonar/it/samples/modules/a1/HelloA1.xoo @@ -0,0 +1,16 @@ +package com.sonar.it.samples.modules.a1; + +public class HelloA1 { + private int i; + private HelloA1() { + + } + + public void hello() { + System.out.println("hello" + " xoo"); + } + + protected String getHello() { + return "hello"; + } +} \ No newline at end of file diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/src/main/xoo/com/sonar/it/samples/modules/a1/HelloA1.xoo.measures b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/src/main/xoo/com/sonar/it/samples/modules/a1/HelloA1.xoo.measures new file mode 100644 index 00000000000..7812e4167fb --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/src/main/xoo/com/sonar/it/samples/modules/a1/HelloA1.xoo.measures @@ -0,0 +1,2 @@ +ncloc:12 +classes:1 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/sonar-project.properties b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/sonar-project.properties new file mode 100644 index 00000000000..fcedab83843 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/sonar-project.properties @@ -0,0 +1 @@ +sonar.projectName=Sub-module A2 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/src/main/xoo/com/sonar/it/samples/modules/a2/HelloA2.xoo b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/src/main/xoo/com/sonar/it/samples/modules/a2/HelloA2.xoo new file mode 100644 index 00000000000..796d90cfad5 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/src/main/xoo/com/sonar/it/samples/modules/a2/HelloA2.xoo @@ -0,0 +1,20 @@ +package com.sonar.it.samples.modules.a2; + +public class HelloA2 { + + public HelloA2(int i) { + int j = i++; + } + + public void hello() { + System.out.println("hello" + " xoo"); + } + + private String myMethod() { + if (foo == bar) { + return "hello"; + } else { + throw new IllegalStateException(); + } + } +} diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/src/main/xoo/com/sonar/it/samples/modules/a2/HelloA2.xoo.measures b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/src/main/xoo/com/sonar/it/samples/modules/a2/HelloA2.xoo.measures new file mode 100644 index 00000000000..63df5add6d4 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/src/main/xoo/com/sonar/it/samples/modules/a2/HelloA2.xoo.measures @@ -0,0 +1,2 @@ +ncloc:15 +classes:1 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_a/sonar-project.properties b/it/it-projects/shared/xoo-multi-modules-sample/module_a/sonar-project.properties new file mode 100644 index 00000000000..7e6ca9074a4 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_a/sonar-project.properties @@ -0,0 +1,4 @@ +sonar.projectKey=module_a +sonar.projectName=Module A + +sonar.modules=module_a1,module_a2 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/sonar-project.properties b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/sonar-project.properties new file mode 100644 index 00000000000..ca8404b7bd4 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/sonar-project.properties @@ -0,0 +1 @@ +sonar.projectName=Sub-module B1 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/src/main/xoo/com/sonar/it/samples/modules/b1/HelloB1.xoo b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/src/main/xoo/com/sonar/it/samples/modules/b1/HelloB1.xoo new file mode 100644 index 00000000000..b83c3af128c --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/src/main/xoo/com/sonar/it/samples/modules/b1/HelloB1.xoo @@ -0,0 +1,12 @@ +package com.sonar.it.samples.modules.b1; + +public class HelloB1 { + private int i; + private HelloB1() { + + } + + public void hello() { + System.out.println("hello" + " world"); + } +} \ No newline at end of file diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/src/main/xoo/com/sonar/it/samples/modules/b1/HelloB1.xoo.measures b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/src/main/xoo/com/sonar/it/samples/modules/b1/HelloB1.xoo.measures new file mode 100644 index 00000000000..3947d3bdbff --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/src/main/xoo/com/sonar/it/samples/modules/b1/HelloB1.xoo.measures @@ -0,0 +1,2 @@ +ncloc:12 +classes:1 \ No newline at end of file diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/sonar-project.properties b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/sonar-project.properties new file mode 100644 index 00000000000..e597dab4f33 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/sonar-project.properties @@ -0,0 +1 @@ +sonar.projectName=Sub-module B2 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/src/main/xoo/com/sonar/it/samples/modules/b2/HelloB2.xoo b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/src/main/xoo/com/sonar/it/samples/modules/b2/HelloB2.xoo new file mode 100644 index 00000000000..20b8bb3876a --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/src/main/xoo/com/sonar/it/samples/modules/b2/HelloB2.xoo @@ -0,0 +1,12 @@ +package com.sonar.it.samples.modules.b2; + +public class HelloB2 { + private int i; + private HelloB2() { + + } + + public void hello() { + System.out.println("hello" + " world"); + } +} \ No newline at end of file diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/src/main/xoo/com/sonar/it/samples/modules/b2/HelloB2.xoo.measures b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/src/main/xoo/com/sonar/it/samples/modules/b2/HelloB2.xoo.measures new file mode 100644 index 00000000000..3947d3bdbff --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/src/main/xoo/com/sonar/it/samples/modules/b2/HelloB2.xoo.measures @@ -0,0 +1,2 @@ +ncloc:12 +classes:1 \ No newline at end of file diff --git a/it/it-projects/shared/xoo-multi-modules-sample/module_b/sonar-project.properties b/it/it-projects/shared/xoo-multi-modules-sample/module_b/sonar-project.properties new file mode 100644 index 00000000000..21d69f769d3 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/module_b/sonar-project.properties @@ -0,0 +1,4 @@ +sonar.projectKey=module_b +sonar.projectName=Module B + +sonar.modules=module_b1,module_b2 diff --git a/it/it-projects/shared/xoo-multi-modules-sample/sonar-project.properties b/it/it-projects/shared/xoo-multi-modules-sample/sonar-project.properties new file mode 100644 index 00000000000..7935cb5ffb0 --- /dev/null +++ b/it/it-projects/shared/xoo-multi-modules-sample/sonar-project.properties @@ -0,0 +1,12 @@ +# Root project information +sonar.projectKey=com.sonarsource.it.samples:multi-modules-sample +sonar.projectName=Sonar :: Integration Tests :: Multi-modules Sample +sonar.projectVersion=1.0-SNAPSHOT + +sonar.language=xoo + +# Some properties that will be inherited by the modules +sonar.sources=src/main/xoo + +# List of the module identifiers +sonar.modules=module_a,module_b diff --git a/it/it-projects/shared/xoo-sample/sonar-project.properties b/it/it-projects/shared/xoo-sample/sonar-project.properties new file mode 100644 index 00000000000..9e4aa0e3584 --- /dev/null +++ b/it/it-projects/shared/xoo-sample/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey=sample +sonar.projectName=Sample +sonar.projectVersion=1.0-SNAPSHOT +sonar.sources=src/main/xoo +sonar.language=xoo diff --git a/it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo b/it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo new file mode 100644 index 00000000000..41871e123a3 --- /dev/null +++ b/it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo @@ -0,0 +1,16 @@ +package sample; + +public class Sample { + + public Sample(int i) { + int j = i++; + } + + private String myMethod() { + if (foo == bar) { + return "hello"; + } else { + throw new IllegalStateException(); + } + } +} diff --git a/it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo.measures b/it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo.measures new file mode 100644 index 00000000000..3f73ea8f695 --- /dev/null +++ b/it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo.measures @@ -0,0 +1,11 @@ +ncloc:13 +#Used by dashboard/widgets tests +complexity:3 +complexity_in_classes:3 +classes:1 +comment_lines:3 +public_api:5 +public_undocumented_api:2 +duplicated_files:1 +duplicated_blocks:2 +duplicated_lines:3 diff --git a/it/it-tests/src/test/java/administation/suite/AdministrationTestSuite.java b/it/it-tests/src/test/java/administation/suite/AdministrationTestSuite.java new file mode 100644 index 00000000000..644da40579f --- /dev/null +++ b/it/it-tests/src/test/java/administation/suite/AdministrationTestSuite.java @@ -0,0 +1,45 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package administation.suite; + +import com.sonar.orchestrator.Orchestrator; +import org.junit.ClassRule; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import util.ItUtils; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + BulkDeletionTest.class, + ProjectAdministrationTest.class, + PropertySetsTest.class, + SubCategoriesTest.class +}) +public class AdministrationTestSuite { + + @ClassRule + public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + .setServerProperty("sonar.notifications.delay", "1") +// .addPlugin(ItUtils.pluginArtifact("crash-plugin")) + .addPlugin(ItUtils.pluginArtifact("property-sets-plugin")) + .addPlugin(ItUtils.pluginArtifact("sonar-subcategories-plugin")) + .addPlugin(ItUtils.xooPlugin()) + .build(); +} diff --git a/it/it-tests/src/test/java/administation/suite/BulkDeletionTest.java b/it/it-tests/src/test/java/administation/suite/BulkDeletionTest.java new file mode 100644 index 00000000000..b54c1eee4d5 --- /dev/null +++ b/it/it-tests/src/test/java/administation/suite/BulkDeletionTest.java @@ -0,0 +1,80 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package administation.suite; + +import com.sonar.orchestrator.Orchestrator; +import com.sonar.orchestrator.build.SonarRunner; +import com.sonar.orchestrator.selenium.Selenese; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; + +import static util.ItUtils.projectDir; + +public class BulkDeletionTest { + + @ClassRule + public static Orchestrator orchestrator = AdministrationTestSuite.ORCHESTRATOR; + + @Before + public void deleteData() { + orchestrator.resetData(); + } + + /** + * SONAR-2614, SONAR-3805 + */ + @Test + public void test_bulk_deletion_on_selected_projects() throws Exception { + // we must have several projects to test the bulk deletion + executeBuild("cameleon-1", "Sample-Project"); + executeBuild("cameleon-2", "Foo-Application"); + executeBuild("cameleon-3", "Bar-Sonar-Plugin"); + + Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("project-bulk-deletion-on-selected-project", + "/administration/project-bulk-deletion/bulk-delete-filter-projects.html" + ).build(); + orchestrator.executeSelenese(selenese); + } + + /** + * SONAR-4560 + */ + @Test + public void should_support_two_letters_long_project_name() throws Exception { + executeBuild("xo", "xo"); + + Selenese selenese = Selenese.builder() + .setHtmlTestsInClasspath("bulk-delete-projects-with-short-name", + "/administration/project-bulk-deletion/display-two-letters-long-project.html", + "/administration/project-bulk-deletion/filter-two-letters-long-project.html" + ).build(); + orchestrator.executeSelenese(selenese); + } + + private void executeBuild(String projectKey, String projectName) { + orchestrator.executeBuild( + SonarRunner.create(projectDir("shared/xoo-sample")) + .setProjectKey(projectKey) + .setProjectName(projectName) + ); + } + +} diff --git a/it/it-tests/src/test/java/administation/suite/ProjectAdministrationTest.java b/it/it-tests/src/test/java/administation/suite/ProjectAdministrationTest.java new file mode 100644 index 00000000000..97d9b7a6f8e --- /dev/null +++ b/it/it-tests/src/test/java/administation/suite/ProjectAdministrationTest.java @@ -0,0 +1,319 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package administation.suite; + +import com.sonar.orchestrator.Orchestrator; +import com.sonar.orchestrator.build.SonarRunner; +import com.sonar.orchestrator.selenium.Selenese; +import java.sql.SQLException; +import java.util.Calendar; +import java.util.GregorianCalendar; +import javax.annotation.Nullable; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.sonar.wsclient.SonarClient; +import org.sonar.wsclient.base.HttpException; +import org.sonar.wsclient.permissions.PermissionParameters; +import org.sonar.wsclient.qualitygate.NewCondition; +import org.sonar.wsclient.qualitygate.QualityGate; +import org.sonar.wsclient.qualitygate.QualityGateClient; +import org.sonar.wsclient.qualitygate.QualityGateCondition; +import org.sonar.wsclient.qualitygate.UpdateCondition; +import org.sonar.wsclient.services.PropertyQuery; +import org.sonar.wsclient.services.ResourceQuery; +import org.sonar.wsclient.user.UserParameters; + +import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.projectDir; + +public class ProjectAdministrationTest { + + private static final String DELETE_WS_ENDPOINT = "api/projects/bulk_delete"; + @ClassRule + public static Orchestrator orchestrator = AdministrationTestSuite.ORCHESTRATOR; + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + private static final String PROJECT_KEY = "sample"; + private static final String FILE_KEY = "sample:src/main/xoo/sample/Sample.xoo"; + + @Before + public void deleteAnalysisData() throws SQLException { + orchestrator.resetData(); + } + + @Test + public void delete_project_by_web_service() { + scanSampleWithDate("2012-01-01"); + + assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(PROJECT_KEY))).isNotNull(); + assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(FILE_KEY))).isNotNull(); + + orchestrator.getServer().adminWsClient().post(DELETE_WS_ENDPOINT, "keys", PROJECT_KEY); + + assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(PROJECT_KEY))).isNull(); + assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(FILE_KEY))).isNull(); + } + + @Test + public void fail_when_trying_to_delete_a_file() { + expectedException.expect(HttpException.class); + scanSampleWithDate("2012-01-01"); + + assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(PROJECT_KEY))).isNotNull(); + assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(FILE_KEY))).isNotNull(); + + // it's forbidden to delete only some files + orchestrator.getServer().adminWsClient().post(DELETE_WS_ENDPOINT, "keys", FILE_KEY); + } + + @Test + public void fail_when_insufficient_privilege() { + expectedException.expect(HttpException.class); + scanSampleWithDate("2012-01-01"); + + assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(PROJECT_KEY))).isNotNull(); + + // use wsClient() instead of adminWsClient() + orchestrator.getServer().wsClient().post(DELETE_WS_ENDPOINT, "keys", PROJECT_KEY); + } + + /** + * Test updated for SONAR-3570 and SONAR-5923 + */ + @Test + public void project_deletion() throws Exception { + String projectAdminUser = "project-deletion-with-admin-permission-on-project"; + SonarClient adminClient = orchestrator.getServer().adminWsClient(); + try { + SonarRunner scan = SonarRunner.create(projectDir("shared/xoo-sample")); + orchestrator.executeBuild(scan); + + // Create user having admin permission on previously analysed project + adminClient.userClient().create( + UserParameters.create().login(projectAdminUser).name(projectAdminUser).password("password").passwordConfirmation("password")); + adminClient.permissionClient().addPermission( + PermissionParameters.create().user(projectAdminUser).component("sample").permission("admin")); + + orchestrator.executeSelenese( + Selenese.builder().setHtmlTestsInClasspath("project-deletion", "/administration/project-deletion/project-deletion.html").build() + ); + } finally { + adminClient.userClient().deactivate(projectAdminUser); + } + } + + // SONAR-4203 + @Test + public void delete_version_of_multimodule_project() throws Exception { + GregorianCalendar today = new GregorianCalendar(); + SonarRunner build = SonarRunner.create(projectDir("shared/xoo-multi-modules-sample")) + .setProperty("sonar.dynamicAnalysis", "false") + .setProperty("sonar.projectDate", (today.get(Calendar.YEAR) - 1) + "-01-01"); + orchestrator.executeBuild(build); + + // The analysis must be run once again to have an history so that it is possible + // to set/delete version on old snapshot + build.setProperty("sonar.projectDate", today.get(Calendar.YEAR) + "-01-01"); + orchestrator.executeBuild(build); + + // There are 7 modules + assertThat(count("events where category='Version'")).as("Different number of events").isEqualTo(7); + + Selenese selenese = Selenese + .builder() + .setHtmlTestsInClasspath("delete_version_of_multimodule_project", + "/administration/project-administration/multimodule-project-modify-version.html" + ).build(); + orchestrator.executeSelenese(selenese); + + assertThat(count("events where category='Version'")).as("Different number of events").isEqualTo(14); + + selenese = Selenese + .builder() + .setHtmlTestsInClasspath("delete_version_of_multimodule_project", + "/administration/project-administration/multimodule-project-delete-version.html" + ).build(); + orchestrator.executeSelenese(selenese); + + assertThat(count("events where category='Version'")).as("Different number of events").isEqualTo(7); + } + + // SONAR-3326 + @Test + public void display_alerts_correctly_in_history_page() throws Exception { + QualityGateClient qgClient = orchestrator.getServer().adminWsClient().qualityGateClient(); + QualityGate qGate = qgClient.create("AlertsForHistory"); + qgClient.setDefault(qGate.id()); + + // with this configuration, project should have an Orange alert + QualityGateCondition lowThresholds = qgClient.createCondition(NewCondition.create(qGate.id()).metricKey("lines").operator("GT").warningThreshold("5").errorThreshold("50")); + scanSampleWithDate("2012-01-01"); + // with this configuration, project should have a Green alert + qgClient.updateCondition(UpdateCondition.create(lowThresholds.id()).metricKey("lines").operator("GT").warningThreshold("5000").errorThreshold("5000")); + scanSampleWithDate("2012-01-02"); + + Selenese selenese = Selenese + .builder() + .setHtmlTestsInClasspath("display-alerts-history-page", + "/administration/display-alerts-history-page/should-display-alerts-correctly-history-page.html" + ).build(); + orchestrator.executeSelenese(selenese); + + qgClient.unsetDefault(); + qgClient.destroy(qGate.id()); + } + + /** + * SONAR-1352 + */ + @Test + public void display_period_alert_on_project_dashboard() throws Exception { + QualityGateClient qgClient = orchestrator.getServer().adminWsClient().qualityGateClient(); + QualityGate qGate = qgClient.create("AlertsForDashboard"); + qgClient.createCondition(NewCondition.create(qGate.id()).metricKey("lines").operator("LT").warningThreshold("0").errorThreshold("10") + .period(1)); + qgClient.setDefault(qGate.id()); + + // No alert + scanSampleWithDate("2012-01-01"); + + // Red alert because lines number has not changed since previous analysis + scanSample(); + + Selenese selenese = Selenese + .builder() + .setHtmlTestsInClasspath("display-period-alerts", + "/administration/display-alerts/should-display-period-alerts-correctly.html" + ).build(); + orchestrator.executeSelenese(selenese); + + qgClient.unsetDefault(); + qgClient.destroy(qGate.id()); + } + + /** + * SONAR-3425 + */ + @Test + public void project_settings() { + scanSampleWithDate("2012-01-01"); + + Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("project-settings", + // SONAR-3425 + "/administration/project-settings/override-global-settings.html", + + "/administration/project-settings/only-on-project-settings.html" + ).build(); + orchestrator.executeSelenese(selenese); + + assertThat(orchestrator.getServer().getAdminWsClient().find(PropertyQuery.createForResource("sonar.skippedModules", "sample")).getValue()) + .isEqualTo("my-excluded-module"); + } + + /** + * SONAR-1608 + */ + @Test + public void bulk_update_project_keys() { + SonarRunner build = SonarRunner.create(projectDir("shared/xoo-multi-modules-sample")); + orchestrator.executeBuild(build); + + Selenese selenese = Selenese + .builder() + .setHtmlTestsInClasspath("project-bulk-update-keys", + "/administration/project-update-keys/bulk-update-impossible-because-duplicate-keys.html", + "/administration/project-update-keys/bulk-update-impossible-because-no-input.html", + "/administration/project-update-keys/bulk-update-impossible-because-no-match.html", + "/administration/project-update-keys/bulk-update-success.html" + ).build(); + orchestrator.executeSelenese(selenese); + } + + /** + * SONAR-1608 + */ + @Test + public void fine_grain_update_project_keys() { + SonarRunner build = SonarRunner.create(projectDir("shared/xoo-multi-modules-sample")); + orchestrator.executeBuild(build); + + Selenese selenese = Selenese + .builder() + .setHtmlTestsInClasspath("project-fine-grained-update-keys", + "/administration/project-update-keys/fine-grained-update-impossible.html", + "/administration/project-update-keys/fine-grained-update-success.html" + ).build(); + orchestrator.executeSelenese(selenese); + } + + @Test + public void anonymous_should_have_user_role_to_access_project() { + scanSample(); + + Selenese selenese = Selenese.builder() + .setHtmlTestsInClasspath("anonymous_should_have_user_role_to_access_project", + "/administration/anonymous_should_have_user_role_to_access_project/remove_user_role.html" + ).build(); + orchestrator.executeSelenese(selenese); + } + + /** + * SONAR-4060 + */ + @Test + public void display_module_settings() { + orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-multi-modules-sample"))); + + Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("module-settings", + // SONAR-3425 + "/administration/module-settings/display-module-settings.html" + ).build(); + orchestrator.executeSelenese(selenese); + } + + private void scanSample() { + scanSample(null, null); + } + + private void scanSampleWithDate(String date) { + scanSample(date, null); + } + + private void scanSample(@Nullable String date, @Nullable String profile) { + SonarRunner scan = SonarRunner.create(projectDir("shared/xoo-sample")) + .setProperties("sonar.cpd.skip", "true"); + if (date != null) { + scan.setProperty("sonar.projectDate", date); + } + if (profile != null) { + scan.setProfile(profile); + } + orchestrator.executeBuild(scan); + } + + private int count(String condition) { + return orchestrator.getDatabase().countSql("select count(*) from " + condition); + } + +} diff --git a/it/it-tests/src/test/java/administation/suite/PropertySetsTest.java b/it/it-tests/src/test/java/administation/suite/PropertySetsTest.java new file mode 100644 index 00000000000..6b1b7f93830 --- /dev/null +++ b/it/it-tests/src/test/java/administation/suite/PropertySetsTest.java @@ -0,0 +1,93 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package administation.suite; + +import com.sonar.orchestrator.Orchestrator; +import com.sonar.orchestrator.selenium.Selenese; +import org.junit.ClassRule; +import org.junit.Test; +import org.sonar.wsclient.services.PropertyQuery; +import org.sonar.wsclient.services.PropertyUpdateQuery; + +import static org.assertj.core.api.Assertions.assertThat; + +public class PropertySetsTest { + + @ClassRule + public static Orchestrator orchestrator = AdministrationTestSuite.ORCHESTRATOR; + + @Test + public void should_support_property_sets() { + Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("property-sets", + "/administration/property-sets/create.html", + "/administration/property-sets/delete.html", + "/administration/property-sets/reference.html", + "/administration/property-sets/all_types.html" + ).build(); + orchestrator.executeSelenese(selenese); + + // SSF-25 Check that the password has well be setted as now it does not appears in the html source code + String sonarDemoValue = getProperty("sonar.demo"); + assertThat(getProperty("sonar.demo." + sonarDemoValue + ".password")).isEqualTo("abcde"); + } + + @Test + public void should_edit_properties() { + setProperty("sonar.test.jira.servers", "jira1,jira2"); + setProperty("sonar.test.jira.servers.jira1.url", "http://jira1"); + setProperty("sonar.test.jira.servers.jira2.url", "http://jira2"); + setProperty("sonar.test.jira.servers.jira1.port", "12345"); + setProperty("sonar.test.jira.servers.jira2.port", "66666"); + + assertThat(getProperty("sonar.test.jira.servers")).isEqualTo("jira1,jira2"); + assertThat(getProperty("sonar.test.jira.servers.jira1.url")).isEqualTo("http://jira1"); + assertThat(getProperty("sonar.test.jira.servers.jira2.url")).isEqualTo("http://jira2"); + assertThat(getProperty("sonar.test.jira.servers.jira1.port")).isEqualTo("12345"); + assertThat(getProperty("sonar.test.jira.servers.jira2.port")).isEqualTo("66666"); + } + + @Test + public void should_support_property_sets_with_auto_generated_keys() { + orchestrator.executeSelenese(Selenese.builder().setHtmlTestsInClasspath("create-auto-generated", + "/administration/auto-generated/create.html" + ).build()); + + String[] keys = getProperty("sonar.autogenerated").split("[,]"); + assertThat(getProperty("sonar.autogenerated." + keys[0] + ".value")).isEqualTo("FIRST"); + assertThat(getProperty("sonar.autogenerated." + keys[1] + ".value")).isEqualTo("SECOND"); + assertThat(getProperty("sonar.autogenerated." + keys[2] + ".value")).isEqualTo("THIRD"); + + orchestrator.executeSelenese(Selenese.builder().setHtmlTestsInClasspath("update-auto-generated", + "/administration/auto-generated/update.html" + ).build()); + + keys = getProperty("sonar.autogenerated").split("[,]"); + assertThat(getProperty("sonar.autogenerated." + keys[0] + ".value")).isEqualTo("FIRST"); + assertThat(getProperty("sonar.autogenerated." + keys[1] + ".value")).isEqualTo("THIRD"); + } + + static void setProperty(String key, String value) { + orchestrator.getServer().getAdminWsClient().update(new PropertyUpdateQuery(key, value)); + } + + static String getProperty(String key) { + return orchestrator.getServer().getAdminWsClient().find(new PropertyQuery().setKey(key)).getValue(); + } +} diff --git a/it/it-tests/src/test/java/administation/suite/SubCategoriesTest.java b/it/it-tests/src/test/java/administation/suite/SubCategoriesTest.java new file mode 100644 index 00000000000..d963cd7738b --- /dev/null +++ b/it/it-tests/src/test/java/administation/suite/SubCategoriesTest.java @@ -0,0 +1,70 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package administation.suite; + +import com.sonar.orchestrator.Orchestrator; +import com.sonar.orchestrator.build.SonarRunner; +import com.sonar.orchestrator.selenium.Selenese; +import org.junit.ClassRule; +import org.junit.Test; +import org.sonar.wsclient.services.PropertyQuery; + +import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.projectDir; + +public class SubCategoriesTest { + + @ClassRule + public static Orchestrator orchestrator = AdministrationTestSuite.ORCHESTRATOR; + + /** + * SONAR-3159 + */ + @Test + public void should_support_global_subcategories() { + Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("subcategories", + "/administration/subcategories/global-subcategories.html", + // SONAR-4495 + "/administration/subcategories/global-subcategories-no-default.html" + ).build(); + orchestrator.executeSelenese(selenese); + assertThat(getProperty("prop3", null)).isEqualTo("myValue"); + } + + /** + * SONAR-3159 + */ + @Test + public void should_support_project_subcategories() { + orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-sample"))); + + Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("subcategories", + "/administration/subcategories/project-subcategories.html", + // SONAR-4495 + "/administration/subcategories/project-subcategories-no-default.html" + ).build(); + orchestrator.executeSelenese(selenese); + assertThat(getProperty("prop3", "sample")).isEqualTo("myValue2"); + } + + static String getProperty(String key, String resourceKeyOrId) { + return orchestrator.getServer().getAdminWsClient().find(new PropertyQuery().setKey(key).setResourceKeyOrId(resourceKeyOrId)).getValue(); + } +} diff --git a/it/it-tests/src/test/resources/administration/anonymous_should_have_user_role_to_access_project/remove_user_role.html b/it/it-tests/src/test/resources/administration/anonymous_should_have_user_role_to_access_project/remove_user_role.html new file mode 100644 index 00000000000..4e45f9901d0 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/anonymous_should_have_user_role_to_access_project/remove_user_role.html @@ -0,0 +1,109 @@ + + + + + + remove_user_role + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/project_roles/index/sample
typeloginadmin
typepasswordadmin
clickAndWaitcommit
clickid=select-user-edit-groups
waitForTextid=modal*Edit Permission*
waitForElementPresentname=Anyone
clickname=Anyone
clickname=deselected
waitForElementPresentname=sonar-administrators
clickname=sonar-administrators
waitForElementNotPresentname=sonar-administrators
clickAndWaitlink=Close
assertTextuser-role-groupssonar-administrators
open/sonar/sessions/logout
open/sonar/dashboard/index/sample
assertLocation*/sessions/new
assertElementPresentlogin_form
+ + diff --git a/it/it-tests/src/test/resources/administration/auto-generated/create.html b/it/it-tests/src/test/resources/administration/auto-generated/create.html new file mode 100644 index 00000000000..e562216ca56 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/auto-generated/create.html @@ -0,0 +1,79 @@ + + + + + + create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/settings?category=DEV
waitForValuename=page_version1
typeid=input_valueFIRST
clickcss=button.add_value
typexpath=(//input[@id='input_value'])[2]SECOND
clickcss=button.add_value
typexpath=(//input[@id='input_value'])[3]THIRD
clickid=submit_settings
waitForValuename=page_version2
+ + diff --git a/it/it-tests/src/test/resources/administration/auto-generated/update.html b/it/it-tests/src/test/resources/administration/auto-generated/update.html new file mode 100644 index 00000000000..0cc6d84f611 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/auto-generated/update.html @@ -0,0 +1,59 @@ + + + + + + update + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/settings?category=DEV
waitForValuename=page_version1
clicklink=Delete
clickid=submit_settings
waitForValuename=page_version2
+ + diff --git a/it/it-tests/src/test/resources/administration/display-alerts-history-page/should-display-alerts-correctly-history-page.html b/it/it-tests/src/test/resources/administration/display-alerts-history-page/should-display-alerts-correctly-history-page.html new file mode 100644 index 00000000000..1845a5a031d --- /dev/null +++ b/it/it-tests/src/test/resources/administration/display-alerts-history-page/should-display-alerts-correctly-history-page.html @@ -0,0 +1,64 @@ + + + + + + should-display-alerts-correctly-history-page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
should-display-alerts-correctly-history-page
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/dashboard/index/sample
waitForElementPresentlink=History
clickAndWaitlink=History
assertElementPresent//img[@title='Quality Gate Status: Green (was Orange). ']
assertElementPresent//img[@title='Quality Gate Status: Orange. Lines > 5']
+ + diff --git a/it/it-tests/src/test/resources/administration/display-alerts/should-display-period-alerts-correctly.html b/it/it-tests/src/test/resources/administration/display-alerts/should-display-period-alerts-correctly.html new file mode 100644 index 00000000000..9c4db5c8779 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/display-alerts/should-display-period-alerts-correctly.html @@ -0,0 +1,54 @@ + + + + + + should-display-alerts-correctly-history-page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
should-display-alerts-correctly-history-page
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/widget?id=alerts&resource=sample
assertTextclass=alertsglob:*Lines*0 < 10*since previous analysis*
assertTextclass=alert_ERROR0
+ + diff --git a/it/it-tests/src/test/resources/administration/module-settings/display-module-settings.html b/it/it-tests/src/test/resources/administration/module-settings/display-module-settings.html new file mode 100644 index 00000000000..f9137271bca --- /dev/null +++ b/it/it-tests/src/test/resources/administration/module-settings/display-module-settings.html @@ -0,0 +1,49 @@ + + + + + + override-global-settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
override-global-settings
open/sonar/sessions/logout
open/sonar/project/settings/com.sonarsource.it.samples%3Amulti-modules-sample%3Amodule_a
typeid=loginadmin
typeid=passwordadmin
clickAndWaitname=commit
assertTextplugins*Settings*
+ + diff --git a/it/it-tests/src/test/resources/administration/profile-admin/create-profile-administrator.html b/it/it-tests/src/test/resources/administration/profile-admin/create-profile-administrator.html new file mode 100644 index 00000000000..81317f9c20f --- /dev/null +++ b/it/it-tests/src/test/resources/administration/profile-admin/create-profile-administrator.html @@ -0,0 +1,124 @@ + + + + + + create-user + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/users
typeid=loginadmin
typeid=passwordadmin
clickAndWaitname=commit
typeid=user_loginprofileadm
typeid=user_nameProfile Admin
typeid=user_passwordpapwd
typeid=user_password_confirmationpapwd
clickAndWaitname=commit
clickAndWaitlink=Groups
typeid=group_nameprofile-admins
clickAndWaitname=commit
clickAndWaitid=select-profile-admins
addSelectionid=fromlabel=Profile Admin
clickid=select_right
clickAndWaitid=save
clickAndWaitlink=Administrators
clickAndWaitxpath=(//a[contains(text(),'select')])[4]
addSelectionid=fromlabel=profile-admins
clickid=select_right
clickAndWaitid=save
+ + diff --git a/it/it-tests/src/test/resources/administration/profile-admin/create-user.html b/it/it-tests/src/test/resources/administration/profile-admin/create-user.html new file mode 100644 index 00000000000..ee78c448d00 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/profile-admin/create-user.html @@ -0,0 +1,84 @@ + + + + + + create-user + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/users
typeid=loginadmin
typeid=passwordadmin
clickAndWaitname=commit
clickid=create-link-user
waitForVisibleuser_create_form
typeid=user_loginuser
typeid=user_nameSimple User
typeid=user_passworduserpwd
typeid=user_password_confirmationuserpwd
clickname=commit
waitForVisibleinfo
assertTextinfo*User is created*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-administration/multimodule-project-delete-version.html b/it/it-tests/src/test/resources/administration/project-administration/multimodule-project-delete-version.html new file mode 100644 index 00000000000..2c1a2f0ed60 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-administration/multimodule-project-delete-version.html @@ -0,0 +1,89 @@ + + + + + + + + project-modify-versions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
project-modify-versions
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/project/history/com.sonarsource.it.samples:multi-modules-sample
clickAndWaitlink=Remove
assertConfirmationAre you sure you want to remove "RELEASE" from this snapshot?
waitForTextinfomsgglob:*Version "RELEASE" was removed from current project and all its sub-projects*
assertNotTextversion_1glob:*RELEASE*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-administration/multimodule-project-modify-version.html b/it/it-tests/src/test/resources/administration/project-administration/multimodule-project-modify-version.html new file mode 100644 index 00000000000..aa3fb40c3c8 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-administration/multimodule-project-modify-version.html @@ -0,0 +1,109 @@ + + + + + + + + project-modify-versions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
project-modify-versions
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/project/history/com.sonarsource.it.samples:multi-modules-sample
assertElementNotPresentlink=Remove
clickversion_1_change
typeversion_name_1RELEASE
keyUpversion_name_1a
clickAndWaitsave_version_1
waitForElementPresentinfomsg
assertTextinfomsgVersion "RELEASE" was created for current project and all its sub-projects.
assertTextversion_1glob:*RELEASE*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-filter-projects.html b/it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-filter-projects.html new file mode 100644 index 00000000000..8ff4b7089c2 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-filter-projects.html @@ -0,0 +1,74 @@ + + + + + + bulk-delete-filter-projects + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/bulk_deletion
assertTextcontent*Bar-Sonar-Plugin*Foo-Application*Sample-Project*
typeid=resource_filters
clickAndWaitid=filter_resources
assertTextcontent*Bar-Sonar-Plugin*Sample-Project*
assertTextcontent*cameleon-3*cameleon-1*
assertTextNotPresentcontent*Foo-Application*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-selected-projects.html b/it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-selected-projects.html new file mode 100644 index 00000000000..7662c60c5de --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-selected-projects.html @@ -0,0 +1,89 @@ + + + + + + bulk-delete-selected-projects + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/bulk_deletion
assertTextcontent*Bar-Sonar-Plugin*Foo-Application*Sample-Project*
clickid=r-0
clickid=r-2
clickAndWaitid=delete_resources
assertConfirmationAre you sure you want to delete the selected resources?
pause12000NOTE: necessary as the deletion is asynchronous
assertElementNotPresentid=r-1
assertTextcontent*Foo-Application*
assertTextNotPresentcontent*Bar-Sonar-Plugin*Sample-Project*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-bulk-deletion/display-two-letters-long-project.html b/it/it-tests/src/test/resources/administration/project-bulk-deletion/display-two-letters-long-project.html new file mode 100644 index 00000000000..3f0095f07b9 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-bulk-deletion/display-two-letters-long-project.html @@ -0,0 +1,49 @@ + + + + + + display-two-letters-long-project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/bulk_deletion
assertTextresources-to-delete*xo*xo*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-bulk-deletion/filter-two-letters-long-project.html b/it/it-tests/src/test/resources/administration/project-bulk-deletion/filter-two-letters-long-project.html new file mode 100644 index 00000000000..17e6732e271 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-bulk-deletion/filter-two-letters-long-project.html @@ -0,0 +1,59 @@ + + + + + + filter-two-letters-long-project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/bulk_deletion
typeid=resource_filterxo
clickAndWaitid=filter_resources
assertTextresources-to-delete*xo*xo*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-deletion/project-deletion.html b/it/it-tests/src/test/resources/administration/project-deletion/project-deletion.html new file mode 100644 index 00000000000..9de248da681 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-deletion/project-deletion.html @@ -0,0 +1,99 @@ + + + + + + project-deletion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
project-deletion
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginproject-deletion-with-admin-permission-on-project
typepasswordpassword
clickAndWaitcommit
open/sonar/
assertTextPresentSample
open/sonar/dashboard/index/sample
waitForElementPresentlink=Deletion
clickAndWaitlink=Deletion
clickdelete_resource
waitForTextdelete-project-form*Delete Project*
clickdelete-project-submit
pause3000NOTE: necessary as the deletion is asynchronous
open/sonar/
assertTextNotPresentcontent*Sample*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-settings/only-on-project-settings.html b/it/it-tests/src/test/resources/administration/project-settings/only-on-project-settings.html new file mode 100644 index 00000000000..f90a77b2037 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-settings/only-on-project-settings.html @@ -0,0 +1,59 @@ + + + + + + override-global-settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
override-global-settings
open/sonar/sessions/logout
open/sonar/project/settings/sample?category=project-only
typeid=loginadmin
typeid=passwordadmin
clickAndWaitname=commit
typeid=input_prop_only_on_projectfoo
clickid=submit_settings
assertValueid=input_prop_only_on_projectfoo
+ + diff --git a/it/it-tests/src/test/resources/administration/project-settings/override-global-settings.html b/it/it-tests/src/test/resources/administration/project-settings/override-global-settings.html new file mode 100644 index 00000000000..db0eab19545 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-settings/override-global-settings.html @@ -0,0 +1,59 @@ + + + + + + override-global-settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
override-global-settings
open/sonar/sessions/logout
open/sonar/project/settings/sample?category=exclusions&subcategory=files
typeid=loginadmin
typeid=passwordadmin
clickAndWaitname=commit
typeid=input_sonar.skippedModulesmy-excluded-module
clickid=submit_settings
assertValueid=input_sonar.skippedModulesmy-excluded-module
+ + diff --git a/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-duplicate-keys.html b/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-duplicate-keys.html new file mode 100644 index 00000000000..7e3f7a63ec2 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-duplicate-keys.html @@ -0,0 +1,94 @@ + + + + + + bulk-update-impossible-because-duplicate-keys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample
waitForElementPresentlink=Update Key
clickAndWaitlink=Update Key
typeid=string_to_replacecom.sonarsource.it.samples:multi-modules-sample:module_a
typeid=replacement_stringcom.sonarsource.it.samples:multi-modules-sample:module_b
clickAndWaitid=bulk_update_button
assertTextcontent*Bulk update can not be performed*The replacement of "com.sonarsource.it.samples:multi-modules-sample:module_a" by "com.sonarsource.it.samples:multi-modules-sample:module_b" is impossible as it would result in duplicate keys (in red below):*
assertTextcontent*Duplicate key*
assertElementNotPresentid=bulk_update_button
clickAndWaitLink=Back
assertTextcontent*Update Key*com.sonarsource.it.samples:multi-modules-sample*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-input.html b/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-input.html new file mode 100644 index 00000000000..3f925bc2226 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-input.html @@ -0,0 +1,64 @@ + + + + + + bulk-update-impossible-because-no-input + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample
waitForElementPresentlink=Update Key
clickAndWaitlink=Update Key
clickAndWaitid=bulk_update_button
assertTextcontent*The two fields can not be blank for the bulk update.*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-match.html b/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-match.html new file mode 100644 index 00000000000..7bd340476d7 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-match.html @@ -0,0 +1,89 @@ + + + + + + bulk-update-impossible-because-no-match + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample
waitForElementPresentlink=Update Key
clickAndWaitlink=Update Key
typeid=string_to_replacefoo
typeid=replacement_stringorg.sonar
clickAndWaitid=bulk_update_button
assertTextcontent*Bulk update can not be performed*No key contains the string to replace ("foo").*
assertElementNotPresentid=bulk_update_button
clickAndWaitLink=Back
assertTextcontent*Update Key*com.sonarsource.it.samples:multi-modules-sample*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-success.html b/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-success.html new file mode 100644 index 00000000000..1a778ecf599 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-success.html @@ -0,0 +1,104 @@ + + + + + + bulk-update-success + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample
waitForElementPresentlink=Update Key
clickAndWaitlink=Update Key
typeid=string_to_replacecom.sonarsource
typeid=replacement_stringorg.sonar
clickAndWaitid=bulk_update_button
assertTextcontent*Do you really want to perform the bulk update on project keys?*
assertTextcontent*com.sonarsource.it.samples:multi-modules-sample*org.sonar.it.samples:multi-modules-sample*
assertTextcontent*com.sonarsource.it.samples:multi-modules-sample:module_a*org.sonar.it.samples:multi-modules-sample:module_a*
clickAndWaitid=bulk_update_button
assertTextcontent*The key has successfully been updated for all required resources.*
assertTextcontent*org.sonar.it.samples:multi-modules-sample*
assertTextNotPresentcontent*com.sonarsource.it.samples:multi-modules-sample*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-impossible.html b/it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-impossible.html new file mode 100644 index 00000000000..c4191f938b9 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-impossible.html @@ -0,0 +1,74 @@ + + + + + + fine-grained-update-impossible + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample
waitForElementPresentlink=Update Key
clickAndWaitlink=Update Key
typeid=key_05com.sonarsource.it.samples:multi-modules-sample:module_b
clickAndWaitid=update_key_05
assertConfirmation*Are you sure you want to rename "com.sonarsource.it.samples:multi-modules-sample:module_*", as well as all its modules and resources?*
assertTextid=error*"com.sonarsource.it.samples:multi-modules-sample:module_*" can not be renamed because "com.sonarsource.it.samples:multi-modules-sample:module_b" is the key of an existing resource. The update has been canceled.*
+ + diff --git a/it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-success.html b/it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-success.html new file mode 100644 index 00000000000..aaa1d9929f3 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-success.html @@ -0,0 +1,79 @@ + + + + + + fine-grained-update-success + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/logout
open/sonar/sessions/login
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample
waitForElementPresentlink=Update Key
clickAndWaitlink=Update Key
typeid=key_02com.sonarsource.it.samples:module_c1
clickAndWaitid=update_key_02
assertConfirmation*Are you sure you want to rename "com.sonarsource.it.samples:multi-modules-sample:module_*", as well as all its modules and resources?*
assertTextcontent*The key has successfully been updated for all required resources.*
assertTextcontent*com.sonarsource.it.samples:module_c1*
+ + diff --git a/it/it-tests/src/test/resources/administration/property-sets/all_types.html b/it/it-tests/src/test/resources/administration/property-sets/all_types.html new file mode 100644 index 00000000000..e12fac9d324 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/property-sets/all_types.html @@ -0,0 +1,134 @@ + + + + + + all_types + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/settings?category=DEV
waitForValuename=page_version1
typeid=input_texttext
selectid=input_booleanlabel=True
typeid=input_float42.0
typeid=input_licenseabc
selectid=input_metriclabel=Overall condition coverage
typeid=input_passwordabcde
typeid=input_regexp.*
selectid=input_listlabel=AAA
clickid=submit_settings
waitForValuename=page_version2
assertValueid=input_texttext
assertValueid=input_booleantrue
assertValueid=input_float42.0
assertValueid=input_licenseabc
assertValueid=input_metricoverall_branch_coverage
assertValueid=input_password{{*******************}}
assertValueid=input_regexpexact:.*
assertValueid=input_listAAA
+ + diff --git a/it/it-tests/src/test/resources/administration/property-sets/create.html b/it/it-tests/src/test/resources/administration/property-sets/create.html new file mode 100644 index 00000000000..6722841897e --- /dev/null +++ b/it/it-tests/src/test/resources/administration/property-sets/create.html @@ -0,0 +1,84 @@ + + + + + + create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/settings?category=DEV
waitForValuename=page_version1
typeid=input_keyjira1
typeid=input_urlhttp://jira
typeid=input_port12345
clickid=submit_settings
waitForValuename=page_version2
assertValueid=input_keyjira1
assertValueid=input_urlexact:http://jira
assertValueid=input_port12345
+ + diff --git a/it/it-tests/src/test/resources/administration/property-sets/delete.html b/it/it-tests/src/test/resources/administration/property-sets/delete.html new file mode 100644 index 00000000000..2e881114d98 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/property-sets/delete.html @@ -0,0 +1,114 @@ + + + + + + delete + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/settings?category=DEV
waitForValuename=page_version1
typeid=input_keyjira1
typeid=input_urlhttp://jira1
clickcss=#block_sonar\.test\.jira\.servers .add_value
typexpath=(//input[@id='input_key'])[2]jira2
typexpath=(//input[@id='input_url'])[2]http://jira2
clickid=submit_settings
waitForValuename=page_version2
assertValuexpath=(//input[@id='input_key'])[1]jira1
assertValuexpath=(//input[@id='input_key'])[2]jira2
clickxpath=(//a[contains(text(),'Delete')])[3]
clickid=submit_settings
waitForValuename=page_version3
assertValuexpath=(//input[@id='input_key'])[1]jira1
waitForNotTextxpath=(//input[@id='input_key'])*jira2*
+ + diff --git a/it/it-tests/src/test/resources/administration/property-sets/reference.html b/it/it-tests/src/test/resources/administration/property-sets/reference.html new file mode 100644 index 00000000000..0792bc556f9 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/property-sets/reference.html @@ -0,0 +1,89 @@ + + + + + + reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/settings?category=DEV
waitForValuename=page_version1
typexpath=(//input[@id='input_key'])[1]jira1
clickcss=#block_sonar\.test\.jira\.servers .add_value
typexpath=(//input[@id='input_key'])[2]jira2
clickid=submit_settings
waitForValuename=page_version2
assertSelectOptionsid=input_sonar.test.jiraDefault,jira1,jira2
clickxpath=(//a[contains(text(),'Delete')])[2]
clickid=submit_settings
waitForValuename=page_version3
+ + diff --git a/it/it-tests/src/test/resources/administration/subcategories/global-subcategories-no-default.html b/it/it-tests/src/test/resources/administration/subcategories/global-subcategories-no-default.html new file mode 100644 index 00000000000..f6b410b562c --- /dev/null +++ b/it/it-tests/src/test/resources/administration/subcategories/global-subcategories-no-default.html @@ -0,0 +1,55 @@ + + + + + + global-subcategories + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/settings?category=Category 2
waitForValuename=page_version1
assertElementPresentid=input_prop2_1
assertElementNotPresentid=input_prop2_2
+ + diff --git a/it/it-tests/src/test/resources/administration/subcategories/global-subcategories.html b/it/it-tests/src/test/resources/administration/subcategories/global-subcategories.html new file mode 100644 index 00000000000..6f9896fa32f --- /dev/null +++ b/it/it-tests/src/test/resources/administration/subcategories/global-subcategories.html @@ -0,0 +1,151 @@ + + + + + + global-subcategories + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/settings?category=Category 1
waitForValuename=page_version1
assertElementNotPresentid=input_prop1
assertElementNotPresentid=input_prop2
assertElementNotPresentid=input_prop3
assertElementPresentid=input_prop4
clickAndWaitlink=Sub category 1
assertElementPresentid=input_prop1
assertElementPresentid=input_prop2
assertElementNotPresentid=input_prop3
assertElementNotPresentid=input_prop4
assertElementPresentxpath=//.[@id='input_prop2']/following::input[@id='input_prop1']
clickAndWaitlink=Sub category 2
typeid=input_prop3myValue
clickid=submit_settings
waitForValuename=page_version2
assertElementNotPresentid=input_prop1
assertElementNotPresentid=input_prop2
assertElementPresentid=input_prop3
assertElementNotPresentid=input_prop4
assertValueid=input_prop3myValue
clickAndWaitlink=Sub category 1
assertElementPresentid=input_prop1
+ + diff --git a/it/it-tests/src/test/resources/administration/subcategories/project-subcategories-no-default.html b/it/it-tests/src/test/resources/administration/subcategories/project-subcategories-no-default.html new file mode 100644 index 00000000000..875e7fc7657 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/subcategories/project-subcategories-no-default.html @@ -0,0 +1,55 @@ + + + + + + create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/project/settings/sample?category=Category 2
waitForValuename=page_version1
assertElementPresentid=input_prop2_1
assertElementNotPresentid=input_prop2_2
+ + diff --git a/it/it-tests/src/test/resources/administration/subcategories/project-subcategories.html b/it/it-tests/src/test/resources/administration/subcategories/project-subcategories.html new file mode 100644 index 00000000000..e3284d63f16 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/subcategories/project-subcategories.html @@ -0,0 +1,145 @@ + + + + + + create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/project/settings/sample?category=Category 1
waitForValuename=page_version1
assertElementNotPresentid=input_prop1
assertElementNotPresentid=input_prop2
assertElementNotPresentid=input_prop3
assertElementPresentid=input_prop4
clickAndWaitlink=Sub category 1
assertElementPresentid=input_prop1
assertElementPresentid=input_prop2
assertElementNotPresentid=input_prop3
assertElementNotPresentid=input_prop4
clickAndWaitlink=Sub category 2
typeid=input_prop3myValue2
clickid=submit_settings
waitForValuename=page_version2
assertElementNotPresentid=input_prop1
assertElementNotPresentid=input_prop2
assertElementPresentid=input_prop3
assertElementNotPresentid=input_prop4
assertValueid=input_prop3myValue2
clickAndWaitlink=Sub category 1
assertElementPresentid=input_prop1
+ + diff --git a/it/it-tests/src/test/resources/administration/user-notif-settings/create_user_with_email.html b/it/it-tests/src/test/resources/administration/user-notif-settings/create_user_with_email.html new file mode 100644 index 00000000000..d969dbe9274 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/user-notif-settings/create_user_with_email.html @@ -0,0 +1,84 @@ + + + + + + create_user_with_email + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
create_user_with_email
open/sonar/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/sonar/users
clickid=create-link-user
waitForVisibleuser_create_form
typeuser_logintester
typeuser_nameTester
typeuser_emailtester@example.org
typeuser_passwordtester
typeuser_password_confirmationtester
clickAndWaitcommit
+ + diff --git a/it/it-tests/src/test/resources/administration/user-notif-settings/register_to_new_violations_on_project.html b/it/it-tests/src/test/resources/administration/user-notif-settings/register_to_new_violations_on_project.html new file mode 100644 index 00000000000..207a3dcb619 --- /dev/null +++ b/it/it-tests/src/test/resources/administration/user-notif-settings/register_to_new_violations_on_project.html @@ -0,0 +1,59 @@ + + + + + + register_to_new_violations_on_project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
open/sonar/sessions/new
typelogintester
typepasswordtester
clickAndWaitcommit
open/sonar/account/index
waitForElementPresentnew_project
typeAndWaitnew_projectcom.sonarsource.it.projects.rule:notification-for-new-violations
clickAndWait//input[@value='Save changes']
assertTextnotif_form*New violations*notification-for-new-violations*Email*
+ + -- 2.39.5