package org.atlasapi.media.channel;
import static org.atlasapi.media.channel.ChannelTranslator.IMAGES;
import static org.atlasapi.media.channel.ChannelTranslator.NEW_IMAGES;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.atlasapi.media.channel.Channel.Builder;
import org.atlasapi.media.entity.Image;
import org.atlasapi.media.entity.ImageTheme;
import org.atlasapi.media.entity.MediaType;
import org.atlasapi.media.entity.Publisher;
import org.joda.time.LocalDate;
import org.junit.Test;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.metabroadcast.common.persistence.translator.TranslatorUtils;
import com.mongodb.DBObject;
public class DoubleImageWritingTest {
private TemporalTitleTranslator titleTranslator = new TemporalTitleTranslator();
private TemporalImageTranslator imageTranslator = new TemporalImageTranslator();
private final ChannelTranslator translator = new ChannelTranslator();
@Test
public void testWritingOfPrimaryImages() {
LocalDate now = new LocalDate();
Image lightOpaque1 = createImage("lightOpaqueUri", ImageTheme.LIGHT_OPAQUE);
Image lightOpaque2 = createImage("lightOpaqueUri2", ImageTheme.LIGHT_OPAQUE);
Image other1 = createImage("darkOpaqueUri", ImageTheme.DARK_OPAQUE);
Image other2 = createImage("darkTransparentUri", ImageTheme.DARK_TRANSPARENT);
Builder channel = createChannel()
.withImage(lightOpaque1, now.minusYears(1), now.plusYears(1))
.withImage(lightOpaque2, now.minusYears(2), now.minusYears(2))
.withImage(other1, now.minusYears(2), now.plusYears(1))
.withImage(other2, now.minusYears(2), now.plusYears(2));
DBObject translated = translator.toDBObject(null, channel.build());
assertTrue(translated.containsField(IMAGES));
assertTrue(translated.containsField(NEW_IMAGES));
@SuppressWarnings("unchecked")
Iterable<DBObject> images = (Iterable<DBObject>) TranslatorUtils.toDBObject(translated, IMAGES);
assertThat(Iterables.size(images), is(2));
Iterable<String> primaryImageUris = Iterables.transform(images, new Function<DBObject, String>() {
@Override
public String apply(DBObject input) {
TemporalField<String> image = titleTranslator.fromDBObject(input);
return image.getValue();
}
});
assertEquals(
ImmutableSet.of("lightOpaqueUri", "lightOpaqueUri2"),
ImmutableSet.copyOf(primaryImageUris)
);
@SuppressWarnings("unchecked")
Iterable<DBObject> newImages = (Iterable<DBObject>) TranslatorUtils.toDBObject(translated, NEW_IMAGES);
assertThat(Iterables.size(newImages), is(4));
Iterable<String> imageUris = Iterables.transform(newImages, new Function<DBObject, String>() {
@Override
public String apply(DBObject input) {
TemporalField<Image> image = imageTranslator.fromDBObject(input);
return image.getValue().getCanonicalUri();
}
});
assertEquals(
ImmutableSet.of("lightOpaqueUri", "lightOpaqueUri2", "darkOpaqueUri", "darkTransparentUri"),
ImmutableSet.copyOf(imageUris)
);
}
private Builder createChannel() {
return Channel.builder()
.withMediaType(MediaType.VIDEO)
.withSource(Publisher.METABROADCAST);
}
private Image createImage(String uri, ImageTheme theme) {
Image image = new Image(uri);
image.setTheme(theme);
return image;
}
}