package com.taskadapter.redmineapi.internal;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.Assert.assertTrue;
import com.taskadapter.redmineapi.bean.Group;
import com.taskadapter.redmineapi.bean.GroupFactory;
import com.taskadapter.redmineapi.bean.IssueFactory;
import com.taskadapter.redmineapi.bean.User;
import com.taskadapter.redmineapi.bean.UserFactory;
import org.junit.Test;
import com.taskadapter.redmineapi.bean.Issue;
import com.taskadapter.redmineapi.bean.Version;
import com.taskadapter.redmineapi.bean.VersionFactory;
import com.taskadapter.redmineapi.bean.CustomField;
import com.taskadapter.redmineapi.bean.CustomFieldFactory;
import java.util.Collections;
public class RedmineJSONBuilderTest {
@Test
public void priorityIdIsAddedToJsonIfProvided() {
Issue issue = new Issue();
issue.setPriorityId(1);
final String generatedJSON = RedmineJSONBuilder.toSimpleJSON(
"some_project_key", issue, RedmineJSONBuilder::writeIssue);
assertTrue(generatedJSON.contains("\"priority_id\":1"));
}
/**
* Tests whether custom fields are serialized to the JSON of a {@link Version}
*/
@Test
public void customFieldsAreWrittenToVersionIfProvided() {
Version version = VersionFactory.create(1);
CustomField field = CustomFieldFactory.create(2, "myName", "myValue");
version.addCustomFields(Collections.singletonList(field));
final String json = RedmineJSONBuilder.toSimpleJSON("dummy", version, RedmineJSONBuilder::writeVersion);
assertTrue(json.contains("\"custom_field_values\":{\"2\":\"myValue\"}"));
}
@Test
public void fieldsExplicitlySetToNullAreAddedToIssueJSonAsNull() {
Issue issue = IssueFactory.create(null);
issue.setSubject("subj1");
issue.setDescription(null);
issue.setDoneRatio(null);
issue.setParentId(null);
issue.setAssigneeId(null);
issue.setEstimatedHours(null);
issue.setSpentHours(null);
issue.setNotes(null);
final String generatedJSON = RedmineJSONBuilder.toSimpleJSON("some_project_key", issue, RedmineJSONBuilder::writeIssue);
assertThat(generatedJSON).contains("\"id\":null");
assertThat(generatedJSON).contains("\"subject\":\"subj1\"");
assertThat(generatedJSON).contains("\"description\":null");
assertThat(generatedJSON).contains("\"done_ratio\":null");
assertThat(generatedJSON).contains("\"parent_issue_id\":null");
assertThat(generatedJSON).contains("\"assigned_to_id\":null");
assertThat(generatedJSON).contains("\"estimated_hours\":null");
assertThat(generatedJSON).contains("\"spent_hours\":null");
assertThat(generatedJSON).contains("\"notes\":null");
}
@Test
public void onlyExplicitlySetFieldsAreAddedToUserJSon() {
User user = UserFactory.create();
user.setLogin("login1");
user.setMail(null);
user.setStatus(null);
final String generatedJSON = RedmineJSONBuilder.toSimpleJSON("some_project_key", user, RedmineJSONBuilder::writeUser);
assertThat(generatedJSON).contains("\"login\":\"login1\",");
assertThat(generatedJSON).contains("\"mail\":null");
assertThat(generatedJSON).contains("\"status\":null");
assertThat(generatedJSON).doesNotContain("\"id\"");
}
@Test
public void onlyExplicitlySetFieldsAreAddedToGroupJSon() {
Group groupWithoutName = GroupFactory.create(4);
final String generatedJSON = RedmineJSONBuilder.toSimpleJSON("some_project_key", groupWithoutName, RedmineJSONBuilder::writeGroup);
assertThat(generatedJSON).doesNotContain("\"name\"");
Group groupWithName = GroupFactory.create(4);
groupWithName.setName("some name");
final String generatedJSONWithName = RedmineJSONBuilder.toSimpleJSON("some_project_key", groupWithName, RedmineJSONBuilder::writeGroup);
assertThat(generatedJSONWithName).contains("\"name\":\"some name\"");
}
}