1
0
Fork 0

Formatting

master
Marius Merkevicius 2016-10-17 08:10:06 +03:00
parent c0b9f1ae11
commit 46c1a0f4ae
3 changed files with 175 additions and 168 deletions

View File

@ -11,29 +11,30 @@ import org.joda.time.PeriodType;
*/ */
public class WorklogUtils { public class WorklogUtils {
/** /**
* Formats duration time into pretty string format * Formats duration time into pretty string format
* Does not output seconds * Does not output seconds
* @param durationInSeconds provided duration to format *
* @return formatted duration * @param durationInSeconds provided duration to format
*/ * @return formatted duration
public static String formatDurationFromSeconds(long durationInSeconds) { */
if (durationInSeconds < 60) public static String formatDurationFromSeconds(long durationInSeconds) {
return "0m"; if (durationInSeconds < 60)
StringBuilder builder = new StringBuilder(); return "0m";
PeriodType type = PeriodType.forFields(new DurationFieldType[]{ StringBuilder builder = new StringBuilder();
DurationFieldType.hours(), PeriodType type = PeriodType.forFields(new DurationFieldType[]{
DurationFieldType.minutes() DurationFieldType.hours(),
}); DurationFieldType.minutes()
});
Period period = new Period(1000 * durationInSeconds, type); Period period = new Period(1000 * durationInSeconds, type);
if (period.getHours() != 0) if (period.getHours() != 0)
builder.append(period.getHours()).append("h").append(" "); builder.append(period.getHours()).append("h").append(" ");
if (period.getMinutes() != 0) if (period.getMinutes() != 0)
builder.append(period.getMinutes()).append("m").append(" "); builder.append(period.getMinutes()).append("m").append(" ");
if ((builder.length() > 0) && builder.charAt(builder.length()-1) == " ".charAt(0)) if ((builder.length() > 0) && builder.charAt(builder.length() - 1) == " ".charAt(0))
builder.deleteCharAt(builder.length()-1); builder.deleteCharAt(builder.length() - 1);
return builder.toString(); return builder.toString();
} }
} }

View File

@ -7,124 +7,121 @@ import org.joda.time.DateTime;
import org.junit.Test; import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.*; import static org.junit.Assert.assertNotNull;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
/** /**
* Created by mariusmerkevicius on 1/30/16. * Created by mariusmerkevicius on 1/30/16.
*/ */
public class IssueWorklogTest { public class IssueWorklogTest {
@Test @Test
public void testParsing_inputValid_shouldCreateJsonObject() throws Exception { public void testParsing_inputValid_shouldCreateJsonObject() throws Exception {
// Arrange // Arrange
// Act // Act
JSONObject worklogObject = (JSONObject) JSONSerializer.toJSON(RESPONSE_WORKLOG_BODY); JSONObject worklogObject = (JSONObject) JSONSerializer.toJSON(RESPONSE_WORKLOG_BODY);
// Assert // Assert
assertNotNull(worklogObject); assertNotNull(worklogObject);
}
@Test
public void testParsing_inputValidJson_shouldCreateWorklog() throws Exception {
// Arrange
// Act
WorkLog workLog = new WorkLog(mock(RestClient.class), (JSONObject) JSONSerializer.toJSON(RESPONSE_WORKLOG_BODY));
// Assert
assertThat(workLog).isNotNull();
assertThat(workLog.getAuthor()).isNotNull();
assertThat(workLog.getSelf()).isEqualTo("https://jira.test.lt/rest/api/2/issue/32374/worklog/80720");
assertThat(workLog.getId()).isEqualTo("80720");
assertThat(workLog.getComment()).isEqualTo("Test");
assertThat(workLog.getCreatedDate().getTime()).isEqualTo(1454104800000L);
assertThat(workLog.getUpdatedDate().getTime()).isEqualTo(1454104800000L);
assertThat(workLog.getStarted().getTime()).isEqualTo(1453879853201L);
assertThat(workLog.getTimeSpent()).isEqualTo("5m");
assertThat(workLog.getTimeSpentSeconds()).isEqualTo(300);
}
@Test
public void testAdding_inputValid_shouldInvokeAdding() throws Exception {
// Arrange
Issue issue = mock(Issue.class);
issue.restclient = mock(RestClient.class);
doCallRealMethod().when(issue).addWorkLog(anyString(), any(DateTime.class), anyLong());
// Act
issue.addWorkLog("test", DateTime.now(), 60);
// Assert
verify(issue.restclient).post(anyString(), any(JSON.class));
}
@Test
public void testAdding_inputNullComment_shouldNotAdd() throws Exception {
// Arrange
Issue issue = mock(Issue.class);
issue.restclient = mock(RestClient.class);
doCallRealMethod().when(issue).addWorkLog(anyString(), any(DateTime.class), anyLong());
// Act
try {
issue.addWorkLog(null, DateTime.now(), 120);
} catch (JiraException e) {
assertThat(e).hasMessageContaining("Failed add worklog to issue");
} }
// Assert @Test
verify(issue.restclient, never()).post(anyString(), any(JSON.class)); public void testParsing_inputValidJson_shouldCreateWorklog() throws Exception {
} // Arrange
// Act
WorkLog workLog = new WorkLog(mock(RestClient.class), (JSONObject) JSONSerializer.toJSON(RESPONSE_WORKLOG_BODY));
@Test // Assert
public void testAdding_inputNullDateTime_shouldNotAdd() throws Exception { assertThat(workLog).isNotNull();
// Arrange assertThat(workLog.getAuthor()).isNotNull();
Issue issue = mock(Issue.class); assertThat(workLog.getSelf()).isEqualTo("https://jira.test.lt/rest/api/2/issue/32374/worklog/80720");
issue.restclient = mock(RestClient.class); assertThat(workLog.getId()).isEqualTo("80720");
doCallRealMethod().when(issue).addWorkLog(anyString(), any(DateTime.class), anyLong()); assertThat(workLog.getComment()).isEqualTo("Test");
assertThat(workLog.getCreatedDate().getTime()).isEqualTo(1454104800000L);
// Act assertThat(workLog.getUpdatedDate().getTime()).isEqualTo(1454104800000L);
try { assertThat(workLog.getStarted().getTime()).isEqualTo(1453879853201L);
issue.addWorkLog("asdf", null, 120); assertThat(workLog.getTimeSpent()).isEqualTo("5m");
} catch (JiraException e) { assertThat(workLog.getTimeSpentSeconds()).isEqualTo(300);
assertThat(e).hasMessageContaining("Failed add worklog to issue");
} }
// Assert @Test
verify(issue.restclient, never()).post(anyString(), any(JSON.class)); public void testAdding_inputValid_shouldInvokeAdding() throws Exception {
} // Arrange
Issue issue = mock(Issue.class);
issue.restclient = mock(RestClient.class);
doCallRealMethod().when(issue).addWorkLog(anyString(), any(DateTime.class), anyLong());
@Test // Act
public void testAdding_inputDurationTooLow_shouldNotAdd() throws Exception { issue.addWorkLog("test", DateTime.now(), 60);
// Arrange
Issue issue = mock(Issue.class);
issue.restclient = mock(RestClient.class);
doCallRealMethod().when(issue).addWorkLog(anyString(), any(DateTime.class), anyLong());
// Act // Assert
try { verify(issue.restclient).post(anyString(), any(JSON.class));
issue.addWorkLog("asdf", DateTime.now(), 30);
} catch (JiraException e) {
assertThat(e).hasMessageContaining("Failed add worklog to issue");
} }
// Assert @Test
verify(issue.restclient, never()).post(anyString(), any(JSON.class)); public void testAdding_inputNullComment_shouldNotAdd() throws Exception {
} // Arrange
Issue issue = mock(Issue.class);
issue.restclient = mock(RestClient.class);
doCallRealMethod().when(issue).addWorkLog(anyString(), any(DateTime.class), anyLong());
// Act
try {
issue.addWorkLog(null, DateTime.now(), 120);
} catch (JiraException e) {
assertThat(e).hasMessageContaining("Failed add worklog to issue");
}
// Assert
verify(issue.restclient, never()).post(anyString(), any(JSON.class));
}
@Test
public void testAdding_inputNullDateTime_shouldNotAdd() throws Exception {
// Arrange
Issue issue = mock(Issue.class);
issue.restclient = mock(RestClient.class);
doCallRealMethod().when(issue).addWorkLog(anyString(), any(DateTime.class), anyLong());
// Act
try {
issue.addWorkLog("asdf", null, 120);
} catch (JiraException e) {
assertThat(e).hasMessageContaining("Failed add worklog to issue");
}
// Assert
verify(issue.restclient, never()).post(anyString(), any(JSON.class));
}
@Test
public void testAdding_inputDurationTooLow_shouldNotAdd() throws Exception {
// Arrange
Issue issue = mock(Issue.class);
issue.restclient = mock(RestClient.class);
doCallRealMethod().when(issue).addWorkLog(anyString(), any(DateTime.class), anyLong());
// Act
try {
issue.addWorkLog("asdf", DateTime.now(), 30);
} catch (JiraException e) {
assertThat(e).hasMessageContaining("Failed add worklog to issue");
}
// Assert
verify(issue.restclient, never()).post(anyString(), any(JSON.class));
}
//region Constants //region Constants
// Mock response from jira // Mock response from jira
public static final String RESPONSE_WORKLOG_BODY = "{\"self\":\"https://jira.test.lt/rest/api/2/issue/32374/worklog/80720\",\"author\":{\"self\":\"https://jira.test.lt/rest/api/2/user?username=test%40test.lt\",\"name\":\"test@test.lt\",\"key\":\"test@test.lt\",\"emailAddress\":\"test@test.lt\",\"avatarUrls\":{\"48x48\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=48\",\"24x24\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=24\",\"16x16\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=16\",\"32x32\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=32\"},\"displayName\":\"Marius Merkevicius\",\"active\":true,\"timeZone\":\"Europe/Vilnius\"},\"updateAuthor\":{\"self\":\"https://jira.test.lt/rest/api/2/user?username=test%40test.lt\",\"name\":\"test@test.lt\",\"key\":\"test@test.lt\",\"emailAddress\":\"test@test.lt\",\"avatarUrls\":{\"48x48\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=48\",\"24x24\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=24\",\"16x16\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=16\",\"32x32\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=32\"},\"displayName\":\"Marius Merkevicius\",\"active\":true,\"timeZone\":\"Europe/Vilnius\"},\"comment\":\"Test\",\"created\":\"2016-01-30T20:46:16.583+0200\",\"updated\":\"2016-01-30T20:46:16.583+0200\",\"started\":\"2016-01-27T09:30:53.201+0200\",\"timeSpent\":\"5m\",\"timeSpentSeconds\":300,\"id\":\"80720\"}";
//endregion public static final String RESPONSE_WORKLOG_BODY = "{\"self\":\"https://jira.test.lt/rest/api/2/issue/32374/worklog/80720\",\"author\":{\"self\":\"https://jira.test.lt/rest/api/2/user?username=test%40test.lt\",\"name\":\"test@test.lt\",\"key\":\"test@test.lt\",\"emailAddress\":\"test@test.lt\",\"avatarUrls\":{\"48x48\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=48\",\"24x24\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=24\",\"16x16\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=16\",\"32x32\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=32\"},\"displayName\":\"Marius Merkevicius\",\"active\":true,\"timeZone\":\"Europe/Vilnius\"},\"updateAuthor\":{\"self\":\"https://jira.test.lt/rest/api/2/user?username=test%40test.lt\",\"name\":\"test@test.lt\",\"key\":\"test@test.lt\",\"emailAddress\":\"test@test.lt\",\"avatarUrls\":{\"48x48\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=48\",\"24x24\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=24\",\"16x16\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=16\",\"32x32\":\"https://secure.gravatar.com/avatar/e4dacfe8f27cb89341bf990e556a4be0?d=mm&s=32\"},\"displayName\":\"Marius Merkevicius\",\"active\":true,\"timeZone\":\"Europe/Vilnius\"},\"comment\":\"Test\",\"created\":\"2016-01-30T20:46:16.583+0200\",\"updated\":\"2016-01-30T20:46:16.583+0200\",\"started\":\"2016-01-27T09:30:53.201+0200\",\"timeSpent\":\"5m\",\"timeSpentSeconds\":300,\"id\":\"80720\"}";
//endregion
} }

View File

@ -8,64 +8,73 @@ import static org.junit.Assert.assertEquals;
* Created by mariusmerkevicius on 1/30/16. * Created by mariusmerkevicius on 1/30/16.
*/ */
public class WorklogUtilsFormatDurationTest { public class WorklogUtilsFormatDurationTest {
@Test
public void testEmpty() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(0));
}
@Test @Test
public void testNegative() throws Exception { public void testEmpty() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(-200)); assertEquals("0m", WorklogUtils.formatDurationFromSeconds(0));
} }
@Test public void testLowSecond() throws Exception { @Test
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(1)); public void testNegative() throws Exception {
} assertEquals("0m", WorklogUtils.formatDurationFromSeconds(-200));
}
@Test public void testSeconds() throws Exception { @Test
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(59)); public void testLowSecond() throws Exception {
} assertEquals("0m", WorklogUtils.formatDurationFromSeconds(1));
}
@Test public void testMinutes() throws Exception { @Test
assertEquals("1m", WorklogUtils.formatDurationFromSeconds(60)); public void testSeconds() throws Exception {
} assertEquals("0m", WorklogUtils.formatDurationFromSeconds(59));
}
@Test public void testMinutesAndSeconds() throws Exception { @Test
assertEquals("1m", WorklogUtils.formatDurationFromSeconds( public void testMinutes() throws Exception {
60 // 1 minute assertEquals("1m", WorklogUtils.formatDurationFromSeconds(60));
+ 2) // 2 seconds }
);
}
@Test public void testMinutesAndSeconds2() throws Exception { @Test
assertEquals("2m", WorklogUtils.formatDurationFromSeconds( public void testMinutesAndSeconds() throws Exception {
60 // 1 minute assertEquals("1m", WorklogUtils.formatDurationFromSeconds(
+ 72) // 72 seconds 60 // 1 minute
); + 2) // 2 seconds
} );
}
@Test public void testHours() throws Exception { @Test
assertEquals("1h 10m", WorklogUtils.formatDurationFromSeconds( public void testMinutesAndSeconds2() throws Exception {
(60 * 60) // 1 hour assertEquals("2m", WorklogUtils.formatDurationFromSeconds(
+ (10 * 60) // 10 minutes 60 // 1 minute
+ 3) // 3 seconds + 72) // 72 seconds
); );
} }
@Test public void testDays() throws Exception { @Test
assertEquals("50h 20m", WorklogUtils.formatDurationFromSeconds( public void testHours() throws Exception {
(60 * 60 * 50) // 50 hours assertEquals("1h 10m", WorklogUtils.formatDurationFromSeconds(
+ (60 * 20) // 20 minutes (60 * 60) // 1 hour
+ (3) // s seconds + (10 * 60) // 10 minutes
)); + 3) // 3 seconds
} );
}
@Test public void testDays2() throws Exception { @Test
assertEquals("50h 22m", WorklogUtils.formatDurationFromSeconds( public void testDays() throws Exception {
(60 * 60 * 50) // 50 hours assertEquals("50h 20m", WorklogUtils.formatDurationFromSeconds(
+ (60 * 20) // 20 minutes (60 * 60 * 50) // 50 hours
+ (125) // 125 seconds + (60 * 20) // 20 minutes
)); + (3) // s seconds
} ));
}
@Test
public void testDays2() throws Exception {
assertEquals("50h 22m", WorklogUtils.formatDurationFromSeconds(
(60 * 60 * 50) // 50 hours
+ (60 * 20) // 20 minutes
+ (125) // 125 seconds
));
}
} }