diff --git a/assay/package-lock.json b/assay/package-lock.json index 47674b14b74..07ca0258215 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -8,7 +8,7 @@ "name": "assay", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.9.0" + "@labkey/components": "7.11.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2525,9 +2525,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.9.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.9.0.tgz", - "integrity": "sha512-WjSgxC6Jz143a4513in0Ze1OnIa+q+F3/UAQQdXRVG2zT37+NZbIMGYm8cbGnZmZaUeQIIeOtoOdZjx+umhQJg==", + "version": "7.11.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.11.0.tgz", + "integrity": "sha512-o7/0xJTn9N+iO8M9oyDqjRcNv9C5GNXzarVphkTzRdC+vpEB9WzOu2LESNEWksb11efO1FHztsmu7/Rp5RqbeA==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/assay/package.json b/assay/package.json index 46ca8f9706e..0c392fc335b 100644 --- a/assay/package.json +++ b/assay/package.json @@ -12,7 +12,7 @@ "clean": "rimraf resources/web/assay/gen && rimraf resources/views/gen && rimraf resources/web/gen" }, "dependencies": { - "@labkey/components": "7.9.0" + "@labkey/components": "7.11.0" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/core/package-lock.json b/core/package-lock.json index 73e21d94178..4f00b504f07 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.9.0", + "@labkey/components": "7.11.0", "@labkey/themes": "1.5.0" }, "devDependencies": { @@ -3547,9 +3547,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.9.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.9.0.tgz", - "integrity": "sha512-WjSgxC6Jz143a4513in0Ze1OnIa+q+F3/UAQQdXRVG2zT37+NZbIMGYm8cbGnZmZaUeQIIeOtoOdZjx+umhQJg==", + "version": "7.11.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.11.0.tgz", + "integrity": "sha512-o7/0xJTn9N+iO8M9oyDqjRcNv9C5GNXzarVphkTzRdC+vpEB9WzOu2LESNEWksb11efO1FHztsmu7/Rp5RqbeA==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/core/package.json b/core/package.json index 10594ee43f2..b61e48d7bad 100644 --- a/core/package.json +++ b/core/package.json @@ -53,7 +53,7 @@ } }, "dependencies": { - "@labkey/components": "7.9.0", + "@labkey/components": "7.11.0", "@labkey/themes": "1.5.0" }, "devDependencies": { diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 178e92c00a7..e87719953eb 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -8,7 +8,7 @@ "name": "experiment", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.9.0" + "@labkey/components": "7.11.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -3314,9 +3314,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.9.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.9.0.tgz", - "integrity": "sha512-WjSgxC6Jz143a4513in0Ze1OnIa+q+F3/UAQQdXRVG2zT37+NZbIMGYm8cbGnZmZaUeQIIeOtoOdZjx+umhQJg==", + "version": "7.11.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.11.0.tgz", + "integrity": "sha512-o7/0xJTn9N+iO8M9oyDqjRcNv9C5GNXzarVphkTzRdC+vpEB9WzOu2LESNEWksb11efO1FHztsmu7/Rp5RqbeA==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/experiment/package.json b/experiment/package.json index a384bd005a0..619e9936c2f 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -13,7 +13,7 @@ "test-integration": "cross-env NODE_ENV=test jest --ci --runInBand -c test/js/jest.config.integration.js" }, "dependencies": { - "@labkey/components": "7.9.0" + "@labkey/components": "7.11.0" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/pipeline/package-lock.json b/pipeline/package-lock.json index 8fc567d44c2..d334642467e 100644 --- a/pipeline/package-lock.json +++ b/pipeline/package-lock.json @@ -8,7 +8,7 @@ "name": "pipeline", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.9.0" + "@labkey/components": "7.11.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2759,9 +2759,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.9.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.9.0.tgz", - "integrity": "sha512-WjSgxC6Jz143a4513in0Ze1OnIa+q+F3/UAQQdXRVG2zT37+NZbIMGYm8cbGnZmZaUeQIIeOtoOdZjx+umhQJg==", + "version": "7.11.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.11.0.tgz", + "integrity": "sha512-o7/0xJTn9N+iO8M9oyDqjRcNv9C5GNXzarVphkTzRdC+vpEB9WzOu2LESNEWksb11efO1FHztsmu7/Rp5RqbeA==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/pipeline/package.json b/pipeline/package.json index 52376f11046..00140ffb92b 100644 --- a/pipeline/package.json +++ b/pipeline/package.json @@ -14,7 +14,7 @@ "build-prod": "npm run clean && cross-env NODE_ENV=production PROD_SOURCE_MAP=source-map webpack --config node_modules/@labkey/build/webpack/prod.config.js --color --progress --profile" }, "dependencies": { - "@labkey/components": "7.9.0" + "@labkey/components": "7.11.0" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/study/test/src/org/labkey/test/tests/study/StudyDatasetIndexTest.java b/study/test/src/org/labkey/test/tests/study/StudyDatasetIndexTest.java index 07f15dabd5a..da9e7f21118 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDatasetIndexTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDatasetIndexTest.java @@ -24,6 +24,7 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.WebTestHelper; import org.labkey.test.categories.Daily; +import org.labkey.test.components.domain.AdvancedSettingsDialog; import org.labkey.test.pages.pipeline.PipelineStatusDetailsPage; import org.labkey.test.pages.study.DatasetDesignerPage; import org.labkey.test.params.FieldDefinition; @@ -44,6 +45,7 @@ public class StudyDatasetIndexTest extends StudyBaseTest private static final File STUDY_WITH_DATASET_INDEX = TestFileUtils.getSampleData("studies/StudyWithDatasetIndex.folder.zip"); private static final File STUDY_WITH_DATASET_SHARED_INDEX = TestFileUtils.getSampleData("studies/StudyWithDatasetSharedIndex.folder.zip"); private static final String METADATA = "Table Meta Data"; + boolean IS_POSTGRES = WebTestHelper.getDatabaseType() == WebTestHelper.DatabaseType.PostgreSQL; @Override protected String getProjectName() @@ -131,14 +133,14 @@ protected void doVerifySteps() throws Exception .setType(FieldDefinition.ColumnType.Integer) .expand() .clickAdvancedSettings() - .setUniqueConstraint(true) + .setSingleFieldIndex(AdvancedSettingsDialog.SingleFieldIndexType.UNIQUE_INDEX) .apply(); datasetDesignerPage.getFieldsPanel() .addField(fieldName2) .setType(FieldDefinition.ColumnType.DateAndTime) .expand() .clickAdvancedSettings() - .setUniqueConstraint(true) + .setSingleFieldIndex(AdvancedSettingsDialog.SingleFieldIndexType.INDEX) .apply(); datasetDesignerPage.getFieldsPanel() .addField(fieldName3) @@ -146,23 +148,27 @@ protected void doVerifySteps() throws Exception datasetDesignerPage.clickSave(); viewRawTableMetadata("DEM-3"); - verifyTableIndices("dem_minus_3_", List.of("field_name1", "fieldname_2")); + verifyTableIndices("dem_minus_3_", List.of("field_Name1", "fieldName_2")); assertTextNotPresent("dem_minus_3_fieldname_3"); + verifyTableIndexNonUnique("dem_minus_3_", "field_Name1", true); + verifyTableIndexNonUnique("dem_minus_3_", "fieldName_2", false); // remove a field unique constraint and add a new one goBack(); datasetDesignerPage = goToEditDatasetDefinition("DEM-3"); datasetDesignerPage.getFieldsPanel() - .getField(fieldName2).expand().clickAdvancedSettings().setUniqueConstraint(false) + .getField(fieldName1).expand().clickAdvancedSettings().setSingleFieldIndex(AdvancedSettingsDialog.SingleFieldIndexType.INDEX) .apply(); datasetDesignerPage.getFieldsPanel() - .getField(fieldName3).expand().clickAdvancedSettings().setUniqueConstraint(true) + .getField(fieldName3).expand().clickAdvancedSettings().setSingleFieldIndex(AdvancedSettingsDialog.SingleFieldIndexType.UNIQUE_INDEX) .apply(); datasetDesignerPage.clickSave(); viewRawTableMetadata("DEM-3"); - verifyTableIndices("dem_minus_3_", List.of("field_name1", "fieldname_3")); - assertTextNotPresent("dem_minus_3_fieldname_2"); + verifyTableIndices("dem_minus_3_", List.of("field_Name1", "fieldName_2", "FieldName_3")); + verifyTableIndexNonUnique("dem_minus_3_", "field_Name1", false); + verifyTableIndexNonUnique("dem_minus_3_", "fieldName_2", false); + verifyTableIndexNonUnique("dem_minus_3_", "FieldName_3", true); } private DatasetDesignerPage goToEditDatasetDefinition(String datasetName) @@ -175,7 +181,7 @@ private DatasetDesignerPage goToEditDatasetDefinition(String datasetName) private void viewRawTableMetadata(String datasetName) { - beginAt("/query/" + getProjectName() + "/" + getFolderName() + "/schema.view?schemaName=study"); + beginAt(getProjectName() + "/" + getFolderName() + "/query-schema.view?schemaName=study"); selectQuery("study", datasetName); waitForText(10000, "view raw table metadata"); clickAndWait(Locator.linkWithText("view raw table metadata")); @@ -196,4 +202,14 @@ private void verifyTableIndices(String prefix, List indexSuffixes) for (String suffix : suffixes) assertTextPresentCaseInsensitive(prefix + suffix); } + + private void verifyTableIndexNonUnique(String prefix, String suffix, boolean isUnique) + { + String boolDisplay = isUnique ? "0" : "1"; + if (IS_POSTGRES) boolDisplay = isUnique ? "false" : "true"; + String fieldKey = prefix + suffix; + if (IS_POSTGRES) fieldKey = fieldKey.toLowerCase(); + Locator locator = Locator.xpath("//td[contains(text(), '" + fieldKey + "')]/preceding-sibling::td[2][text()='" + boolDisplay + "']"); + checker().verifyTrue("Non_Unique value not as expected in metadata for locator: " + locator, locator.existsIn(getDriver())); + } }