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
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 {
+
+ }
+}