package org.openmetadata.service.jdbi3;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openmetadata.schema.entity.data.Table;
import org.openmetadata.schema.type.FieldChange;
import org.openmetadata.schema.type.change.ChangeSource;
import org.openmetadata.schema.type.change.ChangeSummary;
public class ChangeSummarizerTest {
private ChangeSummarizer
changeSummarizer;
@BeforeEach
public void setUp() {
changeSummarizer =
new ChangeSummarizer<>(Table.class, Set.of("description", "columns.description"));
}
@Test
public void test_tableDescription() {
String fieldName = "description";
ChangeSource changeSource = ChangeSource.MANUAL;
long updatedAt = System.currentTimeMillis();
String updatedBy = "testUser";
List changes = List.of(new FieldChange().withName(fieldName));
Map result =
changeSummarizer.summarizeChanges(Map.of(), changes, changeSource, updatedBy, updatedAt);
assert result.size() == 1;
Assertions.assertTrue(result.containsKey(fieldName));
result =
changeSummarizer.summarizeChanges(
result, changes, ChangeSource.AUTOMATED, "older-change", updatedAt - 100);
assert result.size() == 0;
}
@Test
public void test_columnDescription() {
String fieldName = "columns.column1.description";
ChangeSource changeSource = ChangeSource.MANUAL;
long updatedAt = System.currentTimeMillis();
String updatedBy = "testUser";
List changes = List.of(new FieldChange().withName(fieldName));
Map result =
changeSummarizer.summarizeChanges(Map.of(), changes, changeSource, updatedBy, updatedAt);
assert result.size() == 1;
Assertions.assertTrue(result.containsKey(fieldName));
}
@Test
public void test_nonExistentField() {
String fieldName = "nonExistentField";
try {
new ChangeSummarizer<>(Table.class, Set.of(fieldName));
Assertions.fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
assertEquals(
String.format(
"Trying to register non-existent field %s for class %s", fieldName, Table.class),
e.getMessage());
}
fieldName = "columns.nonExistentField";
try {
new ChangeSummarizer<>(Table.class, Set.of(fieldName));
Assertions.fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
assertEquals(
String.format(
"Trying to register non-existent field %s for class %s", fieldName, Table.class),
e.getMessage());
}
}
@Test
public void test_deleteColumn() {
FieldChange fieldChange =
new FieldChange()
.withName("columns")
.withOldValue(
"[{\"name\":\"c'_+# 1\",\"dataType\":\"INT\",\"dataTypeDisplay\":\"int\",\"description\":\"c'_+# 1\",\"fullyQualifiedName\":\"\\\"databaseService_'-.&()[]쉛TableResourceTestb\\\".\\\"database_'+#- .()$\uD873\uDE40TableResourceTest\\\".\\\"databaseSchema_'+#- .()$\uD880\uDDB5TableResourceTest\\\".\\\"table_'+#- .()$䡶patch_withChangeContext\\\".c'_+# 1\",\"tags\":[]}]");
Map currentSummary =
Map.of(
"description",
new ChangeSummary()
.withChangedBy("testUser")
.withChangeSource(ChangeSource.MANUAL)
.withChangedAt(System.currentTimeMillis()),
"columns.not_deleted.description",
new ChangeSummary()
.withChangedBy("testUser")
.withChangeSource(ChangeSource.MANUAL)
.withChangedAt(System.currentTimeMillis()),
"columns.c'_+# 1.description",
new ChangeSummary()
.withChangedBy("testUser")
.withChangeSource(ChangeSource.MANUAL)
.withChangedAt(System.currentTimeMillis()));
Set result = changeSummarizer.processDeleted(List.of(fieldChange));
assertEquals(1, result.size());
assertEquals("columns.c'_+# 1.description", result.iterator().next());
}
}