package com.kickstarter.libs.utils; import android.content.Context; import com.kickstarter.KSRobolectricTestCase; import com.kickstarter.libs.KSString; import com.kickstarter.libs.RelativeDateTimeOptions; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.junit.Test; import org.robolectric.annotation.Config; import java.util.Locale; public final class DateTimeUtilsTest extends KSRobolectricTestCase { @Test public void testEstimatedDeliveryOn() { assertEquals("December 2015", DateTimeUtils.estimatedDeliveryOn(DateTime.parse("2015-12-17T18:35:05Z"))); assertEquals("décembre 2015", DateTimeUtils.estimatedDeliveryOn(DateTime.parse("2015-12-17T18:35:05Z"), Locale.FRENCH)); } @Test public void testFullDate() { assertEquals("Thursday, December 17, 2015", DateTimeUtils.fullDate(DateTime.parse("2015-12-17T18:35:05Z"))); assertEquals("jeudi 17 décembre 2015", DateTimeUtils.fullDate(DateTime.parse("2015-12-17T18:35:05Z"), Locale.FRENCH)); } @Test public void testIsEpoch() { assertTrue(DateTimeUtils.isEpoch(DateTime.parse("1970-01-01T00:00:00Z"))); assertTrue(DateTimeUtils.isEpoch(DateTime.parse("1969-12-31T19:00:00.000-05:00"))); assertFalse(DateTimeUtils.isEpoch(DateTime.parse("2015-12-17T18:35:05Z"))); } @Test public void testMediumDate() { assertEquals("Dec 17, 2015", DateTimeUtils.mediumDate(DateTime.parse("2015-12-17T18:35:05Z"))); assertEquals("17 déc. 2015", DateTimeUtils.mediumDate(DateTime.parse("2015-12-17T18:35:05Z"), Locale.FRENCH)); } @Test public void testMediumDateTime() { assertEquals("Dec 17, 2015 6:35:05 PM", DateTimeUtils.mediumDateTime(DateTime.parse("2015-12-17T18:35:05Z"), DateTimeZone.UTC)); assertEquals("Dec 17, 2015 1:35:05 PM", DateTimeUtils.mediumDateTime(DateTime.parse("2015-12-17T18:35:05Z"), DateTimeZone.forID("EST"))); assertEquals("17 déc. 2015 18:35:05", DateTimeUtils.mediumDateTime(DateTime.parse("2015-12-17T18:35:05Z"), DateTimeZone.UTC, Locale.FRENCH)); } @Test public void testRelative() { final Context context = context(); final KSString ksString = ksString(); final DateTime dateTime = DateTime.parse("2015-12-17T18:35:05Z"); final RelativeDateTimeOptions.Builder builder = RelativeDateTimeOptions.builder(); assertEquals("just now", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T18:35:10Z")).build())); assertEquals("right now", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T18:35:00Z")).build())); assertEquals("2 minutes ago", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T18:37:05Z")).build())); assertEquals("in 2 minutes", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T18:33:05Z")).build())); assertEquals("1 hour ago", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T19:35:05Z")).build())); assertEquals("in 1 hour", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T17:35:05Z")).build())); assertEquals("4 hours ago", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T22:35:05Z")).build())); assertEquals("in 4 hours", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T14:35:05Z")).build())); assertEquals("23 hours ago", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-18T17:35:05Z")).build())); assertEquals("in 23 hours", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-16T19:35:05Z")).build())); assertEquals("yesterday", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-18T18:35:05Z")).build())); assertEquals("in 1 day", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-16T18:35:05Z")).build())); assertEquals("10 days ago", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-27T18:35:05Z")).build())); assertEquals("in 10 days", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-07T18:35:05Z")).build())); assertEquals("Dec 17, 2015", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2016-01-27T18:35:05Z")).build())); assertEquals("Dec 17, 2015", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-10-17T18:35:05Z")).build())); } @Test public void testRelative_withAbbreviated() { final Context context = context(); final KSString ksString = ksString(); final DateTime dateTime = DateTime.parse("2015-12-17T18:35:05Z"); final RelativeDateTimeOptions.Builder builder = RelativeDateTimeOptions.builder().abbreviated(true); assertEquals("4 hrs ago", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T22:35:05Z")).build())); assertEquals("in 4 hrs", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T14:35:05Z")).build())); } @Test public void testRelative_withAbsolute() { final Context context = context(); final KSString ksString = ksString(); final DateTime dateTime = DateTime.parse("2015-12-17T18:35:05Z"); final RelativeDateTimeOptions.Builder builder = RelativeDateTimeOptions.builder().absolute(true); assertEquals("4 hours", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T22:35:05Z")).build())); assertEquals("4 hours", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T14:35:05Z")).build())); } @Test public void testRelative_withThreshold() { final Context context = context(); final KSString ksString = ksString(); final DateTime dateTime = DateTime.parse("2015-12-17T18:35:05Z"); final int threshold = 864_000; // Ten days final RelativeDateTimeOptions.Builder builder = RelativeDateTimeOptions.builder().threshold(threshold); assertEquals("9 days ago", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-26T18:35:05Z")).build())); assertEquals("in 9 days", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-08T18:35:05Z")).build())); assertEquals("Dec 17, 2015", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-28T18:35:05Z")).build())); assertEquals("Dec 17, 2015", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-06T18:35:05Z")).build())); } @Test @Config(qualifiers="de") public void testRelative_withLocale() { final Context context = context(); final KSString ksString = ksString(); final DateTime dateTime = DateTime.parse("2015-12-17T18:35:05Z"); final RelativeDateTimeOptions.Builder builder = RelativeDateTimeOptions.builder(); assertEquals("vor 2 Minuten", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T18:37:05Z")).build())); assertEquals("in 2 Minuten", DateTimeUtils.relative(context, ksString, dateTime, builder.relativeToDateTime(DateTime.parse("2015-12-17T18:33:05Z")).build())); } @Test public void testMediumDateShortTime() { assertEquals("Dec 17, 2015 6:35 PM", DateTimeUtils.mediumDateShortTime(DateTime.parse("2015-12-17T18:35:05Z"), DateTimeZone.UTC)); assertEquals("Dec 17, 2015 1:35 PM", DateTimeUtils.mediumDateShortTime(DateTime.parse("2015-12-17T18:35:05Z"), DateTimeZone.forID("EST"))); assertEquals("17 déc. 2015 18:35", DateTimeUtils.mediumDateShortTime(DateTime.parse("2015-12-17T18:35:05Z"), DateTimeZone.UTC, Locale.FRENCH)); } }