package org.atlasapi.persistence.content.mongo;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import org.atlasapi.media.entity.Publisher;
import org.joda.time.DateTime;
import org.junit.After;
import org.junit.Test;
import com.metabroadcast.common.persistence.MongoTestHelper;
import com.metabroadcast.common.persistence.mongo.DatabasedMongo;
import com.metabroadcast.common.time.SystemClock;
import com.mongodb.DBCollection;
import org.atlasapi.media.entity.ChildRef;
import org.atlasapi.media.entity.ContentGroup;
import org.atlasapi.media.entity.Described;
import org.atlasapi.media.entity.EntityType;
import org.atlasapi.media.entity.SortKey;
import org.atlasapi.persistence.audit.NoLoggingPersistenceAuditLog;
import org.atlasapi.persistence.audit.PersistenceAuditLog;
import org.atlasapi.persistence.content.ContentCategory;
import org.atlasapi.persistence.lookup.entry.LookupEntry;
import static org.junit.Assert.*;
public class MongoContentGroupPersistenceTest {
private static DatabasedMongo MONGO = MongoTestHelper.anEmptyTestDatabase();
private final DBCollection table = new MongoContentTables(MONGO).collectionFor(ContentCategory.CONTENT_GROUP);
private final MongoContentGroupWriter writer = new MongoContentGroupWriter(MONGO, new NoLoggingPersistenceAuditLog(), new SystemClock());
private final MongoContentGroupResolver resolver = new MongoContentGroupResolver(MONGO);
@After
public void clearDb() {
table.drop();
}
@Test
public void testWriteContentGroupAndResolveByURI() {
ContentGroup contentGroup = new ContentGroup("group", Publisher.BBC);
ChildRef child1 = new ChildRef(null, "child1", SortKey.DEFAULT.toString(), new DateTime(), EntityType.ITEM);
ChildRef child2 = new ChildRef(null, "child2", SortKey.DEFAULT.toString(), new DateTime(), EntityType.ITEM);
contentGroup.addContents(ImmutableList.of(child1, child2));
writer.createOrUpdate(contentGroup);
ContentGroup found = (ContentGroup) resolver.findByCanonicalUris(ImmutableList.of("group")).getFirstValue().requireValue();
assertNotNull(found.getId());
assertEquals("group", found.getCanonicalUri());
assertEquals(Publisher.BBC, found.getPublisher());
assertEquals(2, contentGroup.getContents().size());
}
@Test
public void testWriteContentGroupAndResolveByID() {
ContentGroup contentGroup = new ContentGroup("group", Publisher.BBC);
ChildRef child1 = new ChildRef(null, "child1", SortKey.DEFAULT.toString(), new DateTime(), EntityType.ITEM);
ChildRef child2 = new ChildRef(null, "child2", SortKey.DEFAULT.toString(), new DateTime(), EntityType.ITEM);
contentGroup.addContents(ImmutableList.of(child1, child2));
writer.createOrUpdate(contentGroup);
ContentGroup found = (ContentGroup) resolver.findByIds(ImmutableList.of(contentGroup.getId())).getFirstValue().requireValue();
assertNotNull(found.getId());
assertEquals("group", found.getCanonicalUri());
assertEquals(Publisher.BBC, found.getPublisher());
assertEquals(2, contentGroup.getContents().size());
}
@Test
public void testContentGroupIsWrittenOnlyOnceIfUnchanged() {
ContentGroup contentGroup = new ContentGroup("group", Publisher.BBC);
ChildRef child1 = new ChildRef(null, "child1", SortKey.DEFAULT.toString(), new DateTime(), EntityType.ITEM);
ChildRef child2 = new ChildRef(null, "child2", SortKey.DEFAULT.toString(), new DateTime(), EntityType.ITEM);
contentGroup.addContents(ImmutableList.of(child1, child2));
writer.createOrUpdate(contentGroup);
ContentGroup found = (ContentGroup) resolver.findByCanonicalUris(ImmutableList.of("group")).getFirstValue().requireValue();
writer.createOrUpdate(found);
found = (ContentGroup) resolver.findByCanonicalUris(ImmutableList.of("group")).getFirstValue().requireValue();
assertEquals(contentGroup.getThisOrChildLastUpdated(), found.getThisOrChildLastUpdated());
}
@Test
public void testWriteContentGroupAndFindAll() {
ContentGroup contentGroup1 = new ContentGroup("group1", Publisher.BBC);
ChildRef child1 = new ChildRef(null, "child1", SortKey.DEFAULT.toString(), new DateTime(), EntityType.ITEM);
contentGroup1.addContents(ImmutableList.of(child1));
ContentGroup contentGroup2 = new ContentGroup("group2", Publisher.BBC);
ChildRef child2 = new ChildRef(null, "child2", SortKey.DEFAULT.toString(), new DateTime(), EntityType.ITEM);
contentGroup2.addContents(ImmutableList.of(child2));
writer.createOrUpdate(contentGroup1);
writer.createOrUpdate(contentGroup2);
Iterable<ContentGroup> results = resolver.findAll();
assertEquals(2, Iterables.size(results));
}
}