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

View File

@ -7,124 +7,121 @@ import org.joda.time.DateTime;
import org.junit.Test;
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.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.*;
/**
* Created by mariusmerkevicius on 1/30/16.
*/
public class IssueWorklogTest {
@Test
public void testParsing_inputValid_shouldCreateJsonObject() throws Exception {
// Arrange
// Act
JSONObject worklogObject = (JSONObject) JSONSerializer.toJSON(RESPONSE_WORKLOG_BODY);
@Test
public void testParsing_inputValid_shouldCreateJsonObject() throws Exception {
// Arrange
// Act
JSONObject worklogObject = (JSONObject) JSONSerializer.toJSON(RESPONSE_WORKLOG_BODY);
// Assert
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
assertNotNull(worklogObject);
}
// Assert
verify(issue.restclient, never()).post(anyString(), any(JSON.class));
}
@Test
public void testParsing_inputValidJson_shouldCreateWorklog() throws Exception {
// Arrange
// Act
WorkLog workLog = new WorkLog(mock(RestClient.class), (JSONObject) JSONSerializer.toJSON(RESPONSE_WORKLOG_BODY));
@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
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);
}
// Assert
verify(issue.restclient, never()).post(anyString(), any(JSON.class));
}
@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());
@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
issue.addWorkLog("test", DateTime.now(), 60);
// Act
try {
issue.addWorkLog("asdf", DateTime.now(), 30);
} catch (JiraException e) {
assertThat(e).hasMessageContaining("Failed add worklog to issue");
// Assert
verify(issue.restclient).post(anyString(), any(JSON.class));
}
// Assert
verify(issue.restclient, never()).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
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
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\"}";
// Mock response from jira
//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.
*/
public class WorklogUtilsFormatDurationTest {
@Test
public void testEmpty() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(0));
}
@Test
public void testNegative() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(-200));
}
@Test
public void testEmpty() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(0));
}
@Test public void testLowSecond() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(1));
}
@Test
public void testNegative() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(-200));
}
@Test public void testSeconds() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(59));
}
@Test
public void testLowSecond() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(1));
}
@Test public void testMinutes() throws Exception {
assertEquals("1m", WorklogUtils.formatDurationFromSeconds(60));
}
@Test
public void testSeconds() throws Exception {
assertEquals("0m", WorklogUtils.formatDurationFromSeconds(59));
}
@Test public void testMinutesAndSeconds() throws Exception {
assertEquals("1m", WorklogUtils.formatDurationFromSeconds(
60 // 1 minute
+ 2) // 2 seconds
);
}
@Test
public void testMinutes() throws Exception {
assertEquals("1m", WorklogUtils.formatDurationFromSeconds(60));
}
@Test public void testMinutesAndSeconds2() throws Exception {
assertEquals("2m", WorklogUtils.formatDurationFromSeconds(
60 // 1 minute
+ 72) // 72 seconds
);
}
@Test
public void testMinutesAndSeconds() throws Exception {
assertEquals("1m", WorklogUtils.formatDurationFromSeconds(
60 // 1 minute
+ 2) // 2 seconds
);
}
@Test public void testHours() throws Exception {
assertEquals("1h 10m", WorklogUtils.formatDurationFromSeconds(
(60 * 60) // 1 hour
+ (10 * 60) // 10 minutes
+ 3) // 3 seconds
);
}
@Test
public void testMinutesAndSeconds2() throws Exception {
assertEquals("2m", WorklogUtils.formatDurationFromSeconds(
60 // 1 minute
+ 72) // 72 seconds
);
}
@Test public void testDays() throws Exception {
assertEquals("50h 20m", WorklogUtils.formatDurationFromSeconds(
(60 * 60 * 50) // 50 hours
+ (60 * 20) // 20 minutes
+ (3) // s seconds
));
}
@Test
public void testHours() throws Exception {
assertEquals("1h 10m", WorklogUtils.formatDurationFromSeconds(
(60 * 60) // 1 hour
+ (10 * 60) // 10 minutes
+ 3) // 3 seconds
);
}
@Test public void testDays2() throws Exception {
assertEquals("50h 22m", WorklogUtils.formatDurationFromSeconds(
(60 * 60 * 50) // 50 hours
+ (60 * 20) // 20 minutes
+ (125) // 125 seconds
));
}
@Test
public void testDays() throws Exception {
assertEquals("50h 20m", WorklogUtils.formatDurationFromSeconds(
(60 * 60 * 50) // 50 hours
+ (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
));
}
}