Implement create-version-from-property action
Change-Id: I7dfbbe15077fea4c3d2a56d8f395e71530dbf794
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/jira/JiraClient.java b/src/main/java/com/googlesource/gerrit/plugins/its/jira/JiraClient.java
index 4a77ca3..5fd69ba 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/jira/JiraClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/jira/JiraClient.java
@@ -30,6 +30,7 @@
import com.googlesource.gerrit.plugins.its.jira.restapi.JiraRestApiProvider;
import com.googlesource.gerrit.plugins.its.jira.restapi.JiraServerInfo;
import com.googlesource.gerrit.plugins.its.jira.restapi.JiraTransition;
+import com.googlesource.gerrit.plugins.its.jira.restapi.JiraVersion;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@@ -101,6 +102,13 @@
}
}
+ public void createVersion(String projectKey, String version) throws IOException {
+ log.debug("Trying to create version {} on project {}", version, projectKey);
+ JiraVersion jiraVersion = JiraVersion.builder().project(projectKey).name(version).build();
+ apiBuilder.getVersions().doPost("", gson.toJson(jiraVersion), HTTP_CREATED);
+ log.debug("Version {} created on project {}", version, projectKey);
+ }
+
/**
* @param issueKey Jira Issue key
* @param transition JiraTransition.Item to perform
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/jira/JiraItsFacade.java b/src/main/java/com/googlesource/gerrit/plugins/its/jira/JiraItsFacade.java
index c14f2e6..4d066d5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/jira/JiraItsFacade.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/jira/JiraItsFacade.java
@@ -102,6 +102,16 @@
}
@Override
+ public void createVersion(String projectKey, String version) throws IOException {
+ execute(
+ () -> {
+ log.debug("Creating version {} on project {}", version, projectKey);
+ jiraClient.createVersion(projectKey, version);
+ return projectKey;
+ });
+ }
+
+ @Override
public boolean exists(String issueKey) throws IOException {
return execute(() -> jiraClient.issueExists(issueKey));
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
index d09441a..7ca8434 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
@@ -45,4 +45,8 @@
public JiraRestApi<JiraProject[]> getProjects() {
return get(JiraProject[].class, "/project");
}
+
+ public JiraRestApi<JiraVersion[]> getVersions() {
+ return get(JiraVersion[].class, "/version");
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraVersion.java b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraVersion.java
new file mode 100644
index 0000000..60a0b67
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraVersion.java
@@ -0,0 +1,135 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.its.jira.restapi;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/** Represents a version in JIRA. */
+public class JiraVersion {
+
+ private final String description;
+ private final String name;
+ private final boolean archived;
+ private final boolean released;
+ private final String releaseDate;
+ private final String project;
+ private final Long projectId;
+
+ private JiraVersion(
+ String description,
+ String name,
+ boolean archived,
+ boolean released,
+ Date releaseDate,
+ String project,
+ Long projectId) {
+ this.description = description;
+ this.name = name;
+ this.archived = archived;
+ this.released = released;
+ if (releaseDate == null) {
+ this.releaseDate = null;
+ } else {
+ this.releaseDate = new SimpleDateFormat("yyyy-MM-dd").format(releaseDate);
+ }
+ this.project = project;
+ this.projectId = projectId;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public boolean isArchived() {
+ return archived;
+ }
+
+ public boolean isReleased() {
+ return released;
+ }
+
+ public String getReleaseDate() {
+ return releaseDate;
+ }
+
+ public String getProject() {
+ return project;
+ }
+
+ public Long getProjectId() {
+ return projectId;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private String description;
+ private String name;
+ private boolean archived;
+ private boolean released;
+ private Date releaseDate;
+ private String project;
+ private Long projectId;
+
+ private Builder() {}
+
+ public Builder description(String description) {
+ this.description = description;
+ return this;
+ }
+
+ public Builder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public Builder archived(boolean archived) {
+ this.archived = archived;
+ return this;
+ }
+
+ public Builder released(boolean released) {
+ this.released = released;
+ return this;
+ }
+
+ public Builder releaseDate(Date releaseDate) {
+ this.releaseDate = releaseDate;
+ return this;
+ }
+
+ public Builder project(String project) {
+ this.project = project;
+ return this;
+ }
+
+ public Builder projectId(Long projectId) {
+ this.projectId = projectId;
+ return this;
+ }
+
+ public JiraVersion build() {
+ return new JiraVersion(
+ description, name, archived, released, releaseDate, project, projectId);
+ }
+ }
+}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/its/jira/JiraItsFacadeTest.java b/src/test/java/com/googlesource/gerrit/plugins/its/jira/JiraItsFacadeTest.java
index 6d645c8..b5bae41 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/its/jira/JiraItsFacadeTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/its/jira/JiraItsFacadeTest.java
@@ -36,6 +36,7 @@
private static final String ACTION = "action";
private static final String COMMENT = "comment";
private static final String ISSUE_KEY = "issueKey";
+ private static final String PROJECT_KEY = "projectKey";
@Mock private JiraClient jiraClient;
@@ -89,6 +90,13 @@
}
@Test
+ public void createVersion() throws IOException {
+ jiraFacade = new JiraItsFacade(jiraClient);
+ jiraFacade.createVersion(PROJECT_KEY, "1.0");
+ verify(jiraClient).createVersion(PROJECT_KEY, "1.0");
+ }
+
+ @Test
public void exists() throws IOException {
jiraFacade = new JiraItsFacade(jiraClient);
jiraFacade.exists(ISSUE_KEY);