/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.test.descriptor; import static org.fest.assertions.Assertions.assertThat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import org.hibernate.ogm.type.descriptor.impl.Iso8601DateTypeDescriptor; import org.junit.Test; /** * Unit test for {@link Iso8601DateTypeDescriptor}. * * @author Gunnar Morling */ public class Iso8601DateTypeDescriptorTest { @Test public void shouldFormatDateIntoUtcStringWithDateAndTimeAndTimeZone() { assertThat( Iso8601DateTypeDescriptor.DATE_TIME.toString( christmasEvening() ) ).isEqualTo( "2013-12-24T17:30:52.311Z" ); } @Test public void shouldFormatDateIntoUtcStringWithTimeAndTimeZone() { assertThat( Iso8601DateTypeDescriptor.TIME.toString( christmasEvening() ) ).isEqualTo( "17:30:52.311Z" ); } @Test public void shouldFormatDateIntoUtcStringWithDateTimeZone() { assertThat( Iso8601DateTypeDescriptor.DATE.toString( christmasEvening() ) ).isEqualTo( "2013-12-24Z" ); } @Test public void shouldParseUtcStringWithDateAndTimeAndTimeZoneIntoDate() { assertThat( Iso8601DateTypeDescriptor.DATE_TIME.fromString( "2013-12-24T17:30:52.311Z" ).getTime() ) .isEqualTo( christmasEvening().getTime() ); } @Test public void shouldParseUtcStringWithTimeAndTimeZoneIntoDate() { assertThat( Iso8601DateTypeDescriptor.TIME.fromString( "17:30:52.311Z" ).getTime() ) .isEqualTo( aTimeInTheEvening().getTime() ); } @Test public void shouldParseUtcStringWithDateAndTimeZoneIntoDate() { int oneHour = 60 * 60 * 1000; //de-serializing UTC gives a date one hour after the Berlin date assertThat( Iso8601DateTypeDescriptor.DATE.fromString( "2013-12-24Z" ).getTime() ) .isEqualTo( christmasDay().getTime() + oneHour ); } private Date christmasEvening() { Calendar christmasEvening = Calendar.getInstance( TimeZone.getTimeZone( "Europe/Berlin" ) ); christmasEvening.set( 2013, 11, 24, 18, 30, 52 ); christmasEvening.set( Calendar.MILLISECOND, 311 ); return christmasEvening.getTime(); } private Date christmasDay() { Calendar christmas = Calendar.getInstance( TimeZone.getTimeZone( "Europe/Berlin" ) ); christmas.set( 2013, 11, 24, 0, 0, 0 ); christmas.set( Calendar.MILLISECOND, 0 ); return christmas.getTime(); } private Date aTimeInTheEvening() { Calendar time = Calendar.getInstance( TimeZone.getTimeZone( "Europe/Berlin" ) ); time.set( 1970, 0, 1, 18, 30, 52 ); time.set( Calendar.MILLISECOND, 311 ); return time.getTime(); } }