package org.atlasapi.persistence.media.entity; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.metabroadcast.common.currency.Price; import com.metabroadcast.common.persistence.mongo.MongoConstants; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import junit.framework.TestCase; import org.atlasapi.media.entity.Policy; import org.atlasapi.media.entity.simple.Pricing; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.junit.Test; import java.util.Currency; import java.util.Set; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class PolicyTranslatorTest extends TestCase { private final PolicyTranslator translator = new PolicyTranslator(); @Test public void testTranslateFromDboContentWithNullTermsOfUse() { DBObject dbObject = mock(DBObject.class); when(dbObject.get(MongoConstants.ID)).thenReturn("1"); when(dbObject.get("termsOfUse")).thenReturn(null); Policy policy = translator.fromDBObject(dbObject, new Policy()); assertTrue(policy != null); } @Test public void testTranslateFromDboContentWithTermsOfUse() { DBObject dbObject = mock(DBObject.class); when(dbObject.get(MongoConstants.ID)).thenReturn("1"); when(dbObject.containsField("termsOfUse")).thenReturn(true); when(dbObject.get("termsOfUse")).thenReturn("ToU text"); Policy policy = translator.fromDBObject(dbObject, new Policy()); assertThat(policy.getTermsOfUse(), is("ToU text")); } @Test public void testToAndFromDBObjectWithPricing() { Policy policy = new Policy(); Price price1 = new Price(Currency.getInstance("GBP"), 1); Price price2 = new Price(Currency.getInstance("GBP"), 2); DateTime startTime1 = DateTime.now(DateTimeZone.UTC); DateTime endTime1 = DateTime.now(DateTimeZone.UTC).plusHours(1); DateTime startTime2 = DateTime.now(DateTimeZone.UTC).plusHours(1); DateTime endTime2 = DateTime.now(DateTimeZone.UTC).plusHours(2); Pricing pricing1 = new Pricing(startTime1, endTime1, price1); Pricing pricing2 = new Pricing(startTime2, endTime2, price2); policy.setPricing(ImmutableList.of(pricing1, pricing2)); Policy result = toDbObjectAndBack(policy); assertThat(result.getPricing().get(0).getPrice(), is(price1)); assertThat(result.getPricing().get(0).getStartTime(), is(startTime1)); assertThat(result.getPricing().get(0).getEndTime(), is(endTime1)); assertThat(result.getPricing().get(1).getPrice(), is(price2)); assertThat(result.getPricing().get(1).getStartTime(), is(startTime2)); assertThat(result.getPricing().get(1).getEndTime(), is(endTime2)); } private Policy toDbObjectAndBack(Policy policy) { return translator.fromDBObject(translator.toDBObject(new BasicDBObject(), policy), new Policy()); } @Test public void testToAndFromDbObjectWithSubscriptionPackages() { Set<String> packages = ImmutableSet.of("a", "b"); Policy policy = new Policy(); policy.setSubscriptionPackages(packages); Policy result = toDbObjectAndBack(policy); assertThat(result.getSubscriptionPackages(), is(packages)); } }