diff --git a/cypress/e2e/datasets/datasets-metadata.cy.js b/cypress/e2e/datasets/datasets-metadata.cy.js index d74f41e99..7b7356a3c 100644 --- a/cypress/e2e/datasets/datasets-metadata.cy.js +++ b/cypress/e2e/datasets/datasets-metadata.cy.js @@ -769,6 +769,224 @@ describe("Datasets", () => { cy.contains(`unitSI: "${metadata.unitSI}"`).should("exist"); }); }); + + it("should be able to add a metadata entry with type 'number'", () => { + const newMetadataName = "Cypress dataset number metadata"; + const metadata = { + value: "2010", + name: "number_metadata", + human_name: "Number test", + type: "number", + }; + cy.createDataset({ + type: "raw", + dataFileSize: "small", + datasetName: newMetadataName, + }); + + cy.visit("/datasets"); + + cy.get(".dataset-table mat-table mat-header-row").should("exist"); + + cy.finishedLoading(); + + cy.get('[data-cy="text-search"]').clear().type(newMetadataName); + cy.get('[data-cy="search-button"]').click(); + + cy.isLoading(); + + cy.get("mat-row").contains(newMetadataName).first().click(); + + cy.wait("@fetch"); + + cy.finishedLoading(); + + cy.scrollTo("bottom"); + + cy.get('[role="tab"]').contains("Edit").click(); + + cy.get('[data-cy="add-new-row"]').click(); + + cy.get("mat-select[data-cy=field-type-input]").last().click(); + cy.get("mat-option") + .contains(metadata.type) + .then((option) => { + option[0].click(); + }); + + cy.get("[data-cy=metadata-name-input]") + .last() + .focus() + .type(`${metadata.name}{enter}`); + + cy.get("[data-cy=metadata-human-name-input]") + .last() + .focus() + .type(`${metadata.human_name}{enter}`); + + cy.get("[data-cy=metadata-value-input]") + .last() + .focus() + .type(`${metadata.value}{enter}`); + + cy.get("button[data-cy=save-changes-button]").click(); + + cy.finishedLoading(); + + cy.contains("[role='tab']", "View").click(); + + cy.contains("dynamic-mat-table mat-row", metadata.human_name); + cy.contains("dynamic-mat-table mat-row", metadata.value); + }); + + it("should be able to add a metadata entry with type 'quantity'", () => { + const newMetadataName = "Cypress dataset quantity metadata"; + const metadata = { + value: "2010", + name: "quantity_metadata", + human_name: "Quantity test", + type: "quantity", + unit: "cm", + valueSI: "20.1", + unitSI: "m", + }; + cy.createDataset({ + type: "raw", + dataFileSize: "small", + datasetName: newMetadataName, + }); + + cy.visit("/datasets"); + + cy.get(".dataset-table mat-table mat-header-row").should("exist"); + + cy.finishedLoading(); + + cy.get('[data-cy="text-search"]').clear().type(newMetadataName); + cy.get('[data-cy="search-button"]').click(); + + cy.isLoading(); + + cy.get("mat-row").contains(newMetadataName).first().click(); + + cy.wait("@fetch"); + + cy.finishedLoading(); + + cy.scrollTo("bottom"); + + cy.get('[role="tab"]').contains("Edit").click(); + + cy.get('[data-cy="add-new-row"]').click(); + + cy.get("mat-select[data-cy=field-type-input]").last().click(); + + cy.get("mat-option") + .contains(metadata.type) + .then((option) => { + option[0].click(); + }); + + cy.get("[data-cy=metadata-name-input]") + .last() + .focus() + .type(`${metadata.name}{enter}`); + + cy.get("[data-cy=metadata-human-name-input]") + .last() + .focus() + .type(`${metadata.human_name}{enter}`); + + cy.get("[data-cy=metadata-value-input]") + .last() + .focus() + .type(`${metadata.value}{enter}`); + + cy.get("[data-cy=metadata-unit-input]") + .last() + .focus() + .type(`${metadata.unit}{enter}`); + + cy.get("button[data-cy=save-changes-button]").click(); + + cy.finishedLoading(); + + cy.contains("[role='tab']", "View").click(); + + cy.contains("dynamic-mat-table mat-row", metadata.human_name); + cy.contains("dynamic-mat-table mat-row", metadata.value); + cy.contains("dynamic-mat-table mat-row", metadata.unit); + }); + + it("should be able to add a metadata entry with type 'string'", () => { + const newMetadataName = "Cypress dataset string metadata"; + const metadata = { + value: "2010", + name: "string_metadata", + human_name: "String test", + type: "string", + }; + cy.createDataset({ + type: "raw", + dataFileSize: "small", + datasetName: newMetadataName, + }); + + cy.visit("/datasets"); + + cy.get(".dataset-table mat-table mat-header-row").should("exist"); + + cy.finishedLoading(); + + cy.get('[data-cy="text-search"]').clear().type(newMetadataName); + cy.get('[data-cy="search-button"]').click(); + + cy.isLoading(); + + cy.get("mat-row").contains(newMetadataName).first().click(); + + cy.wait("@fetch"); + + cy.finishedLoading(); + + cy.scrollTo("bottom"); + + cy.get('[role="tab"]').contains("Edit").click(); + + cy.get('[data-cy="add-new-row"]').click(); + + cy.get("mat-select[data-cy=field-type-input]").last().click(); + + cy.get("mat-option") + .contains(metadata.type) + .then((option) => { + option[0].click(); + }); + + cy.get("[data-cy=metadata-name-input]") + .last() + .focus() + .type(`${metadata.name}{enter}`); + + cy.get("[data-cy=metadata-human-name-input]") + .last() + .focus() + .type(`${metadata.human_name}{enter}`); + + cy.get("[data-cy=metadata-value-input]") + .last() + .focus() + .type(`${metadata.value}{enter}`); + + cy.get("button[data-cy=save-changes-button]").click(); + + cy.finishedLoading(); + + cy.contains("[role='tab']", "View").click(); + + cy.contains("dynamic-mat-table mat-row", metadata.human_name); + cy.contains("dynamic-mat-table mat-row", metadata.value); + }); }); describe("Remove metadata item", () => { diff --git a/src/app/shared/modules/scientific-metadata/metadata-view/metadata-view.component.spec.ts b/src/app/shared/modules/scientific-metadata/metadata-view/metadata-view.component.spec.ts index 34d9eed8d..9ede369ed 100644 --- a/src/app/shared/modules/scientific-metadata/metadata-view/metadata-view.component.spec.ts +++ b/src/app/shared/modules/scientific-metadata/metadata-view/metadata-view.component.spec.ts @@ -98,66 +98,4 @@ describe("MetadataViewComponent", () => { expect(metadataArray[0]["unit"]).toEqual(""); }); }); - - describe("#isDate()", () => { - it("should return false if scientificMetadata item is a quantity", () => { - const metadata = { - name: "wavelength", - value: 1024, - unit: "nanometers", - }; - - const isDate = component.isDate(metadata); - - expect(isDate).toEqual(false); - }); - - it("should return false if scientificMetadata value is a number", () => { - const metadata = { - name: "test", - value: 1024, - unit: "", - }; - - const isDate = component.isDate(metadata); - - expect(isDate).toEqual(false); - }); - - it("should return false if scientificMetadata value is a string", () => { - const metadata = { - name: "test", - value: "test value", - unit: "", - }; - - const isDate = component.isDate(metadata); - - expect(isDate).toEqual(false); - }); - - it("should return false if scientificMetadata value is a string of numbers", () => { - const metadata = { - name: "test", - value: "123", - unit: "", - }; - - const isDate = component.isDate(metadata); - - expect(isDate).toEqual(false); - }); - - it("should return true if scientificMetadata item is a date string", () => { - const metadata = { - name: "today", - value: new Date().toISOString(), - unit: "", - }; - - const isDate = component.isDate(metadata); - - expect(isDate).toEqual(true); - }); - }); }); diff --git a/src/app/shared/modules/scientific-metadata/metadata-view/metadata-view.component.ts b/src/app/shared/modules/scientific-metadata/metadata-view/metadata-view.component.ts index ffdcef447..1c00866a6 100644 --- a/src/app/shared/modules/scientific-metadata/metadata-view/metadata-view.component.ts +++ b/src/app/shared/modules/scientific-metadata/metadata-view/metadata-view.component.ts @@ -107,7 +107,7 @@ export class MetadataViewComponent implements OnInit, OnChanges { name: "value", header: "Value", customRender: (column, row) => { - if (row.type === "date" || this.isDate(row)) { + if (row.type === "date") { return this.datePipe.transform(row[column.name]); } @@ -123,7 +123,7 @@ export class MetadataViewComponent implements OnInit, OnChanges { return row[column.name]; }, toExport: (column, row) => { - if (row.type === "date" || this.isDate(row)) { + if (row.type === "date") { return this.datePipe.transform(row[column.name]); } @@ -238,24 +238,6 @@ export class MetadataViewComponent implements OnInit, OnChanges { return metadataArray; } - isDate(scientificMetadata: ScientificMetadataTableData): boolean { - // NOTE: If the type is date, we expect the value to be in ISO format. - if (scientificMetadata.type === "date") { - return true; - } - - const isValidDate = - typeof scientificMetadata.value !== "number" && - new Date(scientificMetadata.value).toString() !== "Invalid Date" && - DateTime.fromISO(scientificMetadata.value).isValid; - - if (isValidDate) { - return true; - } - - return false; - } - ngOnInit() { if (this.metadata) { this.tableData = this.createMetadataArray(this.metadata);