Skip to content
This repository was archived by the owner on Jun 9, 2021. It is now read-only.

Commit e52ff1d

Browse files
committed
Validating button forms JSON #173
1 parent 1384dd2 commit e52ff1d

File tree

6 files changed

+102
-92
lines changed

6 files changed

+102
-92
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ Changelog of Pull Request Notifier for Bitbucket.
44

55
## Unreleased
66
### GitHub [#173](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/pull/173) Add the ability to specify forms for buttons
7+
Validating button forms JSON
8+
9+
[f2279ddefd9aee8](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/commit/f2279ddefd9aee8) Tomas Bjerre *2016-12-27 08:01:47*
10+
711
Refactoring button forms
812

913
* Triggering without showing dialog, if no form supplied.
@@ -25,7 +29,7 @@ Changelog of Pull Request Notifier for Bitbucket.
2529
### GitHub [#174](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/issues/174) java.lang.NullPointerException: null
2630
More information if header name/value missing
2731

28-
[82765ba693e04cd](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/commit/82765ba693e04cd) Tomas Bjerre *2016-12-26 21:18:18*
32+
[1384dd2418f3049](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/commit/1384dd2418f3049) Tomas Bjerre *2016-12-26 21:33:56*
2933

3034
### GitHub [#57](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket/issues/57) Trigger button: confirmation dialog
3135
Adding optional confirmation text to buttons

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ cd *
267267
git reset --hard $TO_HASH
268268
git status
269269
git remote add from $FROM_REPO
270-
git fetch from
270+
git fetch --all
271271
git merge $FROM_HASH
272272
git --no-pager log --max-count=10 --graph --abbrev-commit
273273

src/main/java/se/bjurr/prnfb/presentation/ButtonServlet.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@
66
import static javax.ws.rs.core.Response.status;
77
import static javax.ws.rs.core.Response.Status.OK;
88
import static javax.ws.rs.core.Response.Status.UNAUTHORIZED;
9-
import static se.bjurr.prnfb.presentation.dto.ButtonFormType.radio;
109
import static se.bjurr.prnfb.transformer.ButtonTransformer.toButtonDto;
1110
import static se.bjurr.prnfb.transformer.ButtonTransformer.toButtonDtoList;
1211
import static se.bjurr.prnfb.transformer.ButtonTransformer.toPrnfbButton;
1312
import static se.bjurr.prnfb.transformer.ButtonTransformer.toTriggerResultDto;
1413

15-
import java.util.ArrayList;
1614
import java.util.Collections;
1715
import java.util.List;
1816
import java.util.UUID;
@@ -29,7 +27,6 @@
2927
import javax.ws.rs.core.Response;
3028

3129
import com.atlassian.annotations.security.XsrfProtectionExcluded;
32-
import com.google.common.annotations.VisibleForTesting;
3330

3431
import se.bjurr.prnfb.http.NotificationResponse;
3532
import se.bjurr.prnfb.presentation.dto.ButtonDTO;
@@ -167,28 +164,6 @@ public Response get(@PathParam("uuid") UUID uuid) {
167164
return ok(dto, APPLICATION_JSON).build();
168165
}
169166

170-
@VisibleForTesting
171-
List<ButtonFormElementDTO> getButtonFormDTOList(List<ButtonFormElementDTO> buttonFormDtoList)
172-
throws Error {
173-
if (buttonFormDtoList == null || buttonFormDtoList.isEmpty()) {
174-
return new ArrayList<>();
175-
}
176-
for (ButtonFormElementDTO buttonFormDto : buttonFormDtoList) {
177-
if (isNullOrEmpty(buttonFormDto.getLabel())) {
178-
throw new Error("The label must be set.");
179-
}
180-
if (isNullOrEmpty(buttonFormDto.getName())) {
181-
throw new Error("The name must be set.");
182-
}
183-
if (buttonFormDto.getType() == radio
184-
&& (buttonFormDto.getButtonFormElementOptionList() == null
185-
|| buttonFormDto.getButtonFormElementOptionList().isEmpty())) {
186-
throw new Error("When adding radio buttons, options must also be defined.");
187-
}
188-
}
189-
return buttonFormDtoList;
190-
}
191-
192167
private void populateButtonFormDtoList(
193168
Integer repositoryId, Long pullRequestId, List<ButtonDTO> dtos) {
194169
for (ButtonDTO dto : dtos) {

src/main/java/se/bjurr/prnfb/transformer/ButtonTransformer.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
import static com.google.common.base.Strings.isNullOrEmpty;
44
import static com.google.common.collect.Lists.newArrayList;
55
import static se.bjurr.prnfb.presentation.dto.ButtonDTO.BUTTON_FORM_LIST_DTO_TYPE;
6+
import static se.bjurr.prnfb.presentation.dto.ButtonFormType.checkbox;
7+
import static se.bjurr.prnfb.presentation.dto.ButtonFormType.radio;
68

79
import java.net.URI;
810
import java.util.ArrayList;
911
import java.util.List;
1012
import java.util.UUID;
1113

14+
import com.google.common.annotations.VisibleForTesting;
1215
import com.google.gson.Gson;
1316
import com.google.gson.GsonBuilder;
1417

@@ -99,6 +102,7 @@ public static PrnfbButton toPrnfbButton(ButtonDTO buttonDto) {
99102
|| buttonFormDto.isEmpty() && !isNullOrEmpty(buttonDto.getButtonFormListString())) {
100103
buttonFormDto = gson.fromJson(buttonDto.getButtonFormListString(), BUTTON_FORM_LIST_DTO_TYPE);
101104
}
105+
validateButtonFormDTOList(buttonFormDto);
102106
List<PrnfbButtonFormElement> buttonFormElement = toPrnfbButtonElementList(buttonFormDto);
103107
return new PrnfbButton( //
104108
buttonDto.getUUID(), //
@@ -111,6 +115,26 @@ public static PrnfbButton toPrnfbButton(ButtonDTO buttonDto) {
111115
buttonFormElement); //
112116
}
113117

118+
@VisibleForTesting
119+
static void validateButtonFormDTOList(List<ButtonFormElementDTO> buttonFormDtoList) throws Error {
120+
if (buttonFormDtoList == null || buttonFormDtoList.isEmpty()) {
121+
return;
122+
}
123+
for (ButtonFormElementDTO buttonFormDto : buttonFormDtoList) {
124+
if (isNullOrEmpty(buttonFormDto.getLabel())) {
125+
throw new Error("The label must be set.");
126+
}
127+
if (isNullOrEmpty(buttonFormDto.getName())) {
128+
throw new Error("The name must be set.");
129+
}
130+
if ((buttonFormDto.getType() == radio || buttonFormDto.getType() == checkbox)
131+
&& (buttonFormDto.getButtonFormElementOptionList() == null
132+
|| buttonFormDto.getButtonFormElementOptionList().isEmpty())) {
133+
throw new Error("When adding radio buttons, options must also be defined.");
134+
}
135+
}
136+
}
137+
114138
private static List<PrnfbButtonFormElement> toPrnfbButtonElementList(
115139
List<ButtonFormElementDTO> buttonFormDtoList) {
116140
List<PrnfbButtonFormElement> to = new ArrayList<>();

src/test/java/se/bjurr/prnfb/presentation/ButtonServletTest.java

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@
22

33
import static com.google.common.collect.Lists.newArrayList;
44
import static org.assertj.core.api.Assertions.assertThat;
5-
import static org.assertj.core.api.Assertions.fail;
65
import static org.mockito.Matchers.anyListOf;
76
import static org.mockito.Matchers.anyString;
87
import static org.mockito.Mockito.mock;
98
import static org.mockito.Mockito.verify;
109
import static org.mockito.Mockito.when;
1110
import static org.mockito.MockitoAnnotations.initMocks;
12-
import static se.bjurr.prnfb.presentation.dto.ButtonFormType.radio;
13-
import static se.bjurr.prnfb.presentation.dto.ButtonFormType.textarea;
1411
import static se.bjurr.prnfb.settings.USER_LEVEL.EVERYONE;
1512
import static se.bjurr.prnfb.test.Podam.populatedInstanceOf;
1613
import static se.bjurr.prnfb.transformer.ButtonTransformer.toPrnfbButton;
@@ -30,7 +27,6 @@
3027
import org.mockito.stubbing.Answer;
3128

3229
import se.bjurr.prnfb.presentation.dto.ButtonDTO;
33-
import se.bjurr.prnfb.presentation.dto.ButtonFormElementDTO;
3430
import se.bjurr.prnfb.presentation.dto.ON_OR_OFF;
3531
import se.bjurr.prnfb.service.ButtonsService;
3632
import se.bjurr.prnfb.service.PrnfbRenderer.ENCODE_FOR;
@@ -292,65 +288,4 @@ public void testThatButtonCanBeUpdated() throws Exception {
292288
verify(this.settingsService) //
293289
.addOrUpdateButton(prnfbButton);
294290
}
295-
296-
@Test
297-
public void testThatButtonFormJsonStringCanBeTransormedToDTO() {
298-
299-
ButtonFormElementDTO button = new ButtonFormElementDTO();
300-
button.setDefaultValue("defaultValue");
301-
button.setDescription("descr");
302-
button.setLabel("label");
303-
button.setName("name");
304-
button.setRequired(true);
305-
button.setType(textarea);
306-
List<ButtonFormElementDTO> buttonFormDtoList = new ArrayList<>();
307-
buttonFormDtoList.add(button);
308-
List<ButtonFormElementDTO> actual = sut.getButtonFormDTOList(buttonFormDtoList);
309-
310-
assertThat(actual) //
311-
.isNotNull() //
312-
.hasSize(1);
313-
}
314-
315-
@Test
316-
public void testThatButtonFormJsonStringCanFindProblemsInJsonNoName() {
317-
ButtonFormElementDTO button = new ButtonFormElementDTO();
318-
button.setDefaultValue("defaultValue");
319-
button.setDescription("descr");
320-
button.setLabel("label");
321-
button.setName("");
322-
button.setRequired(true);
323-
button.setType(textarea);
324-
List<ButtonFormElementDTO> buttonFormDtoList = new ArrayList<>();
325-
buttonFormDtoList.add(button);
326-
try {
327-
sut.getButtonFormDTOList(buttonFormDtoList);
328-
} catch (Error e) {
329-
assertThat(e.getMessage()) //
330-
.isEqualTo("The name must be set.");
331-
return;
332-
}
333-
fail("No error from: " + buttonFormDtoList);
334-
}
335-
336-
@Test
337-
public void testThatButtonFormJsonStringCanFindProblemsInJsonNoRadioNoOptions() {
338-
ButtonFormElementDTO button = new ButtonFormElementDTO();
339-
button.setDefaultValue("defaultValue");
340-
button.setDescription("descr");
341-
button.setLabel("label");
342-
button.setName("name");
343-
button.setRequired(true);
344-
button.setType(radio);
345-
List<ButtonFormElementDTO> buttonFormDtoList = new ArrayList<>();
346-
buttonFormDtoList.add(button);
347-
try {
348-
sut.getButtonFormDTOList(buttonFormDtoList);
349-
} catch (Error e) {
350-
assertThat(e.getMessage()) //
351-
.isEqualTo("When adding radio buttons, options must also be defined.");
352-
return;
353-
}
354-
fail("No error from: " + buttonFormDtoList);
355-
}
356291
}

src/test/java/se/bjurr/prnfb/transformer/ButtonTransformerTest.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
package se.bjurr.prnfb.transformer;
22

33
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.Assertions.fail;
5+
import static se.bjurr.prnfb.presentation.dto.ButtonFormType.radio;
6+
import static se.bjurr.prnfb.presentation.dto.ButtonFormType.textarea;
47
import static se.bjurr.prnfb.test.Podam.populatedInstanceOf;
8+
import static se.bjurr.prnfb.transformer.ButtonTransformer.validateButtonFormDTOList;
59
import static se.bjurr.prnfb.transformer.SettingsTransformer.toDto;
610
import static se.bjurr.prnfb.transformer.SettingsTransformer.toPrnfbSettingsData;
711

12+
import java.util.ArrayList;
13+
import java.util.List;
14+
815
import org.junit.Test;
916

17+
import se.bjurr.prnfb.presentation.dto.ButtonFormElementDTO;
1018
import se.bjurr.prnfb.presentation.dto.SettingsDataDTO;
1119
import se.bjurr.prnfb.settings.ValidationException;
1220

@@ -23,4 +31,68 @@ public void testTransformation() throws ValidationException {
2331
assertThat(retransformedDto.hashCode()) //
2432
.isEqualTo(originalDto.hashCode());
2533
}
34+
35+
@Test
36+
public void testThatButtonFormJsonStringCanFindProblemsInJsonNoName() {
37+
ButtonFormElementDTO button = new ButtonFormElementDTO();
38+
button.setDefaultValue("defaultValue");
39+
button.setDescription("descr");
40+
button.setLabel("label");
41+
button.setName("");
42+
button.setRequired(true);
43+
button.setType(textarea);
44+
List<ButtonFormElementDTO> buttonFormDtoList = new ArrayList<>();
45+
buttonFormDtoList.add(button);
46+
try {
47+
validateButtonFormDTOList(buttonFormDtoList);
48+
} catch (Error e) {
49+
assertThat(e.getMessage()) //
50+
.isEqualTo("The name must be set.");
51+
return;
52+
}
53+
fail("No error from: " + buttonFormDtoList);
54+
}
55+
56+
@Test
57+
public void testThatButtonFormJsonStringCanFindProblemsInJsonNoRadioNoOptions() {
58+
ButtonFormElementDTO button = new ButtonFormElementDTO();
59+
button.setDefaultValue("defaultValue");
60+
button.setDescription("descr");
61+
button.setLabel("label");
62+
button.setName("name");
63+
button.setRequired(true);
64+
button.setType(radio);
65+
List<ButtonFormElementDTO> buttonFormDtoList = new ArrayList<>();
66+
buttonFormDtoList.add(button);
67+
try {
68+
validateButtonFormDTOList(buttonFormDtoList);
69+
} catch (Error e) {
70+
assertThat(e.getMessage()) //
71+
.isEqualTo("When adding radio buttons, options must also be defined.");
72+
return;
73+
}
74+
fail("No error from: " + buttonFormDtoList);
75+
}
76+
77+
@Test
78+
public void testThatButtonFormJsonStringCanFindProblemsInJsonNoRadioEmptyOptions() {
79+
ButtonFormElementDTO button = new ButtonFormElementDTO();
80+
button.setDefaultValue("defaultValue");
81+
button.setDescription("descr");
82+
button.setLabel("label");
83+
button.setName("name");
84+
button.setRequired(true);
85+
button.setType(radio);
86+
button.setButtonFormElementOptionList(new ArrayList<>());
87+
List<ButtonFormElementDTO> buttonFormDtoList = new ArrayList<>();
88+
buttonFormDtoList.add(button);
89+
try {
90+
validateButtonFormDTOList(buttonFormDtoList);
91+
} catch (Error e) {
92+
assertThat(e.getMessage()) //
93+
.isEqualTo("When adding radio buttons, options must also be defined.");
94+
return;
95+
}
96+
fail("No error from: " + buttonFormDtoList);
97+
}
2698
}

0 commit comments

Comments
 (0)