package org.atlasapi.persistence.content.organisation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.List; import org.atlasapi.media.entity.ChildRef; import org.atlasapi.media.entity.Item; import org.atlasapi.media.entity.Organisation; import org.atlasapi.media.entity.Person; import org.atlasapi.media.entity.Publisher; import org.atlasapi.persistence.audit.NoLoggingPersistenceAuditLog; import org.atlasapi.persistence.audit.PerHourAndDayMongoPersistenceAuditLog; import org.atlasapi.persistence.audit.PersistenceAuditLog; import org.atlasapi.persistence.lookup.TransitiveLookupWriter; import org.atlasapi.persistence.lookup.mongo.MongoLookupEntryStore; import org.junit.Before; import org.junit.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.metabroadcast.common.persistence.MongoTestHelper; import com.metabroadcast.common.persistence.mongo.DatabasedMongo; import com.mongodb.ReadPreference; public class MongoOrganisationStoreTest { private DatabasedMongo db; private MongoOrganisationStore store; private MongoLookupEntryStore entryStore; private PersistenceAuditLog persistenceAuditLog; private final String uri = "organisation1"; @Before public void setUp() { db = MongoTestHelper.anEmptyTestDatabase(); persistenceAuditLog = new PerHourAndDayMongoPersistenceAuditLog(db); entryStore = new MongoLookupEntryStore(db.collection("peopleLookup"), new NoLoggingPersistenceAuditLog(), ReadPreference.primary()); store = new MongoOrganisationStore(db, TransitiveLookupWriter.explicitTransitiveLookupWriter(entryStore), entryStore, persistenceAuditLog); } @Test public void shouldSetOrganisationAndAddItems() { Organisation organisation = new Organisation(ImmutableList.of(new Person("person1", "", Publisher.BBC))); organisation.setPublisher(Publisher.BBC); organisation.setCanonicalUri(uri); organisation.setId(1L); organisation.setAlternativeTitles(ImmutableSet.of("title1")); store.createOrUpdateOrganisation(organisation); List<String> items = Lists.newArrayList(); for (long i=0; i<10; i++) { Item item = new Item("item"+i, "item"+i, Publisher.BBC); item.setId(i); items.add(item.getCanonicalUri()); organisation.addContent(item.childRef()); store.updateOrganisationItems(organisation); } for (long i=0; i<10; i++) { Item item = new Item("item"+i, "item"+i, Publisher.BBC); item.setId(i); organisation.addContent(item.childRef()); store.updateOrganisationItems(organisation); } Organisation found = store.organisation(uri).get(); assertNotNull(found); assertEquals(uri, found.getCanonicalUri()); assertEquals(organisation.getId(), found.getId()); assertEquals(organisation.getPublisher(), found.getPublisher()); assertEquals("title1",Iterables.getOnlyElement(found.getAlternativeTitles())); assertEquals(10, found.getContents().size()); assertEquals(items, ImmutableList.copyOf(Iterables.transform(found.getContents(), ChildRef.TO_URI))); found = store.organisation(1L).get(); assertEquals(uri, found.getCanonicalUri()); } }