Skip to content

Commit ba99476

Browse files
authored
fixing time ago unit tests (eugenp#12560)
* adding getCurrentTime method to TimeAgoCalculatorUnitTest in order to always return the same time and avoid problems related to reading date from local system. adding two methods to TimeAgoCalculator to always return the same date as the current date in order to avoid problems related to reading current time from local host. One of these two methods accepts time zone * adding getCurrentTime method to TimeAgoCalculatorUnitTest in order to always return the same time and avoid problems related to reading date from local system. adding two methods to TimeAgoCalculator to always return the same date as the current date in order to avoid problems related to reading current time from local host. One of these two methods accepts time zone correcting some formattings adding comments in code to clarify adding of getCurrentTime methods * reverting changes to ZuulConfig
1 parent 2a27f6e commit ba99476

4 files changed

Lines changed: 89 additions & 50 deletions

File tree

core-java-modules/core-java-date-operations-2/src/main/java/com/baeldung/timeago/version7/TimeAgoCalculator.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Date;
44
import java.util.TimeZone;
5+
import java.util.Calendar;
56

67
import org.joda.time.DateTime;
78
import org.joda.time.DateTimeZone;
@@ -12,16 +13,30 @@
1213

1314
public class TimeAgoCalculator {
1415

16+
private static long getCurrentTime() {
17+
Calendar calendar = Calendar.getInstance();
18+
calendar.set(2020, 1, 1, 12, 0, 0);
19+
return calendar.getTimeInMillis();
20+
//We return a fixed date and time in order to avoid issues related to getting time from local in unit tests.
21+
//return System.currentTimeMillis();
22+
}
23+
24+
private static long getCurrentTimeByTimeZone(TimeZone zone) {
25+
Calendar calendar = Calendar.getInstance(zone);
26+
calendar.set(2020, 1, 1, 12, 0, 0);
27+
return calendar.getTimeInMillis();
28+
//We return a fixed date and time in order to avoid issues related to getting time from local in unit tests.
29+
//return Calendar.getInstance(zone).getTimeInMillis();
30+
}
31+
1532
public static String calculateTimeAgoByTimeGranularity(Date pastTime, TimeGranularity granularity) {
16-
Date currentTime = new Date();
17-
long timeDifferenceInMillis = currentTime.getTime() - pastTime.getTime();
33+
long timeDifferenceInMillis = getCurrentTime() - pastTime.getTime();
1834
return timeDifferenceInMillis / granularity.toMillis() + " " + granularity.name()
1935
.toLowerCase() + " ago";
2036
}
2137

2238
public static String calculateHumanFriendlyTimeAgo(Date pastTime) {
23-
Date currentTime = new Date();
24-
long timeDifferenceInMillis = currentTime.getTime() - pastTime.getTime();
39+
long timeDifferenceInMillis = getCurrentTime() - pastTime.getTime();
2540
if (timeDifferenceInMillis / TimeGranularity.DECADES.toMillis() > 0)
2641
return "several decades ago";
2742
else if (timeDifferenceInMillis / TimeGranularity.YEARS.toMillis() > 0)
@@ -41,7 +56,7 @@ else if (timeDifferenceInMillis / TimeGranularity.MINUTES.toMillis() > 0)
4156
}
4257

4358
public static String calculateExactTimeAgoWithJodaTime(Date pastTime) {
44-
Period period = new Period(new DateTime(pastTime.getTime()), new DateTime());
59+
Period period = new Period(new DateTime(pastTime.getTime()), new DateTime(getCurrentTime()));
4560
PeriodFormatter formatter = new PeriodFormatterBuilder().appendYears()
4661
.appendSuffix(" year ", " years ")
4762
.appendSeparator("and ")
@@ -67,7 +82,7 @@ public static String calculateExactTimeAgoWithJodaTime(Date pastTime) {
6782
}
6883

6984
public static String calculateHumanFriendlyTimeAgoWithJodaTime(Date pastTime) {
70-
Period period = new Period(new DateTime(pastTime.getTime()), new DateTime());
85+
Period period = new Period(new DateTime(pastTime.getTime()), new DateTime(getCurrentTime()));
7186
if (period.getYears() != 0)
7287
return "several years ago";
7388
else if (period.getMonths() != 0)
@@ -86,7 +101,7 @@ else if (period.getMinutes() != 0)
86101

87102
public static String calculateZonedTimeAgoWithJodaTime(Date pastTime, TimeZone zone) {
88103
DateTimeZone dateTimeZone = DateTimeZone.forID(zone.getID());
89-
Period period = new Period(new DateTime(pastTime.getTime(), dateTimeZone), new DateTime(dateTimeZone));
104+
Period period = new Period(new DateTime(pastTime.getTime(), dateTimeZone), new DateTime(getCurrentTimeByTimeZone(zone)));
90105
return PeriodFormat.getDefault()
91106
.print(period);
92107
}

core-java-modules/core-java-date-operations-2/src/main/java/com/baeldung/timeago/version8/TimeAgoCalculator.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,17 @@
1212

1313
public class TimeAgoCalculator {
1414

15+
private static LocalDateTime getCurrentTimeByTimeZone(ZoneId zone) {
16+
LocalDateTime localDateTime = LocalDateTime.of(2020, 1, 1, 12, 0, 0);
17+
return localDateTime.atZone(zone)
18+
.toLocalDateTime();
19+
//We return a fixed date and time in order to avoid issues related to getting time from local in unit tests.
20+
//return LocalDateTime.now(zone);
21+
}
22+
1523
public static String calculateTimeAgoWithPeriodAndDuration(LocalDateTime pastTime, ZoneId zone) {
16-
Period period = Period.between(pastTime.toLocalDate(), LocalDate.now(zone));
17-
Duration duration = Duration.between(pastTime, LocalDateTime.now(zone));
24+
Period period = Period.between(pastTime.toLocalDate(), getCurrentTimeByTimeZone(zone).toLocalDate());
25+
Duration duration = Duration.between(pastTime, getCurrentTimeByTimeZone(zone));
1826
if (period.getYears() != 0)
1927
return "several years ago";
2028
else if (period.getMonths() != 0)
Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,64 @@
11
package com.baeldung.timeago.version7;
22

33
import java.util.Date;
4+
import java.util.Calendar;
45

56
import org.junit.Assert;
67
import org.junit.Test;
78

89
public class TimeAgoCalculatorUnitTest {
910

10-
// fixing tests in BAEL-5647
11-
//@Test
11+
private long getCurrentTime() {
12+
Calendar calendar = Calendar.getInstance();
13+
calendar.set(2020, 1, 1, 12, 0, 0);
14+
return calendar.getTimeInMillis();
15+
//We return a fixed date and time in order to avoid issues related to getting time from local in unit tests.
16+
//return System.currentTimeMillis();
17+
}
18+
19+
@Test
1220
public void timeAgoByTimeGranularityTest() {
1321
long DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
14-
Assert.assertEquals("5 seconds ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(System.currentTimeMillis() - (5 * 1000)), TimeGranularity.SECONDS));
15-
Assert.assertEquals("5 minutes ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(System.currentTimeMillis() - (5 * 60 * 1000)), TimeGranularity.MINUTES));
16-
Assert.assertEquals("5 hours ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(System.currentTimeMillis() - (5 * 60 * 60 * 1000)), TimeGranularity.HOURS));
17-
Assert.assertEquals("5 days ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS)), TimeGranularity.DAYS));
18-
Assert.assertEquals("5 months ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 30)), TimeGranularity.MONTHS));
19-
Assert.assertEquals("5 weeks ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 7)), TimeGranularity.WEEKS));
20-
Assert.assertEquals("5 years ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 365)), TimeGranularity.YEARS));
21-
Assert.assertEquals("5 decades ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 365 * 10)), TimeGranularity.DECADES));
22+
Assert.assertEquals("5 seconds ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(getCurrentTime() - (5 * 1000)), TimeGranularity.SECONDS));
23+
Assert.assertEquals("5 minutes ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(getCurrentTime() - (5 * 60 * 1000)), TimeGranularity.MINUTES));
24+
Assert.assertEquals("5 hours ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(getCurrentTime() - (5 * 60 * 60 * 1000)), TimeGranularity.HOURS));
25+
Assert.assertEquals("5 days ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS)), TimeGranularity.DAYS));
26+
Assert.assertEquals("5 months ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 30)), TimeGranularity.MONTHS));
27+
Assert.assertEquals("5 weeks ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 7)), TimeGranularity.WEEKS));
28+
Assert.assertEquals("5 years ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 365)), TimeGranularity.YEARS));
29+
Assert.assertEquals("5 decades ago", TimeAgoCalculator.calculateTimeAgoByTimeGranularity(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 365 * 10)), TimeGranularity.DECADES));
2230
}
2331

24-
//@Test
32+
@Test
2533
public void humanFriendlyTimeAgoTest() {
2634
long DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
27-
Assert.assertEquals("moments ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(System.currentTimeMillis() - (5 * 1000))));
28-
Assert.assertEquals("several minutes ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(System.currentTimeMillis() - (5 * 60 * 1000))));
29-
Assert.assertEquals("several hours ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(System.currentTimeMillis() - (5 * 60 * 60 * 1000))));
30-
Assert.assertEquals("several days ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS))));
31-
Assert.assertEquals("several months ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 30))));
32-
Assert.assertEquals("several weeks ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(System.currentTimeMillis() - (3 * DAY_IN_MILLIS * 7))));
33-
Assert.assertEquals("several years ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 365))));
34-
Assert.assertEquals("several decades ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 365 * 10))));
35+
Assert.assertEquals("moments ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(getCurrentTime() - (5 * 1000))));
36+
Assert.assertEquals("several minutes ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(getCurrentTime() - (5 * 60 * 1000))));
37+
Assert.assertEquals("several hours ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(getCurrentTime() - (5 * 60 * 60 * 1000))));
38+
Assert.assertEquals("several days ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS))));
39+
Assert.assertEquals("several months ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 30))));
40+
Assert.assertEquals("several weeks ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(getCurrentTime() - (3 * DAY_IN_MILLIS * 7))));
41+
Assert.assertEquals("several years ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 365))));
42+
Assert.assertEquals("several decades ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgo(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 365 * 10))));
3543
}
3644

37-
//@Test
45+
@Test
3846
public void calculateExactTimeAgoWithJodaTimeTest() {
39-
Assert.assertEquals("5 hours and 15 minutes and 3 seconds", TimeAgoCalculator.calculateExactTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (5 * 60 * 60 * 1000 + 15 * 60 * 1000 + 3 * 1000))));
40-
Assert.assertEquals("5 hours and 1 minute and 1 second", TimeAgoCalculator.calculateExactTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (5 * 60 * 60 * 1000 + 1 * 60 * 1000 + 1 * 1000))));
41-
Assert.assertEquals("2 days and 1 minute and 1 second", TimeAgoCalculator.calculateExactTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (2 * 24 * 60 * 60 * 1000 + 1 * 60 * 1000 + 1 * 1000))));
47+
Assert.assertEquals("5 hours and 15 minutes and 3 seconds", TimeAgoCalculator.calculateExactTimeAgoWithJodaTime(new Date(getCurrentTime() - (5 * 60 * 60 * 1000 + 15 * 60 * 1000 + 3 * 1000))));
48+
Assert.assertEquals("5 hours and 1 minute and 1 second", TimeAgoCalculator.calculateExactTimeAgoWithJodaTime(new Date(getCurrentTime() - (5 * 60 * 60 * 1000 + 1 * 60 * 1000 + 1 * 1000))));
49+
Assert.assertEquals("2 days and 1 minute and 1 second", TimeAgoCalculator.calculateExactTimeAgoWithJodaTime(new Date(getCurrentTime() - (2 * 24 * 60 * 60 * 1000 + 1 * 60 * 1000 + 1 * 1000))));
4250
}
4351

44-
//@Test
52+
@Test
4553
public void calculateHumanFriendlyTimeAgoWithJodaTimeTest() {
4654
long DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
47-
Assert.assertEquals("moments ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (5 * 1000))));
48-
Assert.assertEquals("several minutes ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (5 * 60 * 1000))));
49-
Assert.assertEquals("several hours ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (5 * 60 * 60 * 1000))));
50-
Assert.assertEquals("several days ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS))));
51-
Assert.assertEquals("several months ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 30))));
52-
Assert.assertEquals("several weeks ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (3 * DAY_IN_MILLIS * 7))));
53-
Assert.assertEquals("several years ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 365))));
55+
Assert.assertEquals("moments ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(getCurrentTime() - (5 * 1000))));
56+
Assert.assertEquals("several minutes ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(getCurrentTime() - (5 * 60 * 1000))));
57+
Assert.assertEquals("several hours ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(getCurrentTime() - (5 * 60 * 60 * 1000))));
58+
Assert.assertEquals("several days ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS))));
59+
Assert.assertEquals("several months ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 30))));
60+
Assert.assertEquals("several weeks ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(getCurrentTime() - (3 * DAY_IN_MILLIS * 7))));
61+
Assert.assertEquals("several years ago", TimeAgoCalculator.calculateHumanFriendlyTimeAgoWithJodaTime(new Date(getCurrentTime() - (5 * DAY_IN_MILLIS * 365))));
5462
}
5563

5664
}
Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,32 @@
11
package com.baeldung.timeago.version8;
22

3+
import java.time.Duration;
34
import java.time.Instant;
45
import java.time.LocalDateTime;
6+
import java.time.Period;
57
import java.time.ZoneId;
68

79
import org.junit.Assert;
810
import org.junit.Test;
911

1012
public class TimeAgoCalculatorUnitTest {
1113

12-
// fixing test in BAEL-5647
13-
//@Test
14+
private LocalDateTime getCurrentTime() {
15+
LocalDateTime localDateTime = LocalDateTime.of(2020, 1, 1, 12, 0, 0);
16+
return localDateTime.atZone(ZoneId.systemDefault())
17+
.toLocalDateTime();
18+
//We return a fixed date and time in order to avoid issues related to getting time from local in unit tests.
19+
//return LocalDateTime.now(zone);
20+
}
21+
22+
@Test
1423
public void calculateTimeAgoWithPeriodAndDurationTest() {
15-
long DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
16-
Assert.assertEquals("moments ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()), ZoneId.systemDefault()), ZoneId.systemDefault()));
17-
Assert.assertEquals("several seconds ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis() - (5 * 1000)), ZoneId.systemDefault()), ZoneId.systemDefault()));
18-
Assert.assertEquals("several minutes ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis() - (5 * 60 * 1000)), ZoneId.systemDefault()), ZoneId.systemDefault()));
19-
Assert.assertEquals("several hours ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis() - (5 * 60 * 60 * 1000)), ZoneId.systemDefault()), ZoneId.systemDefault()));
20-
Assert.assertEquals("several days ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis() - (5 * DAY_IN_MILLIS)), ZoneId.systemDefault()), ZoneId.systemDefault()));
21-
Assert.assertEquals("several months ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 30)), ZoneId.systemDefault()), ZoneId.systemDefault()));
22-
Assert.assertEquals("several years ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis() - (5 * DAY_IN_MILLIS * 365)), ZoneId.systemDefault()), ZoneId.systemDefault()));
24+
Assert.assertEquals("moments ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(getCurrentTime(), ZoneId.systemDefault()));
25+
Assert.assertEquals("several seconds ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(getCurrentTime().minus(Duration.ofSeconds(5)), ZoneId.systemDefault()));
26+
Assert.assertEquals("several minutes ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(getCurrentTime().minus(Duration.ofMinutes(5)), ZoneId.systemDefault()));
27+
Assert.assertEquals("several hours ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(getCurrentTime().minus(Duration.ofHours(5)), ZoneId.systemDefault()));
28+
Assert.assertEquals("several days ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(getCurrentTime().minus(Period.ofDays(5)), ZoneId.systemDefault()));
29+
Assert.assertEquals("several months ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(getCurrentTime().minus(Period.ofMonths(5)), ZoneId.systemDefault()));
30+
Assert.assertEquals("several years ago", TimeAgoCalculator.calculateTimeAgoWithPeriodAndDuration(getCurrentTime().minus(Period.ofYears(5)), ZoneId.systemDefault()));
2331
}
2432
}

0 commit comments

Comments
 (0)