package com.taskadapter.redmineapi.internal; import org.junit.Test; import java.text.ParseException; import java.util.Date; import static com.taskadapter.redmineapi.internal.RedmineDateParser.parse; import static org.assertj.core.api.Assertions.assertThat; public class RedmineDateParserTest { private static final LocalDateFormat FULL_DATE_FORMAT_V3 = new LocalDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz"); @Test public void allRedmineDateFormatsAreParsed() throws ParseException { // Redmine 1.x short format dateIsParsedTo("2015/03/11", new Date(115, 02, 11)); // Redmine 1.x long format dateIsParsedTo("2015/03/11 17:22:37 -0700", "2015-03-11T17:22:37.000PDT"); // Redmine 2.x short format dateIsParsedTo("2015-03-11", new Date(115, 02, 11)); // Redmine 2.x long format dateIsParsedTo("2015-03-12T00:22:37Z", "2015-03-11T17:22:37.000PDT"); // Redmine 3.0 long format dateIsParsedTo("2015-03-12T00:22:37.123Z", "2015-03-11T17:22:37.123PDT"); } private void dateIsParsedTo(String originalDateString, String expectedDateString) throws ParseException { assertThat(parse(originalDateString)).isEqualTo(getDate(expectedDateString)); } private void dateIsParsedTo(String originalDateString, Date expectedDate) throws ParseException { assertThat(parse(originalDateString)).isEqualTo(expectedDate); } private static Date getDate(String str) { try { return FULL_DATE_FORMAT_V3.get().parse(str); } catch (ParseException e) { throw new RuntimeException(e); } } }