Skip to content

Commit 73d0e36

Browse files
rantoniukPawel Kozikowski
andauthored
Add JIRA_ISSUES_SIZE to the JiraEnvironmentVariableBuilder (#707)
* Add configurable JIRA_ISSUES_SIZE to the JiraEnvironmentVariableBuilder --------- Co-authored-by: Pawel Kozikowski <pawel.kozikowski@atos.net>
1 parent 91334a7 commit 73d0e36

File tree

7 files changed

+99
-37
lines changed

7 files changed

+99
-37
lines changed

src/main/java/hudson/plugins/jira/JiraEnvironmentContributingAction.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,44 @@
66
import hudson.model.InvisibleAction;
77

88
/*
9-
* JiraEnvironmentVariableBuilder adds an instance of this class to the build to
10-
* provide the environment variables
9+
* JiraEnvironmentVariableBuilder adds an instance of this class to the build to provide the environment variables
10+
*
1111
*/
1212
public class JiraEnvironmentContributingAction extends InvisibleAction implements EnvironmentContributingAction {
1313

1414
public static final String ISSUES_VARIABLE_NAME = "JIRA_ISSUES";
1515
public static final String JIRA_URL_VARIABLE_NAME = "JIRA_URL";
16+
public static final String ISSUES_SIZE_VARIABLE_NAME = "JIRA_ISSUES_SIZE";
1617

1718
private final String issuesList;
1819

20+
private final Integer issuesSize;
21+
1922
private final String jiraUrl;
2023

2124
public String getIssuesList() {
2225
return issuesList;
2326
}
2427

28+
public Integer getNumberOfIssues() {
29+
return issuesSize;
30+
}
31+
2532
public String getJiraUrl() {
2633
return jiraUrl;
2734
}
2835

29-
public JiraEnvironmentContributingAction(String issuesList, String jiraUrl) {
36+
public JiraEnvironmentContributingAction(String issuesList, Integer issuesSize, String jiraUrl) {
3037
this.issuesList = issuesList;
38+
this.issuesSize = issuesSize;
3139
this.jiraUrl = jiraUrl;
3240
}
3341

3442
@Override
3543
public void buildEnvVars(AbstractBuild<?, ?> ab, EnvVars ev) {
3644
if (ev != null) {
37-
ev.put(ISSUES_VARIABLE_NAME, issuesList);
45+
ev.put(ISSUES_VARIABLE_NAME, getIssuesList());
46+
ev.put(ISSUES_SIZE_VARIABLE_NAME, getNumberOfIssues().toString());
3847
ev.put(JIRA_URL_VARIABLE_NAME, getJiraUrl());
3948
}
4049
}

src/main/java/hudson/plugins/jira/JiraEnvironmentVariableBuilder.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package hudson.plugins.jira;
22

3-
import hudson.AbortException;
43
import hudson.Extension;
54
import hudson.Launcher;
65
import hudson.model.AbstractBuild;
@@ -12,6 +11,7 @@
1211
import hudson.tasks.Builder;
1312
import java.io.IOException;
1413
import java.util.Set;
14+
import jenkins.model.Jenkins;
1515
import org.apache.commons.lang.StringUtils;
1616
import org.kohsuke.stapler.DataBoundConstructor;
1717

@@ -46,18 +46,23 @@ public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListen
4646
JiraSite site = getSiteForProject(build.getProject());
4747

4848
if (site == null) {
49-
throw new AbortException(Messages.JiraEnvironmentVariableBuilder_NoJiraSite());
49+
listener.getLogger().println(Messages.JiraEnvironmentVariableBuilder_NoJiraSite());
50+
return false;
5051
}
5152

5253
Set<String> ids = getIssueSelector().findIssueIds(build, site, listener);
5354

5455
String idList = StringUtils.join(ids, ",");
56+
Integer idListSize = ids.size();
5557

5658
listener.getLogger()
5759
.println(Messages.JiraEnvironmentVariableBuilder_Updating(
5860
JiraEnvironmentContributingAction.ISSUES_VARIABLE_NAME, idList));
61+
listener.getLogger()
62+
.println(Messages.JiraEnvironmentVariableBuilder_Updating(
63+
JiraEnvironmentContributingAction.ISSUES_SIZE_VARIABLE_NAME, idListSize));
5964

60-
build.addAction(new JiraEnvironmentContributingAction(idList, site.getName()));
65+
build.addAction(new JiraEnvironmentContributingAction(idList, idListSize, site.getName()));
6166

6267
return true;
6368
}
@@ -77,5 +82,9 @@ public boolean isApplicable(Class<? extends AbstractProject> klass) {
7782
public String getDisplayName() {
7883
return Messages.JiraEnvironmentVariableBuilder_DisplayName();
7984
}
85+
86+
public boolean hasIssueSelectors() {
87+
return Jenkins.get().getDescriptorList(AbstractIssueSelector.class).size() > 0;
88+
}
8089
}
8190
}

src/main/java/hudson/plugins/jira/versionparameter/JiraVersionParameterDefinition.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public JiraVersionParameterDefinition(
3737
String jiraShowReleased,
3838
String jiraShowArchived,
3939
String jiraShowUnreleased) {
40-
super(name, description);
40+
super(name);
41+
setDescription(description);
4142
setJiraProjectKey(jiraProjectKey);
4243
setJiraReleasePattern(jiraReleasePattern);
4344
setJiraShowReleased(jiraShowReleased);

src/main/resources/hudson/plugins/jira/JiraEnvironmentVariableBuilder/help.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<div>Available variables:</div>
44
<ul>
55
<li>JIRA_ISSUES - A comma separated list of issues which are referenced in the version control system changelog</li>
6+
<li>JIRA_ISSUES_SIZE - Size of the list described above</li>
67
<li>JIRA_URL - Primary URL for the Jira server </li>
78
</ul>
89
<p>

src/test/java/hudson/plugins/jira/JiraEnvironmentContributingActionTest.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,39 @@
1313

1414
class JiraEnvironmentContributingActionTest {
1515
private static final String JIRA_URL = "http://example.com";
16-
private static final String JIRA_URL_PROPERTY_NAME = "JIRA_URL";
17-
private static final String ISSUES_PROPERTY_NAME = "JIRA_ISSUES";
1816
private static final String ISSUES_LIST = "ISS-1,ISS-2";
17+
private static final Integer ISSUES_SIZE = 2;
1918

2019
@Test
21-
void buildEnvVarsEnvIsNull() {
22-
JiraEnvironmentContributingAction action = new JiraEnvironmentContributingAction(ISSUES_LIST, JIRA_URL);
20+
public void buildEnvVarsEnvIsNull() {
21+
JiraEnvironmentContributingAction action =
22+
new JiraEnvironmentContributingAction(ISSUES_LIST, ISSUES_SIZE, JIRA_URL);
2323
AbstractBuild build = mock(AbstractBuild.class);
2424

2525
action.buildEnvVars(build, null);
2626
// just expecting no exception
2727
}
2828

2929
@Test
30-
void buildEnvVarsAddVariables() {
31-
JiraEnvironmentContributingAction action = new JiraEnvironmentContributingAction(ISSUES_LIST, JIRA_URL);
32-
AbstractBuild build = mock(AbstractBuild.class);
30+
public void buildEnvVarsAddVariables() {
31+
JiraEnvironmentContributingAction action =
32+
new JiraEnvironmentContributingAction(ISSUES_LIST, ISSUES_SIZE, JIRA_URL);
33+
AbstractBuild<?, ?> build = mock(AbstractBuild.class);
3334
EnvVars envVars = mock(EnvVars.class);
3435

3536
action.buildEnvVars(build, envVars);
3637

3738
ArgumentCaptor<String> keys = ArgumentCaptor.forClass(String.class);
3839
ArgumentCaptor<String> values = ArgumentCaptor.forClass(String.class);
39-
verify(envVars, times(2)).put(keys.capture(), values.capture());
40+
verify(envVars, times(3)).put(keys.capture(), values.capture());
4041

41-
assertThat(keys.getAllValues().get(0), is(ISSUES_PROPERTY_NAME));
42+
assertThat(keys.getAllValues().get(0), is(JiraEnvironmentContributingAction.ISSUES_VARIABLE_NAME));
4243
assertThat(values.getAllValues().get(0), is(ISSUES_LIST));
4344

44-
assertThat(keys.getAllValues().get(1), is(JIRA_URL_PROPERTY_NAME));
45-
assertThat(values.getAllValues().get(1), is(JIRA_URL));
45+
assertThat(keys.getAllValues().get(1), is(JiraEnvironmentContributingAction.ISSUES_SIZE_VARIABLE_NAME));
46+
assertThat(values.getAllValues().get(1), is(ISSUES_SIZE.toString()));
47+
48+
assertThat(keys.getAllValues().get(2), is(JiraEnvironmentContributingAction.JIRA_URL_VARIABLE_NAME));
49+
assertThat(values.getAllValues().get(2), is(JIRA_URL));
4650
}
4751
}

src/test/java/hudson/plugins/jira/JiraEnvironmentVariableBuilderTest.java

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
import static org.hamcrest.CoreMatchers.instanceOf;
55
import static org.hamcrest.CoreMatchers.is;
66
import static org.hamcrest.MatcherAssert.assertThat;
7-
import static org.junit.jupiter.api.Assertions.assertThrows;
7+
import static org.junit.Assert.assertEquals;
8+
import static org.junit.jupiter.api.Assertions.assertTrue;
89
import static org.mockito.Mockito.doReturn;
910
import static org.mockito.Mockito.mock;
1011
import static org.mockito.Mockito.spy;
12+
import static org.mockito.Mockito.times;
1113
import static org.mockito.Mockito.verify;
1214
import static org.mockito.Mockito.when;
1315

14-
import hudson.AbortException;
1516
import hudson.EnvVars;
1617
import hudson.Launcher;
1718
import hudson.model.AbstractBuild;
@@ -21,20 +22,23 @@
2122
import hudson.model.Node;
2223
import hudson.plugins.jira.selector.AbstractIssueSelector;
2324
import hudson.plugins.jira.selector.DefaultIssueSelector;
25+
import hudson.plugins.jira.selector.ExplicitIssueSelector;
2426
import java.io.IOException;
2527
import java.io.PrintStream;
2628
import java.util.Arrays;
2729
import java.util.LinkedHashSet;
30+
import org.junit.Rule;
2831
import org.junit.jupiter.api.BeforeEach;
2932
import org.junit.jupiter.api.Test;
33+
import org.jvnet.hudson.test.JenkinsRule;
34+
import org.jvnet.hudson.test.WithoutJenkins;
35+
import org.jvnet.hudson.test.junit.jupiter.WithJenkins;
3036
import org.mockito.ArgumentCaptor;
31-
import org.mockito.Mockito;
3237

38+
@WithJenkins
3339
class JiraEnvironmentVariableBuilderTest {
3440

3541
private static final String JIRA_URL = "http://example.com";
36-
private static final String JIRA_URL_PROPERTY_NAME = "JIRA_URL";
37-
private static final String ISSUES_PROPERTY_NAME = "JIRA_ISSUES";
3842
private static final String ISSUE_ID_1 = "ISS-1";
3943
private static final String ISSUE_ID_2 = "ISS-2";
4044

@@ -47,12 +51,15 @@ class JiraEnvironmentVariableBuilderTest {
4751
Launcher launcher;
4852
BuildListener listener;
4953
EnvVars env;
50-
AbstractProject project;
54+
AbstractProject<?, ?> project;
5155
JiraSite site;
5256
AbstractIssueSelector issueSelector;
5357
PrintStream logger;
5458
Node node;
5559

60+
@Rule
61+
JenkinsRule jenkinsRule = new JenkinsRule();
62+
5663
@BeforeEach
5764
void createMocks() throws IOException, InterruptedException {
5865
build = mock(AbstractBuild.class);
@@ -76,29 +83,33 @@ void createMocks() throws IOException, InterruptedException {
7683
}
7784

7885
@Test
79-
void issueSelectorDefaultsToDefault() {
86+
@WithoutJenkins
87+
public void testIssueSelectorDefaultsToDefault() {
8088
final JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(null);
8189
assertThat(builder.getIssueSelector(), instanceOf(DefaultIssueSelector.class));
8290
}
8391

8492
@Test
85-
void setIssueSelectorPersists() {
93+
@WithoutJenkins
94+
public void testSetIssueSelectorPersists() {
8695
final JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(issueSelector);
8796
assertThat(builder.getIssueSelector(), is(issueSelector));
8897
}
8998

9099
@Test
91-
void performWithNoSiteFailsBuild() {
100+
@WithoutJenkins
101+
public void testPerformWithNoSiteFailsBuild() throws InterruptedException, IOException {
92102
JiraEnvironmentVariableBuilder builder = spy(new JiraEnvironmentVariableBuilder(issueSelector));
93-
doReturn(null).when(builder).getSiteForProject(Mockito.any());
94-
assertThrows(AbortException.class, () -> builder.perform(build, launcher, listener));
103+
doReturn(null).when(builder).getSiteForProject(project);
104+
assertThat(builder.perform(build, launcher, listener), is(false));
105+
verify(logger, times(1)).println(Messages.JiraEnvironmentVariableBuilder_NoJiraSite());
95106
}
96107

97108
@Test
98-
void performAddsAction() throws InterruptedException, IOException {
109+
@WithoutJenkins
110+
public void testPerformAddsAction() throws InterruptedException, IOException {
99111
JiraEnvironmentVariableBuilder builder = spy(new JiraEnvironmentVariableBuilder(issueSelector));
100-
doReturn(site).when(builder).getSiteForProject(Mockito.any());
101-
112+
doReturn(site).when(builder).getSiteForProject(project);
102113
boolean result = builder.perform(build, launcher, listener);
103114

104115
assertThat(result, is(true));
@@ -112,5 +123,25 @@ void performAddsAction() throws InterruptedException, IOException {
112123

113124
assertThat(action.getJiraUrl(), is(JIRA_URL));
114125
assertThat(action.getIssuesList(), anyOf(is(EXPECTED_JIRA_ISSUES_1), is(EXPECTED_JIRA_ISSUES_2)));
126+
assertThat(action.getNumberOfIssues(), is(2));
127+
}
128+
129+
@Test
130+
public void testHasIssueSelectors_HasDefaultSelector(JenkinsRule r) {
131+
JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(null);
132+
assertThat(builder.getIssueSelector(), instanceOf(DefaultIssueSelector.class));
133+
JiraEnvironmentVariableBuilder.DescriptorImpl descriptor =
134+
(JiraEnvironmentVariableBuilder.DescriptorImpl) r.jenkins.getDescriptor(builder.getClass());
135+
assertTrue(descriptor.hasIssueSelectors());
136+
}
137+
138+
@Test
139+
public void testHasIssueSelectors(JenkinsRule r) {
140+
ExplicitIssueSelector explicitIssueSelector = new ExplicitIssueSelector();
141+
JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(explicitIssueSelector);
142+
assertEquals(explicitIssueSelector, builder.getIssueSelector());
143+
JiraEnvironmentVariableBuilder.DescriptorImpl descriptor =
144+
(JiraEnvironmentVariableBuilder.DescriptorImpl) r.jenkins.getDescriptor(builder.getClass());
145+
assertTrue(descriptor.hasIssueSelectors());
115146
}
116147
}

src/test/java/hudson/plugins/jira/versionparameter/JiraVersionParameterDefinitionTest.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import hudson.cli.CLICommand;
88
import hudson.model.Job;
9-
import hudson.model.ParameterDefinition;
109
import hudson.model.ParameterValue;
1110
import hudson.plugins.jira.JiraSession;
1211
import hudson.plugins.jira.JiraSite;
@@ -54,12 +53,20 @@ void createMocksAndVersions() {
5453

5554
@Test
5655
void parameterValueMethodOverrides() throws Exception {
57-
ParameterDefinition definition =
58-
new JiraVersionParameterDefinition("pname", "pdesc", "JIRAKEY", null, "false", "false", "false");
56+
JiraVersionParameterDefinition definition =
57+
new JiraVersionParameterDefinition("pname", "pdesc", "JIRAKEY", null, "false", "true", "true");
58+
59+
assertEquals("JIRAKEY", definition.getJiraProjectKey());
60+
assertEquals("false", definition.getJiraShowReleased());
61+
assertEquals("true", definition.getJiraShowArchived());
62+
assertEquals("true", definition.getJiraShowUnreleased());
63+
64+
assertEquals("pdesc", definition.getDescription());
65+
5966
CLICommand cliCommand = mock(CLICommand.class);
6067

6168
ParameterValue value = definition.createValue(cliCommand, "Jira Version 1.2.3");
62-
assertEquals("pname", value.getName());
69+
assertEquals(definition.getName(), value.getName());
6370
assertEquals("Jira Version 1.2.3", value.getValue());
6471
}
6572

0 commit comments

Comments
 (0)