@Test public void testParseProjectNoTracker() throws IOException, JSONException { String json = MyIOUtils.getResourceAsString("redmine_project_no_trackers.json"); Project project = RedmineJSONParser.parseProject(RedmineJSONParser.getResponseSingleObject(json, "project")); List<Tracker> trackers = project.getTrackers(); Assert.assertNull("Trackers list must be NULL", trackers); }
@Test public void testMultilineIssueDescription() throws IOException, JSONException { final String json = MyIOUtils.getResourceAsString("issue_with_multiline_description.json"); final Issue issue = RedmineJSONParser.parseIssue(RedmineJSONParser.getResponseSingleObject(json, "issue")); Assert.assertEquals( "This is a description \nwith more than \n\n\none line.", issue.getDescription()); }
/* Gson parser is bad at detecting errors :( */ @Ignore @Test public void testMailformedProject() throws IOException, JSONException { /* Check parser correctness */ try { String json = MyIOUtils.getResourceAsString("mailformed_redmine_project.json"); RedmineJSONParser.parseProject(RedmineJSONParser.getResponseSingleObject(json, "project")); } catch (JSONException e) { Assert.assertNotSame("Empty input", e.getMessage()); } }
@Test public void testParseInvalidPage() { try { String text = MyIOUtils.getResourceAsString("invalid_page.txt"); RedmineJSONParser.getResponse(text); Assert.fail("Must have failed with RuntimeException"); } catch (IOException e) { Assert.fail(e.getMessage()); } catch (JSONException e) { // success } }
@Test public void doesNotFailWithNoNews() { // "news" xml with no items in the list should not break the loader. try { String str = MyIOUtils.getResourceAsString("redmine_news_empty.json"); List<News> news = JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(str), "news", RedmineJSONParser.NEWS_PARSER); Assert.assertTrue(news.isEmpty()); } catch (Exception e) { Assert.fail("Error:" + e); } }
@Test public void testParseIssueNonUnicodeSymbols() throws IOException, JSONException { String json = MyIOUtils.getResourceAsString("issues_foreign_symbols.json"); String nonLatinAccentSymbols = "Accent symbols: Ação"; String nonLatinRussianSymbols = "Russian symbols: Привет"; List<Issue> issues = JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(json), "issues", RedmineJSONParser.ISSUE_PARSER); // must be 2 issues in the file Assert.assertTrue(issues.size() == 2); assertNotNull(RedmineTestUtils.findIssueInList(issues, nonLatinRussianSymbols)); assertNotNull(RedmineTestUtils.findIssueInList(issues, nonLatinAccentSymbols)); }
@Test public void testParseUsers() throws IOException, JSONException { String json = MyIOUtils.getResourceAsString("redmine_users.json"); List<User> users = JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(json), "users", RedmineJSONParser.USER_PARSER); boolean found = false; for (User u : users) { if (u.getLogin().equals("dina")) { found = true; } } Assert.assertTrue("Admin user must be among all the users", found); }
@Test public void parses2NewsItems() { // "news" xml with no items in the list should not break the loader. try { String str = MyIOUtils.getResourceAsString("redmine_news_2_items.json"); List<News> news = JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(str), "news", RedmineJSONParser.NEWS_PARSER); assertEquals(2, news.size()); News anyItem = news.get(0); assertEquals("rest last", anyItem.getUser().getFullName()); } catch (Exception e) { Assert.fail("Error:" + e); } }
/** * regression test for http://code.google.com/p/redmine-java-api/issues/detail?id=91 with Redmine * 1.3.0: NULL value returned by getIssues call is interpreted as 0.0 */ @Test public void nullEstimatedTimeProcessedCorrectlyWithRedmine122() { try { String str = MyIOUtils.getResourceAsString("redmine_1.2.2_dev_issues.json"); List<Issue> issues = JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(str), "issues", RedmineJSONParser.ISSUE_PARSER); Issue issue = RedmineTestUtils.findIssueInList(issues, 4808); assertNull(issue.getEstimatedHours()); Issue issue1 = RedmineTestUtils.findIssueInList(issues, 4809); assertNull(issue1.getEstimatedHours()); } catch (Exception e) { e.printStackTrace(); Assert.fail("Error:" + e); } }
@Test public void testParseIssuesFromEmptyList() { /* * issues result with no individual issues in the list should not break * the loader. */ try { String str = MyIOUtils.getResourceAsString(FILE_EMPTY_ISSUES); List<Issue> issues = JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(str), "issues", RedmineJSONParser.ISSUE_PARSER); Assert.assertTrue(issues.isEmpty()); } catch (Exception e) { e.printStackTrace(); Assert.fail("Error:" + e); } }
@Test public void issueStatusesCanBeParsed() { try { String str = MyIOUtils.getResourceAsString("redmine_issue_statuses.json"); List<IssueStatus> statuses = JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(str), "statuses", RedmineJSONParser.STATUS_PARSER); assertEquals(6, statuses.size()); IssueStatus status5 = statuses.get(4); assertEquals(new Integer(5), status5.getId()); assertEquals("Closed", status5.getName()); assertEquals(false, status5.isDefaultStatus()); assertEquals(true, status5.isClosed()); } catch (Exception e) { e.printStackTrace(); Assert.fail("Error:" + e); } }
@Test public void testParseProjectRedmine() throws IOException, JSONException { String json = MyIOUtils.getResourceAsString("redmine_project.json"); Project project = RedmineJSONParser.parseProject(RedmineJSONParser.getResponseSingleObject(json, "project")); Integer expectedProjectID = 23; String expectedName = "test project"; String expectedKey = "test1295649781087"; Assert.assertEquals(expectedProjectID, project.getId()); Assert.assertEquals(expectedName, project.getName()); Assert.assertEquals(expectedKey, project.getIdentifier()); List<Tracker> trackers = project.getTrackers(); Assert.assertNotNull("Trackers list must not be NULL", trackers); Assert.assertEquals(3, trackers.size()); Tracker tracker = project.getTrackerByName("Support"); Assert.assertNotNull("Tracker must be not null", tracker); Integer expectedTrackerId = 3; Assert.assertEquals("checking id of 'support' tracker", expectedTrackerId, tracker.getId()); }
@Test public void testParseTimeEntries() throws IOException, JSONException { String xml = MyIOUtils.getResourceAsString("redmine_time_entries.json"); List<TimeEntry> objects = JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(xml), "time_entries", RedmineJSONParser.TIME_ENTRY_PARSER); Integer objId = 2; TimeEntry obj2 = RedmineTestUtils.findTimeEntry(objects, objId); Assert.assertNotNull(obj2); Integer expectedIssueId = 44; String expectedProjectName = "Permanent test project for Task Adapter"; Integer expectedProjectId = 1; String expectedUserName = "******"; Integer expectedUserId = 1; String expectedActivityName = "Design"; Integer expectedActivityId = 8; Float expectedHours = 2f; Assert.assertEquals(objId, obj2.getId()); Assert.assertEquals(expectedIssueId, obj2.getIssueId()); Assert.assertEquals(expectedProjectName, obj2.getProjectName()); Assert.assertEquals(expectedProjectId, obj2.getProjectId()); Assert.assertEquals(expectedUserName, obj2.getUserName()); Assert.assertEquals(expectedUserId, obj2.getUserId()); Assert.assertEquals(expectedActivityName, obj2.getActivityName()); Assert.assertEquals(expectedActivityId, obj2.getActivityId()); Assert.assertEquals(expectedHours, obj2.getHours()); Assert.assertEquals("spent 2 hours working on ABC", obj2.getComment()); DateComparator.testLongDate( 2011, Calendar.JANUARY, 31, 11, 10, 40, "GMT-8", obj2.getCreatedOn()); DateComparator.testLongDate( 2011, Calendar.JANUARY, 31, 11, 12, 32, "GMT-8", obj2.getUpdatedOn()); DateComparator.testShortDate(2011, Calendar.JANUARY, 30, obj2.getSpentOn()); }
private List<Issue> loadRedmine11Issues() throws IOException, JSONException { String json = MyIOUtils.getResourceAsString(REDMINE_ISSUES); return JsonInput.getListOrEmpty( RedmineJSONParser.getResponse(json), "issues", RedmineJSONParser.ISSUE_PARSER); }