diff --git a/bootstrap/sql/com.mysql.cj.jdbc.Driver/v009__create_db_connection_info.sql b/bootstrap/sql/com.mysql.cj.jdbc.Driver/v009__create_db_connection_info.sql new file mode 100644 index 00000000000..b17fa9f80f8 --- /dev/null +++ b/bootstrap/sql/com.mysql.cj.jdbc.Driver/v009__create_db_connection_info.sql @@ -0,0 +1,3 @@ +-- Unique constraint for user email address +ALTER TABLE user_entity +ADD UNIQUE (email); \ No newline at end of file diff --git a/bootstrap/sql/org.postgresql.Driver/v009__create_db_connection_info.sql b/bootstrap/sql/org.postgresql.Driver/v009__create_db_connection_info.sql new file mode 100644 index 00000000000..e571a639c55 --- /dev/null +++ b/bootstrap/sql/org.postgresql.Driver/v009__create_db_connection_info.sql @@ -0,0 +1,3 @@ +-- Unique constraint for user email address +ALTER TABLE user_entity +ADD UNIQUE (email); diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java index 9fea2338b94..ed0f4cc147c 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java @@ -15,6 +15,7 @@ package org.openmetadata.service.resources.teams; import static java.util.List.of; import static javax.ws.rs.core.Response.Status.BAD_REQUEST; +import static javax.ws.rs.core.Response.Status.CONFLICT; import static javax.ws.rs.core.Response.Status.CREATED; import static javax.ws.rs.core.Response.Status.FORBIDDEN; import static javax.ws.rs.core.Response.Status.NOT_FOUND; @@ -224,6 +225,17 @@ public class UserResourceTest extends EntityResourceTest { assertNotNull(create); } + @Test + void test_userEmailUnique(TestInfo test) throws IOException { + // Create user with different optional fields + CreateUser create = createRequest(test, 1).withName("userEmailTest").withEmail("user@domainx.com"); + createEntity(create, ADMIN_AUTH_HEADERS); + + // Creating another user with the same email address must fail + create.withName("userEmailTest1"); + assertResponse(() -> createEntity(create, ADMIN_AUTH_HEADERS), CONFLICT, "Entity already exists"); + } + @Test void put_validUser_200_ok() throws IOException { // Create user with different optional fields @@ -950,7 +962,7 @@ public class UserResourceTest extends EntityResourceTest { // Add new users String user2 = "userImportExport2,displayName2,,userImportExport2@domain.com,,,teamImportExport1,"; - String user21 = "userImportExport21,displayName21,,userImportExport11@domain.com,,,teamImportExport11,"; + String user21 = "userImportExport21,displayName21,,userImportExport21@domain.com,,,teamImportExport11,"; List newRecords = listOf(user2, user21); testImportExport("teamImportExport", UserCsv.HEADERS, createRecords, updateRecords, newRecords);