package com.github.mongobee.dao; import static com.github.mongobee.changeset.ChangeEntry.CHANGELOG_COLLECTION; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.bson.Document; import org.junit.Ignore; import org.junit.Test; import org.mockito.Mockito; import com.github.fakemongo.Fongo; import com.github.mongobee.changeset.ChangeEntry; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; /** * @author lstolowski * @since 10.12.14 */ public class ChangeEntryIndexDaoTest { private static final String TEST_SERVER = "testServer"; private static final String DB_NAME = "mongobeetest"; private static final String CHANGEID_AUTHOR_INDEX_NAME = "changeId_1_author_1"; private ChangeEntryIndexDao dao = new ChangeEntryIndexDao(); @Test public void shouldCreateRequiredUniqueIndex() { // given MongoClient mongo = mock(MongoClient.class); MongoDatabase db = new Fongo(TEST_SERVER).getDatabase(DB_NAME); when(mongo.getDatabase(Mockito.anyString())).thenReturn(db); // when dao.createRequiredUniqueIndex(db.getCollection(CHANGELOG_COLLECTION)); // then Document createdIndex = findIndex(db, CHANGEID_AUTHOR_INDEX_NAME); assertNotNull(createdIndex); assertTrue(dao.isUnique(createdIndex)); } @Test @Ignore("Fongo has not implemented dropIndex for MongoCollection object (issue with mongo driver 3.x)") public void shouldDropWrongIndex() { // init MongoClient mongo = mock(MongoClient.class); MongoDatabase db = new Fongo(TEST_SERVER).getDatabase(DB_NAME); when(mongo.getDatabase(Mockito.anyString())).thenReturn(db); MongoCollection<Document> collection = db.getCollection(CHANGELOG_COLLECTION); collection.createIndex(new Document() .append(ChangeEntry.KEY_CHANGEID, 1) .append(ChangeEntry.KEY_AUTHOR, 1)); Document index = new Document("name", CHANGEID_AUTHOR_INDEX_NAME); // given Document createdIndex = findIndex(db, CHANGEID_AUTHOR_INDEX_NAME); assertNotNull(createdIndex); assertFalse(dao.isUnique(createdIndex)); // when dao.dropIndex(db.getCollection(CHANGELOG_COLLECTION), index); // then assertNull(findIndex(db, CHANGEID_AUTHOR_INDEX_NAME)); } private Document findIndex(MongoDatabase db, String indexName) { for (MongoCursor<Document> iterator = db.getCollection(CHANGELOG_COLLECTION).listIndexes().iterator(); iterator.hasNext(); ) { Document index = iterator.next(); String name = (String) index.get("name"); if (indexName.equals(name)) { return index; } } return null; } }