Skip to content
Snippets Groups Projects
Commit e9e6e941 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-3539 OZG-6824 remove production code dependencies from db migration code

parent f9cc382b
No related branches found
No related tags found
No related merge requests found
package de.ozgcloud.user.common.migration; package de.ozgcloud.user.common.migration;
import static de.ozgcloud.user.common.DocumentUtils.*;
import java.util.Map; import java.util.Map;
import org.bson.Document; import org.bson.Document;
...@@ -9,8 +7,6 @@ import org.bson.Document; ...@@ -9,8 +7,6 @@ import org.bson.Document;
import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoDatabase;
import de.ozgcloud.user.User;
import de.ozgcloud.user.settings.UserSettings;
import io.mongock.api.annotations.ChangeUnit; import io.mongock.api.annotations.ChangeUnit;
import io.mongock.api.annotations.Execution; import io.mongock.api.annotations.Execution;
import io.mongock.api.annotations.RollbackExecution; import io.mongock.api.annotations.RollbackExecution;
...@@ -20,11 +16,19 @@ import lombok.RequiredArgsConstructor; ...@@ -20,11 +16,19 @@ import lombok.RequiredArgsConstructor;
@ChangeUnit(id = "2024-09-22 12:00:00 OZG-3539", order = "M001", author = "sbergandy", systemVersion = "1") @ChangeUnit(id = "2024-09-22 12:00:00 OZG-3539", order = "M001", author = "sbergandy", systemVersion = "1")
public class M001_SetNewAndMigrateUserSettings { public class M001_SetNewAndMigrateUserSettings {
static final String USER_COLLECTION_NAME = "User";
static final String USER_SETTINGS_FIELD = "userSettings";
static final String NOTIFICATIONS_SEND_FOR_FIELD = "notificationsSendFor";
static final String VORGANG_CREATED_FIELD = "vorgangCreated";
static final String VORGANG_ASSIGNED_TO_USER_FIELD = "vorgangAssignedToUser";
static final String POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD = "postfachNachrichtFromAntragsteller";
static final String WIEDERVORLAGE_OVERDUE_FIELD = "wiedervorlageOverdue";
private final MongoDatabase mongoDatabase; private final MongoDatabase mongoDatabase;
@Execution @Execution
public void migrationMethod() { public void migrationMethod() {
var userCollection = mongoDatabase.getCollection(User.COLLECTION_NAME); var userCollection = mongoDatabase.getCollection(USER_COLLECTION_NAME);
migrateNotificationsSendForALL(userCollection); migrateNotificationsSendForALL(userCollection);
migrateNotificationsSendForNONE(userCollection); migrateNotificationsSendForNONE(userCollection);
migrateEmptySettings(userCollection); migrateEmptySettings(userCollection);
...@@ -32,39 +36,43 @@ public class M001_SetNewAndMigrateUserSettings { ...@@ -32,39 +36,43 @@ public class M001_SetNewAndMigrateUserSettings {
private void migrateNotificationsSendForALL(MongoCollection<Document> userCollection) { private void migrateNotificationsSendForALL(MongoCollection<Document> userCollection) {
userCollection.updateMany( userCollection.updateMany(
new Document(Map.of(buildFieldPath(User.USER_SETTINGS_FIELD, UserSettings.NOTIFICATIONS_SEND_FOR_FIELD), "ALL")), new Document(Map.of(buildFieldPath(USER_SETTINGS_FIELD, NOTIFICATIONS_SEND_FOR_FIELD), "ALL")),
new Document(Map.of("$set", Map.of(User.USER_SETTINGS_FIELD, new Document(Map.of("$set", Map.of(USER_SETTINGS_FIELD,
Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "ALL", Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "ALL",
UserSettings.VORGANG_CREATED_FIELD, true, VORGANG_CREATED_FIELD, true,
UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, VORGANG_ASSIGNED_TO_USER_FIELD, true,
UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true,
UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true))))); WIEDERVORLAGE_OVERDUE_FIELD, true)))));
} }
private void migrateNotificationsSendForNONE(MongoCollection<Document> userCollection) { private void migrateNotificationsSendForNONE(MongoCollection<Document> userCollection) {
userCollection.updateMany( userCollection.updateMany(
new Document(Map.of(buildFieldPath(User.USER_SETTINGS_FIELD, UserSettings.NOTIFICATIONS_SEND_FOR_FIELD), "NONE")), new Document(Map.of(buildFieldPath(USER_SETTINGS_FIELD, NOTIFICATIONS_SEND_FOR_FIELD), "NONE")),
new Document(Map.of("$set", Map.of(User.USER_SETTINGS_FIELD, new Document(Map.of("$set", Map.of(USER_SETTINGS_FIELD,
Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE", Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "NONE",
UserSettings.VORGANG_CREATED_FIELD, false, VORGANG_CREATED_FIELD, false,
UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, VORGANG_ASSIGNED_TO_USER_FIELD, true,
UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true,
UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true))))); WIEDERVORLAGE_OVERDUE_FIELD, true)))));
} }
private void migrateEmptySettings(MongoCollection<Document> userCollection) { private void migrateEmptySettings(MongoCollection<Document> userCollection) {
userCollection.updateMany( userCollection.updateMany(
new Document(Map.of(buildFieldPath(User.USER_SETTINGS_FIELD, UserSettings.NOTIFICATIONS_SEND_FOR_FIELD), Map.of("$exists", false))), new Document(Map.of(buildFieldPath(USER_SETTINGS_FIELD, NOTIFICATIONS_SEND_FOR_FIELD), Map.of("$exists", false))),
new Document(Map.of("$set", Map.of(User.USER_SETTINGS_FIELD, new Document(Map.of("$set", Map.of(USER_SETTINGS_FIELD,
Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE", Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "NONE",
UserSettings.VORGANG_CREATED_FIELD, false, VORGANG_CREATED_FIELD, false,
UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, VORGANG_ASSIGNED_TO_USER_FIELD, true,
UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true,
UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true))))); WIEDERVORLAGE_OVERDUE_FIELD, true)))));
} }
@RollbackExecution @RollbackExecution
public void rollback() { public void rollback() {
// kein rollback implementiert // kein rollback implementiert
} }
private String buildFieldPath(String... fields) {
return String.join(".", fields);
}
} }
package de.ozgcloud.user.common.migration; package de.ozgcloud.user.common.migration;
import static de.ozgcloud.user.common.migration.M001_SetNewAndMigrateUserSettings.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import java.util.Map; import java.util.Map;
...@@ -14,9 +15,7 @@ import org.junit.jupiter.api.Test; ...@@ -14,9 +15,7 @@ import org.junit.jupiter.api.Test;
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCollection;
import de.ozgcloud.user.User;
import de.ozgcloud.user.common.MongoDbTestProfile; import de.ozgcloud.user.common.MongoDbTestProfile;
import de.ozgcloud.user.settings.UserSettings;
import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.junit.TestProfile; import io.quarkus.test.junit.TestProfile;
...@@ -24,6 +23,8 @@ import io.quarkus.test.junit.TestProfile; ...@@ -24,6 +23,8 @@ import io.quarkus.test.junit.TestProfile;
@TestProfile(MongoDbTestProfile.class) @TestProfile(MongoDbTestProfile.class)
class M001_SetNewAndMigrateUserSettingsITCase { class M001_SetNewAndMigrateUserSettingsITCase {
static final String USERNAME_FIELD = "username";
@ConfigProperty(name = "quarkus.mongodb.database") @ConfigProperty(name = "quarkus.mongodb.database")
String database; String database;
...@@ -40,55 +41,55 @@ class M001_SetNewAndMigrateUserSettingsITCase { ...@@ -40,55 +41,55 @@ class M001_SetNewAndMigrateUserSettingsITCase {
@BeforeEach @BeforeEach
void initDatabase() { void initDatabase() {
userCollection = mongoClient.getDatabase(database).getCollection(User.COLLECTION_NAME); userCollection = mongoClient.getDatabase(database).getCollection(USER_COLLECTION_NAME);
userCollection.drop(); userCollection.drop();
userCollection.insertOne(new Document( userCollection.insertOne(new Document(
Map.of(User.USERNAME_FIELD, "alluser", Map.of(USERNAME_FIELD, "alluser",
User.USER_SETTINGS_FIELD, Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "ALL")))); USER_SETTINGS_FIELD, Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "ALL"))));
userCollection.insertOne(new Document(Map.of(User.USERNAME_FIELD, "noneuser", userCollection.insertOne(new Document(Map.of(USERNAME_FIELD, "noneuser",
User.USER_SETTINGS_FIELD, Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE")))); USER_SETTINGS_FIELD, Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "NONE"))));
userCollection.insertOne(new Document(Map.of(User.USERNAME_FIELD, "nosettings"))); userCollection.insertOne(new Document(Map.of(USERNAME_FIELD, "nosettings")));
} }
@Test @Test
void shouldMigrateNotificationSendFor_ALL() { void shouldMigrateNotificationSendFor_ALL() {
migration.migrationMethod(); migration.migrationMethod();
var user = userCollection.find(new Document(Map.of(User.USERNAME_FIELD, "alluser"))); var user = userCollection.find(new Document(Map.of(USERNAME_FIELD, "alluser")));
assertThat(user.first()).contains( assertThat(user.first()).contains(
entry(User.USER_SETTINGS_FIELD, new Document(Map.of( entry(USER_SETTINGS_FIELD, new Document(Map.of(
UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "ALL", NOTIFICATIONS_SEND_FOR_FIELD, "ALL",
UserSettings.VORGANG_CREATED_FIELD, true, VORGANG_CREATED_FIELD, true,
UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, VORGANG_ASSIGNED_TO_USER_FIELD, true,
UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true,
UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true)))); WIEDERVORLAGE_OVERDUE_FIELD, true))));
} }
@Test @Test
void shouldMigrateNotificationSendFor_NONE() { void shouldMigrateNotificationSendFor_NONE() {
migration.migrationMethod(); migration.migrationMethod();
var user = userCollection.find(new Document(Map.of(User.USERNAME_FIELD, "noneuser"))); var user = userCollection.find(new Document(Map.of(USERNAME_FIELD, "noneuser")));
assertThat(user.first()).contains( assertThat(user.first()).contains(
entry(User.USER_SETTINGS_FIELD, new Document(Map.of( entry(USER_SETTINGS_FIELD, new Document(Map.of(
UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE", NOTIFICATIONS_SEND_FOR_FIELD, "NONE",
UserSettings.VORGANG_CREATED_FIELD, false, VORGANG_CREATED_FIELD, false,
UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, VORGANG_ASSIGNED_TO_USER_FIELD, true,
UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true,
UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true)))); WIEDERVORLAGE_OVERDUE_FIELD, true))));
} }
@Test @Test
void shouldSetDefaultSettings() { void shouldSetDefaultSettings() {
migration.migrationMethod(); migration.migrationMethod();
var user = userCollection.find(new Document(Map.of(User.USERNAME_FIELD, "nosettings"))); var user = userCollection.find(new Document(Map.of(USERNAME_FIELD, "nosettings")));
assertThat(user.first()).contains( assertThat(user.first()).contains(
entry(User.USER_SETTINGS_FIELD, new Document(Map.of( entry(USER_SETTINGS_FIELD, new Document(Map.of(
UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE", NOTIFICATIONS_SEND_FOR_FIELD, "NONE",
UserSettings.VORGANG_CREATED_FIELD, false, VORGANG_CREATED_FIELD, false,
UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, VORGANG_ASSIGNED_TO_USER_FIELD, true,
UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true,
UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true)))); WIEDERVORLAGE_OVERDUE_FIELD, true))));
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment