]> source.dussan.org Git - sonarqube.git/commitdiff
Add administration ITs
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 24 Jul 2015 14:54:31 +0000 (16:54 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 27 Jul 2015 11:48:01 +0000 (13:48 +0200)
63 files changed:
.travis.yml
it/it-plugins/pom.xml
it/it-plugins/property-sets-plugin/pom.xml [new file with mode: 0644]
it/it-plugins/property-sets-plugin/src/main/java/PropertySetsPlugin.java [new file with mode: 0644]
it/it-plugins/sonar-subcategories-plugin/pom.xml [new file with mode: 0644]
it/it-plugins/sonar-subcategories-plugin/src/main/java/SubCategoriesPlugin.java [new file with mode: 0644]
it/it-plugins/sonar-subcategories-plugin/src/main/resources/org/sonar/l10n/subcategories.properties [new file with mode: 0644]
it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a1/sonar-project.properties [new file with mode: 0644]
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 with mode: 0644]
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 with mode: 0644]
it/it-projects/shared/xoo-multi-modules-sample/module_a/module_a2/sonar-project.properties [new file with mode: 0644]
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 with mode: 0644]
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 with mode: 0644]
it/it-projects/shared/xoo-multi-modules-sample/module_a/sonar-project.properties [new file with mode: 0644]
it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b1/sonar-project.properties [new file with mode: 0644]
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 with mode: 0644]
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 with mode: 0644]
it/it-projects/shared/xoo-multi-modules-sample/module_b/module_b2/sonar-project.properties [new file with mode: 0644]
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 with mode: 0644]
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 with mode: 0644]
it/it-projects/shared/xoo-multi-modules-sample/module_b/sonar-project.properties [new file with mode: 0644]
it/it-projects/shared/xoo-multi-modules-sample/sonar-project.properties [new file with mode: 0644]
it/it-projects/shared/xoo-sample/sonar-project.properties [new file with mode: 0644]
it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo [new file with mode: 0644]
it/it-projects/shared/xoo-sample/src/main/xoo/sample/Sample.xoo.measures [new file with mode: 0644]
it/it-tests/src/test/java/administation/suite/AdministrationTestSuite.java [new file with mode: 0644]
it/it-tests/src/test/java/administation/suite/BulkDeletionTest.java [new file with mode: 0644]
it/it-tests/src/test/java/administation/suite/ProjectAdministrationTest.java [new file with mode: 0644]
it/it-tests/src/test/java/administation/suite/PropertySetsTest.java [new file with mode: 0644]
it/it-tests/src/test/java/administation/suite/SubCategoriesTest.java [new file with mode: 0644]
it/it-tests/src/test/resources/administration/anonymous_should_have_user_role_to_access_project/remove_user_role.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/auto-generated/create.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/auto-generated/update.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/display-alerts-history-page/should-display-alerts-correctly-history-page.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/display-alerts/should-display-period-alerts-correctly.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/module-settings/display-module-settings.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/profile-admin/create-profile-administrator.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/profile-admin/create-user.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-administration/multimodule-project-delete-version.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-administration/multimodule-project-modify-version.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-filter-projects.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-bulk-deletion/bulk-delete-selected-projects.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-bulk-deletion/display-two-letters-long-project.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-bulk-deletion/filter-two-letters-long-project.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-deletion/project-deletion.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-settings/only-on-project-settings.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-settings/override-global-settings.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-duplicate-keys.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-input.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-impossible-because-no-match.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-update-keys/bulk-update-success.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-impossible.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/project-update-keys/fine-grained-update-success.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/property-sets/all_types.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/property-sets/create.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/property-sets/delete.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/property-sets/reference.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/subcategories/global-subcategories-no-default.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/subcategories/global-subcategories.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/subcategories/project-subcategories-no-default.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/subcategories/project-subcategories.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/user-notif-settings/create_user_with_email.html [new file with mode: 0644]
it/it-tests/src/test/resources/administration/user-notif-settings/register_to_new_violations_on_project.html [new file with mode: 0644]

index 70c51189aa5661246351c2722f9b6f3ca48d085e..4df94489435de77a2a878bfcb1ae622dc6c9eabe 100644 (file)
@@ -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
index 295cf70e24bd8d065e65486066277d401640fb69..ef5117becb030252d63d1ca4915eade7ce9cb50b 100644 (file)
@@ -31,6 +31,8 @@
 
   <modules>
     <module>l10n-fr-pack</module>
+    <module>property-sets-plugin</module>
     <module>sonar-fake-plugin</module>
+    <module>sonar-subcategories-plugin</module>
   </modules>
 </project>
diff --git a/it/it-plugins/property-sets-plugin/pom.xml b/it/it-plugins/property-sets-plugin/pom.xml
new file mode 100644 (file)
index 0000000..2138613
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.sonarsource.it</groupId>
+    <artifactId>it-plugins</artifactId>
+    <version>5.2-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>property-sets-plugin</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>sonar-plugin</packaging>
+  <description>Plugins :: Property Sets</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.sonar</groupId>
+      <artifactId>sonar-plugin-api</artifactId>
+      <version>${apiVersion}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.sonar</groupId>
+        <artifactId>sonar-packaging-maven-plugin</artifactId>
+        <version>1.12.1</version>
+        <extensions>true</extensions>
+        <configuration>
+          <pluginClass>PropertySetsPlugin</pluginClass>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
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 (file)
index 0000000..ab84cf6
--- /dev/null
@@ -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 (file)
index 0000000..69817d7
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.sonarsource.it</groupId>
+    <artifactId>it-plugins</artifactId>
+    <version>5.2-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>sonar-subcategories-plugin</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>sonar-plugin</packaging>
+
+  <name>Plugins :: SubCategories</name>
+  <description>Plugins :: SubCategories</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.sonar</groupId>
+      <artifactId>sonar-plugin-api</artifactId>
+      <version>${apiVersion}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.sonar</groupId>
+        <artifactId>sonar-packaging-maven-plugin</artifactId>
+        <version>1.12.1</version>
+        <extensions>true</extensions>
+        <configuration>
+          <pluginClass>SubCategoriesPlugin</pluginClass>
+        </configuration>
+      </plugin>
+
+
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>native2ascii-maven-plugin</artifactId>
+        <version>1.0-beta-1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>native2ascii</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
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 (file)
index 0000000..21dbd27
--- /dev/null
@@ -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 (file)
index 0000000..c5cba9d
--- /dev/null
@@ -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 (file)
index 0000000..a081a0e
--- /dev/null
@@ -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 (file)
index 0000000..74d29a4
--- /dev/null
@@ -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 (file)
index 0000000..7812e41
--- /dev/null
@@ -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 (file)
index 0000000..fcedab8
--- /dev/null
@@ -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 (file)
index 0000000..796d90c
--- /dev/null
@@ -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 (file)
index 0000000..63df5ad
--- /dev/null
@@ -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 (file)
index 0000000..7e6ca90
--- /dev/null
@@ -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 (file)
index 0000000..ca8404b
--- /dev/null
@@ -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 (file)
index 0000000..b83c3af
--- /dev/null
@@ -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 (file)
index 0000000..3947d3b
--- /dev/null
@@ -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 (file)
index 0000000..e597dab
--- /dev/null
@@ -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 (file)
index 0000000..20b8bb3
--- /dev/null
@@ -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 (file)
index 0000000..3947d3b
--- /dev/null
@@ -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 (file)
index 0000000..21d69f7
--- /dev/null
@@ -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 (file)
index 0000000..7935cb5
--- /dev/null
@@ -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 (file)
index 0000000..9e4aa0e
--- /dev/null
@@ -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 (file)
index 0000000..41871e1
--- /dev/null
@@ -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 (file)
index 0000000..3f73ea8
--- /dev/null
@@ -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 (file)
index 0000000..644da40
--- /dev/null
@@ -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 (file)
index 0000000..b54c1ee
--- /dev/null
@@ -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 (file)
index 0000000..97d9b7a
--- /dev/null
@@ -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 (file)
index 0000000..6b1b7f9
--- /dev/null
@@ -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 (file)
index 0000000..d963cd7
--- /dev/null
@@ -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 (file)
index 0000000..4e45f99
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>remove_user_role</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+  <td>open</td>
+  <td>/sonar/sessions/logout</td>
+  <td></td>
+</tr>
+<tr>
+  <td>open</td>
+  <td>/sonar/project_roles/index/sample</td>
+  <td></td>
+</tr>
+<tr>
+  <td>type</td>
+  <td>login</td>
+  <td>admin</td>
+</tr>
+<tr>
+  <td>type</td>
+  <td>password</td>
+  <td>admin</td>
+</tr>
+<tr>
+  <td>clickAndWait</td>
+  <td>commit</td>
+  <td></td>
+</tr>
+<tr>
+  <td>click</td>
+  <td>id=select-user-edit-groups</td>
+  <td></td>
+</tr>
+<tr>
+  <td>waitForText</td>
+  <td>id=modal</td>
+  <td>*Edit Permission*</td>
+</tr>
+<tr>
+  <td>waitForElementPresent</td>
+  <td>name=Anyone</td>
+  <td></td>
+</tr>
+<tr>
+  <td>click</td>
+  <td>name=Anyone</td>
+  <td></td>
+</tr>
+<tr>
+  <td>click</td>
+  <td>name=deselected</td>
+  <td></td>
+</tr>
+<tr>
+  <td>waitForElementPresent</td>
+  <td>name=sonar-administrators</td>
+  <td></td>
+</tr>
+<tr>
+  <td>click</td>
+  <td>name=sonar-administrators</td>
+  <td></td>
+</tr>
+<tr>
+  <td>waitForElementNotPresent</td>
+  <td>name=sonar-administrators</td>
+  <td></td>
+</tr>
+<tr>
+  <td>clickAndWait</td>
+  <td>link=Close</td>
+  <td></td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>user-role-groups</td>
+  <td>sonar-administrators</td>
+</tr>
+<tr>
+  <td>open</td>
+  <td>/sonar/sessions/logout</td>
+  <td></td>
+</tr>
+<tr>
+  <td>open</td>
+  <td>/sonar/dashboard/index/sample</td>
+  <td></td>
+</tr>
+<tr>
+  <td>assertLocation</td>
+  <td>*/sessions/new</td>
+  <td></td>
+</tr>
+<tr>
+  <td>assertElementPresent</td>
+  <td>login_form</td>
+  <td></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..e562216
--- /dev/null
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>create</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/settings?category=DEV</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_value</td>
+        <td>FIRST</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>css=button.add_value</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>xpath=(//input[@id='input_value'])[2]</td>
+        <td>SECOND</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>css=button.add_value</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>xpath=(//input[@id='input_value'])[3]</td>
+        <td>THIRD</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>2</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..0cc6d84
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>update</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/settings?category=DEV</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>link=Delete</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>2</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..1845a5a
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>should-display-alerts-correctly-history-page</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <thead>
+    <tr>
+        <td rowspan="1" colspan="3">should-display-alerts-correctly-history-page</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/dashboard/index/sample</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>link=History</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=History</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>//img[@title='Quality Gate Status: Green (was Orange). ']</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>//img[@title='Quality Gate Status: Orange. Lines > 5']</td>
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..9c4db5c
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>should-display-alerts-correctly-history-page</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <thead>
+    <tr>
+        <td rowspan="1" colspan="3">should-display-alerts-correctly-history-page</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/login</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/widget?id=alerts&amp;resource=sample</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>class=alerts</td>
+       <td>glob:*Lines*0 &lt; 10*since previous analysis*</td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>class=alert_ERROR</td>
+       <td>0</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..f913727
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>override-global-settings</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <thead>
+    <tr>
+        <td rowspan="1" colspan="3">override-global-settings</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/project/settings/com.sonarsource.it.samples%3Amulti-modules-sample%3Amodule_a</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>name=commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>plugins</td>
+       <td>*Settings*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..81317f9
--- /dev/null
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>create-user</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/users</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>name=commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=user_login</td>
+        <td>profileadm</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=user_name</td>
+        <td>Profile Admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=user_password</td>
+        <td>papwd</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=user_password_confirmation</td>
+        <td>papwd</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>name=commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Groups</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=group_name</td>
+        <td>profile-admins</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>name=commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=select-profile-admins</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>addSelection</td>
+        <td>id=from</td>
+        <td>label=Profile Admin</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=select_right</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=save</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Administrators</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>xpath=(//a[contains(text(),'select')])[4]</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>addSelection</td>
+        <td>id=from</td>
+        <td>label=profile-admins</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=select_right</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=save</td>
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..ee78c44
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>create-user</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/users</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>name=commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=create-link-user</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForVisible</td>
+       <td>user_create_form</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=user_login</td>
+       <td>user</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=user_name</td>
+       <td>Simple User</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=user_password</td>
+       <td>userpwd</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=user_password_confirmation</td>
+       <td>userpwd</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>name=commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForVisible</td>
+       <td>info</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>info</td>
+       <td>*User is created*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..2c1a2f0
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>project-modify-versions</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <thead>
+  <tr>
+    <td rowspan="1" colspan="3">project-modify-versions</td>
+  </tr>
+  </thead>
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sonar/sessions/logout</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/sonar/sessions/login</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>login</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>password</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/sonar/project/history/com.sonarsource.it.samples:multi-modules-sample</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>link=Remove</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertConfirmation</td>
+    <td>Are you sure you want to remove &quot;RELEASE&quot; from this snapshot?</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>infomsg</td>
+    <td>glob:*Version &quot;RELEASE&quot; was removed from current project and all its sub-projects*</td>
+  </tr>
+  <tr>
+    <td>assertNotText</td>
+    <td>version_1</td>
+    <td>glob:*RELEASE*</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..aa3fb40
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>project-modify-versions</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <thead>
+  <tr>
+    <td rowspan="1" colspan="3">project-modify-versions</td>
+  </tr>
+  </thead>
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sonar/sessions/logout</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/sonar/sessions/login</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>login</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>password</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/sonar/project/history/com.sonarsource.it.samples:multi-modules-sample</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertElementNotPresent</td>
+    <td>link=Remove</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>click</td>
+    <td>version_1_change</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>version_name_1</td>
+    <td>RELEASE</td>
+  </tr>
+  <tr>
+    <td>keyUp</td>
+    <td>version_name_1</td>
+    <td>a</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>save_version_1</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForElementPresent</td>
+    <td>infomsg</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>infomsg</td>
+    <td>Version &quot;RELEASE&quot; was created for current project and all its sub-projects.</td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>version_1</td>
+    <td>glob:*RELEASE*</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..8ff4b70
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>bulk-delete-filter-projects</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/bulk_deletion</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*Bar-Sonar-Plugin*Foo-Application*Sample-Project*</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=resource_filter</td>
+        <td>s</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=filter_resources</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*Bar-Sonar-Plugin*Sample-Project*</td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*cameleon-3*cameleon-1*</td>
+    </tr>
+    <tr>
+        <td>assertTextNotPresent</td>
+        <td>content</td>
+        <td>*Foo-Application*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..7662c60
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>bulk-delete-selected-projects</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/bulk_deletion</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*Bar-Sonar-Plugin*Foo-Application*Sample-Project*</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=r-0</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=r-2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=delete_resources</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertConfirmation</td>
+        <td>Are you sure you want to delete the selected resources?</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>pause</td>
+        <td>12000</td>
+        <td>NOTE: necessary as the deletion is asynchronous</td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=r-1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*Foo-Application*</td>
+    </tr>
+    <tr>
+        <td>assertTextNotPresent</td>
+        <td>content</td>
+        <td>*Bar-Sonar-Plugin*Sample-Project*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..3f0095f
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>display-two-letters-long-project</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/bulk_deletion</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>resources-to-delete</td>
+        <td>*xo*xo*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..17e6732
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>filter-two-letters-long-project</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/bulk_deletion</td>
+        <td></td>
+    </tr>
+    <tr>
+      <td>type</td>
+      <td>id=resource_filter</td>
+      <td>xo</td>
+    </tr>
+    <tr>
+      <td>clickAndWait</td>
+      <td>id=filter_resources</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>assertText</td>
+      <td>resources-to-delete</td>
+      <td>*xo*xo*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..9de248d
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>project-deletion</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <thead>
+    <tr>
+        <td rowspan="1" colspan="3">project-deletion</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/login</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>project-deletion-with-admin-permission-on-project</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>password</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertTextPresent</td>
+       <td>Sample</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/dashboard/index/sample</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>link=Deletion</td>
+       <td></td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>link=Deletion</td>
+       <td></td>
+</tr>
+<tr>
+  <td>click</td>
+  <td>delete_resource</td>
+  <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>delete-project-form</td>
+       <td>*Delete Project*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>delete-project-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>pause</td>
+       <td>3000</td>
+       <td>NOTE: necessary as the deletion is asynchronous</td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertTextNotPresent</td>
+       <td>content</td>
+       <td>*Sample*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..f90a77b
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>override-global-settings</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <thead>
+    <tr>
+        <td rowspan="1" colspan="3">override-global-settings</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/project/settings/sample?category=project-only</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>name=commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_prop_only_on_project</td>
+        <td>foo</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_prop_only_on_project</td>
+        <td>foo</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..db0eab1
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>override-global-settings</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <thead>
+    <tr>
+        <td rowspan="1" colspan="3">override-global-settings</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/project/settings/sample?category=exclusions&amp;subcategory=files</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>name=commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=input_sonar.skippedModules</td>
+       <td>my-excluded-module</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=submit_settings</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertValue</td>
+       <td>id=input_sonar.skippedModules</td>
+       <td>my-excluded-module</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..7e3f7a6
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>bulk-update-impossible-because-duplicate-keys</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/login</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>link=Update Key</td>
+       <td></td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>link=Update Key</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=string_to_replace</td>
+       <td>com.sonarsource.it.samples:multi-modules-sample:module_a </td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=replacement_string</td>
+       <td>com.sonarsource.it.samples:multi-modules-sample:module_b </td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>id=bulk_update_button</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>content</td>
+       <td>*Bulk update can not be performed*The replacement of &quot;com.sonarsource.it.samples:multi-modules-sample:module_a&quot; by &quot;com.sonarsource.it.samples:multi-modules-sample:module_b&quot; is impossible as it would result in duplicate keys (in red below):*</td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>content</td>
+       <td>*Duplicate key*</td>
+</tr>
+<tr>
+       <td>assertElementNotPresent</td>
+       <td>id=bulk_update_button</td>
+       <td></td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>Link=Back</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>content</td>
+       <td>*Update Key*com.sonarsource.it.samples:multi-modules-sample*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..3f925bc
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>bulk-update-impossible-because-no-input</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>link=Update Key</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Update Key</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=bulk_update_button</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*The two fields can not be blank for the bulk update.*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..7bd3404
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>bulk-update-impossible-because-no-match</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>link=Update Key</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Update Key</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=string_to_replace</td>
+        <td>foo</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=replacement_string</td>
+        <td>org.sonar</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=bulk_update_button</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*Bulk update can not be performed*No key contains the string to replace (&quot;foo&quot;).*</td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=bulk_update_button</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>Link=Back</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*Update Key*com.sonarsource.it.samples:multi-modules-sample*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..1a778ec
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>bulk-update-success</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/login</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>link=Update Key</td>
+       <td></td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>link=Update Key</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=string_to_replace</td>
+       <td>com.sonarsource</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=replacement_string</td>
+       <td>org.sonar</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>id=bulk_update_button</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>content</td>
+       <td>*Do you really want to perform the bulk update on project keys?*</td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>content</td>
+       <td>*com.sonarsource.it.samples:multi-modules-sample*org.sonar.it.samples:multi-modules-sample*</td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>content</td>
+       <td>*com.sonarsource.it.samples:multi-modules-sample:module_a*org.sonar.it.samples:multi-modules-sample:module_a*</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>id=bulk_update_button</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>content</td>
+       <td>*The key has successfully been updated for all required resources.*</td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>content</td>
+       <td>*org.sonar.it.samples:multi-modules-sample*</td>
+</tr>
+<tr>
+       <td>assertTextNotPresent</td>
+       <td>content</td>
+       <td>*com.sonarsource.it.samples:multi-modules-sample*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..c4191f9
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>fine-grained-update-impossible</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>link=Update Key</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Update Key</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=key_05</td>
+        <td>com.sonarsource.it.samples:multi-modules-sample:module_b</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=update_key_05</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertConfirmation</td>
+        <td>*Are you sure you want to rename &quot;com.sonarsource.it.samples:multi-modules-sample:module_*&quot;, as well as all its modules and resources?*</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>id=error</td>
+        <td>*&quot;com.sonarsource.it.samples:multi-modules-sample:module_*&quot; can not be renamed because &quot;com.sonarsource.it.samples:multi-modules-sample:module_b&quot; is the key of an existing resource. The update has been canceled.*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..aaa1d99
--- /dev/null
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>fine-grained-update-success</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/login</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/dashboard/index/com.sonarsource.it.samples:multi-modules-sample</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>link=Update Key</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Update Key</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=key_02</td>
+        <td>com.sonarsource.it.samples:module_c1</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=update_key_02</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertConfirmation</td>
+        <td>*Are you sure you want to rename "com.sonarsource.it.samples:multi-modules-sample:module_*", as well as all its modules and resources?*</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*The key has successfully been updated for all required resources.*</td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>content</td>
+        <td>*com.sonarsource.it.samples:module_c1*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..e12fac9
--- /dev/null
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>all_types</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/settings?category=DEV</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_text</td>
+        <td>text</td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>id=input_boolean</td>
+        <td>label=True</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_float</td>
+        <td>42.0</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_license</td>
+        <td>abc</td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>id=input_metric</td>
+        <td>label=Overall condition coverage</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_password</td>
+        <td>abcde</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_regexp</td>
+        <td>.*</td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>id=input_list</td>
+        <td>label=AAA</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>2</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_text</td>
+        <td>text</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_boolean</td>
+        <td>true</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_float</td>
+        <td>42.0</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_license</td>
+        <td>abc</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_metric</td>
+        <td>overall_branch_coverage</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_password</td>
+        <td>{{*******************}}</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_regexp</td>
+        <td>exact:.*</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_list</td>
+        <td>AAA</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..6722841
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>create</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/settings?category=DEV</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_key</td>
+        <td>jira1</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_url</td>
+        <td>http://jira</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_port</td>
+        <td>12345</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>2</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_key</td>
+        <td>jira1</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_url</td>
+        <td>exact:http://jira</td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_port</td>
+        <td>12345</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..2e88111
--- /dev/null
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>delete</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/settings?category=DEV</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForValue</td>
+       <td>name=page_version</td>
+       <td>1</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=input_key</td>
+       <td>jira1</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=input_url</td>
+       <td>http://jira1</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>css=#block_sonar\.test\.jira\.servers .add_value</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>xpath=(//input[@id='input_key'])[2]</td>
+       <td>jira2</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>xpath=(//input[@id='input_url'])[2]</td>
+       <td>http://jira2</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=submit_settings</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForValue</td>
+       <td>name=page_version</td>
+       <td>2</td>
+</tr>
+<tr>
+       <td>assertValue</td>
+       <td>xpath=(//input[@id='input_key'])[1]</td>
+       <td>jira1</td>
+</tr>
+<tr>
+       <td>assertValue</td>
+       <td>xpath=(//input[@id='input_key'])[2]</td>
+       <td>jira2</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>xpath=(//a[contains(text(),'Delete')])[3]</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=submit_settings</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForValue</td>
+       <td>name=page_version</td>
+       <td>3</td>
+</tr>
+<tr>
+       <td>assertValue</td>
+       <td>xpath=(//input[@id='input_key'])[1]</td>
+       <td>jira1</td>
+</tr>
+<tr>
+       <td>waitForNotText</td>
+       <td>xpath=(//input[@id='input_key'])</td>
+       <td>*jira2*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..0792bc5
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>reference</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/settings?category=DEV</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>xpath=(//input[@id='input_key'])[1]</td>
+        <td>jira1</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>css=#block_sonar\.test\.jira\.servers .add_value</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>xpath=(//input[@id='input_key'])[2]</td>
+        <td>jira2</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>2</td>
+    </tr>
+    <tr>
+        <td>assertSelectOptions</td>
+        <td>id=input_sonar.test.jira</td>
+        <td>Default,jira1,jira2</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>xpath=(//a[contains(text(),'Delete')])[2]</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>3</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..f6b410b
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>global-subcategories</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/settings?category=Category 2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <!-- First subcategory should be selected by default -->
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop2_1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop2_2</td>
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..6f9896f
--- /dev/null
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>global-subcategories</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/settings?category=Category 1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop3</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop4</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Sub category 1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop3</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop4</td>
+        <td></td>
+    </tr>
+    <!-- Verify index attribute is taken into account -->
+    <tr>
+        <td>assertElementPresent</td>
+        <td>xpath=//.[@id='input_prop2']/following::input[@id='input_prop1']</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Sub category 2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_prop3</td>
+        <td>myValue</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>2</td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop3</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop4</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_prop3</td>
+        <td>myValue</td>
+    </tr>
+    <!-- SONAR-4473 -->
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Sub category 1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop1</td>
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..875e7fc
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>create</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/project/settings/sample?category=Category 2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <!-- First subcategory should be selected by default -->
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop2_1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop2_2</td>
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..e3284d6
--- /dev/null
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>create</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/project/settings/sample?category=Category 1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>1</td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop3</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop4</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Sub category 1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop3</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop4</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Sub category 2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=input_prop3</td>
+        <td>myValue2</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=submit_settings</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForValue</td>
+        <td>name=page_version</td>
+        <td>2</td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop2</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop3</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>id=input_prop4</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertValue</td>
+        <td>id=input_prop3</td>
+        <td>myValue2</td>
+    </tr>
+    <!-- SONAR-4473 -->
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Sub category 1</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>id=input_prop1</td>
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..d969dbe
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>create_user_with_email</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <thead>
+    <tr>
+        <td rowspan="1" colspan="3">create_user_with_email</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/users</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=create-link-user</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForVisible</td>
+       <td>user_create_form</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>user_login</td>
+       <td>tester</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>user_name</td>
+       <td>Tester</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>user_email</td>
+       <td>tester@example.org</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>user_password</td>
+       <td>tester</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>user_password_confirmation</td>
+       <td>tester</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
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 (file)
index 0000000..207a3dc
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>register_to_new_violations_on_project</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>tester</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>tester</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/account/index</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>new_project</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>typeAndWait</td>
+        <td>new_project</td>
+        <td>com.sonarsource.it.projects.rule:notification-for-new-violations</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>//input[@value='Save changes']</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>notif_form</td>
+        <td>*New violations*notification-for-new-violations*Email*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>