From bfa9a812630fbebe6d0a9df9640d2265425e5c3c Mon Sep 17 00:00:00 2001 From: Fernando Nogueira Date: Mon, 4 Mar 2024 02:16:36 -0300 Subject: [PATCH 1/2] feat: * cleaning up tests * cleaning up deprecated classes * remove deprecated dropDups option --- .../ox/engine/internal/CreateIndexAction.java | 38 ++--- .../ox/engine/internal/MongoDBConnector.java | 79 ++++----- .../ox/engine/internal/OxEnvironment.java | 4 +- .../internal/RemoveCollectionAction.java | 2 +- .../ox/engine/internal/RemoveIndexAction.java | 27 +--- src/test/java/ox/engine/OxMigrationTest.java | 61 +------ .../engine/internal/MongoDBConnectorTest.java | 151 +++++++----------- .../internal/ValidateCreateIndexTest.java | 125 --------------- .../ValidateRemoveIndexActionTest.java | 72 --------- .../java/ox/integration/CreateIndexTest.java | 40 +++++ src/test/java/ox/integration/DryRunTest.java | 60 +++++++ .../dropindex/DropIndexByNameTest.java | 49 ++++++ .../migrations/V0001__create_index.java | 23 +++ .../migrations/V0002__drop_index.java | 20 +++ .../duplicate/DuplicateIndexTest.java | 63 ++++++++ .../migrations/V0001__create_index.java | 24 +++ .../migrations/V0002__create_index.java | 23 +++ .../CreateIfNotExistsIndexTest.java | 51 ++++++ .../V0001_CreateIndexMigrationTest.java | 27 ++++ .../step1/V0001__first_migration.java | 2 +- .../step2/V0002__second_migration.java | 3 +- 21 files changed, 487 insertions(+), 457 deletions(-) create mode 100644 src/test/java/ox/integration/CreateIndexTest.java create mode 100644 src/test/java/ox/integration/DryRunTest.java create mode 100644 src/test/java/ox/integration/dropindex/DropIndexByNameTest.java create mode 100644 src/test/java/ox/integration/dropindex/migrations/V0001__create_index.java create mode 100644 src/test/java/ox/integration/dropindex/migrations/V0002__drop_index.java create mode 100644 src/test/java/ox/integration/duplicate/DuplicateIndexTest.java create mode 100644 src/test/java/ox/integration/duplicate/migrations/V0001__create_index.java create mode 100644 src/test/java/ox/integration/duplicate/migrations/V0002__create_index.java create mode 100644 src/test/java/ox/integration/ifnotexists/CreateIfNotExistsIndexTest.java create mode 100644 src/test/java/ox/integration/ifnotexists/migrations/V0001_CreateIndexMigrationTest.java diff --git a/src/main/java/ox/engine/internal/CreateIndexAction.java b/src/main/java/ox/engine/internal/CreateIndexAction.java index ce10353..78496b9 100644 --- a/src/main/java/ox/engine/internal/CreateIndexAction.java +++ b/src/main/java/ox/engine/internal/CreateIndexAction.java @@ -2,6 +2,7 @@ import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; +import com.mongodb.client.model.IndexOptions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ox.engine.exception.IndexAlreadyExistsException; @@ -13,6 +14,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; public class CreateIndexAction extends OxAction { @@ -25,10 +27,6 @@ public class CreateIndexAction extends OxAction { * Unique index? */ private boolean unique; - /** - * DropDups. Deprecated after MongoDB 3.0 - */ - private boolean dropDups; /** * Recreate the index if not equals? */ @@ -110,18 +108,6 @@ public CreateIndexAction markAsTTL(long expireAfterSeconds) { return this; } - /** - * This method sets a flag to active the "dropDups" MongoDB CreateIndex Option. - *

- * With this option activated, any existing duplicated values will be deleted by MongoDB automatically. - *

- * If this option is not set and there are duplicated options, MongoDB will throw an exception trying to create the index. - */ - public CreateIndexAction dropDups() { - this.dropDups = true; - return this; - } - /** * Setting this option, Ox will first verify if there is an existing index with the same name * and with different attributes or attributes order. @@ -173,26 +159,20 @@ void runAction(MongoDBConnector mongoDBConnector, MongoClient mongo, String data } } else { BasicDBObject keys = parseAttributesToDBObject(); - BasicDBObject opts = generateCreateIndexOptions(); + IndexOptions opts = generateCreateIndexOptions(); mongoDBConnector.createIndex(collection, keys, opts); } } - private BasicDBObject generateCreateIndexOptions() { - BasicDBObject opts = new BasicDBObject(); - opts.append("background", true); - opts.append("name", indexName); - - if (unique) { - opts.append("unique", true); - if (dropDups) { - opts.append("dropDups", true); - } - } + private IndexOptions generateCreateIndexOptions() { + IndexOptions opts = new IndexOptions(); + opts.background(true); + opts.name(indexName); + opts.unique(unique); if (ttlIndex) { - opts.append("expireAfterSeconds", ttlIndexExpireAfterSeconds); + opts.expireAfter(ttlIndexExpireAfterSeconds, TimeUnit.SECONDS); } return opts; diff --git a/src/main/java/ox/engine/internal/MongoDBConnector.java b/src/main/java/ox/engine/internal/MongoDBConnector.java index cc81e8c..6b88aad 100644 --- a/src/main/java/ox/engine/internal/MongoDBConnector.java +++ b/src/main/java/ox/engine/internal/MongoDBConnector.java @@ -1,7 +1,7 @@ package ox.engine.internal; +import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; -import com.mongodb.*; import com.mongodb.client.*; import com.mongodb.client.model.CreateCollectionOptions; import com.mongodb.client.model.IndexOptions; @@ -45,7 +45,7 @@ private MongoDatabase database() { return mongo().getDatabase(config.getDatabaseName()); } - private boolean collectionExists(String collectionName) { + public boolean collectionExists(String collectionName) { MongoIterable collections = database().listCollectionNames(); for (String collection : collections) { if (collection.equals(collectionName)) { @@ -151,48 +151,39 @@ private void validateCollection(OxAction action) { } public void insertMigrationVersion(Integer version) { - BasicDBObject dbObject = - new BasicDBObject( - Configuration.MIGRATION_COLLECTION_VERSION_ATTRIBUTE, - version); + Document doc = new Document() + .append(Configuration.MIGRATION_COLLECTION_VERSION_ATTRIBUTE, version) + .append("date", new Date()); - dbObject.append("date", new Date()); + MongoCollection db = database() + .getCollection(config.getMigrationCollectionName()); - config.getMongo() - .getDB(config.getDatabaseName()) - .getCollection(config.getMigrationCollectionName()) - .insert(dbObject); + db.insertOne(doc); } public void removeMigrationVersion(Integer version) { - DBObject dbObject = - new BasicDBObject( - Configuration.MIGRATION_COLLECTION_VERSION_ATTRIBUTE, - version); - config.getMongo() - .getDB(config.getDatabaseName()) + Document doc = new Document() + .append(Configuration.MIGRATION_COLLECTION_VERSION_ATTRIBUTE, version); + + database() .getCollection(config.getMigrationCollectionName()) - .remove(dbObject); + .deleteOne(doc); } /** * Verify if the collection contains an index * with the same name and different * attributes or attributes not equally ordered - * - * @param indexAttributes - * @param indexName - * @param collection - * @return */ public boolean verifyIfHasSameNameAndDifferentAttributes( Map indexAttributes, String indexName, String collection) { - List indexInfo = config.getMongo().getDB(config.getDatabaseName()).getCollection(collection).getIndexInfo(); + ListIndexesIterable indexesIterable = database().getCollection(collection).listIndexes(); + List indexList = indexesIterable.into(new ArrayList<>()); - for (DBObject current : indexInfo) { + for (Document current : indexList) { String remoteIndexName = (String) current.get("name"); if (!verifyIfHasSameAttributesWithSameOrder(indexAttributes, current) && verifyIndexesHaveSameName(indexName, remoteIndexName)) { @@ -218,13 +209,14 @@ protected boolean verifyIfIndexExists( String indexName, String collection) { - List indexInfo = config.getMongo().getDB(config.getDatabaseName()).getCollection(collection).getIndexInfo(); + ListIndexesIterable indexesIterable = database().getCollection(collection).listIndexes(); + List indexList = indexesIterable.into(new ArrayList<>()); - if (indexInfo.isEmpty()) { + if (indexList.isEmpty()) { return false; } - for (DBObject current : indexInfo) { + for (Document current : indexList) { if (verifyIfHasSameAttributesWithSameOrder(indexAttributes, current)) { return true; @@ -248,7 +240,7 @@ private boolean verifyIndexesHaveSameName(String indexName, String currentIndexN return false; } - private boolean verifyIfHasSameAttributesWithSameOrder(Map indexAttributes, DBObject current) { + private boolean verifyIfHasSameAttributesWithSameOrder(Map indexAttributes, Document current) { if (indexAttributes != null) { Map existingAttributes = identifyIndexAttributesAndOrdering(current); @@ -268,9 +260,9 @@ private boolean verifyIfHasSameAttributesWithSameOrder(Map * @param current The DBObject retrieved from the IndexInfo List. * @return A map containing the attributes and ordering */ - private Map identifyIndexAttributesAndOrdering(DBObject current) { + private Map identifyIndexAttributesAndOrdering(Document current) { Map existingAttributes = new LinkedHashMap<>(); - DBObject indexAttrs = (DBObject) current.get("key"); + Document indexAttrs = (Document) current.get("key"); if (indexAttrs != null) { Set attrKeySet = indexAttrs.keySet(); @@ -302,35 +294,26 @@ public void dropIndexByName(String collection, String indexName) { return; } - config.getMongo().getDB(config.getDatabaseName()).getCollection(collection).dropIndex(indexName); + database().getCollection(collection).dropIndex(indexName); } - public void createIndex(String collection, BasicDBObject indexDefinition, BasicDBObject indexOptions) { + public void createIndex(String collection, Bson indexDefinition, IndexOptions indexOptions) { LOG.info("Creating index... "); - config.getMongo().getDB(config.getDatabaseName()).getCollection(collection).createIndex(indexDefinition, indexOptions); + database().getCollection(collection).createIndex(indexDefinition, indexOptions); } public boolean verifyIfMigrateWasAlreadyExecuted(Integer version) { - DBCollection versionCollection = config.getMongo() - .getDB(config.getDatabaseName()) - .getCollection(config.getMigrationCollectionName()); + MongoCollection versionCollection = database().getCollection(config.getMigrationCollectionName()); - versionCollection.setReadPreference(ReadPreference.primary()); - - BasicDBObject dbObject = new BasicDBObject(Configuration.MIGRATION_COLLECTION_VERSION_ATTRIBUTE, version); - - long count = versionCollection.count(dbObject); + Document doc = new Document(Configuration.MIGRATION_COLLECTION_VERSION_ATTRIBUTE, version); + long count = versionCollection.countDocuments(doc); return count > 0; } - public DB getMongoDatabase() { - return config.getMongo().getDB(config.getDatabaseName()); - } - - public boolean verifyIfCollectionExists(String collectionName) { - return getMongoDatabase().collectionExists(collectionName); + public MongoDatabase getMongoDatabase() { + return database(); } public void removeCollection(String collectionName) { diff --git a/src/main/java/ox/engine/internal/OxEnvironment.java b/src/main/java/ox/engine/internal/OxEnvironment.java index 8392272..b4da9f6 100644 --- a/src/main/java/ox/engine/internal/OxEnvironment.java +++ b/src/main/java/ox/engine/internal/OxEnvironment.java @@ -1,6 +1,6 @@ package ox.engine.internal; -import com.mongodb.DB; +import com.mongodb.client.MongoDatabase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,7 +37,7 @@ public void execute(OxAction oxAction) { * * @return the connected database */ - public DB getMongoDatabase() { + public MongoDatabase getMongoDatabase() { return mongoConnector.getMongoDatabase(); } diff --git a/src/main/java/ox/engine/internal/RemoveCollectionAction.java b/src/main/java/ox/engine/internal/RemoveCollectionAction.java index 6872e67..6f7a3c2 100644 --- a/src/main/java/ox/engine/internal/RemoveCollectionAction.java +++ b/src/main/java/ox/engine/internal/RemoveCollectionAction.java @@ -22,7 +22,7 @@ protected void validateAction() throws InvalidMigrateActionException { @Override void runAction(MongoDBConnector mongoDBConnector, MongoClient mongo, String databaseName) { - if (mongoDBConnector.verifyIfCollectionExists(collection)) { + if (mongoDBConnector.collectionExists(collection)) { mongoDBConnector.removeCollection(collection); } } diff --git a/src/main/java/ox/engine/internal/RemoveIndexAction.java b/src/main/java/ox/engine/internal/RemoveIndexAction.java index f343e34..5cf6518 100644 --- a/src/main/java/ox/engine/internal/RemoveIndexAction.java +++ b/src/main/java/ox/engine/internal/RemoveIndexAction.java @@ -9,23 +9,11 @@ public class RemoveIndexAction extends OxAction { private static final Logger LOG = LoggerFactory.getLogger(RemoveIndexAction.class); private final String indexName; - private boolean ifExists; public RemoveIndexAction(String indexName) { this.indexName = indexName; } - /** - * Removes the index only if it exists. - * If false (default value), should throw an error if the index do not exists. - * - * @return - */ - public RemoveIndexAction ifExists() { - ifExists = true; - return this; - } - /** * Set the collection that the index will be removed. * @@ -56,17 +44,12 @@ void runAction(MongoDBConnector mongoDBConnector, MongoClient mongo, String data boolean doesItExists = mongoDBConnector.verifyIfIndexExists(null, indexName, collection); - if (ifExists) { - if (doesItExists) { - LOG.info("[Ox] Index exists! Removing... Index name: " + indexName); - mongo.getDB(databaseName).getCollection(collection).dropIndex(indexName); - } else { - LOG.warn("[Ox] Ignoring Index Removal Action " + - "because no index was found with name: " + indexName); - } - } else { - LOG.info("[Ox] Removing index... (Existing or not!). Index name: " + indexName); + if (doesItExists) { + LOG.info("[Ox] Index exists! Removing... Index name: " + indexName); mongo.getDB(databaseName).getCollection(collection).dropIndex(indexName); + } else { + LOG.warn("[Ox] Ignoring Index Removal Action " + + "because no index was found with name: " + indexName); } } diff --git a/src/test/java/ox/engine/OxMigrationTest.java b/src/test/java/ox/engine/OxMigrationTest.java index d23705c..606e9ec 100644 --- a/src/test/java/ox/engine/OxMigrationTest.java +++ b/src/test/java/ox/engine/OxMigrationTest.java @@ -1,76 +1,17 @@ package ox.engine; -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.DBObject; -import com.mongodb.MongoClient; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import ox.engine.exception.InvalidMongoConfiguration; import ox.engine.exception.InvalidMongoDatabaseConfiguration; -import ox.engine.internal.MongoDBConnector; @RunWith(MockitoJUnitRunner.class) public class OxMigrationTest { - @Mock - private MongoDBConnector mongoConnector; - - @Mock - private MongoClient mongo; - - @Mock - private DB db; - - @Mock - private DBCollection coll; - - @Test - public void runMigrationsTest() throws InvalidMongoConfiguration { - Mockito.when(mongo.getDB(Mockito.anyString())).thenReturn(db); - - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(coll); - - OxConfig config = OxConfig.builder() - .mongo(mongo) - .databaseName("myDB") - .scanPackage("ox.db.migrations") - .dryRun() - .build(); - - Ox engine = Ox.setUp(config); - engine.up(); - } - - @Test - public void runDownMigrationTest() throws InvalidMongoConfiguration { - - Mockito.when(mongo.getDB(Mockito.anyString())).thenReturn(db); - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(coll); - Mockito.when(coll.count(Mockito.any(DBObject.class))).thenReturn(1L); - - OxConfig config = OxConfig.builder() - .mongo(mongo) - .databaseName("myDB") - .scanPackage("ox.db.migrations") - .dryRun() - .build(); - - Ox - .setUp(config) - .down(); - } - @Test(expected = InvalidMongoDatabaseConfiguration.class) public void validateInvalidMongoInstance() throws InvalidMongoConfiguration { - Ox.setUp( - null, - "ox.db.migrations", - "myDB") - .up(); + Ox.setUp(null, "ox.db.migrations", "myDB").up(); } } diff --git a/src/test/java/ox/engine/internal/MongoDBConnectorTest.java b/src/test/java/ox/engine/internal/MongoDBConnectorTest.java index bd293fb..7ed8d60 100644 --- a/src/test/java/ox/engine/internal/MongoDBConnectorTest.java +++ b/src/test/java/ox/engine/internal/MongoDBConnectorTest.java @@ -1,9 +1,8 @@ package ox.engine.internal; -import com.mongodb.*; -import com.mongodb.client.MongoCursor; -import com.mongodb.client.MongoDatabase; -import com.mongodb.client.MongoIterable; +import com.mongodb.MongoClient; +import com.mongodb.client.*; +import org.bson.Document; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -14,7 +13,6 @@ import ox.utils.Faker; import ox.utils.TestUtils; -import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -101,20 +99,21 @@ public void verifyIfAn2dsphereIndexWithSameAttributesAlreadyExistsTest() { LinkedHashMap attrs = new LinkedHashMap<>(); attrs.put("attr1", OrderingType.GEO_2DSPHERE); - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - List indexInfo = new ArrayList<>(); + Document dbObjectKeys = new Document("attr1", "2dsphere"); + Document dbObject = new Document("key", dbObjectKeys); - BasicDBObject dbObjectKeys = new BasicDBObject("attr1", "2dsphere"); - BasicDBObject dbObject = new BasicDBObject("key", dbObjectKeys); - - indexInfo.add(dbObject); - - Mockito.when(mockedMongo.getDB(Mockito.anyString())).thenReturn(db); + ListIndexesIterable indexInfo = Mockito.mock(ListIndexesIterable.class); + MongoDatabase db = Mockito.mock(MongoDatabase.class); + MongoCollection collection = Mockito.mock(MongoCollection.class); + Mockito.when(connector.getConfig().getMongo().getDatabase(Mockito.anyString())).thenReturn(db); Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - Mockito.when(collection.getIndexInfo()).thenReturn(indexInfo); + Mockito.when(collection.listIndexes()).thenReturn(indexInfo); + Mockito.when(indexInfo.into(Mockito.anyList())).thenReturn(Collections.singletonList(dbObject)); - Assert.assertTrue(connector.verifyIfIndexExists(attrs, "myIndexTest", "myCollection")); + boolean indexExists = connector + .verifyIfIndexExists(attrs, "myIndexTest", "myCollection"); + + Assert.assertTrue(indexExists); } /** @@ -136,20 +135,21 @@ public void verifyIfAnIndexWithSameAttributesAlreadyExistsTest() { LinkedHashMap attrs = new LinkedHashMap<>(); attrs.put("attr1", OrderingType.ASC); - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - List indexInfo = new ArrayList<>(); - - BasicDBObject dbObjectKeys = new BasicDBObject("attr1", 1); - BasicDBObject dbObject = new BasicDBObject("key", dbObjectKeys); + MongoDatabase db = Mockito.mock(MongoDatabase.class); + MongoCollection collection = Mockito.mock(MongoCollection.class); + ListIndexesIterable indexInfo = Mockito.mock(ListIndexesIterable.class); - indexInfo.add(dbObject); + Document dbObjectKeys = new Document("attr1", 1); + Document dbObject = new Document("key", dbObjectKeys); - Mockito.when(mockedMongo.getDB(Mockito.anyString())).thenReturn(db); + Mockito.when(mockedMongo.getDatabase(Mockito.anyString())).thenReturn(db); Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - Mockito.when(collection.getIndexInfo()).thenReturn(indexInfo); + Mockito.when(collection.listIndexes()).thenReturn(indexInfo); + Mockito.when(indexInfo.into(Mockito.anyList())).thenReturn(Collections.singletonList(dbObject)); - Assert.assertTrue(connector.verifyIfIndexExists(attrs, "myIndexTest", "myCollection")); + boolean indexExists = connector.verifyIfIndexExists(attrs, "myIndexTest", "myCollection"); + + Assert.assertTrue(indexExists); } /** @@ -174,15 +174,16 @@ public void validateVerifyIfIndexExistsWhenTheCollectionHasNoIndex() { LinkedHashMap attrs = new LinkedHashMap<>(); attrs.put("attr1", OrderingType.ASC); - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - List indexInfo = new ArrayList<>(); - - Mockito.when(mockedMongo.getDB(Mockito.anyString())).thenReturn(db); + ListIndexesIterable indexInfo = Mockito.mock(ListIndexesIterable.class); + MongoDatabase db = Mockito.mock(MongoDatabase.class); + MongoCollection collection = Mockito.mock(MongoCollection.class); + Mockito.when(connector.getConfig().getMongo().getDatabase(Mockito.anyString())).thenReturn(db); Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - Mockito.when(collection.getIndexInfo()).thenReturn(indexInfo); + Mockito.when(collection.listIndexes()).thenReturn(indexInfo); + Mockito.when(indexInfo.into(Mockito.anyList())).thenReturn(Collections.emptyList()); - Assert.assertFalse(connector.verifyIfIndexExists(attrs, "myIndexTest", "myCollection")); + boolean indexExists = connector.verifyIfIndexExists(attrs, "myIndexTest", "myCollection"); + Assert.assertFalse(indexExists); } /** @@ -204,23 +205,23 @@ public void validateVerifyIfIndexWithTheSameNameExists() { LinkedHashMap attrs = new LinkedHashMap<>(); attrs.put("attr1", OrderingType.ASC); - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - List indexInfo = new ArrayList<>(); - - BasicDBObject dbObjectKeys = new BasicDBObject("attr1", 1); - dbObjectKeys.append("attr2Geo", "2dsphere"); - - BasicDBObject dbObject = new BasicDBObject("key", dbObjectKeys); - dbObject.append("name", "myIndexTest"); + Document dbObjectKeys = new Document("attr1", 1) + .append("attr2Geo", "2dsphere"); - indexInfo.add(dbObject); + Document dbObject = new Document("key", dbObjectKeys) + .append("name", "myIndexTest"); - Mockito.when(mockedMongo.getDB(Mockito.anyString())).thenReturn(db); + ListIndexesIterable indexInfo = Mockito.mock(ListIndexesIterable.class); + MongoDatabase db = Mockito.mock(MongoDatabase.class); + MongoCollection collection = Mockito.mock(MongoCollection.class); + Mockito.when(connector.getConfig().getMongo().getDatabase(Mockito.anyString())).thenReturn(db); Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - Mockito.when(collection.getIndexInfo()).thenReturn(indexInfo); + Mockito.when(collection.listIndexes()).thenReturn(indexInfo); + Mockito.when(indexInfo.into(Mockito.anyList())).thenReturn(Collections.singletonList(dbObject)); + + boolean indexExists = connector.verifyIfIndexExists(attrs, "myIndexTest", "myCollection"); - Assert.assertTrue(connector.verifyIfIndexExists(attrs, "myIndexTest", "myCollection")); + Assert.assertTrue(indexExists); } /** @@ -232,10 +233,9 @@ public void insertMigrationVersionTest() { MongoDBConnector connector = TestUtils.newMongoDBConnector(); - DB db = Mockito.mock(DB.class); - - DBCollection collection = Mockito.mock(DBCollection.class); - Mockito.when(connector.getConfig().getMongo().getDB(Mockito.anyString())).thenReturn(db); + MongoDatabase db = Mockito.mock(MongoDatabase.class); + MongoCollection collection = Mockito.mock(MongoCollection.class); + Mockito.when(connector.getConfig().getMongo().getDatabase(Mockito.anyString())).thenReturn(db); Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); connector.insertMigrationVersion(10); @@ -249,10 +249,9 @@ public void insertMigrationVersionTest() { public void removeMigrationVersionTest() { MongoDBConnector connector = TestUtils.newMongoDBConnector(); - DB db = Mockito.mock(DB.class); - - DBCollection collection = Mockito.mock(DBCollection.class); - Mockito.when(connector.getConfig().getMongo().getDB(Mockito.anyString())).thenReturn(db); + MongoDatabase db = Mockito.mock(MongoDatabase.class); + MongoCollection collection = Mockito.mock(MongoCollection.class); + Mockito.when(connector.getConfig().getMongo().getDatabase(Mockito.anyString())).thenReturn(db); Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); connector.removeMigrationVersion(10); @@ -262,9 +261,9 @@ public void removeMigrationVersionTest() { public void dropIndexByNameTest() { MongoDBConnector connector = TestUtils.newMongoDBConnector(); - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - Mockito.when(connector.getConfig().getMongo().getDB(Mockito.anyString())).thenReturn(db); + MongoDatabase db = Mockito.mock(MongoDatabase.class); + MongoCollection collection = Mockito.mock(MongoCollection.class); + Mockito.when(connector.getConfig().getMongo().getDatabase(Mockito.anyString())).thenReturn(db); Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); connector.dropIndexByName("collection", "indexName"); @@ -282,42 +281,4 @@ public void dropIndexByNameIndexNullTest() { connector.dropIndexByName("collection", null); } - @Test - public void dropIndexByNameDatabaseNotNullTest() { - - MongoClient mockedMongo = Mockito.mock(MongoClient.class); - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - Mockito.when(mockedMongo.getDB(Mockito.anyString())).thenReturn(db); - - MongoDBConnector connector = new MongoDBConnector( - MongoDBConnectorConfig - .builder() - .setMongoClient(mockedMongo) - .setDatabaseName("databaseName") - .build()); - connector.dropIndexByName("collection", "indexName"); - } - - @Test - public void createIndexTest() { - - MongoClient mockedMongo = Mockito.mock(MongoClient.class); - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - - Mockito.when(mockedMongo.getDB(Mockito.anyString())).thenReturn(db); - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - - MongoDBConnector connector = new MongoDBConnector( - MongoDBConnectorConfig.builder() - .setMongoClient(mockedMongo) - .setDatabaseName("databaseName") - .build()); - - connector.createIndex("coll", new BasicDBObject(), new BasicDBObject()); - } - } diff --git a/src/test/java/ox/engine/internal/ValidateCreateIndexTest.java b/src/test/java/ox/engine/internal/ValidateCreateIndexTest.java index 9749791..2181a3c 100644 --- a/src/test/java/ox/engine/internal/ValidateCreateIndexTest.java +++ b/src/test/java/ox/engine/internal/ValidateCreateIndexTest.java @@ -18,131 +18,6 @@ @RunWith(MockitoJUnitRunner.class) public class ValidateCreateIndexTest { - /** - * Tries to create a index that doesn't exists yet. - */ - @Test - public void createIndexIfIndexDoesntExistsTest() { - - MongoDBConnector connector = TestUtils.newMongoDBConnector(); - - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - - Mockito.when(connector.getConfig().getMongo().getDB(connector.getConfig().getDatabaseName())).thenReturn(db); - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - - OxAction - .createIndex("myIndex") - .ifNotExists() - .setCollection("myCollection") - .addAttribute("attr1", OrderingType.ASC) - .unique() - .dropDups() - .runAction(connector, connector.getConfig().getMongo(), connector.getConfig().getDatabaseName()); - - } - - /** - * Tries to create a index that doesn't exists yet. - */ - @Test - public void createIndexIfIndexDoesntExistsUsingDescOrderingTest() { - - MongoDBConnector connector = TestUtils.newMongoDBConnector(); - - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - - Mockito.when(connector.getConfig().getMongo().getDB(connector.getConfig().getDatabaseName())).thenReturn(db); - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - - OxAction - .createIndex("myIndex") - .ifNotExists() - .setCollection("myCollection") - .addAttribute("attr1", OrderingType.DESC) - .unique() - .runAction(connector, connector.getConfig().getMongo(), connector.getConfig().getDatabaseName()); - - - } - - /** - * Tries to create a index that already exists. - * (Same attributes) - *

- * The index must not be created. This action should be ignored. - */ - @SuppressWarnings("unchecked") - @Test - public void createIndexIfIndexAlreadyExistsTest() { - - MongoDBConnector connector = TestUtils.newMongoDBConnector(); - - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - - Mockito.when(connector.getConfig().getMongo().getDB(connector.getConfig().getDatabaseName())).thenReturn(db); - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - - ArrayList indexInfo = new ArrayList(); - - BasicDBObject keys = new BasicDBObject(); - keys.append("attr1", 1); - - BasicDBObject o = new BasicDBObject(); - o.append("key", keys); - o.append("name", "someIndexName"); - - indexInfo.add(o); - - Mockito.when(collection.getIndexInfo()).thenReturn(indexInfo); - - OxAction - .createIndex("myIndex") - .ifNotExists() - .setCollection("myCollection") - .addAttribute("attr1", OrderingType.DESC) - .runAction(connector, connector.getConfig().getMongo(), connector.getConfig().getDatabaseName()); - - } - - /** - * Tries to create a index that already exists. - * (Same name) - * The index must not be created. This action should be ignored. - */ - @Test - public void createIndexIfIndexAlreadyExistsWithSameNameTest() { - - MongoDBConnector connector = TestUtils.newMongoDBConnector(); - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - Mockito.when(connector.getConfig().getMongo().getDB(connector.getConfig().getDatabaseName())).thenReturn(db); - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - - ArrayList indexInfo = new ArrayList(); - - BasicDBObject keys = new BasicDBObject(); - keys.append("attr2", 1); - - BasicDBObject o = new BasicDBObject(); - o.append("key", keys); - o.append("name", "myIndex"); - - indexInfo.add(o); - - Mockito.when(collection.getIndexInfo()).thenReturn(indexInfo); - - OxAction - .createIndex("myIndex") - .ifNotExists() - .setCollection("myCollection") - .addAttribute("attr1", OrderingType.ASC) - .runAction(connector, connector.getConfig().getMongo(), connector.getConfig().getDatabaseName()); - - } /** * Tries to create a index an invalid index diff --git a/src/test/java/ox/engine/internal/ValidateRemoveIndexActionTest.java b/src/test/java/ox/engine/internal/ValidateRemoveIndexActionTest.java index 91b4eae..828467f 100644 --- a/src/test/java/ox/engine/internal/ValidateRemoveIndexActionTest.java +++ b/src/test/java/ox/engine/internal/ValidateRemoveIndexActionTest.java @@ -22,78 +22,6 @@ private MongoDBConnector newMongoDBConnector() { .build()); } - /** - * IfExists enabled. - * Index not found after looking into database - * - * @throws InvalidMigrateActionException - */ - @Test - public void testIndexRemovalWithIfExistsEnabledAndIndexNotFound() throws InvalidMigrateActionException { - - MongoDBConnector connector = newMongoDBConnector(); - - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - Mockito.when(connector.getConfig().getMongo().getDB(connector.getConfig().getDatabaseName())).thenReturn(db); - Mockito.when(db.getCollection("testCollection")).thenReturn(collection); - - OxAction.removeIndex("someIndex") - .setCollection("testCollection") - .ifExists() - .runAction(connector, connector.getConfig().getMongo(), "databaseName"); - } - - /** - * IfExists enabled. - * Index found after looking into database - * - * @throws InvalidMigrateActionException - */ - @Test - public void testIndexRemovalWithIfExistsEnabled() throws InvalidMigrateActionException { - - MongoDBConnector connector = newMongoDBConnector(); - - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - - Mockito.when(connector.getConfig().getMongo().getDB(Mockito.anyString())).thenReturn(db); - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - - OxAction - .removeIndex("someIndex") - .setCollection("collectionName") - .ifExists() - .runAction(connector, connector.getConfig().getMongo(), "databaseName"); - - } - - /** - * IfExists DISABLED. - * Index found after looking into database - * - * @throws InvalidMigrateActionException - */ - @SuppressWarnings("unchecked") - @Test - public void testIndexRemovalWithoutIfExistsEnabled() throws InvalidMigrateActionException { - - MongoDBConnector mongoDBConnector = newMongoDBConnector(); - - DB db = Mockito.mock(DB.class); - DBCollection collection = Mockito.mock(DBCollection.class); - - Mockito.when(mongoDBConnector.getConfig().getMongo().getDB(Mockito.anyString())).thenReturn(db); - Mockito.when(db.getCollection(Mockito.anyString())).thenReturn(collection); - - OxAction - .removeIndex("someIndex") - .setCollection("collectionName") - .runAction(mongoDBConnector, mongoDBConnector.getConfig().getMongo(), "databaseName"); - - - } /** * No collection set diff --git a/src/test/java/ox/integration/CreateIndexTest.java b/src/test/java/ox/integration/CreateIndexTest.java new file mode 100644 index 0000000..7e89f8e --- /dev/null +++ b/src/test/java/ox/integration/CreateIndexTest.java @@ -0,0 +1,40 @@ +package ox.integration; + +import com.mongodb.MongoClient; +import org.assertj.core.api.Assertions; +import org.bson.Document; +import org.junit.Test; +import ox.engine.Ox; +import ox.engine.OxConfig; +import ox.engine.exception.InvalidMongoConfiguration; +import ox.integration.base.OxBaseContainerTest; + +import java.util.ArrayList; +import java.util.List; + +public class CreateIndexTest extends OxBaseContainerTest { + + @Test + public void shouldCreateIndex() throws InvalidMongoConfiguration { + MongoClient mongo = getDefaultMongo(); + OxConfig config = OxConfig.builder() + .mongo(mongo) + .databaseName("create-index-test") + .scanPackage("ox.db.migrations") + .build(); + + Ox ox = Ox.setUp(config); + ox.up(1); + + List allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection("myCollection") + .listIndexes().into(new ArrayList<>()) + .stream().filter(d -> !d.getString("name").equals("_id_")).toList(); + + Assertions.assertThatCollection(allIndexes) + .extracting("name") + .containsExactlyInAnyOrder("myIndex", "myIndex2"); + + } +} diff --git a/src/test/java/ox/integration/DryRunTest.java b/src/test/java/ox/integration/DryRunTest.java new file mode 100644 index 0000000..28884d3 --- /dev/null +++ b/src/test/java/ox/integration/DryRunTest.java @@ -0,0 +1,60 @@ +package ox.integration; + +import com.mongodb.client.ListIndexesIterable; +import org.assertj.core.api.Assertions; +import org.bson.Document; +import org.junit.Test; +import ox.engine.Ox; +import ox.engine.OxConfig; +import ox.engine.exception.InvalidMongoConfiguration; +import ox.integration.base.OxBaseContainerTest; + +import java.util.ArrayList; +import java.util.List; + +public class DryRunTest extends OxBaseContainerTest { + + @Test + public void dryRunUpTest() throws InvalidMongoConfiguration { + OxConfig config = OxConfig.builder() + .mongo(getDefaultMongo()) + .databaseName("up_dry_run_db") + .scanPackage("ox.db.migrations") + .dryRun() + .build(); + + Ox.setUp(config).up(); + + ListIndexesIterable indexes = getDefaultMongo() + .getDatabase("up_dry_run_db") + .getCollection(config.migrationCollectionName()) + .listIndexes(); + + List indexesList = indexes.into(new ArrayList<>()) + .stream().filter(d -> !d.getString("name").equals("_id_")) + .toList(); + Assertions.assertThat(indexesList).isEmpty(); + } + + @Test + public void dryRunDownTest() throws InvalidMongoConfiguration { + OxConfig config = OxConfig.builder() + .mongo(getDefaultMongo()) + .databaseName("up_dry_run_db") + .scanPackage("ox.db.migrations") + .dryRun() + .build(); + + Ox.setUp(config).down(); + + ListIndexesIterable indexes = getDefaultMongo() + .getDatabase("up_dry_run_db") + .getCollection(config.migrationCollectionName()) + .listIndexes(); + + List indexesList = indexes.into(new ArrayList<>()) + .stream().filter(d -> !d.getString("name").equals("_id_")) + .toList(); + Assertions.assertThat(indexesList).isEmpty(); + } +} diff --git a/src/test/java/ox/integration/dropindex/DropIndexByNameTest.java b/src/test/java/ox/integration/dropindex/DropIndexByNameTest.java new file mode 100644 index 0000000..97ac9fc --- /dev/null +++ b/src/test/java/ox/integration/dropindex/DropIndexByNameTest.java @@ -0,0 +1,49 @@ +package ox.integration.dropindex; + +import org.assertj.core.api.Assertions; +import org.assertj.core.api.Condition; +import org.bson.Document; +import org.junit.Test; +import ox.engine.Ox; +import ox.engine.OxConfig; +import ox.engine.exception.InvalidMongoConfiguration; +import ox.integration.base.OxBaseContainerTest; + +import java.util.ArrayList; +import java.util.List; + +public class DropIndexByNameTest extends OxBaseContainerTest { + + @Test + public void shouldDropIndexByName() throws InvalidMongoConfiguration { + OxConfig config = OxConfig.builder() + .mongo(getDefaultMongo()) + .databaseName("drop_index_test_db") + .scanPackage("ox.integration.dropindex.migrations") + .build(); + + Ox ox = Ox.setUp(config); + ox.up(1); + + Assertions.assertThat(ox.databaseVersion()).isEqualTo(1); + + List allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection("drop_index_test") + .listIndexes().into(new ArrayList<>()); + Assertions.assertThat(allIndexes).hasSize(2); + Assertions.assertThat(allIndexes.get(1).get("name")).isEqualTo("email_index"); + + ox.up(); + + Assertions.assertThat(ox.databaseVersion()).isEqualTo(2); + allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection("drop_index_test") + .listIndexes().into(new ArrayList<>()); + Assertions.assertThat(allIndexes).hasSize(1); + Assertions.assertThatList(allIndexes).extracting("name") + .doesNotHave(new Condition<>(n -> n.equals("email_index"), "email_index")); + + } +} diff --git a/src/test/java/ox/integration/dropindex/migrations/V0001__create_index.java b/src/test/java/ox/integration/dropindex/migrations/V0001__create_index.java new file mode 100644 index 0000000..8df2410 --- /dev/null +++ b/src/test/java/ox/integration/dropindex/migrations/V0001__create_index.java @@ -0,0 +1,23 @@ +package ox.integration.dropindex.migrations; + +import ox.engine.exception.OxException; +import ox.engine.internal.OxAction; +import ox.engine.internal.OxEnvironment; +import ox.engine.structure.Migration; +import ox.engine.structure.OrderingType; + +public class V0001__create_index implements Migration { + + @Override + public void up(OxEnvironment env) throws OxException { + env.execute(OxAction + .createIndex("email_index") + .addAttribute("email", OrderingType.ASC) + .setCollection("drop_index_test")); + } + + @Override + public void down(OxEnvironment env) throws OxException { + + } +} diff --git a/src/test/java/ox/integration/dropindex/migrations/V0002__drop_index.java b/src/test/java/ox/integration/dropindex/migrations/V0002__drop_index.java new file mode 100644 index 0000000..6a64c09 --- /dev/null +++ b/src/test/java/ox/integration/dropindex/migrations/V0002__drop_index.java @@ -0,0 +1,20 @@ +package ox.integration.dropindex.migrations; + +import ox.engine.exception.OxException; +import ox.engine.internal.OxAction; +import ox.engine.internal.OxEnvironment; +import ox.engine.structure.Migration; + +public class V0002__drop_index implements Migration { + @Override + public void up(OxEnvironment env) throws OxException { + env.execute(OxAction + .removeIndex("email_index") + .setCollection("drop_index_test")); + } + + @Override + public void down(OxEnvironment env) throws OxException { + + } +} diff --git a/src/test/java/ox/integration/duplicate/DuplicateIndexTest.java b/src/test/java/ox/integration/duplicate/DuplicateIndexTest.java new file mode 100644 index 0000000..93fc0ba --- /dev/null +++ b/src/test/java/ox/integration/duplicate/DuplicateIndexTest.java @@ -0,0 +1,63 @@ +package ox.integration.duplicate; + +import org.assertj.core.api.Assertions; +import org.bson.Document; +import org.junit.Test; +import ox.engine.Ox; +import ox.engine.OxConfig; +import ox.engine.exception.InvalidMongoConfiguration; +import ox.integration.base.OxBaseContainerTest; +import ox.utils.Faker; + +import java.util.ArrayList; +import java.util.List; + +public class DuplicateIndexTest extends OxBaseContainerTest { + + /** + * Tries to create a index that already exists. + * (Same attributes) + *

+ * The index must not be created. This action should be ignored. + */ + @Test + public void shouldIgnoreDuplicateIndex() throws InvalidMongoConfiguration { + + String pkg = "ox.integration.duplicate.migrations"; + String collection = "test_collection"; + OxConfig config = OxConfig.builder() + .mongo(getDefaultMongo()) + .databaseName(Faker.fakeDBName()) + .scanPackage(pkg) + .build(); + + // Should have no index + List allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection(collection) + .listIndexes().into(new ArrayList<>()); + + Assertions.assertThat(allIndexes).isEmpty(); + + Ox ox = Ox.setUp(config); + ox.up(1); + + allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection(collection) + .listIndexes().into(new ArrayList<>()); + + Assertions.assertThat(allIndexes).hasSize(2); + + ox.up(); + + allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection(collection) + .listIndexes().into(new ArrayList<>()); + + Assertions.assertThat(allIndexes).hasSize(2); + + } + +} diff --git a/src/test/java/ox/integration/duplicate/migrations/V0001__create_index.java b/src/test/java/ox/integration/duplicate/migrations/V0001__create_index.java new file mode 100644 index 0000000..55fb0eb --- /dev/null +++ b/src/test/java/ox/integration/duplicate/migrations/V0001__create_index.java @@ -0,0 +1,24 @@ +package ox.integration.duplicate.migrations; + +import ox.engine.exception.OxException; +import ox.engine.internal.OxAction; +import ox.engine.internal.OxEnvironment; +import ox.engine.structure.Migration; +import ox.engine.structure.OrderingType; + +public class V0001__create_index implements Migration { + + @Override + public void up(OxEnvironment env) throws OxException { + env.execute(OxAction.createIndex("email_index") + .ifNotExists() + .addAttribute("attr1", OrderingType.ASC) + .setCollection("test_collection") + ); + } + + @Override + public void down(OxEnvironment env) throws OxException { + + } +} diff --git a/src/test/java/ox/integration/duplicate/migrations/V0002__create_index.java b/src/test/java/ox/integration/duplicate/migrations/V0002__create_index.java new file mode 100644 index 0000000..b55ae56 --- /dev/null +++ b/src/test/java/ox/integration/duplicate/migrations/V0002__create_index.java @@ -0,0 +1,23 @@ +package ox.integration.duplicate.migrations; + +import ox.engine.exception.OxException; +import ox.engine.internal.OxAction; +import ox.engine.internal.OxEnvironment; +import ox.engine.structure.Migration; +import ox.engine.structure.OrderingType; + +public class V0002__create_index implements Migration { + @Override + public void up(OxEnvironment env) throws OxException { + env.execute(OxAction.createIndex("email_index") + .ifNotExists() + .addAttribute("attr1", OrderingType.ASC) + .setCollection("test_collection") + ); + } + + @Override + public void down(OxEnvironment env) throws OxException { + + } +} diff --git a/src/test/java/ox/integration/ifnotexists/CreateIfNotExistsIndexTest.java b/src/test/java/ox/integration/ifnotexists/CreateIfNotExistsIndexTest.java new file mode 100644 index 0000000..2c4e608 --- /dev/null +++ b/src/test/java/ox/integration/ifnotexists/CreateIfNotExistsIndexTest.java @@ -0,0 +1,51 @@ +package ox.integration.ifnotexists; + +import com.mongodb.MongoClient; +import org.assertj.core.api.Assertions; +import org.bson.Document; +import org.junit.Test; +import ox.engine.Ox; +import ox.engine.OxConfig; +import ox.engine.exception.InvalidMongoConfiguration; +import ox.integration.base.OxBaseContainerTest; + +import java.util.ArrayList; +import java.util.List; + +public class CreateIfNotExistsIndexTest extends OxBaseContainerTest { + + /** + * simplest case of creating an index + */ + @Test + public void shouldCreateIndex() throws InvalidMongoConfiguration { + MongoClient mongo = getDefaultMongo(); + + OxConfig config = OxConfig.builder() + .mongo(mongo) + .databaseName("create-index-if-not-exists-test") + .scanPackage("ox.integration.ifnotexists.migrations") + .build(); + + List allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection("myCollection") + .listIndexes().into(new ArrayList<>()); + + Assertions.assertThat(allIndexes).isEmpty(); + + Ox ox = Ox.setUp(config); + ox.up(); + + allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection("myCollection") + .listIndexes().into(new ArrayList<>()) + .stream().filter(d -> !d.getString("name").equals("_id_")).toList(); + + Assertions.assertThatCollection(allIndexes) + .extracting("name") + .containsExactlyInAnyOrder("myIndex"); + + } +} diff --git a/src/test/java/ox/integration/ifnotexists/migrations/V0001_CreateIndexMigrationTest.java b/src/test/java/ox/integration/ifnotexists/migrations/V0001_CreateIndexMigrationTest.java new file mode 100644 index 0000000..bc3ffca --- /dev/null +++ b/src/test/java/ox/integration/ifnotexists/migrations/V0001_CreateIndexMigrationTest.java @@ -0,0 +1,27 @@ +package ox.integration.ifnotexists.migrations; + +import ox.engine.exception.InvalidMigrateActionException; +import ox.engine.internal.OxAction; +import ox.engine.internal.OxEnvironment; +import ox.engine.structure.Migration; +import ox.engine.structure.OrderingType; + +public class V0001_CreateIndexMigrationTest implements Migration { + + @Override + public void up(OxEnvironment env) throws InvalidMigrateActionException { + + OxAction + .createIndex("myIndex") + .ifNotExists() + .setCollection("myCollection") + .unique() + .addAttribute("attr1", OrderingType.ASC) + .execute(env); + + } + + @Override + public void down(OxEnvironment env) { + } +} diff --git a/src/test/java/ox/integration/sequenced/migrations/step1/V0001__first_migration.java b/src/test/java/ox/integration/sequenced/migrations/step1/V0001__first_migration.java index 7cf87da..2a62cc0 100644 --- a/src/test/java/ox/integration/sequenced/migrations/step1/V0001__first_migration.java +++ b/src/test/java/ox/integration/sequenced/migrations/step1/V0001__first_migration.java @@ -13,7 +13,7 @@ public void up(OxEnvironment env) { .createIndex("my_index1") .setCollection("test_col1") .addAttribute("attr1", OrderingType.ASC) - .unique().dropDups()); + .unique()); } @Override diff --git a/src/test/java/ox/integration/sequenced/migrations/step2/V0002__second_migration.java b/src/test/java/ox/integration/sequenced/migrations/step2/V0002__second_migration.java index 98a3ae3..9707bf4 100644 --- a/src/test/java/ox/integration/sequenced/migrations/step2/V0002__second_migration.java +++ b/src/test/java/ox/integration/sequenced/migrations/step2/V0002__second_migration.java @@ -13,8 +13,7 @@ public void up(OxEnvironment env) { .createIndex("my_index2") .setCollection("test_col1") .addAttribute("attr2", OrderingType.DESC) - .unique() - .dropDups()); + .unique()); } @Override From b4a6761b501ca56431f00193a7501d06985119d6 Mon Sep 17 00:00:00 2001 From: Fernando Nogueira Date: Mon, 4 Mar 2024 02:29:27 -0300 Subject: [PATCH 2/2] chore: add create ttl index test --- .../integration/ttl/CreateTTLIndexTest.java | 41 +++++++++++++++++++ .../ttl/migrations/V0001__create_index.java | 24 +++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/test/java/ox/integration/ttl/CreateTTLIndexTest.java create mode 100644 src/test/java/ox/integration/ttl/migrations/V0001__create_index.java diff --git a/src/test/java/ox/integration/ttl/CreateTTLIndexTest.java b/src/test/java/ox/integration/ttl/CreateTTLIndexTest.java new file mode 100644 index 0000000..8f7002a --- /dev/null +++ b/src/test/java/ox/integration/ttl/CreateTTLIndexTest.java @@ -0,0 +1,41 @@ +package ox.integration.ttl; + +import org.assertj.core.api.Assertions; +import org.bson.Document; +import org.junit.Test; +import ox.engine.Ox; +import ox.engine.OxConfig; +import ox.engine.exception.InvalidMongoConfiguration; +import ox.integration.base.OxBaseContainerTest; + +import java.util.ArrayList; +import java.util.List; + +public class CreateTTLIndexTest extends OxBaseContainerTest { + + @Test + public void shouldCreateTTLIndex() throws InvalidMongoConfiguration { + + OxConfig config = OxConfig.builder() + .mongo(getDefaultMongo()) + .databaseName("create-ttl-index-test") + .scanPackage("ox.integration.ttl.migrations") + .build(); + + Ox ox = Ox.setUp(config); + ox.up(); + + List allIndexes = getDefaultMongo() + .getDatabase(config.databaseName()) + .getCollection("ttl_collection") + .listIndexes().into(new ArrayList<>()) + .stream().filter(d -> !d.getString("name").equals("_id_")).toList(); + + Assertions.assertThatCollection(allIndexes) + .extracting("name") + .containsExactlyInAnyOrder("ttl_index"); + + Assertions.assertThat(allIndexes.get(0).get("expireAfterSeconds")).isEqualTo(600); + + } +} diff --git a/src/test/java/ox/integration/ttl/migrations/V0001__create_index.java b/src/test/java/ox/integration/ttl/migrations/V0001__create_index.java new file mode 100644 index 0000000..1dfcb21 --- /dev/null +++ b/src/test/java/ox/integration/ttl/migrations/V0001__create_index.java @@ -0,0 +1,24 @@ +package ox.integration.ttl.migrations; + +import ox.engine.exception.OxException; +import ox.engine.internal.OxAction; +import ox.engine.internal.OxEnvironment; +import ox.engine.structure.Migration; +import ox.engine.structure.OrderingType; + +public class V0001__create_index implements Migration { + + @Override + public void up(OxEnvironment env) throws OxException { + OxAction.createIndex("ttl_index") + .addAttribute("createdAt", OrderingType.ASC) + .setCollection("ttl_collection") + .markAsTTL(600) + .execute(env); + } + + @Override + public void down(OxEnvironment env) throws OxException { + + } +}