From 2e25abb16d01af15f94ca7f4de5560bd0affd12e Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 4 Nov 2022 14:40:04 -0500 Subject: [PATCH 01/53] starting to create new batch api endpoints --- .../ria/web/ajax/dto/UpdateSampleRequest.java | 14 +++- .../ProjectSamplesAjaxController.java | 25 ++++--- .../web/services/UIProjectSampleService.java | 66 ++++++++++++++++--- .../resources/js/apis/projects/samples.ts | 15 ++--- .../services/importReducer.ts | 30 +++++---- .../services/UIProjectSampleServiceTest.java | 12 ++-- 6 files changed, 109 insertions(+), 53 deletions(-) diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/UpdateSampleRequest.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/UpdateSampleRequest.java index 793a60130e9..216587167ef 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/UpdateSampleRequest.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/UpdateSampleRequest.java @@ -6,7 +6,19 @@ * UI Request to update an existing sample */ public class UpdateSampleRequest extends CreateSampleRequest { - public UpdateSampleRequest(String name, String organism, String description, List metadata) { + private Long sampleId; + + public UpdateSampleRequest(Long sampleID, String name, String organism, String description, + List metadata) { super(name, organism, description, metadata); + this.sampleId = sampleID; + } + + public Long getSampleId() { + return sampleId; + } + + public void setSampleId(Long sampleId) { + this.sampleId = sampleId; } } diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java index 569b39fac6c..3bbf2effcdf 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java @@ -64,31 +64,30 @@ public ResponseEntity validateNewSampleName(@Reque } /** - * Create a new sample within a project + * Create new samples within a project * - * @param request Details about the sample + * @param requests Details about the samples * @param projectId current project identifier * @param locale current users locale - * @return result of creating the project + * @return result of creating the samples */ @PostMapping("/add-sample") - public ResponseEntity createSampleInProject(@RequestBody CreateSampleRequest request, + public ResponseEntity createSamplesInProject(@RequestBody CreateSampleRequest[] requests, @PathVariable long projectId, Locale locale) { - return uiProjectSampleService.createSample(request, projectId, locale); + return uiProjectSampleService.createSamples(requests, projectId, locale); } /** - * Update a sample within a project + * Update samples within a project * - * @param request Details about the sample - * @param sampleId sample identifier + * @param requests Details about the samples * @param locale current users locale - * @return result of creating the project + * @return result of updating the samples */ - @PatchMapping("/add-sample/{sampleId}") - public ResponseEntity updateSampleInProject(@RequestBody UpdateSampleRequest request, - @PathVariable long sampleId, Locale locale) { - return uiProjectSampleService.updateSample(request, sampleId, locale); + @PatchMapping("/add-sample") + public ResponseEntity updateSamplesInProject(@RequestBody UpdateSampleRequest[] requests, + Locale locale) { + return uiProjectSampleService.updateSamples(requests, locale); } /** diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java index 5aa74b27b2d..f51904b671e 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java @@ -19,10 +19,7 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.CreateSampleRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxCreateItemSuccessResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxErrorResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxUpdateItemSuccessResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.*; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNameModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesResponse; @@ -121,16 +118,41 @@ public ResponseEntity validateNewSampleName(String } + /** + * Create new samples in a project + * + * @param requests Each {@link CreateSampleRequest} contains details about the sample to create + * @param projectId Identifier for the current project + * @param locale Users current locale + * @return result of creating the sample + */ + public ResponseEntity createSamples(CreateSampleRequest[] requests, Long projectId, Locale locale) { + Map errors = new HashMap<>(); + for (CreateSampleRequest request : requests) { + try { + createSample(projectId, locale, request); + } catch (Exception e) { + errors.put(request.getName(), e.getMessage()); + } + } + if (errors.isEmpty()) { + return ResponseEntity.ok(new AjaxUpdateItemSuccessResponse( + messageSource.getMessage("server.AddSample.success", null, locale))); + } else { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(errors)); + } + } + /** * Create a new sample in a project * - * @param request {@link CreateSampleRequest} details about the sample to create + * @param request {@link CreateSampleRequest} contains details about the sample to create * @param projectId Identifier for the current project * @param locale Users current locale * @return result of creating the sample */ @Transactional - public ResponseEntity createSample(CreateSampleRequest request, Long projectId, Locale locale) { + public ResponseEntity createSample(Long projectId, Locale locale, CreateSampleRequest request) { Project project = projectService.read(projectId); try { Sample sample = new Sample(request.getName()); @@ -157,16 +179,40 @@ public ResponseEntity createSample(CreateSampleRequest request, Lo } /** - * Update a sample in a project + * Update samples in a project * - * @param request {@link UpdateSampleRequest} details about the sample to update - * @param sampleId Identifier for the sample + * @param requests Each {@link UpdateSampleRequest} contains details about the sample to update * @param locale Users current locale + * @return result of creating the samples + */ + public ResponseEntity updateSamples(UpdateSampleRequest[] requests, Locale locale) { + Map errors = new HashMap<>(); + for (UpdateSampleRequest request : requests) { + try { + updateSample(request, locale); + } catch (Exception e) { + errors.put(request.getName(), e.getMessage()); + } + } + if (errors.isEmpty()) { + return ResponseEntity.ok(new AjaxUpdateItemSuccessResponse( + messageSource.getMessage("server.AddSample.success", null, locale))); + } else { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(errors)); + } + } + + /** + * Update a sample in a project + * + * @param request {@link UpdateSampleRequest} contains details about the sample to update + * @param locale Users current locale * @return result of creating the sample */ @Transactional - public ResponseEntity updateSample(UpdateSampleRequest request, Long sampleId, Locale locale) { + public ResponseEntity updateSample(UpdateSampleRequest request, Locale locale) { try { + Long sampleId = request.getSampleId(); Sample sample = sampleService.read(sampleId); sample.setSampleName(request.getName()); if (!Strings.isNullOrEmpty(request.getOrganism())) { diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 6a6ad1c7df2..7742a83a2b0 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -116,29 +116,24 @@ export async function validateSamples({ return response.data; } -export async function createSample({ +export async function createSamples({ projectId, body, }: { projectId: string; - body: SampleRequest; + body: SampleRequest[]; }) { return await axios.post(`${URL}/${projectId}/samples/add-sample`, body); } -export async function updateSample({ +export async function updateSamples({ projectId, - sampleId, body, }: { projectId: string; - sampleId: number; - body: SampleRequest; + body: SampleRequest[]; }) { - return await axios.patch( - `${URL}/${projectId}/samples/add-sample/${sampleId}`, - body - ); + return await axios.patch(`${URL}/${projectId}/samples/add-sample`, body); } /** diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts index 85cd9dabe8e..bebde28c03d 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts @@ -5,10 +5,10 @@ import { } from "@reduxjs/toolkit"; import { validateSampleName } from "../../../../apis/metadata/sample-utils"; import { - createSample, + createSamples, FieldUpdate, MetadataItem, - updateSample, + updateSamples, ValidateSampleNameModel, validateSamples, ValidateSamplesResponse, @@ -86,13 +86,15 @@ export const saveMetadata = createAsyncThunk< const sampleId = metadataValidateDetails[index].foundSampleId; if (sampleId) { promises.push( - updateSample({ + updateSamples({ projectId, - sampleId, - body: { - name, - metadata: metadataFields, - }, + // sampleId, + body: [ + { + name, + metadata: metadataFields, + }, + ], }) .then(() => { metadataSaveDetails[index] = { saved: true }; @@ -106,12 +108,14 @@ export const saveMetadata = createAsyncThunk< ); } else { promises.push( - createSample({ + createSamples({ projectId, - body: { - name, - metadata: metadataFields, - }, + body: [ + { + name, + metadata: metadataFields, + }, + ], }) .then(() => { metadataSaveDetails[index] = { saved: true }; diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java index c5aa1d4256d..2c479d17c20 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java @@ -82,8 +82,8 @@ public void testValidateNewSampleName() { @Test public void testCreateSample() { - CreateSampleRequest request = new CreateSampleRequest(GOOD_NAME, null); - ResponseEntity response = service.createSample(request, PROJECT_1_ID, Locale.ENGLISH); + CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null) }; + ResponseEntity response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); assertEquals(HttpStatus.OK, response.getStatusCode(), "Sample should be created"); } @@ -92,8 +92,8 @@ public void testCreateSampleWithMetadata() { List metadata = new ArrayList<>(); metadata.add(new FieldUpdate("field1", "value1")); metadata.add(new FieldUpdate("field2", "value2")); - CreateSampleRequest request = new CreateSampleRequest(GOOD_NAME, null, null, metadata); - ResponseEntity response = service.createSample(request, PROJECT_1_ID, Locale.ENGLISH); + CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, null, metadata) }; + ResponseEntity response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); assertEquals(HttpStatus.OK, response.getStatusCode(), "Sample should be created"); } @@ -102,8 +102,8 @@ public void testUpdateSampleWithMetadata() { List metadata = new ArrayList<>(); metadata.add(new FieldUpdate("field1", "value1")); metadata.add(new FieldUpdate("field2", "value2")); - UpdateSampleRequest request = new UpdateSampleRequest(GOOD_NAME, null, null, metadata); - ResponseEntity response = service.updateSample(request, SAMPLE_1_ID, Locale.ENGLISH); + UpdateSampleRequest[] requests = { new UpdateSampleRequest(SAMPLE_1_ID, GOOD_NAME, null, null, metadata) }; + ResponseEntity response = service.updateSamples(requests, Locale.ENGLISH); assertEquals(HttpStatus.OK, response.getStatusCode(), "Sample should be updated"); } } From 9f9a7f72a81402abb15f56ca433b98bbb30d657d Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 9 Nov 2022 10:14:26 -0600 Subject: [PATCH 02/53] sending requests in chunks --- .../services/importReducer.ts | 141 ++++++++++-------- .../resources/js/utilities/array-utilities.ts | 18 +++ 2 files changed, 93 insertions(+), 66 deletions(-) create mode 100644 src/main/webapp/resources/js/utilities/array-utilities.ts diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts index bebde28c03d..415083a28be 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts @@ -6,7 +6,6 @@ import { import { validateSampleName } from "../../../../apis/metadata/sample-utils"; import { createSamples, - FieldUpdate, MetadataItem, updateSamples, ValidateSampleNameModel, @@ -14,6 +13,7 @@ import { ValidateSamplesResponse, } from "../../../../apis/projects/samples"; import { ImportDispatch, ImportState } from "../store"; +import { chunkArray } from "../../../../utilities/array-utilities"; interface MetadataValidateDetailsItem { isSampleNameValid: boolean; @@ -67,76 +67,85 @@ export const saveMetadata = createAsyncThunk< state.importReducer; const metadataSaveDetails: Record = {}; + const selectedSampleList = metadata.filter((metadataItem) => { + const index: string = metadataItem.rowKey; + return ( + selectedMetadataKeys.includes(index) && + metadataSaveDetails[index]?.saved !== true + ); + }); const chunkSize = 100; - for (let i = 0; i < metadata.length; i = i + chunkSize) { - const promises: Promise[] = []; - for (let j = i; j < i + chunkSize && j < metadata.length; j++) { - const metadataItem: MetadataItem = metadata[j]; - const index: string = metadataItem.rowKey; - if ( - selectedMetadataKeys.includes(index) && - metadataSaveDetails[index]?.saved !== true - ) { - const name: string = metadataItem[sampleNameColumn]; - const metadataFields: FieldUpdate[] = Object.entries(metadataItem) - .filter( - ([key]) => headers.includes(key) && key !== sampleNameColumn - ) - .map(([key, value]) => ({ field: key, value })); - const sampleId = metadataValidateDetails[index].foundSampleId; - if (sampleId) { - promises.push( - updateSamples({ - projectId, - // sampleId, - body: [ - { - name, - metadata: metadataFields, - }, - ], - }) - .then(() => { - metadataSaveDetails[index] = { saved: true }; - }) - .catch((error) => { - metadataSaveDetails[index] = { - saved: false, - error: error.response.data.error, - }; - }) - ); - } else { - promises.push( - createSamples({ - projectId, - body: [ - { - name, - metadata: metadataFields, - }, - ], - }) - .then(() => { - metadataSaveDetails[index] = { saved: true }; - }) - .catch((error) => { - metadataSaveDetails[index] = { - saved: false, - error: error.response.data.error, - }; - }) - ); - } - } + + const updateSampleList = selectedSampleList + .filter((metadataItem) => { + const index = metadataItem.rowKey; + const sampleId = metadataValidateDetails[index].foundSampleId; + return sampleId; + }) + .map((metadataItem) => { + const index = metadataItem.rowKey; + const name = metadataItem[sampleNameColumn]; + const sampleId = metadataValidateDetails[index].foundSampleId; + const metadataFields = Object.entries(metadataItem) + .filter(([key]) => headers.includes(key) && key !== sampleNameColumn) + .map(([key, value]) => ({ field: key, value })); + return { name, sampleId, metadata: metadataFields }; + }); + + if (updateSampleList.length > 0) { + const chunkedUpdateSampleList = chunkArray(updateSampleList, chunkSize); + for (const chunk of chunkedUpdateSampleList) { + await updateSamples({ + projectId, + body: chunk, + }) + .then((response) => { + // metadataSaveDetails[index] = { saved: true }; + }) + .catch((error) => { + // metadataSaveDetails[index] = { + // saved: false, + // error: error.response.data.error, + // }; + }); } - await Promise.all(promises).then(() => { - dispatch( - setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) - ); + } + + const createSampleList = selectedSampleList + .filter((metadataItem) => { + const index = metadataItem.rowKey; + const sampleId = metadataValidateDetails[index].foundSampleId; + return !sampleId; + }) + .map((metadataItem) => { + const name = metadataItem[sampleNameColumn]; + const metadataFields = Object.entries(metadataItem) + .filter(([key]) => headers.includes(key) && key !== sampleNameColumn) + .map(([key, value]) => ({ field: key, value })); + return { name, metadata: metadataFields }; }); + + if (createSampleList.length > 0) { + const chunkedCreateSampleList = chunkArray(createSampleList, chunkSize); + for (const chunk of chunkedCreateSampleList) { + await createSamples({ + projectId, + body: chunk, + }) + .then((response) => { + // metadataSaveDetails[index] = { saved: true }; + }) + .catch((error) => { + // metadataSaveDetails[index] = { + // saved: false, + // error: error.response.data.error, + // }; + }); + } } + dispatch(setMetadataSaveDetails(Object.assign({}, metadataSaveDetails))); + return { metadataSaveDetails }; } ); diff --git a/src/main/webapp/resources/js/utilities/array-utilities.ts b/src/main/webapp/resources/js/utilities/array-utilities.ts new file mode 100644 index 00000000000..7cf06ec9492 --- /dev/null +++ b/src/main/webapp/resources/js/utilities/array-utilities.ts @@ -0,0 +1,18 @@ +/** + * Splits an array into multiple, smaller arrays of the given size + * + * @param items the array to be chunked + * @param size the size of the chunk + * + * @returns a chunked array + */ +export function chunkArray(items: any[], size: number) { + const chunks = []; + items = [].concat(...items); + + while (items.length) { + chunks.push(items.splice(0, size)); + } + + return chunks; +} From 6aa9d6c89cec2f1694bd57d98120ed1ddc99d29c Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 9 Nov 2022 16:02:19 -0600 Subject: [PATCH 03/53] fixing error handling --- .../web/services/UIProjectSampleService.java | 98 +++++++++---------- .../SampleMetadataImportComplete.tsx | 16 +-- .../components/SampleMetadataImportReview.tsx | 30 +++--- .../services/importReducer.ts | 68 +++++++------ 4 files changed, 115 insertions(+), 97 deletions(-) diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java index f51904b671e..950840dfd05 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java @@ -3,6 +3,8 @@ import java.util.*; import java.util.stream.Collectors; +import javax.validation.ConstraintViolationException; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.http.HttpStatus; @@ -19,7 +21,9 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.CreateSampleRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.*; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxFormErrorResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxUpdateItemSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNameModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesResponse; @@ -130,7 +134,7 @@ public ResponseEntity createSamples(CreateSampleRequest[] requests Map errors = new HashMap<>(); for (CreateSampleRequest request : requests) { try { - createSample(projectId, locale, request); + createSample(projectId, request); } catch (Exception e) { errors.put(request.getName(), e.getMessage()); } @@ -148,34 +152,29 @@ public ResponseEntity createSamples(CreateSampleRequest[] requests * * @param request {@link CreateSampleRequest} contains details about the sample to create * @param projectId Identifier for the current project - * @param locale Users current locale * @return result of creating the sample + * @throws EntityNotFoundException if the identifier does not exist in the database */ @Transactional - public ResponseEntity createSample(Long projectId, Locale locale, CreateSampleRequest request) { + public Long createSample(Long projectId, CreateSampleRequest request) throws EntityNotFoundException { Project project = projectService.read(projectId); - try { - Sample sample = new Sample(request.getName()); - if (!Strings.isNullOrEmpty(request.getOrganism())) { - sample.setOrganism(request.getOrganism()); - } - if (!Strings.isNullOrEmpty(request.getDescription())) { - sample.setDescription(request.getDescription()); - } - Join join = projectService.addSampleToProjectWithoutEvent(project, sample, true); - if (request.getMetadata() != null) { - Set metadataEntrySet = request.getMetadata().stream().map(entry -> { - MetadataTemplateField field = metadataTemplateService.saveMetadataField( - new MetadataTemplateField(entry.getField(), "text")); - return new MetadataEntry(entry.getValue(), "text", field); - }).collect(Collectors.toSet()); - sampleService.mergeSampleMetadata(sample, metadataEntrySet); - } - return ResponseEntity.ok(new AjaxCreateItemSuccessResponse(join.getObject().getId())); - } catch (EntityNotFoundException e) { - return ResponseEntity.ok(new AjaxErrorResponse( - messageSource.getMessage("server.AddSample.error.exists", new Object[] {}, locale))); + Sample sample = new Sample(request.getName()); + if (!Strings.isNullOrEmpty(request.getOrganism())) { + sample.setOrganism(request.getOrganism()); + } + if (!Strings.isNullOrEmpty(request.getDescription())) { + sample.setDescription(request.getDescription()); + } + Join join = projectService.addSampleToProjectWithoutEvent(project, sample, true); + if (request.getMetadata() != null) { + Set metadataEntrySet = request.getMetadata().stream().map(entry -> { + MetadataTemplateField field = metadataTemplateService.saveMetadataField( + new MetadataTemplateField(entry.getField(), "text")); + return new MetadataEntry(entry.getValue(), "text", field); + }).collect(Collectors.toSet()); + sampleService.mergeSampleMetadata(sample, metadataEntrySet); } + return join.getObject().getId(); } /** @@ -189,7 +188,7 @@ public ResponseEntity updateSamples(UpdateSampleRequest[] requests Map errors = new HashMap<>(); for (UpdateSampleRequest request : requests) { try { - updateSample(request, locale); + updateSample(request); } catch (Exception e) { errors.put(request.getName(), e.getMessage()); } @@ -206,34 +205,31 @@ public ResponseEntity updateSamples(UpdateSampleRequest[] requests * Update a sample in a project * * @param request {@link UpdateSampleRequest} contains details about the sample to update - * @param locale Users current locale * @return result of creating the sample + * @throws EntityNotFoundException if the identifier does not exist in the database + * @throws ConstraintViolationException if the entity being updated contains constraint violations */ @Transactional - public ResponseEntity updateSample(UpdateSampleRequest request, Locale locale) { - try { - Long sampleId = request.getSampleId(); - Sample sample = sampleService.read(sampleId); - sample.setSampleName(request.getName()); - if (!Strings.isNullOrEmpty(request.getOrganism())) { - sample.setOrganism(request.getOrganism()); - } - if (request.getDescription() != null) { - sample.setDescription(request.getDescription()); - } - if (request.getMetadata() != null) { - Set metadataEntrySet = request.getMetadata().stream().map(entry -> { - MetadataTemplateField field = metadataTemplateService.saveMetadataField( - new MetadataTemplateField(entry.getField(), "text")); - return new MetadataEntry(entry.getValue(), "text", field); - }).collect(Collectors.toSet()); - sampleService.updateSampleMetadata(sample, metadataEntrySet); - } - sampleService.update(sample); - return ResponseEntity.ok(new AjaxUpdateItemSuccessResponse( - messageSource.getMessage("server.AddSample.success", null, locale))); - } catch (Exception e) { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxErrorResponse(e.getMessage())); + public Sample updateSample(UpdateSampleRequest request) + throws EntityNotFoundException, ConstraintViolationException { + Long sampleId = request.getSampleId(); + Sample sample = sampleService.read(sampleId); + sample.setSampleName(request.getName()); + if (!Strings.isNullOrEmpty(request.getOrganism())) { + sample.setOrganism(request.getOrganism()); + } + if (request.getDescription() != null) { + sample.setDescription(request.getDescription()); } + if (request.getMetadata() != null) { + Set metadataEntrySet = request.getMetadata().stream().map(entry -> { + MetadataTemplateField field = metadataTemplateService.saveMetadataField( + new MetadataTemplateField(entry.getField(), "text")); + return new MetadataEntry(entry.getValue(), "text", field); + }).collect(Collectors.toSet()); + sampleService.updateSampleMetadata(sample, metadataEntrySet); + } + return sampleService.update(sample); + } } diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx index 6a05b9bba2c..e5f1760631f 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx @@ -14,19 +14,23 @@ import { NavigateFunction } from "react-router/dist/lib/hooks"; * @constructor */ export function SampleMetadataImportComplete(): JSX.Element { - const { metadata, metadataValidateDetails, metadataSaveDetails } = - useImportSelector((state: ImportState) => state.importReducer); + const { + sampleNameColumn, + metadata, + metadataValidateDetails, + metadataSaveDetails, + } = useImportSelector((state: ImportState) => state.importReducer); const samplesUpdatedCount = metadata.filter( (metadataItem: MetadataItem) => - metadataSaveDetails[metadataItem.rowKey]?.saved === true && - metadataValidateDetails[metadataItem.rowKey].foundSampleId + metadataSaveDetails[metadataItem[sampleNameColumn]]?.saved === true && + metadataValidateDetails[metadataItem[sampleNameColumn]].foundSampleId ).length; const samplesCreatedCount = metadata.filter( (metadataItem: MetadataItem) => - metadataSaveDetails[metadataItem.rowKey]?.saved === true && - !metadataValidateDetails[metadataItem.rowKey].foundSampleId + metadataSaveDetails[metadataItem[sampleNameColumn]]?.saved === true && + !metadataValidateDetails[metadataItem[sampleNameColumn]].foundSampleId ).length; let stats = diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx index 33f5084d906..bd3d4cf6ecd 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx @@ -83,8 +83,8 @@ export function SampleMetadataImportReview(): JSX.Element { }, getCheckboxProps: (record: MetadataItem) => ({ disabled: !( - metadataValidateDetails[record.rowKey].isSampleNameValid || - metadataSaveDetails[record.rowKey]?.saved === true + metadataValidateDetails[record[sampleNameColumn]].isSampleNameValid || + metadataSaveDetails[record[sampleNameColumn]]?.saved === true ), }), }; @@ -99,7 +99,8 @@ export function SampleMetadataImportReview(): JSX.Element { React.useEffect(() => { setValid( !metadata.some( - (row) => !metadataValidateDetails[row.rowKey].isSampleNameValid + (row) => + !metadataValidateDetails[row[sampleNameColumn]].isSampleNameValid ) ); @@ -111,7 +112,8 @@ export function SampleMetadataImportReview(): JSX.Element { onCell: (item) => { return { style: { - background: metadataValidateDetails[item.rowKey].isSampleNameValid + background: metadataValidateDetails[item[sampleNameColumn]] + .isSampleNameValid ? undefined : `var(--red-1)`, }, @@ -124,10 +126,10 @@ export function SampleMetadataImportReview(): JSX.Element { fixed: "left", width: 10, render: (text, item) => { - if (metadataSaveDetails[item.rowKey]?.saved === false) + if (metadataSaveDetails[item[sampleNameColumn]]?.saved === false) return ( @@ -144,7 +146,7 @@ export function SampleMetadataImportReview(): JSX.Element { fixed: "left", width: 70, render: (text, item) => { - if (!metadataValidateDetails[item.rowKey].foundSampleId) + if (!metadataValidateDetails[item[sampleNameColumn]].foundSampleId) return ( {i18n("SampleMetadataImportReview.table.filter.new")} @@ -164,8 +166,10 @@ export function SampleMetadataImportReview(): JSX.Element { ], onFilter: (value, record) => value === "new" - ? metadataValidateDetails[record.rowKey].foundSampleId !== undefined - : metadataValidateDetails[record.rowKey].foundSampleId === undefined, + ? metadataValidateDetails[record[sampleNameColumn]].foundSampleId !== + undefined + : metadataValidateDetails[record[sampleNameColumn]].foundSampleId === + undefined, }; const otherColumns: ColumnsType = headers @@ -187,8 +191,8 @@ export function SampleMetadataImportReview(): JSX.Element { metadata .filter( (row) => - metadataValidateDetails[row.rowKey].isSampleNameValid || - metadataSaveDetails[row.rowKey]?.saved === true + metadataValidateDetails[row[sampleNameColumn]].isSampleNameValid || + metadataSaveDetails[row[sampleNameColumn]]?.saved === true ) .map((row): string => row.rowKey) ); @@ -247,7 +251,9 @@ export function SampleMetadataImportReview(): JSX.Element { className="t-metadata-uploader-review-table" rowKey={(row) => row.rowKey} rowClassName={(record) => - metadataSaveDetails[record.rowKey]?.saved === false ? "row-error" : "" + metadataSaveDetails[record[sampleNameColumn]]?.saved === false + ? "row-error" + : "" } rowSelection={rowSelection} columns={columns} diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts index 415083a28be..cfda95864ed 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/services/importReducer.ts @@ -68,24 +68,23 @@ export const saveMetadata = createAsyncThunk< const metadataSaveDetails: Record = {}; const selectedSampleList = metadata.filter((metadataItem) => { - const index: string = metadataItem.rowKey; + const name: string = metadataItem[sampleNameColumn]; return ( - selectedMetadataKeys.includes(index) && - metadataSaveDetails[index]?.saved !== true + selectedMetadataKeys.includes(metadataItem.rowKey) && + metadataSaveDetails[name]?.saved !== true ); }); const chunkSize = 100; const updateSampleList = selectedSampleList .filter((metadataItem) => { - const index = metadataItem.rowKey; - const sampleId = metadataValidateDetails[index].foundSampleId; + const name = metadataItem[sampleNameColumn]; + const sampleId = metadataValidateDetails[name].foundSampleId; return sampleId; }) .map((metadataItem) => { - const index = metadataItem.rowKey; const name = metadataItem[sampleNameColumn]; - const sampleId = metadataValidateDetails[index].foundSampleId; + const sampleId = metadataValidateDetails[name].foundSampleId; const metadataFields = Object.entries(metadataItem) .filter(([key]) => headers.includes(key) && key !== sampleNameColumn) .map(([key, value]) => ({ field: key, value })); @@ -99,22 +98,30 @@ export const saveMetadata = createAsyncThunk< projectId, body: chunk, }) - .then((response) => { - // metadataSaveDetails[index] = { saved: true }; + .then(() => { + chunk + .map((item) => item.name) + .forEach((name) => (metadataSaveDetails[name] = { saved: true })); }) .catch((error) => { - // metadataSaveDetails[index] = { - // saved: false, - // error: error.response.data.error, - // }; + const { errors } = error.response.data; + Object.keys(errors).map((key) => { + metadataSaveDetails[key] = { + saved: false, + error: errors[key], + }; + }); }); + dispatch( + setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) + ); } } const createSampleList = selectedSampleList .filter((metadataItem) => { - const index = metadataItem.rowKey; - const sampleId = metadataValidateDetails[index].foundSampleId; + const name = metadataItem[sampleNameColumn]; + const sampleId = metadataValidateDetails[name].foundSampleId; return !sampleId; }) .map((metadataItem) => { @@ -132,20 +139,26 @@ export const saveMetadata = createAsyncThunk< projectId, body: chunk, }) - .then((response) => { - // metadataSaveDetails[index] = { saved: true }; + .then(() => { + chunk + .map((item) => item.name) + .forEach((name) => (metadataSaveDetails[name] = { saved: true })); }) .catch((error) => { - // metadataSaveDetails[index] = { - // saved: false, - // error: error.response.data.error, - // }; + const { errors } = error.response.data; + Object.keys(errors).map((key) => { + metadataSaveDetails[key] = { + saved: false, + error: errors[key], + }; + }); }); + dispatch( + setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) + ); } } - dispatch(setMetadataSaveDetails(Object.assign({}, metadataSaveDetails))); - return { metadataSaveDetails }; } ); @@ -177,14 +190,13 @@ export const setSampleNameColumn = createAsyncThunk< }, }); for (const metadataItem of metadata) { - const index: string = metadataItem.rowKey; - const sampleName: string = metadataItem[column]; + const name: string = metadataItem[column]; const foundSample: ValidateSampleNameModel | undefined = response.samples.find( - (sample: ValidateSampleNameModel) => sampleName === sample.name + (sample: ValidateSampleNameModel) => name === sample.name ); - metadataValidateDetails[index] = { - isSampleNameValid: validateSampleName(sampleName), + metadataValidateDetails[name] = { + isSampleNameValid: validateSampleName(name), foundSampleId: foundSample?.ids?.at(0), }; } From 1ee66b0a26865b5c665bbce591ea43127d41e4d2 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Tue, 15 Nov 2022 10:50:31 -0600 Subject: [PATCH 04/53] starting to add unique key on label for metadata_field table --- .../irida/model/sample/MetadataTemplateField.java | 15 +++++++++------ .../changesets/unreleased/all-changes.xml | 4 +++- .../metadata-field-add-label-constraint.xml | 10 ++++++++++ 3 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/ca/corefacility/bioinformatics/irida/database/changesets/unreleased/metadata-field-add-label-constraint.xml diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/model/sample/MetadataTemplateField.java b/src/main/java/ca/corefacility/bioinformatics/irida/model/sample/MetadataTemplateField.java index 1cbb08dc44b..4864b69bf5c 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/model/sample/MetadataTemplateField.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/model/sample/MetadataTemplateField.java @@ -1,19 +1,22 @@ package ca.corefacility.bioinformatics.irida.model.sample; -import ca.corefacility.bioinformatics.irida.model.sample.metadata.MetadataEntry; -import org.hibernate.envers.Audited; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import java.util.List; +import java.util.Objects; import javax.persistence.*; import javax.validation.constraints.NotNull; -import java.util.List; -import java.util.Objects; + +import org.hibernate.envers.Audited; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import ca.corefacility.bioinformatics.irida.model.sample.metadata.MetadataEntry; /** * Describes an individual field in a {@link MetadataTemplate}. */ @Entity -@Table(name = "metadata_field") +@Table(name = "metadata_field", + uniqueConstraints = @UniqueConstraint(columnNames = { "label" }, name = "UK_METADATA_FIELD_LABEL")) @Audited @EntityListeners(AuditingEntityListener.class) public class MetadataTemplateField { diff --git a/src/main/resources/ca/corefacility/bioinformatics/irida/database/changesets/unreleased/all-changes.xml b/src/main/resources/ca/corefacility/bioinformatics/irida/database/changesets/unreleased/all-changes.xml index 61d30a2d3fa..ea58a9e4165 100644 --- a/src/main/resources/ca/corefacility/bioinformatics/irida/database/changesets/unreleased/all-changes.xml +++ b/src/main/resources/ca/corefacility/bioinformatics/irida/database/changesets/unreleased/all-changes.xml @@ -1,4 +1,6 @@ \ No newline at end of file + http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> + + \ No newline at end of file diff --git a/src/main/resources/ca/corefacility/bioinformatics/irida/database/changesets/unreleased/metadata-field-add-label-constraint.xml b/src/main/resources/ca/corefacility/bioinformatics/irida/database/changesets/unreleased/metadata-field-add-label-constraint.xml new file mode 100644 index 00000000000..0b2f2be52ba --- /dev/null +++ b/src/main/resources/ca/corefacility/bioinformatics/irida/database/changesets/unreleased/metadata-field-add-label-constraint.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file From 6e72446cda0bab3f90f727f164ae28ab3c06b828 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 25 Nov 2022 11:07:17 -0600 Subject: [PATCH 05/53] adding promise chaining back in --- .../redux/importReducer.ts | 106 +++++++++++------- 1 file changed, 65 insertions(+), 41 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index d2ed85a2024..07e40791f74 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -102,8 +102,9 @@ export const saveMetadata = createAsyncThunk< ); }); - const chunkSize = 100; + const chunkSize = 10; + const updateSamplesPromises: Promise[] = []; const updateSampleList = selectedSampleList .filter((metadataItem) => { const name = metadataItem[sampleNameColumn]; @@ -127,34 +128,46 @@ export const saveMetadata = createAsyncThunk< })); return { name, sampleId, metadata: metadataFields }; }); - if (updateSampleList.length > 0) { const chunkedUpdateSampleList = chunkArray(updateSampleList, chunkSize); for (const chunk of chunkedUpdateSampleList) { - await updateSamples({ - projectId, - body: chunk, - }) - .then(() => { - chunk - .map((item) => item.name) - .forEach((name) => (metadataSaveDetails[name] = { saved: true })); + updateSamplesPromises.push( + updateSamples({ + projectId, + body: chunk, }) - .catch((error) => { - const { errors } = error.response.data; - Object.keys(errors).map((key) => { - metadataSaveDetails[key] = { - saved: false, - error: errors[key], - }; - }); - }); - dispatch( - setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) + .then(() => { + chunk + .map((item) => item.name) + .forEach( + (name) => (metadataSaveDetails[name] = { saved: true }) + ); + }) + .catch((error) => { + const { errors } = error.response.data; + Object.keys(errors).map((key) => { + metadataSaveDetails[key] = { + saved: false, + error: errors[key], + }; + }); + }) ); } + const chunkedUpdateSamplesPromises = chunkArray( + updateSamplesPromises, + chunkSize + ); + for (const chunk of chunkedUpdateSamplesPromises) { + await Promise.all(chunk).then(() => { + dispatch( + setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) + ); + }); + } } + const createSamplesPromises: Promise[] = []; const createSampleList = selectedSampleList .filter((metadataItem) => { const name = metadataItem[sampleNameColumn]; @@ -181,29 +194,40 @@ export const saveMetadata = createAsyncThunk< if (createSampleList.length > 0) { const chunkedCreateSampleList = chunkArray(createSampleList, chunkSize); for (const chunk of chunkedCreateSampleList) { - await createSamples({ - projectId, - body: chunk, - }) - .then(() => { - chunk - .map((item) => item.name) - .forEach((name) => (metadataSaveDetails[name] = { saved: true })); + createSamplesPromises.push( + createSamples({ + projectId, + body: chunk, }) - .catch((error) => { - const { errors } = error.response.data; - Object.keys(errors).map((key) => { - metadataSaveDetails[key] = { - saved: false, - error: errors[key], - }; - }); - }); - - dispatch( - setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) + .then(() => { + chunk + .map((item) => item.name) + .forEach( + (name) => (metadataSaveDetails[name] = { saved: true }) + ); + }) + .catch((error) => { + const { errors } = error.response.data; + Object.keys(errors).map((key) => { + metadataSaveDetails[key] = { + saved: false, + error: errors[key], + }; + }); + }) ); } + const chunkedCreateSamplesPromises = chunkArray( + createSamplesPromises, + chunkSize + ); + for (const chunk of chunkedCreateSamplesPromises) { + await Promise.all(chunk).then(() => { + dispatch( + setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) + ); + }); + } } return { metadataSaveDetails }; From 211152d214f82035c239cdc7ecefd30038e17e93 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 5 Dec 2022 09:14:41 -0600 Subject: [PATCH 06/53] moving returning ResponseEntity into controller --- .../ProjectSamplesAjaxController.java | 14 +++++++++-- .../exceptions/UIMetadataImportException.java | 19 +++++++++++++++ .../web/services/UIProjectSampleService.java | 23 +++++++++++-------- .../services/UIProjectSampleServiceTest.java | 14 ++++++----- 4 files changed, 52 insertions(+), 18 deletions(-) create mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/exceptions/UIMetadataImportException.java diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java index cc1e975c37b..c0d4126e4e7 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java @@ -15,9 +15,11 @@ import ca.corefacility.bioinformatics.irida.model.sample.Sample; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.*; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxErrorResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxFormErrorResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; +import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIShareSamplesException; import ca.corefacility.bioinformatics.irida.ria.web.models.tables.AntTableResponse; import ca.corefacility.bioinformatics.irida.ria.web.projects.dto.DownloadRequest; @@ -72,7 +74,11 @@ public ResponseEntity validateNewSampleName(@Reque @PostMapping("/add-sample") public ResponseEntity createSamplesInProject(@RequestBody CreateSampleRequest[] requests, @PathVariable long projectId, Locale locale) { - return uiProjectSampleService.createSamples(requests, projectId, locale); + try { + return ResponseEntity.ok(uiProjectSampleService.createSamples(requests, projectId, locale)); + } catch (UIMetadataImportException e) { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(e.getErrors())); + } } /** @@ -85,7 +91,11 @@ public ResponseEntity createSamplesInProject(@RequestBody CreateSa @PatchMapping("/add-sample") public ResponseEntity updateSamplesInProject(@RequestBody UpdateSampleRequest[] requests, Locale locale) { - return uiProjectSampleService.updateSamples(requests, locale); + try { + return ResponseEntity.ok(uiProjectSampleService.updateSamples(requests, locale)); + } catch (UIMetadataImportException e) { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(e.getErrors())); + } } /** diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/exceptions/UIMetadataImportException.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/exceptions/UIMetadataImportException.java new file mode 100644 index 00000000000..2c29591bf95 --- /dev/null +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/exceptions/UIMetadataImportException.java @@ -0,0 +1,19 @@ +package ca.corefacility.bioinformatics.irida.ria.web.exceptions; + +import java.util.Map; + +/** + * Exception to be thrown by the UI when there are errors during a metadata import. + */ +public class UIMetadataImportException extends Exception { + private final Map errors; + + public UIMetadataImportException(Map errors) { + super("Metadata Import Exception"); + this.errors = errors; + } + + public Map getErrors() { + return this.errors; + } +} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java index a91095cfc85..64ee81cc927 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java @@ -22,13 +22,12 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.LockedSamplesResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxFormErrorResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxUpdateItemSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.MetadataEntryModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNameModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesResponse; +import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; import ca.corefacility.bioinformatics.irida.service.ProjectService; import ca.corefacility.bioinformatics.irida.service.sample.MetadataTemplateService; import ca.corefacility.bioinformatics.irida.service.sample.SampleService; @@ -130,8 +129,10 @@ public ResponseEntity validateNewSampleName(String * @param projectId Identifier for the current project * @param locale Users current locale * @return result of creating the sample + * @throws UIMetadataImportException if there are errors creating the project samples */ - public ResponseEntity createSamples(CreateSampleRequest[] requests, Long projectId, Locale locale) { + public AjaxUpdateItemSuccessResponse createSamples(CreateSampleRequest[] requests, Long projectId, Locale locale) + throws UIMetadataImportException { Map errors = new HashMap<>(); for (CreateSampleRequest request : requests) { try { @@ -141,10 +142,10 @@ public ResponseEntity createSamples(CreateSampleRequest[] requests } } if (errors.isEmpty()) { - return ResponseEntity.ok(new AjaxUpdateItemSuccessResponse( - messageSource.getMessage("server.AddSample.success", null, locale))); + return new AjaxUpdateItemSuccessResponse( + messageSource.getMessage("server.AddSample.success", null, locale)); } else { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(errors)); + throw new UIMetadataImportException(errors); } } @@ -180,8 +181,10 @@ public Long createSample(Long projectId, CreateSampleRequest request) throws Ent * @param requests Each {@link UpdateSampleRequest} contains details about the sample to update * @param locale Users current locale * @return result of creating the samples + * @throws UIMetadataImportException if there are errors creating the project samples */ - public ResponseEntity updateSamples(UpdateSampleRequest[] requests, Locale locale) { + public AjaxUpdateItemSuccessResponse updateSamples(UpdateSampleRequest[] requests, Locale locale) + throws UIMetadataImportException { Map errors = new HashMap<>(); for (UpdateSampleRequest request : requests) { try { @@ -191,10 +194,10 @@ public ResponseEntity updateSamples(UpdateSampleRequest[] requests } } if (errors.isEmpty()) { - return ResponseEntity.ok(new AjaxUpdateItemSuccessResponse( - messageSource.getMessage("server.AddSample.success", null, locale))); + return new AjaxUpdateItemSuccessResponse( + messageSource.getMessage("server.AddSample.success", null, locale)); } else { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(errors)); + throw new UIMetadataImportException(errors); } } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java index d995b138265..3233a040827 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java @@ -19,7 +19,9 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxUpdateItemSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.MetadataEntryModel; +import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; import ca.corefacility.bioinformatics.irida.ria.web.services.UIProjectSampleService; import ca.corefacility.bioinformatics.irida.service.ProjectService; import ca.corefacility.bioinformatics.irida.service.sample.MetadataTemplateService; @@ -81,20 +83,20 @@ public void testValidateNewSampleName() { } @Test - public void testCreateSample() { + public void testCreateSample() throws UIMetadataImportException { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null) }; - ResponseEntity response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals(HttpStatus.OK, response.getStatusCode(), "Sample should be created"); + AjaxUpdateItemSuccessResponse response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); + assertEquals("success", response.getResponseMessage(), "Sample should be created"); } @Test - public void testCreateSampleWithMetadata() { + public void testCreateSampleWithMetadata() throws UIMetadataImportException { List metadata = new ArrayList<>(); metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, null, metadata) }; - ResponseEntity response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals(HttpStatus.OK, response.getStatusCode(), "Sample should be created"); + AjaxUpdateItemSuccessResponse response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); + assertEquals("success", response.getResponseMessage(), "Sample should be created"); } @Test From 05b1340bd06f3c3c24ca9fe1cbc800fcef1573db Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 5 Dec 2022 09:42:19 -0600 Subject: [PATCH 07/53] fixing broken test --- .../ria/unit/web/services/UIProjectSampleServiceTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java index 3233a040827..471cb92dfd1 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java @@ -18,7 +18,6 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.CreateSampleRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxUpdateItemSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.MetadataEntryModel; import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; @@ -100,12 +99,12 @@ public void testCreateSampleWithMetadata() throws UIMetadataImportException { } @Test - public void testUpdateSampleWithMetadata() { + public void testUpdateSampleWithMetadata() throws UIMetadataImportException { List metadata = new ArrayList<>(); metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); UpdateSampleRequest[] requests = { new UpdateSampleRequest(SAMPLE_1_ID, GOOD_NAME, null, null, metadata) }; - ResponseEntity response = service.updateSamples(requests, Locale.ENGLISH); - assertEquals(HttpStatus.OK, response.getStatusCode(), "Sample should be updated"); + AjaxUpdateItemSuccessResponse response = service.updateSamples(requests, Locale.ENGLISH); + assertEquals("success", response.getResponseMessage(), "Sample should be updated"); } } From d9bb07f115f0a7cb40dab1cc76e0bed07d55e00f Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 5 Dec 2022 09:59:35 -0600 Subject: [PATCH 08/53] fixing create project sample from modal --- .../resources/js/apis/projects/samples.ts | 19 ------------------- .../samples/components/CreateNewSample.jsx | 14 +++++++++++--- .../samples/components/SamplesMenu.jsx | 1 + 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 3ff9a5196d0..2890831682e 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -163,25 +163,6 @@ export async function validateSampleName(name: string) { return response.json(); } -/** - * Create a new sample within a project - * @param name - name of the new sample - * @param organism - name of the organism (optional) - * @returns {Promise} - */ -export async function createNewSample({ - name, - organism, -}: { - name: string; - organism: string; -}) { - return post(`${URL}/${PROJECT_ID}/samples/add-sample`, { - name: name.trim(), - organism, - }); -} - /** * Share or move samples with another project. * @param currentId - current projectId diff --git a/src/main/webapp/resources/js/pages/projects/samples/components/CreateNewSample.jsx b/src/main/webapp/resources/js/pages/projects/samples/components/CreateNewSample.jsx index 5e60a48f584..1ddc792c3d4 100644 --- a/src/main/webapp/resources/js/pages/projects/samples/components/CreateNewSample.jsx +++ b/src/main/webapp/resources/js/pages/projects/samples/components/CreateNewSample.jsx @@ -1,7 +1,7 @@ import React from "react"; import { AutoComplete, Form, Input, Modal } from "antd"; import { - createNewSample, + createSamples, validateSampleName, } from "../../../../apis/projects/samples"; import searchOntology from "../../../../apis/ontology/taxonomy/query"; @@ -11,7 +11,12 @@ import searchOntology from "../../../../apis/ontology/taxonomy/query"; * @returns {JSX.Element} * @constructor */ -export default function CreateNewSample({ visible, onCreate, onCancel }) { +export default function CreateNewSample({ + visible, + projectId, + onCreate, + onCancel, +}) { const [form] = Form.useForm(); const nameRef = React.useRef(); const [organisms, setOrganisms] = React.useState([]); @@ -72,7 +77,10 @@ export default function CreateNewSample({ visible, onCreate, onCancel }) { const createSample = () => { form.validateFields().then((values) => { - createNewSample(values).then(() => { + createSamples({ + projectId, + body: [values], + }).then(() => { form.resetFields(); onCreate(); }); diff --git a/src/main/webapp/resources/js/pages/projects/samples/components/SamplesMenu.jsx b/src/main/webapp/resources/js/pages/projects/samples/components/SamplesMenu.jsx index a3a1a2f8dfc..904ad959c65 100644 --- a/src/main/webapp/resources/js/pages/projects/samples/components/SamplesMenu.jsx +++ b/src/main/webapp/resources/js/pages/projects/samples/components/SamplesMenu.jsx @@ -355,6 +355,7 @@ export default function SamplesMenu() { }> setCreateSampleVisible(false)} onCreate={onCreate} /> From 8a53a63b632ba1c714a8a426e025d8dd8ecda75f Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 5 Dec 2022 10:44:15 -0600 Subject: [PATCH 09/53] moving returning ResponseEntity into controller --- .../projects/ProjectSamplesAjaxController.java | 11 +++++------ .../ria/web/services/UIProjectSampleService.java | 12 ++++-------- .../web/services/UIProjectSampleServiceTest.java | 15 ++++++++------- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java index c0d4126e4e7..aa357c62057 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java @@ -14,10 +14,7 @@ import ca.corefacility.bioinformatics.irida.model.sample.Sample; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.*; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxErrorResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxFormErrorResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxSuccessResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.*; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIShareSamplesException; @@ -75,7 +72,8 @@ public ResponseEntity validateNewSampleName(@Reque public ResponseEntity createSamplesInProject(@RequestBody CreateSampleRequest[] requests, @PathVariable long projectId, Locale locale) { try { - return ResponseEntity.ok(uiProjectSampleService.createSamples(requests, projectId, locale)); + return ResponseEntity.ok(new AjaxUpdateItemSuccessResponse( + uiProjectSampleService.createSamples(requests, projectId, locale))); } catch (UIMetadataImportException e) { return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(e.getErrors())); } @@ -92,7 +90,8 @@ public ResponseEntity createSamplesInProject(@RequestBody CreateSa public ResponseEntity updateSamplesInProject(@RequestBody UpdateSampleRequest[] requests, Locale locale) { try { - return ResponseEntity.ok(uiProjectSampleService.updateSamples(requests, locale)); + return ResponseEntity.ok( + new AjaxUpdateItemSuccessResponse(uiProjectSampleService.updateSamples(requests, locale))); } catch (UIMetadataImportException e) { return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(e.getErrors())); } diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java index 64ee81cc927..592848375c3 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java @@ -22,7 +22,6 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.LockedSamplesResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxUpdateItemSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.MetadataEntryModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNameModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; @@ -131,7 +130,7 @@ public ResponseEntity validateNewSampleName(String * @return result of creating the sample * @throws UIMetadataImportException if there are errors creating the project samples */ - public AjaxUpdateItemSuccessResponse createSamples(CreateSampleRequest[] requests, Long projectId, Locale locale) + public String createSamples(CreateSampleRequest[] requests, Long projectId, Locale locale) throws UIMetadataImportException { Map errors = new HashMap<>(); for (CreateSampleRequest request : requests) { @@ -142,8 +141,7 @@ public AjaxUpdateItemSuccessResponse createSamples(CreateSampleRequest[] request } } if (errors.isEmpty()) { - return new AjaxUpdateItemSuccessResponse( - messageSource.getMessage("server.AddSample.success", null, locale)); + return messageSource.getMessage("server.AddSample.success", null, locale); } else { throw new UIMetadataImportException(errors); } @@ -183,8 +181,7 @@ public Long createSample(Long projectId, CreateSampleRequest request) throws Ent * @return result of creating the samples * @throws UIMetadataImportException if there are errors creating the project samples */ - public AjaxUpdateItemSuccessResponse updateSamples(UpdateSampleRequest[] requests, Locale locale) - throws UIMetadataImportException { + public String updateSamples(UpdateSampleRequest[] requests, Locale locale) throws UIMetadataImportException { Map errors = new HashMap<>(); for (UpdateSampleRequest request : requests) { try { @@ -194,8 +191,7 @@ public AjaxUpdateItemSuccessResponse updateSamples(UpdateSampleRequest[] request } } if (errors.isEmpty()) { - return new AjaxUpdateItemSuccessResponse( - messageSource.getMessage("server.AddSample.success", null, locale)); + return messageSource.getMessage("server.AddSample.success", null, locale); } else { throw new UIMetadataImportException(errors); } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java index 471cb92dfd1..975e286a7f0 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java @@ -18,7 +18,6 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.CreateSampleRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxUpdateItemSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.MetadataEntryModel; import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; import ca.corefacility.bioinformatics.irida.ria.web.services.UIProjectSampleService; @@ -28,6 +27,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -63,6 +63,7 @@ public void setUp() { join); when(projectService.addSampleToProjectWithoutEvent(any(Project.class), any(Sample.class), any(Boolean.class))).thenReturn(join); + when(messageSource.getMessage(eq("server.AddSample.success"), any(), any(Locale.class))).thenReturn("success"); } @Test @@ -84,8 +85,8 @@ public void testValidateNewSampleName() { @Test public void testCreateSample() throws UIMetadataImportException { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null) }; - AjaxUpdateItemSuccessResponse response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals("success", response.getResponseMessage(), "Sample should be created"); + String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); + assertEquals("success", response, "Sample should be created"); } @Test @@ -94,8 +95,8 @@ public void testCreateSampleWithMetadata() throws UIMetadataImportException { metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, null, metadata) }; - AjaxUpdateItemSuccessResponse response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals("success", response.getResponseMessage(), "Sample should be created"); + String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); + assertEquals("success", response, "Sample should be created"); } @Test @@ -104,7 +105,7 @@ public void testUpdateSampleWithMetadata() throws UIMetadataImportException { metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); UpdateSampleRequest[] requests = { new UpdateSampleRequest(SAMPLE_1_ID, GOOD_NAME, null, null, metadata) }; - AjaxUpdateItemSuccessResponse response = service.updateSamples(requests, Locale.ENGLISH); - assertEquals("success", response.getResponseMessage(), "Sample should be updated"); + String response = service.updateSamples(requests, Locale.ENGLISH); + assertEquals("success", response, "Sample should be updated"); } } From 60e4becc57d5fd5b4f9b339ffcec2fd943f045e9 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 5 Dec 2022 12:04:32 -0600 Subject: [PATCH 10/53] adding more tests --- .../services/UIProjectSampleServiceTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java index 975e286a7f0..509792da3d8 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java @@ -42,6 +42,8 @@ public class UIProjectSampleServiceTest { private final String BAD_NAME = "bad name with spaces"; private final String SHORT_NAME = "sho"; private final String GOOD_NAME = "good_name"; + private final String ORGANISM = "organism"; + private final String DESCRIPTION = "this is a description"; @BeforeEach public void setUp() { @@ -89,6 +91,27 @@ public void testCreateSample() throws UIMetadataImportException { assertEquals("success", response, "Sample should be created"); } + @Test + public void testCreateSampleWithOrganism() throws UIMetadataImportException { + CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, ORGANISM) }; + String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); + assertEquals("success", response, "Sample should be created"); + } + + @Test + public void testCreateSampleWithDescription() throws UIMetadataImportException { + CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, DESCRIPTION, null) }; + String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); + assertEquals("success", response, "Sample should be created"); + } + + @Test + public void testCreateSampleWithOrganismAndDescription() throws UIMetadataImportException { + CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, ORGANISM, DESCRIPTION, null) }; + String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); + assertEquals("success", response, "Sample should be created"); + } + @Test public void testCreateSampleWithMetadata() throws UIMetadataImportException { List metadata = new ArrayList<>(); From 8845722f0d21be1856149625595c6d1fdc6c0c6b Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 5 Dec 2022 12:22:52 -0600 Subject: [PATCH 11/53] adding comments --- .../samples-metadata-import/redux/importReducer.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 07e40791f74..f173aa2c770 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -104,6 +104,7 @@ export const saveMetadata = createAsyncThunk< const chunkSize = 10; + //update existing project samples const updateSamplesPromises: Promise[] = []; const updateSampleList = selectedSampleList .filter((metadataItem) => { @@ -128,6 +129,7 @@ export const saveMetadata = createAsyncThunk< })); return { name, sampleId, metadata: metadataFields }; }); + //create a request with a list of project samples to be updated if (updateSampleList.length > 0) { const chunkedUpdateSampleList = chunkArray(updateSampleList, chunkSize); for (const chunk of chunkedUpdateSampleList) { @@ -154,6 +156,7 @@ export const saveMetadata = createAsyncThunk< }) ); } + //send multiple update project sample requests in parallel const chunkedUpdateSamplesPromises = chunkArray( updateSamplesPromises, chunkSize @@ -167,6 +170,7 @@ export const saveMetadata = createAsyncThunk< } } + //create new project samples const createSamplesPromises: Promise[] = []; const createSampleList = selectedSampleList .filter((metadataItem) => { @@ -190,7 +194,7 @@ export const saveMetadata = createAsyncThunk< })); return { name, metadata: metadataFields }; }); - + //create a request with a list of project samples to be created if (createSampleList.length > 0) { const chunkedCreateSampleList = chunkArray(createSampleList, chunkSize); for (const chunk of chunkedCreateSampleList) { @@ -217,6 +221,7 @@ export const saveMetadata = createAsyncThunk< }) ); } + //send multiple create project sample requests in parallel const chunkedCreateSamplesPromises = chunkArray( createSamplesPromises, chunkSize From d9f98a8701ad070afaf2047e1548d7b1301d3620 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 5 Dec 2022 14:32:00 -0600 Subject: [PATCH 12/53] fixing unmounted component error --- .../webapp/resources/js/components/files/DragUpload.tsx | 6 +++--- .../components/SampleMetadataImportSelectFile.tsx | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/webapp/resources/js/components/files/DragUpload.tsx b/src/main/webapp/resources/js/components/files/DragUpload.tsx index 97d6b498070..b84797c5915 100644 --- a/src/main/webapp/resources/js/components/files/DragUpload.tsx +++ b/src/main/webapp/resources/js/components/files/DragUpload.tsx @@ -1,8 +1,8 @@ import React from "react"; -import type { UploadProps } from "antd"; import { Upload } from "antd"; import { IconFileUpload } from "../icons/Icons"; import { SPACE_SM, SPACE_XS } from "../../styles/spacing"; +import { DraggerProps } from "antd/lib/upload"; const { Dragger } = Upload; @@ -13,8 +13,8 @@ export interface Dictionary { export interface DragUploadProps { uploadText: string | React.ReactElement; uploadHint: string | React.ReactElement; - options: UploadProps; - props: Dictionary; + options: DraggerProps; + props?: Dictionary; } /** * React component for rendering the drag and drop upload functionality. diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportSelectFile.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportSelectFile.tsx index 22e5e423a3b..2ff7c1b670a 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportSelectFile.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportSelectFile.tsx @@ -36,6 +36,9 @@ export function SampleMetadataImportSelectFile(): JSX.Element { multiple: false, showUploadList: false, accept: ".xls,.xlsx,.csv", + customRequest: () => { + navigate(`/${projectId}/sample-metadata/upload/columns`); + }, beforeUpload: (file: RcFile) => { try { setLoading(true); @@ -64,7 +67,7 @@ export function SampleMetadataImportSelectFile(): JSX.Element { notification.success({ message: i18n("SampleMetadataImportSelectFile.success", file.name), }); - navigate(`/${projectId}/sample-metadata/upload/columns`); + return true; } } catch (error) { setLoading(false); From 79d4c908766d235fff7c36373846cac8b462aa9e Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 7 Dec 2022 10:08:56 -0600 Subject: [PATCH 13/53] changing path names --- .../ria/web/ajax/projects/ProjectSamplesAjaxController.java | 4 ++-- src/main/webapp/resources/js/apis/projects/samples.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java index aa357c62057..b23a31571d2 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java @@ -68,7 +68,7 @@ public ResponseEntity validateNewSampleName(@Reque * @param locale current users locale * @return result of creating the samples */ - @PostMapping("/add-sample") + @PostMapping("/create") public ResponseEntity createSamplesInProject(@RequestBody CreateSampleRequest[] requests, @PathVariable long projectId, Locale locale) { try { @@ -86,7 +86,7 @@ public ResponseEntity createSamplesInProject(@RequestBody CreateSa * @param locale current users locale * @return result of updating the samples */ - @PatchMapping("/add-sample") + @PatchMapping("/update") public ResponseEntity updateSamplesInProject(@RequestBody UpdateSampleRequest[] requests, Locale locale) { try { diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 2890831682e..7fe33568c8d 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -136,7 +136,7 @@ export async function createSamples({ projectId: string; body: SampleRequest[]; }) { - return await axios.post(`${URL}/${projectId}/samples/add-sample`, body); + return await axios.post(`${URL}/${projectId}/samples/create`, body); } export async function updateSamples({ @@ -146,7 +146,7 @@ export async function updateSamples({ projectId: string; body: SampleRequest[]; }) { - return await axios.patch(`${URL}/${projectId}/samples/add-sample`, body); + return await axios.patch(`${URL}/${projectId}/samples/update`, body); } /** From b357be2f267d57cc42ccb5642f9b510c1ff039ae Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 7 Dec 2022 11:41:49 -0600 Subject: [PATCH 14/53] returning a mult-status response from controller --- .../ProjectSamplesAjaxController.java | 31 ++++------ .../web/services/UIProjectSampleService.java | 22 ++----- .../redux/importReducer.ts | 62 +++++++++---------- .../services/UIProjectSampleServiceTest.java | 26 ++++---- 4 files changed, 60 insertions(+), 81 deletions(-) diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java index b23a31571d2..6a09f833537 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java @@ -3,6 +3,7 @@ import java.io.IOException; import java.util.List; import java.util.Locale; +import java.util.Map; import javax.servlet.http.HttpServletResponse; @@ -14,9 +15,11 @@ import ca.corefacility.bioinformatics.irida.model.sample.Sample; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.*; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.*; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxErrorResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxFormErrorResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; -import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIShareSamplesException; import ca.corefacility.bioinformatics.irida.ria.web.models.tables.AntTableResponse; import ca.corefacility.bioinformatics.irida.ria.web.projects.dto.DownloadRequest; @@ -65,36 +68,26 @@ public ResponseEntity validateNewSampleName(@Reque * * @param requests Details about the samples * @param projectId current project identifier - * @param locale current users locale * @return result of creating the samples */ @PostMapping("/create") public ResponseEntity createSamplesInProject(@RequestBody CreateSampleRequest[] requests, - @PathVariable long projectId, Locale locale) { - try { - return ResponseEntity.ok(new AjaxUpdateItemSuccessResponse( - uiProjectSampleService.createSamples(requests, projectId, locale))); - } catch (UIMetadataImportException e) { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(e.getErrors())); - } + @PathVariable long projectId) { + Map errors = uiProjectSampleService.createSamples(requests, projectId); + return ResponseEntity.status(HttpStatus.MULTI_STATUS).body(new AjaxFormErrorResponse(errors)); + } /** * Update samples within a project * * @param requests Details about the samples - * @param locale current users locale * @return result of updating the samples */ @PatchMapping("/update") - public ResponseEntity updateSamplesInProject(@RequestBody UpdateSampleRequest[] requests, - Locale locale) { - try { - return ResponseEntity.ok( - new AjaxUpdateItemSuccessResponse(uiProjectSampleService.updateSamples(requests, locale))); - } catch (UIMetadataImportException e) { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxFormErrorResponse(e.getErrors())); - } + public ResponseEntity updateSamplesInProject(@RequestBody UpdateSampleRequest[] requests) { + Map errors = uiProjectSampleService.updateSamples(requests); + return ResponseEntity.status(HttpStatus.MULTI_STATUS).body(new AjaxFormErrorResponse(errors)); } /** diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java index 592848375c3..50ae736c8dd 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java @@ -26,7 +26,6 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNameModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesResponse; -import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; import ca.corefacility.bioinformatics.irida.service.ProjectService; import ca.corefacility.bioinformatics.irida.service.sample.MetadataTemplateService; import ca.corefacility.bioinformatics.irida.service.sample.SampleService; @@ -126,12 +125,9 @@ public ResponseEntity validateNewSampleName(String * * @param requests Each {@link CreateSampleRequest} contains details about the sample to create * @param projectId Identifier for the current project - * @param locale Users current locale * @return result of creating the sample - * @throws UIMetadataImportException if there are errors creating the project samples */ - public String createSamples(CreateSampleRequest[] requests, Long projectId, Locale locale) - throws UIMetadataImportException { + public Map createSamples(CreateSampleRequest[] requests, Long projectId) { Map errors = new HashMap<>(); for (CreateSampleRequest request : requests) { try { @@ -140,11 +136,7 @@ public String createSamples(CreateSampleRequest[] requests, Long projectId, Loca errors.put(request.getName(), e.getMessage()); } } - if (errors.isEmpty()) { - return messageSource.getMessage("server.AddSample.success", null, locale); - } else { - throw new UIMetadataImportException(errors); - } + return errors; } /** @@ -177,11 +169,9 @@ public Long createSample(Long projectId, CreateSampleRequest request) throws Ent * Update samples in a project * * @param requests Each {@link UpdateSampleRequest} contains details about the sample to update - * @param locale Users current locale * @return result of creating the samples - * @throws UIMetadataImportException if there are errors creating the project samples */ - public String updateSamples(UpdateSampleRequest[] requests, Locale locale) throws UIMetadataImportException { + public Map updateSamples(UpdateSampleRequest[] requests) { Map errors = new HashMap<>(); for (UpdateSampleRequest request : requests) { try { @@ -190,11 +180,7 @@ public String updateSamples(UpdateSampleRequest[] requests, Locale locale) throw errors.put(request.getName(), e.getMessage()); } } - if (errors.isEmpty()) { - return messageSource.getMessage("server.AddSample.success", null, locale); - } else { - throw new UIMetadataImportException(errors); - } + return errors; } /** diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index f173aa2c770..40e3cc2788a 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -137,23 +137,22 @@ export const saveMetadata = createAsyncThunk< updateSamples({ projectId, body: chunk, - }) - .then(() => { - chunk - .map((item) => item.name) - .forEach( - (name) => (metadataSaveDetails[name] = { saved: true }) - ); - }) - .catch((error) => { - const { errors } = error.response.data; - Object.keys(errors).map((key) => { - metadataSaveDetails[key] = { - saved: false, - error: errors[key], - }; + }).then((response) => { + const { errors } = response.data; + chunk + .map((item) => item.name) + .forEach((name) => { + const error = errors[name]; + if (error) { + metadataSaveDetails[name] = { + saved: false, + error: error, + }; + } else { + metadataSaveDetails[name] = { saved: true }; + } }); - }) + }) ); } //send multiple update project sample requests in parallel @@ -202,23 +201,22 @@ export const saveMetadata = createAsyncThunk< createSamples({ projectId, body: chunk, - }) - .then(() => { - chunk - .map((item) => item.name) - .forEach( - (name) => (metadataSaveDetails[name] = { saved: true }) - ); - }) - .catch((error) => { - const { errors } = error.response.data; - Object.keys(errors).map((key) => { - metadataSaveDetails[key] = { - saved: false, - error: errors[key], - }; + }).then((response) => { + const { errors } = response.data; + chunk + .map((item) => item.name) + .forEach((name) => { + const error = errors[name]; + if (error) { + metadataSaveDetails[name] = { + saved: false, + error: error, + }; + } else { + metadataSaveDetails[name] = { saved: true }; + } }); - }) + }) ); } //send multiple create project sample requests in parallel diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java index 509792da3d8..9f65a069cc5 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -26,6 +27,7 @@ import ca.corefacility.bioinformatics.irida.service.sample.SampleService; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -87,29 +89,29 @@ public void testValidateNewSampleName() { @Test public void testCreateSample() throws UIMetadataImportException { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null) }; - String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals("success", response, "Sample should be created"); + Map response = service.createSamples(requests, PROJECT_1_ID); + assertTrue(response.isEmpty(), "Sample should be created"); } @Test public void testCreateSampleWithOrganism() throws UIMetadataImportException { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, ORGANISM) }; - String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals("success", response, "Sample should be created"); + Map response = service.createSamples(requests, PROJECT_1_ID); + assertTrue(response.isEmpty(), "Sample should be created"); } @Test public void testCreateSampleWithDescription() throws UIMetadataImportException { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, DESCRIPTION, null) }; - String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals("success", response, "Sample should be created"); + Map response = service.createSamples(requests, PROJECT_1_ID); + assertTrue(response.isEmpty(), "Sample should be created"); } @Test public void testCreateSampleWithOrganismAndDescription() throws UIMetadataImportException { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, ORGANISM, DESCRIPTION, null) }; - String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals("success", response, "Sample should be created"); + Map response = service.createSamples(requests, PROJECT_1_ID); + assertTrue(response.isEmpty(), "Sample should be created"); } @Test @@ -118,8 +120,8 @@ public void testCreateSampleWithMetadata() throws UIMetadataImportException { metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, null, metadata) }; - String response = service.createSamples(requests, PROJECT_1_ID, Locale.ENGLISH); - assertEquals("success", response, "Sample should be created"); + Map response = service.createSamples(requests, PROJECT_1_ID); + assertTrue(response.isEmpty(), "Sample should be created"); } @Test @@ -128,7 +130,7 @@ public void testUpdateSampleWithMetadata() throws UIMetadataImportException { metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); UpdateSampleRequest[] requests = { new UpdateSampleRequest(SAMPLE_1_ID, GOOD_NAME, null, null, metadata) }; - String response = service.updateSamples(requests, Locale.ENGLISH); - assertEquals("success", response, "Sample should be updated"); + Map response = service.updateSamples(requests); + assertTrue(response.isEmpty(), "Sample should be updated"); } } From 43780af83a3860cad8263a1e03223af3b9f6cf11 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 7 Dec 2022 14:02:52 -0600 Subject: [PATCH 15/53] adding functionality to calculate chunk size --- .../redux/importReducer.ts | 33 +++++++++++++++---- .../resources/js/utilities/array-utilities.ts | 14 ++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 40e3cc2788a..36377e517da 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -15,7 +15,10 @@ import { ValidateSamplesResponse, } from "../../../../apis/projects/samples"; import { ImportDispatch, ImportState } from "./store"; -import { chunkArray } from "../../../../utilities/array-utilities"; +import { + calculateChunkSize, + chunkArray, +} from "../../../../utilities/array-utilities"; import { createMetadataFieldsForProject, getMetadataFieldsForProject, @@ -102,8 +105,6 @@ export const saveMetadata = createAsyncThunk< ); }); - const chunkSize = 10; - //update existing project samples const updateSamplesPromises: Promise[] = []; const updateSampleList = selectedSampleList @@ -131,7 +132,13 @@ export const saveMetadata = createAsyncThunk< }); //create a request with a list of project samples to be updated if (updateSampleList.length > 0) { - const chunkedUpdateSampleList = chunkArray(updateSampleList, chunkSize); + const updateSampleListChunkSize = calculateChunkSize( + updateSampleList.length + ); + const chunkedUpdateSampleList = chunkArray( + updateSampleList, + updateSampleListChunkSize + ); for (const chunk of chunkedUpdateSampleList) { updateSamplesPromises.push( updateSamples({ @@ -156,9 +163,12 @@ export const saveMetadata = createAsyncThunk< ); } //send multiple update project sample requests in parallel + const updateSamplesPromiseChunkSize = calculateChunkSize( + updateSamplesPromises.length + ); const chunkedUpdateSamplesPromises = chunkArray( updateSamplesPromises, - chunkSize + updateSamplesPromiseChunkSize ); for (const chunk of chunkedUpdateSamplesPromises) { await Promise.all(chunk).then(() => { @@ -195,7 +205,13 @@ export const saveMetadata = createAsyncThunk< }); //create a request with a list of project samples to be created if (createSampleList.length > 0) { - const chunkedCreateSampleList = chunkArray(createSampleList, chunkSize); + const createSampleListChunkSize = calculateChunkSize( + updateSampleList.length + ); + const chunkedCreateSampleList = chunkArray( + createSampleList, + createSampleListChunkSize + ); for (const chunk of chunkedCreateSampleList) { createSamplesPromises.push( createSamples({ @@ -220,9 +236,12 @@ export const saveMetadata = createAsyncThunk< ); } //send multiple create project sample requests in parallel + const createSamplesPromiseChunkSize = calculateChunkSize( + updateSamplesPromises.length + ); const chunkedCreateSamplesPromises = chunkArray( createSamplesPromises, - chunkSize + createSamplesPromiseChunkSize ); for (const chunk of chunkedCreateSamplesPromises) { await Promise.all(chunk).then(() => { diff --git a/src/main/webapp/resources/js/utilities/array-utilities.ts b/src/main/webapp/resources/js/utilities/array-utilities.ts index 7cf06ec9492..d7fc57a94e4 100644 --- a/src/main/webapp/resources/js/utilities/array-utilities.ts +++ b/src/main/webapp/resources/js/utilities/array-utilities.ts @@ -16,3 +16,17 @@ export function chunkArray(items: any[], size: number) { return chunks; } + +/** + * Calculate the best request chunk size + * + * @param arraySize the size of the array + * + * @returns the chunk size + */ +export function calculateChunkSize(arraySize: number) { + const MIN = 10; + const MAX = 100; + const estimated = Math.ceil(arraySize / 10); + return estimated < MIN ? MIN : estimated > MAX ? MAX : estimated; +} From a059c969d45bb9a249d5e88d42907178ca9350df Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Thu, 8 Dec 2022 12:36:13 -0600 Subject: [PATCH 16/53] creating CreateSampleResponse and UpdateSampleResponse objects --- .../web/ajax/dto/CreateSampleResponse.java | 25 +++++++ .../web/ajax/dto/UpdateSampleResponse.java | 37 ++++++++++ .../ajax/dto/ajax/AjaxMultipleResponse.java | 19 +++++ .../ProjectSamplesAjaxController.java | 37 ++++++++-- .../exceptions/UIMetadataImportException.java | 19 ----- .../web/services/UIProjectSampleService.java | 29 ++++---- src/main/resources/i18n/messages.properties | 1 - .../redux/importReducer.ts | 70 +++++++++++-------- .../services/UIProjectSampleServiceTest.java | 27 ++++--- 9 files changed, 180 insertions(+), 84 deletions(-) create mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/CreateSampleResponse.java create mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/UpdateSampleResponse.java create mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/ajax/AjaxMultipleResponse.java delete mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/exceptions/UIMetadataImportException.java diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/CreateSampleResponse.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/CreateSampleResponse.java new file mode 100644 index 00000000000..9f5cfc02303 --- /dev/null +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/CreateSampleResponse.java @@ -0,0 +1,25 @@ +package ca.corefacility.bioinformatics.irida.ria.web.ajax.dto; + +/** + * UI response to create a new sample + */ +public class CreateSampleResponse extends UpdateSampleResponse { + private Long sampleId; + + public CreateSampleResponse(String errorMessage) { + super(true, errorMessage); + } + + public CreateSampleResponse(Long sampleId) { + super(false); + this.sampleId = sampleId; + } + + public Long getSampleId() { + return sampleId; + } + + public void setSampleId(Long sampleId) { + this.sampleId = sampleId; + } +} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/UpdateSampleResponse.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/UpdateSampleResponse.java new file mode 100644 index 00000000000..a98fb5b9878 --- /dev/null +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/UpdateSampleResponse.java @@ -0,0 +1,37 @@ +package ca.corefacility.bioinformatics.irida.ria.web.ajax.dto; + +/** + * UI response to update an existing sample + */ +public class UpdateSampleResponse { + private boolean error; + private String errorMessage; + + public UpdateSampleResponse() { + } + + public UpdateSampleResponse(boolean error) { + this.error = error; + } + + public UpdateSampleResponse(boolean error, String errorMessage) { + this.error = error; + this.errorMessage = errorMessage; + } + + public boolean isError() { + return error; + } + + public void setError(boolean error) { + this.error = error; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } +} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/ajax/AjaxMultipleResponse.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/ajax/AjaxMultipleResponse.java new file mode 100644 index 00000000000..71d8276226e --- /dev/null +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/dto/ajax/AjaxMultipleResponse.java @@ -0,0 +1,19 @@ +package ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax; + +import java.util.Map; + +/** + * AJAX response to return multiple responses to the client + */ +public class AjaxMultipleResponse extends AjaxResponse { + private Map responses; + + public AjaxMultipleResponse(Map responses) { + this.responses = responses; + } + + public Map getResponses() { + return responses; + } +} + diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java index 6a09f833537..15346c68273 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/projects/ProjectSamplesAjaxController.java @@ -16,7 +16,7 @@ import ca.corefacility.bioinformatics.irida.model.sample.Sample; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.*; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxErrorResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxFormErrorResponse; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxMultipleResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxSuccessResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; @@ -73,9 +73,21 @@ public ResponseEntity validateNewSampleName(@Reque @PostMapping("/create") public ResponseEntity createSamplesInProject(@RequestBody CreateSampleRequest[] requests, @PathVariable long projectId) { - Map errors = uiProjectSampleService.createSamples(requests, projectId); - return ResponseEntity.status(HttpStatus.MULTI_STATUS).body(new AjaxFormErrorResponse(errors)); - + Map responses = uiProjectSampleService.createSamples(requests, projectId); + long errorCount = responses.entrySet() + .stream() + .filter(response -> ((CreateSampleResponse) response.getValue()).isError()) + .count(); + long successCount = responses.entrySet() + .stream() + .filter(response -> !((CreateSampleResponse) response.getValue()).isError()) + .count(); + if (responses.size() == successCount) { + return ResponseEntity.status(HttpStatus.OK).body(new AjaxMultipleResponse(responses)); + } else if (responses.size() == errorCount) { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxMultipleResponse(responses)); + } + return ResponseEntity.status(HttpStatus.MULTI_STATUS).body(new AjaxMultipleResponse(responses)); } /** @@ -86,8 +98,21 @@ public ResponseEntity createSamplesInProject(@RequestBody CreateSa */ @PatchMapping("/update") public ResponseEntity updateSamplesInProject(@RequestBody UpdateSampleRequest[] requests) { - Map errors = uiProjectSampleService.updateSamples(requests); - return ResponseEntity.status(HttpStatus.MULTI_STATUS).body(new AjaxFormErrorResponse(errors)); + Map responses = uiProjectSampleService.updateSamples(requests); + long errorCount = responses.entrySet() + .stream() + .filter(response -> ((UpdateSampleResponse) response.getValue()).isError()) + .count(); + long successCount = responses.entrySet() + .stream() + .filter(response -> !((UpdateSampleResponse) response.getValue()).isError()) + .count(); + if (responses.size() == successCount) { + return ResponseEntity.status(HttpStatus.OK).body(new AjaxMultipleResponse(responses)); + } else if (responses.size() == errorCount) { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxMultipleResponse(responses)); + } + return ResponseEntity.status(HttpStatus.MULTI_STATUS).body(new AjaxMultipleResponse(responses)); } /** diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/exceptions/UIMetadataImportException.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/exceptions/UIMetadataImportException.java deleted file mode 100644 index 2c29591bf95..00000000000 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/exceptions/UIMetadataImportException.java +++ /dev/null @@ -1,19 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.web.exceptions; - -import java.util.Map; - -/** - * Exception to be thrown by the UI when there are errors during a metadata import. - */ -public class UIMetadataImportException extends Exception { - private final Map errors; - - public UIMetadataImportException(Map errors) { - super("Metadata Import Exception"); - this.errors = errors; - } - - public Map getErrors() { - return this.errors; - } -} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java index 50ae736c8dd..612852bc1f6 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIProjectSampleService.java @@ -18,10 +18,7 @@ import ca.corefacility.bioinformatics.irida.model.sample.MetadataTemplateField; import ca.corefacility.bioinformatics.irida.model.sample.Sample; import ca.corefacility.bioinformatics.irida.model.sample.metadata.MetadataEntry; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.CreateSampleRequest; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.LockedSamplesResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.*; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.MetadataEntryModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNameModel; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.ValidateSampleNamesRequest; @@ -127,16 +124,19 @@ public ResponseEntity validateNewSampleName(String * @param projectId Identifier for the current project * @return result of creating the sample */ - public Map createSamples(CreateSampleRequest[] requests, Long projectId) { - Map errors = new HashMap<>(); + public Map createSamples(CreateSampleRequest[] requests, Long projectId) { + Map responses = new HashMap<>(); for (CreateSampleRequest request : requests) { try { - createSample(projectId, request); + Long sampleId = createSample(projectId, request); + CreateSampleResponse response = new CreateSampleResponse(sampleId); + responses.put(request.getName(), response); } catch (Exception e) { - errors.put(request.getName(), e.getMessage()); + CreateSampleResponse response = new CreateSampleResponse(e.getMessage()); + responses.put(request.getName(), response); } } - return errors; + return responses; } /** @@ -171,16 +171,19 @@ public Long createSample(Long projectId, CreateSampleRequest request) throws Ent * @param requests Each {@link UpdateSampleRequest} contains details about the sample to update * @return result of creating the samples */ - public Map updateSamples(UpdateSampleRequest[] requests) { - Map errors = new HashMap<>(); + public Map updateSamples(UpdateSampleRequest[] requests) { + Map responses = new HashMap<>(); for (UpdateSampleRequest request : requests) { try { updateSample(request); + UpdateSampleResponse response = new UpdateSampleResponse(false); + responses.put(request.getName(), response); } catch (Exception e) { - errors.put(request.getName(), e.getMessage()); + UpdateSampleResponse response = new UpdateSampleResponse(true, e.getMessage()); + responses.put(request.getName(), response); } } - return errors; + return responses; } /** diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 8802f3ee542..686029d22b2 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -2305,7 +2305,6 @@ AddSample.submit=Create Sample server.AddSample.error.length=Sample name must have at least 4 characters. server.AddSample.error.special.characters=Sample name cannot contain any spaces or special characters. server.AddSample.error.exists=A sample by this name already exists in this project. -server.AddSample.success=success # ========================================================================================== # # CART EMPTY COMPONENT # diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 36377e517da..ad965407042 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -144,22 +144,27 @@ export const saveMetadata = createAsyncThunk< updateSamples({ projectId, body: chunk, - }).then((response) => { - const { errors } = response.data; - chunk - .map((item) => item.name) - .forEach((name) => { - const error = errors[name]; - if (error) { - metadataSaveDetails[name] = { - saved: false, - error: error, - }; - } else { - metadataSaveDetails[name] = { saved: true }; - } - }); }) + .then((response) => { + const { responses } = response.data; + Object.keys(responses).map((key) => { + const { error, errorMessage } = responses[key]; + metadataSaveDetails[key] = { + saved: !error, + error: errorMessage, + }; + }); + }) + .catch((error) => { + const { responses } = error.response.data; + Object.keys(responses).map((key) => { + const { error, errorMessage } = responses[key]; + metadataSaveDetails[key] = { + saved: !error, + error: errorMessage, + }; + }); + }) ); } //send multiple update project sample requests in parallel @@ -217,22 +222,27 @@ export const saveMetadata = createAsyncThunk< createSamples({ projectId, body: chunk, - }).then((response) => { - const { errors } = response.data; - chunk - .map((item) => item.name) - .forEach((name) => { - const error = errors[name]; - if (error) { - metadataSaveDetails[name] = { - saved: false, - error: error, - }; - } else { - metadataSaveDetails[name] = { saved: true }; - } - }); }) + .then((response) => { + const { responses } = response.data; + Object.keys(responses).map((key) => { + const { error, errorMessage } = responses[key]; + metadataSaveDetails[key] = { + saved: !error, + error: errorMessage, + }; + }); + }) + .catch((error) => { + const { responses } = error.response.data; + Object.keys(responses).map((key) => { + const { error, errorMessage } = responses[key]; + metadataSaveDetails[key] = { + saved: !error, + error: errorMessage, + }; + }); + }) ); } //send multiple create project sample requests in parallel diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java index 9f65a069cc5..56aff1f3a98 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java @@ -20,7 +20,6 @@ import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.MetadataEntryModel; -import ca.corefacility.bioinformatics.irida.ria.web.exceptions.UIMetadataImportException; import ca.corefacility.bioinformatics.irida.ria.web.services.UIProjectSampleService; import ca.corefacility.bioinformatics.irida.service.ProjectService; import ca.corefacility.bioinformatics.irida.service.sample.MetadataTemplateService; @@ -29,7 +28,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -67,7 +65,6 @@ public void setUp() { join); when(projectService.addSampleToProjectWithoutEvent(any(Project.class), any(Sample.class), any(Boolean.class))).thenReturn(join); - when(messageSource.getMessage(eq("server.AddSample.success"), any(), any(Locale.class))).thenReturn("success"); } @Test @@ -87,50 +84,50 @@ public void testValidateNewSampleName() { } @Test - public void testCreateSample() throws UIMetadataImportException { + public void testCreateSample() { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null) }; - Map response = service.createSamples(requests, PROJECT_1_ID); + Map response = service.createSamples(requests, PROJECT_1_ID); assertTrue(response.isEmpty(), "Sample should be created"); } @Test - public void testCreateSampleWithOrganism() throws UIMetadataImportException { + public void testCreateSampleWithOrganism() { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, ORGANISM) }; - Map response = service.createSamples(requests, PROJECT_1_ID); + Map response = service.createSamples(requests, PROJECT_1_ID); assertTrue(response.isEmpty(), "Sample should be created"); } @Test - public void testCreateSampleWithDescription() throws UIMetadataImportException { + public void testCreateSampleWithDescription() { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, DESCRIPTION, null) }; - Map response = service.createSamples(requests, PROJECT_1_ID); + Map response = service.createSamples(requests, PROJECT_1_ID); assertTrue(response.isEmpty(), "Sample should be created"); } @Test - public void testCreateSampleWithOrganismAndDescription() throws UIMetadataImportException { + public void testCreateSampleWithOrganismAndDescription() { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, ORGANISM, DESCRIPTION, null) }; - Map response = service.createSamples(requests, PROJECT_1_ID); + Map response = service.createSamples(requests, PROJECT_1_ID); assertTrue(response.isEmpty(), "Sample should be created"); } @Test - public void testCreateSampleWithMetadata() throws UIMetadataImportException { + public void testCreateSampleWithMetadata() { List metadata = new ArrayList<>(); metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, null, metadata) }; - Map response = service.createSamples(requests, PROJECT_1_ID); + Map response = service.createSamples(requests, PROJECT_1_ID); assertTrue(response.isEmpty(), "Sample should be created"); } @Test - public void testUpdateSampleWithMetadata() throws UIMetadataImportException { + public void testUpdateSampleWithMetadata() { List metadata = new ArrayList<>(); metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); UpdateSampleRequest[] requests = { new UpdateSampleRequest(SAMPLE_1_ID, GOOD_NAME, null, null, metadata) }; - Map response = service.updateSamples(requests); + Map response = service.updateSamples(requests); assertTrue(response.isEmpty(), "Sample should be updated"); } } From 983aa639bf9e3ad34b76940df3fb3fee4a00f15b Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Thu, 8 Dec 2022 14:54:14 -0600 Subject: [PATCH 17/53] fixing tests --- .../services/UIProjectSampleServiceTest.java | 53 +++++++++++++------ 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java index 56aff1f3a98..067f88ebbbd 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIProjectSampleServiceTest.java @@ -16,9 +16,7 @@ import ca.corefacility.bioinformatics.irida.model.joins.impl.ProjectSampleJoin; import ca.corefacility.bioinformatics.irida.model.project.Project; import ca.corefacility.bioinformatics.irida.model.sample.Sample; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.CreateSampleRequest; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.SampleNameValidationResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.UpdateSampleRequest; +import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.*; import ca.corefacility.bioinformatics.irida.ria.web.ajax.projects.dto.MetadataEntryModel; import ca.corefacility.bioinformatics.irida.ria.web.services.UIProjectSampleService; import ca.corefacility.bioinformatics.irida.service.ProjectService; @@ -26,7 +24,6 @@ import ca.corefacility.bioinformatics.irida.service.sample.SampleService; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -86,29 +83,45 @@ public void testValidateNewSampleName() { @Test public void testCreateSample() { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null) }; - Map response = service.createSamples(requests, PROJECT_1_ID); - assertTrue(response.isEmpty(), "Sample should be created"); + Map responses = service.createSamples(requests, PROJECT_1_ID); + long errorCount = responses.entrySet() + .stream() + .filter(response -> ((CreateSampleResponse) response.getValue()).isError()) + .count(); + assertEquals(0, errorCount, "Sample should be created"); } @Test public void testCreateSampleWithOrganism() { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, ORGANISM) }; - Map response = service.createSamples(requests, PROJECT_1_ID); - assertTrue(response.isEmpty(), "Sample should be created"); + Map responses = service.createSamples(requests, PROJECT_1_ID); + long errorCount = responses.entrySet() + .stream() + .filter(response -> ((CreateSampleResponse) response.getValue()).isError()) + .count(); + assertEquals(0, errorCount, "Sample should be created"); } @Test public void testCreateSampleWithDescription() { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, DESCRIPTION, null) }; - Map response = service.createSamples(requests, PROJECT_1_ID); - assertTrue(response.isEmpty(), "Sample should be created"); + Map responses = service.createSamples(requests, PROJECT_1_ID); + long errorCount = responses.entrySet() + .stream() + .filter(response -> ((CreateSampleResponse) response.getValue()).isError()) + .count(); + assertEquals(0, errorCount, "Sample should be created"); } @Test public void testCreateSampleWithOrganismAndDescription() { CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, ORGANISM, DESCRIPTION, null) }; - Map response = service.createSamples(requests, PROJECT_1_ID); - assertTrue(response.isEmpty(), "Sample should be created"); + Map responses = service.createSamples(requests, PROJECT_1_ID); + long errorCount = responses.entrySet() + .stream() + .filter(response -> ((CreateSampleResponse) response.getValue()).isError()) + .count(); + assertEquals(0, errorCount, "Sample should be created"); } @Test @@ -117,8 +130,12 @@ public void testCreateSampleWithMetadata() { metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); CreateSampleRequest[] requests = { new CreateSampleRequest(GOOD_NAME, null, null, metadata) }; - Map response = service.createSamples(requests, PROJECT_1_ID); - assertTrue(response.isEmpty(), "Sample should be created"); + Map responses = service.createSamples(requests, PROJECT_1_ID); + long errorCount = responses.entrySet() + .stream() + .filter(response -> ((CreateSampleResponse) response.getValue()).isError()) + .count(); + assertEquals(0, errorCount, "Sample should be created"); } @Test @@ -127,7 +144,11 @@ public void testUpdateSampleWithMetadata() { metadata.add(new MetadataEntryModel("field1", "value1")); metadata.add(new MetadataEntryModel("field2", "value2")); UpdateSampleRequest[] requests = { new UpdateSampleRequest(SAMPLE_1_ID, GOOD_NAME, null, null, metadata) }; - Map response = service.updateSamples(requests); - assertTrue(response.isEmpty(), "Sample should be updated"); + Map responses = service.updateSamples(requests); + long errorCount = responses.entrySet() + .stream() + .filter(response -> ((UpdateSampleResponse) response.getValue()).isError()) + .count(); + assertEquals(0, errorCount, "Sample should be updated"); } } From 35768457b6d61bf35a628c774a982b57bf5675e8 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 9 Dec 2022 14:13:54 -0600 Subject: [PATCH 18/53] playing with a second web driver to have seperate users logged in simultanelously to test deleting a project during a metadata import --- .../listeners/IntegrationUITestListener.java | 33 +++++++++++++------ .../AbstractIridaUIITChromeDriver.java | 30 ++++++++++++++--- .../ProjectSampleMetadataImportPageIT.java | 26 +++++++++++++-- .../projects/ProjectSampleMetadataView.xml | 5 +-- 4 files changed, 75 insertions(+), 19 deletions(-) diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/junit5/listeners/IntegrationUITestListener.java b/src/test/java/ca/corefacility/bioinformatics/irida/junit5/listeners/IntegrationUITestListener.java index 80d7731762a..ce472458a41 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/junit5/listeners/IntegrationUITestListener.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/junit5/listeners/IntegrationUITestListener.java @@ -1,5 +1,13 @@ package ca.corefacility.bioinformatics.irida.junit5.listeners; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; + import org.apache.commons.io.FileUtils; import org.junit.platform.launcher.TestExecutionListener; import org.junit.platform.launcher.TestPlan; @@ -10,14 +18,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.time.Duration; -import java.util.HashMap; -import java.util.Map; - import static org.junit.jupiter.api.Assertions.fail; public class IntegrationUITestListener implements TestExecutionListener { @@ -25,12 +25,13 @@ public class IntegrationUITestListener implements TestExecutionListener { private static final Logger logger = LoggerFactory.getLogger(IntegrationUITestListener.class); public static final int DRIVER_TIMEOUT_IN_SECONDS = 3; - private static final File TEMP_DIRECTORY = new File(System.getProperty("java.io.tmpdir")); public static final File DOWNLOAD_DIRECTORY = new File(TEMP_DIRECTORY, "irida-test"); private static WebDriver driver; + private static WebDriver driver2; + /** * {@inheritDoc} */ @@ -58,6 +59,15 @@ public static WebDriver driver() { return driver; } + /** + * Get a reference to the second {@link WebDriver} used in the tests. + * + * @return the second instance of {@link WebDriver} used in the tests. + */ + public static WebDriver driver2() { + return driver2; + } + /** * Start the web driver. */ @@ -99,18 +109,20 @@ public static void startWebDriver() { if (seleniumUrl != null) { try { driver = new RemoteWebDriver(new URL(seleniumUrl), options); + driver2 = new RemoteWebDriver(new URL(seleniumUrl), options); } catch (MalformedURLException e) { logger.error("webdriver.selenium_url is malformed", e); fail("Could not connect to the remote web driver at following url: " + seleniumUrl); } } else { driver = new ChromeDriver(options); + driver2 = new ChromeDriver(options); } driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(DRIVER_TIMEOUT_IN_SECONDS)); + driver2.manage().timeouts().implicitlyWait(Duration.ofSeconds(DRIVER_TIMEOUT_IN_SECONDS)); } - public static void stopWebDriver() { // Clean up the download directory try { @@ -120,5 +132,6 @@ public static void stopWebDriver() { } driver.quit(); + driver2.quit(); } } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/AbstractIridaUIITChromeDriver.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/AbstractIridaUIITChromeDriver.java index a6d04707d49..0500629bec0 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/AbstractIridaUIITChromeDriver.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/AbstractIridaUIITChromeDriver.java @@ -89,8 +89,9 @@ public static WebDriver driver() { final String chromeDriverProp = System.getProperty(CHROMEDRIVER_PROP_KEY); System.setProperty(CHROMEDRIVER_PROP_KEY, Strings.isNullOrEmpty(chromeDriverProp) ? CHROMEDRIVER_LOCATION : chromeDriverProp); - logger.debug("Starting ChromeDriver for a single test class. Using `chromedriver` at '" - + System.getProperty(CHROMEDRIVER_PROP_KEY) + "'"); + logger.debug( + "Starting ChromeDriver for a single test class. Using `chromedriver` at '" + System.getProperty( + CHROMEDRIVER_PROP_KEY) + "'"); isSingleTest = true; IntegrationUITestListener.startWebDriver(); } @@ -99,6 +100,26 @@ public static WebDriver driver() { } + /** + * Get a reference to the {@link WebDriver} used in the tests. + * + * @return the instance of {@link WebDriver} used in the tests. + */ + public static WebDriver driver2() { + if (IntegrationUITestListener.driver2() == null) { + final String chromeDriverProp = System.getProperty(CHROMEDRIVER_PROP_KEY); + System.setProperty(CHROMEDRIVER_PROP_KEY, + Strings.isNullOrEmpty(chromeDriverProp) ? CHROMEDRIVER_LOCATION : chromeDriverProp); + logger.debug("Starting a second ChromeDriver for a single test class. Using `chromedriver` at '" + + System.getProperty(CHROMEDRIVER_PROP_KEY) + "'"); + isSingleTest = true; + IntegrationUITestListener.startWebDriver(); + } + + return IntegrationUITestListener.driver2(); + + } + /** * Method to use on any page to check to ensure that internationalization messages are being automatically loaded * onto the page. @@ -135,8 +156,9 @@ public void testFailed(ExtensionContext context, Throwable t) { final Path screenshot = Paths.get(takesScreenshot.getScreenshotAs(OutputType.FILE).toURI()); try { - final Path destination = Files.createTempFile("irida-" + context.getRequiredTestClass().getSimpleName() - + "#" + context.getRequiredTestMethod().getName(), ".png"); + final Path destination = Files.createTempFile( + "irida-" + context.getRequiredTestClass().getSimpleName() + "#" + + context.getRequiredTestMethod().getName(), ".png"); Files.move(screenshot, destination, StandardCopyOption.REPLACE_EXISTING); logger.info("Screenshot deposited at: [" + destination.toString() + "]"); } catch (final IOException e) { diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java index 88ce9a34c70..8c2fa75ac0c 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java @@ -7,16 +7,17 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.openqa.selenium.TimeoutException; import ca.corefacility.bioinformatics.irida.ria.integration.AbstractIridaUIITChromeDriver; import ca.corefacility.bioinformatics.irida.ria.integration.pages.LoginPage; +import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectDeletePage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSampleMetadataImportPage; import com.github.springtestdbunit.annotation.DatabaseSetup; import com.google.common.collect.ImmutableList; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; @DatabaseSetup("/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml") public class ProjectSampleMetadataImportPageIT extends AbstractIridaUIITChromeDriver { @@ -28,6 +29,7 @@ public class ProjectSampleMetadataImportPageIT extends AbstractIridaUIITChromeDr @BeforeEach public void init() { LoginPage.loginAsManager(driver()); + LoginPage.loginAsAdmin(driver2()); } @Test @@ -55,7 +57,6 @@ public void testGoodFileAndHeaders() { List formattedNumbers = page.getValuesForColumnByName("Numbers"); formattedNumbers.forEach(num -> assertTrue(values.contains(Double.valueOf(num)), "Found " + num + " that was not formatted properly")); - } @Test @@ -89,4 +90,23 @@ public void testFailedUpload() { page.goToReviewPage(); assertTrue(page.isAlertDisplayed(), "Validation message did not display"); } + + @Test + public void testFailedUploadByDeletingProject() { + //manager starts a metadata import + ProjectSampleMetadataImportPage page = ProjectSampleMetadataImportPage.goToPage(driver()); + page.uploadMetadataFile(GOOD_FILE_PATH); + page.selectSampleNameColumn(SAMPLE_NAME_COLUMN); + page.goToReviewPage(); + + //admin deletes project + ProjectDeletePage deleteProjectPage = ProjectDeletePage.goTo(driver2(), 1L); + deleteProjectPage.clickConfirm(); + deleteProjectPage.deleteProject(); + + //manager tries to complete metadata import + assertThrows(TimeoutException.class, () -> { + page.goToCompletePage(); + }); + } } diff --git a/src/test/resources/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml b/src/test/resources/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml index 5297b7456ed..9109c58113a 100644 --- a/src/test/resources/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml +++ b/src/test/resources/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml @@ -1,9 +1,9 @@ - + - + @@ -24,6 +24,7 @@ + From 2993915cef637cea1dd39064d5d5a15d3fe60290 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 9 Dec 2022 15:26:25 -0600 Subject: [PATCH 19/53] cleaning up unused, old code --- .../ria/utilities/SampleMetadataStorage.java | 80 ----- .../utilities/SampleMetadataStorageRow.java | 71 ----- .../web/errors/SavedMetadataException.java | 19 -- .../dto/SavedMetadataErrorResponse.java | 19 -- .../ProjectSampleMetadataAjaxController.java | 138 --------- .../services/UIMetadataFileImportService.java | 255 ---------------- .../web/services/UIMetadataImportService.java | 274 ------------------ .../UIMetadataFileImportServiceTest.java | 81 ------ ...ojectSampleMetadataAjaxControllerTest.java | 174 ----------- 9 files changed, 1111 deletions(-) delete mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/utilities/SampleMetadataStorage.java delete mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/utilities/SampleMetadataStorageRow.java delete mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/errors/SavedMetadataException.java delete mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/projects/dto/SavedMetadataErrorResponse.java delete mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/projects/metadata/ProjectSampleMetadataAjaxController.java delete mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIMetadataFileImportService.java delete mode 100644 src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIMetadataImportService.java delete mode 100644 src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIMetadataFileImportServiceTest.java delete mode 100644 src/test/java/ca/corefacility/bioinformatics/irida/web/controller/test/unit/projects/metadata/ProjectSampleMetadataAjaxControllerTest.java diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/utilities/SampleMetadataStorage.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/utilities/SampleMetadataStorage.java deleted file mode 100644 index d3b1f8c8566..00000000000 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/utilities/SampleMetadataStorage.java +++ /dev/null @@ -1,80 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.utilities; - -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * Used to store information relating to sample metadata during upload. - */ -public class SampleMetadataStorage { - private String sampleNameColumn; - private List headers; - private List rows; - - public void setSampleNameColumn(String sampleColumnName) { - this.sampleNameColumn = sampleColumnName; - } - - public void setHeaders(List headers) { - this.headers = headers; - } - - public String getSampleNameColumn() { - return sampleNameColumn; - } - - public List getHeaders() { - return headers; - } - - public List getRows() { - return rows; - } - - /** - * Returns the row from storage given the sample name and column name - * - * @param sampleName the name of the sample - * @param sampleNameColumn the header name of the sample column - * @return the value associated with the key - */ - public SampleMetadataStorageRow getRow(String sampleName, String sampleNameColumn) { - return rows.stream() - .filter(row -> sampleName.equals(row.getEntryValue(sampleNameColumn))) - .findFirst() - .orElse(null); - } - - public List getFoundRows() { - return rows == null ? - Collections.emptyList() : - rows.stream() - .filter((r) -> r != null && r.getFoundSampleId() != null) - .collect(Collectors.toList()); - } - - public void setRows(List rows) { - this.rows = rows; - } - - /** - * remove all rows - */ - public void removeRows() { - this.rows = null; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - SampleMetadataStorage that = (SampleMetadataStorage) o; - return Objects.equals(sampleNameColumn, that.sampleNameColumn) && Objects.equals(headers, that.headers) - && Objects.equals(rows, that.rows); - } - -} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/utilities/SampleMetadataStorageRow.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/utilities/SampleMetadataStorageRow.java deleted file mode 100644 index 867ac1243b1..00000000000 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/utilities/SampleMetadataStorageRow.java +++ /dev/null @@ -1,71 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.utilities; - -import java.util.Map; -import java.util.Objects; - -/** - * Used to store information relating to sample metadata rows during upload. - */ -public class SampleMetadataStorageRow { - - private Map entry; - private Long foundSampleId; - private String error; - private Boolean isSaved; - - public SampleMetadataStorageRow(Map entry) { - this.entry = entry; - } - - public Map getEntry() { - return entry; - } - - /** - * Returns the associated value to which the given key is mapped - * - * @param key of the map - * @return the value associated with the key - */ - public String getEntryValue(String key) { - return entry.get(key); - } - - public void setEntry(Map entry) { - this.entry = entry; - } - - public Long getFoundSampleId() { - return foundSampleId; - } - - public void setFoundSampleId(Long foundSampleId) { - this.foundSampleId = foundSampleId; - } - - public String getError() { - return error; - } - - public void setError(String error) { - this.error = error; - } - - public Boolean isSaved() { - return isSaved; - } - - public void setSaved(Boolean saved) { - isSaved = saved; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - SampleMetadataStorageRow that = (SampleMetadataStorageRow) o; - return Objects.equals(entry, that.entry) && Objects.equals(foundSampleId, that.foundSampleId); - } -} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/errors/SavedMetadataException.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/errors/SavedMetadataException.java deleted file mode 100644 index 373b3b195ad..00000000000 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/errors/SavedMetadataException.java +++ /dev/null @@ -1,19 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.web.errors; - -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorage; - -/** - * Returns the SampleMetadataStorage on error. - */ -public class SavedMetadataException extends Exception { - private SampleMetadataStorage storage; - - public SavedMetadataException(SampleMetadataStorage storage) { - super(); - this.storage = storage; - } - - public SampleMetadataStorage getStorage() { - return storage; - } -} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/projects/dto/SavedMetadataErrorResponse.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/projects/dto/SavedMetadataErrorResponse.java deleted file mode 100644 index c291440f4ca..00000000000 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/projects/dto/SavedMetadataErrorResponse.java +++ /dev/null @@ -1,19 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.web.projects.dto; - -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorage; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; - -/** - * Returns the SampleMetadataStorage on error. - */ -public class SavedMetadataErrorResponse extends AjaxResponse { - private SampleMetadataStorage storage; - - public SavedMetadataErrorResponse(SampleMetadataStorage storage) { - this.storage = storage; - } - - public SampleMetadataStorage getStorage() { - return storage; - } -} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/projects/metadata/ProjectSampleMetadataAjaxController.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/projects/metadata/ProjectSampleMetadataAjaxController.java deleted file mode 100644 index 1a9a655a0b9..00000000000 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/projects/metadata/ProjectSampleMetadataAjaxController.java +++ /dev/null @@ -1,138 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.web.projects.metadata; - -import java.util.*; - -import javax.servlet.http.HttpSession; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import ca.corefacility.bioinformatics.irida.model.project.Project; -import ca.corefacility.bioinformatics.irida.model.sample.Sample; -import ca.corefacility.bioinformatics.irida.model.sample.metadata.MetadataEntry; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorage; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxSuccessResponse; -import ca.corefacility.bioinformatics.irida.ria.web.errors.SavedMetadataException; -import ca.corefacility.bioinformatics.irida.ria.web.projects.dto.SavedMetadataErrorResponse; -import ca.corefacility.bioinformatics.irida.ria.web.services.UIMetadataImportService;; - -/** - * This class is designed to be used for bulk actions on {@link MetadataEntry} - * within a {@link Project}. - */ -@Controller -@RequestMapping("/ajax/projects/sample-metadata/upload") -public class ProjectSampleMetadataAjaxController { - private final UIMetadataImportService metadataImportService; - - @Autowired - public ProjectSampleMetadataAjaxController(UIMetadataImportService metadataImportService) { - this.metadataImportService = metadataImportService; - } - - /** - * Upload CSV or Excel file containing sample metadata and extract the - * headers. The file is stored in the session until the column that - * corresponds to a {@link Sample} identifier has been sent. - * - * @param session - * {@link HttpSession} - * @param projectId - * {@link Long} identifier for the current {@link Project} - * @param file - * {@link MultipartFile} The csv or excel file containing the - * metadata. - * @return {@link SampleMetadataStorage} which includes a {@link List} of - * headers and rows from the csv or excel file. - * @throws Exception - * if there is an error reading the file - */ - @PostMapping("/file") - @ResponseBody - public ResponseEntity createProjectSampleMetadata(HttpSession session, - @RequestParam Long projectId, @RequestParam("file") MultipartFile file) throws Exception { - return ResponseEntity.ok(metadataImportService.createProjectSampleMetadata(session, projectId, file)); - } - - /** - * Add the metadata to specific {@link Sample} based on the selected column - * to correspond to the {@link Sample} id. - * - * @param session - * {@link HttpSession}. - * @param projectId - * {@link Long} identifier for the current {@link Project}. - * @param sampleNameColumn - * {@link String} the header to used to represent the - * {@link Sample} identifier. - * @return a complete message. - */ - @PutMapping("/setSampleColumn") - @ResponseBody - public ResponseEntity setProjectSampleMetadataSampleId(HttpSession session, - @RequestParam Long projectId, @RequestParam String sampleNameColumn) { - return ResponseEntity.ok(new AjaxSuccessResponse( - metadataImportService.setProjectSampleMetadataSampleId(session, projectId, sampleNameColumn))); - } - - /** - * Save uploaded metadata from the session into IRIDA. - * - * @param locale - * {@link Locale} of the current user. - * @param session - * {@link HttpSession} - * @param projectId - * {@link Long} identifier for the current project - * @param sampleNames - * {@link List} of {@link String} sample names - * @return {@link String} message of how many samples were created and/or - * updated. - */ - @PostMapping("/save") - @ResponseBody - public ResponseEntity saveProjectSampleMetadata(Locale locale, HttpSession session, - @RequestParam Long projectId, @RequestParam List sampleNames) { - try { - return ResponseEntity.ok(new AjaxSuccessResponse( - metadataImportService.saveProjectSampleMetadata(locale, session, projectId, sampleNames))); - } catch (SavedMetadataException e) { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new SavedMetadataErrorResponse(e.getStorage())); - } - } - - /** - * Clear any uploaded sample metadata stored into the session. - * - * @param session - * {@link HttpSession} - * @param projectId - * identifier for the {@link Project} currently uploaded metadata - * to. - */ - @DeleteMapping("/clear") - public void clearProjectSampleMetadata(HttpSession session, @RequestParam Long projectId) { - metadataImportService.clearProjectSampleMetadata(session, projectId); - } - - /** - * Get the currently stored metadata. - * - * @param session - * {@link HttpSession} - * @param projectId - * {@link Long} identifier for the current {@link Project} - * @return the currently stored {@link SampleMetadataStorage} - */ - @GetMapping("/getMetadata") - @ResponseBody - public ResponseEntity getProjectSampleMetadata(HttpSession session, - @RequestParam Long projectId) { - return ResponseEntity.ok(metadataImportService.getProjectSampleMetadata(session, projectId)); - } -} diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIMetadataFileImportService.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIMetadataFileImportService.java deleted file mode 100644 index c79b32134c8..00000000000 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIMetadataFileImportService.java +++ /dev/null @@ -1,255 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.web.services; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.*; - -import org.apache.commons.csv.CSVFormat; -import org.apache.commons.csv.CSVParser; -import org.apache.commons.csv.CSVRecord; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.ss.usermodel.*; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import ca.corefacility.bioinformatics.irida.exceptions.EntityNotFoundException; -import ca.corefacility.bioinformatics.irida.exceptions.MetadataImportFileTypeNotSupportedError; -import ca.corefacility.bioinformatics.irida.model.project.Project; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorage; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorageRow; -import ca.corefacility.bioinformatics.irida.service.ProjectService; -import ca.corefacility.bioinformatics.irida.service.sample.SampleService; - -import com.google.common.base.Strings; - -/** - * UI service to handle parsing metadata files so they can be saved to the - * session. - */ -@Component -public class UIMetadataFileImportService { - - private static final Logger logger = LoggerFactory.getLogger(UIMetadataFileImportService.class); - - private final ProjectService projectService; - private final SampleService sampleService; - - @Autowired - public UIMetadataFileImportService(ProjectService projectService, SampleService sampleService) { - this.projectService = projectService; - this.sampleService = sampleService; - } - - /** - * Parse metadata from an csv file. - * - * @param projectId - * {@link Long} The project identifier. - * @param inputStream - * The inputStream of the csv file. - * @return {@link SampleMetadataStorage} contains the metadata from file. - * @throws IOException - * thrown if the extension does not exist. - */ - public SampleMetadataStorage parseCSV(Long projectId, InputStream inputStream) throws IOException { - SampleMetadataStorage storage = new SampleMetadataStorage(); - - CSVParser parser = CSVParser.parse(inputStream, StandardCharsets.UTF_8, - CSVFormat.RFC4180.withFirstRecordAsHeader().withTrim().withIgnoreEmptyLines()); - List rows = new ArrayList<>(); - - // save headers - Map headersSet = parser.getHeaderMap(); - List headersList = new ArrayList<>(headersSet.keySet()); - storage.setHeaders(headersList); - - // save data - for (CSVRecord row : parser) { - Map rowMap = new HashMap<>(); - for (String key : row.toMap().keySet()) { - String value = row.toMap().get(key); - rowMap.put(key, value); - } - rows.add(new SampleMetadataStorageRow(rowMap)); - } - storage.setRows(rows); - storage.setSampleNameColumn(findColumnName(projectId, rows)); - parser.close(); - - return storage; - } - - /** - * Parse metadata from an excel file. - * - * @param projectId - * {@link Long} The project identifier. - * @param inputStream - * The inputStream of the excel file. - * @param extension - * The extension of the excel file. - * @return {@link SampleMetadataStorage} contains the metadata from file. - * @throws IOException - * thrown if the extension does not exist. - */ - public SampleMetadataStorage parseExcel(Long projectId, InputStream inputStream, String extension) - throws IOException { - SampleMetadataStorage storage = new SampleMetadataStorage(); - Workbook workbook = null; - - // Check the type of workbook - switch (extension) { - case "xlsx": - workbook = new XSSFWorkbook(inputStream); - break; - case "xls": - workbook = new HSSFWorkbook(inputStream); - break; - default: - // Should never reach here as the uploader limits to .csv, .xlsx and - // .xlx files. - throw new MetadataImportFileTypeNotSupportedError(extension); - } - - // Only look at the first sheet in the workbook as this should be the - // file we want. - Sheet sheet = workbook.getSheetAt(0); - Iterator rowIterator = sheet.iterator(); - - List headers = getWorkbookHeaders(rowIterator.next()); - storage.setHeaders(headers); - - // Get the metadata out of the table. - List rows = new ArrayList<>(); - while (rowIterator.hasNext()) { - Map rowMap = new HashMap<>(); - Row row = rowIterator.next(); - Iterator cellIterator = row.cellIterator(); - while (cellIterator.hasNext()) { - Cell cell = cellIterator.next(); - - int columnIndex = cell.getColumnIndex(); - if (columnIndex < headers.size()) { - String header = headers.get(columnIndex); - - if (!Strings.isNullOrEmpty(header)) { - // Need to ignore empty headers. - if (cell.getCellType().equals(CellType.NUMERIC)) { - /* - * This is a special handler for number cells. It - * was requested that numbers keep their formatting - * from their excel files. E.g. 2.222222 with - * formatting for 2 decimal places will be saved as - * 2.22. - */ - DataFormatter formatter = new DataFormatter(); - String value = formatter.formatCellValue(cell); - rowMap.put(header, value); - } else { - rowMap.put(header, cell.getStringCellValue()); - } - } - } - } - rows.add(new SampleMetadataStorageRow(rowMap)); - } - storage.setRows(rows); - storage.setSampleNameColumn(findColumnName(projectId, rows)); - - if (extension.equals("xlsx")) { - workbook.close(); - } - - return storage; - } - - /** - * Extract the headers from an excel file. - * - * @param row - * {@link Row} First row from the excel file. - * @return {@link List} of {@link String} header values. - */ - private List getWorkbookHeaders(Row row) { - // We want to return a list of the table headers back to the UI. - List headers = new ArrayList<>(); - - // Get the column headers - Iterator headerIterator = row.cellIterator(); - while (headerIterator.hasNext()) { - Cell headerCell = headerIterator.next(); - CellType cellType = headerCell.getCellType(); - - String headerValue; - if (cellType.equals(CellType.STRING)) { - headerValue = headerCell.getStringCellValue().trim(); - } else { - headerValue = String.valueOf(headerCell.getNumericCellValue()).trim(); - } - - // Leave empty headers for now, we will remove those columns later. - headers.add(headerValue); - } - return headers; - } - - /** - * Find the sample name column, given the rows of a file. - * - * @param projectId - * {@link Long} The project identifier. - * @param rows - * {@link Row} The rows from the excel file. - * @return {@link String} column name. - */ - private String findColumnName(Long projectId, List rows) { - String columnName = null; - int col = 0; - int numRows = rows.size(); - - while (columnName == null && col < numRows) { - columnName = findColumnNameInRow(projectId, rows.get(col)); - col++; - } - - return columnName; - } - - /** - * Find the sample name column, given a row of a file. - * - * @param projectId - * {@link Long} The project identifier. - * @param row - * {@link Row} A row from the excel file. - * @return {@link String} column name. - */ - private String findColumnNameInRow(Long projectId, SampleMetadataStorageRow row) { - String columnName = null; - Project project = projectService.read(projectId); - Iterator> iterator = row.getEntry().entrySet().iterator(); - - while (iterator.hasNext() && columnName == null) { - String key = null; - String value = null; - try { - Map.Entry entry = iterator.next(); - key = entry.getKey(); - value = entry.getValue(); - - if (sampleService.getSampleBySampleName(project, value) != null) { - columnName = key; - } - } catch (EntityNotFoundException entityNotFoundException) { - logger.trace("Sample " + value + " in project " + project.getId() + " is not found.", - entityNotFoundException); - } - } - - return columnName; - } -} \ No newline at end of file diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIMetadataImportService.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIMetadataImportService.java deleted file mode 100644 index 6e7520fe6ce..00000000000 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/services/UIMetadataImportService.java +++ /dev/null @@ -1,274 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.web.services; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; - -import javax.servlet.http.HttpSession; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.MessageSource; -import org.springframework.stereotype.Component; -import org.springframework.web.multipart.MultipartFile; - -import ca.corefacility.bioinformatics.irida.exceptions.EntityNotFoundException; -import ca.corefacility.bioinformatics.irida.exceptions.MetadataImportFileTypeNotSupportedError; -import ca.corefacility.bioinformatics.irida.model.project.Project; -import ca.corefacility.bioinformatics.irida.model.sample.MetadataTemplateField; -import ca.corefacility.bioinformatics.irida.model.sample.Sample; -import ca.corefacility.bioinformatics.irida.model.sample.metadata.MetadataEntry; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorage; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorageRow; -import ca.corefacility.bioinformatics.irida.ria.web.errors.SavedMetadataException; -import ca.corefacility.bioinformatics.irida.service.ProjectService; -import ca.corefacility.bioinformatics.irida.service.sample.MetadataTemplateService; -import ca.corefacility.bioinformatics.irida.service.sample.SampleService; - -import com.google.common.collect.ImmutableList; -import com.google.common.io.Files; - -/** - * UI service to handle importing metadata files, so they can be saved to the - * session. - */ -@Component -public class UIMetadataImportService { - - private static final Logger logger = LoggerFactory.getLogger(UIMetadataImportService.class); - private final MessageSource messageSource; - private final ProjectService projectService; - private final SampleService sampleService; - private final MetadataTemplateService metadataTemplateService; - private final UIMetadataFileImportService metadataFileImportService; - - @Autowired - public UIMetadataImportService(MessageSource messageSource, ProjectService projectService, - SampleService sampleService, MetadataTemplateService metadataTemplateService, - UIMetadataFileImportService metadataFileImportService) { - this.messageSource = messageSource; - this.projectService = projectService; - this.sampleService = sampleService; - this.metadataTemplateService = metadataTemplateService; - this.metadataFileImportService = metadataFileImportService; - } - - /** - * Upload CSV or Excel file containing sample metadata and extract the - * headers. The file is stored in the session until the column that - * corresponds to a {@link Sample} identifier has been sent. - * - * @param session - * {@link HttpSession} - * @param projectId - * {@link Long} identifier for the current {@link Project} - * @param file - * {@link MultipartFile} The csv or excel file containing the - * metadata. - * @return {@link Map} of headers and rows from the csv or excel file for - * the user to select the header corresponding the {@link Sample} - * identifier. - * @throws Exception - * if there is an error reading the file - */ - public SampleMetadataStorage createProjectSampleMetadata(HttpSession session, Long projectId, MultipartFile file) - throws Exception { - // We want to return a list of the table headers back to the UI. - SampleMetadataStorage storage = new SampleMetadataStorage(); - try (InputStream inputStream = file.getInputStream()) { - String filename = file.getOriginalFilename(); - String extension = Files.getFileExtension(filename); - - // Check the file type - switch (extension) { - case "csv": - storage = metadataFileImportService.parseCSV(projectId, inputStream); - break; - case "xlsx": - case "xls": - storage = metadataFileImportService.parseExcel(projectId, inputStream, extension); - break; - default: - // Should never reach here as the uploader limits to .csv, .xlsx - // and .xlx files. - throw new MetadataImportFileTypeNotSupportedError(extension); - } - - } catch (FileNotFoundException e) { - logger.debug("No file found for uploading an excel file of metadata."); - throw e; - } catch (IOException e) { - logger.error("Error opening file" + file.getOriginalFilename()); - throw e; - } - - session.setAttribute("pm-" + projectId, storage); - return storage; - } - - /** - * Add the metadata to specific {@link Sample} based on the selected column - * to correspond to the {@link Sample} id. - * - * @param session - * {@link HttpSession}. - * @param projectId - * {@link Long} identifier for the current {@link Project}. - * @param sampleNameColumn - * {@link String} the header to used to represent the - * {@link Sample} identifier. - * @return {@link String} containing a complete message. - */ - public String setProjectSampleMetadataSampleId(HttpSession session, Long projectId, String sampleNameColumn) { - // Attempt to get the metadata from the sessions - SampleMetadataStorage stored = (SampleMetadataStorage) session.getAttribute("pm-" + projectId); - - if (stored != null) { - stored.setSampleNameColumn(sampleNameColumn); - Project project = projectService.read(projectId); - List rows = stored.getRows(); - List updatedRows = new ArrayList<>(); - - // Get the metadata out of the table. - for (SampleMetadataStorageRow row : rows) { - try { - // If this throws an error than the sample does not exist. - Sample sample = sampleService.getSampleBySampleName(project, row.getEntryValue(sampleNameColumn)); - row.setFoundSampleId(sample.getId()); - } catch (EntityNotFoundException e) { - row.setFoundSampleId(null); - } - updatedRows.add(row); - } - stored.setRows(updatedRows); - } - - return "complete"; - } - - /** - * Save uploaded metadata - * - * @param locale - * {@link Locale} of the current user. - * @param session - * {@link HttpSession} - * @param projectId - * {@link Long} identifier for the current project - * @param sampleNames - * {@link List} of {@link String} sample names - * @return {@link String} that returns a message and potential errors. - * @throws SavedMetadataException - * if there is an error saving the metadata - */ - public String saveProjectSampleMetadata(Locale locale, HttpSession session, Long projectId, - List sampleNames) throws SavedMetadataException { - List DEFAULT_HEADERS = ImmutableList.of( - messageSource.getMessage("project.samples.table.sample-id", new Object[] {}, locale), - messageSource.getMessage("project.samples.table.id", new Object[] {}, locale), - messageSource.getMessage("project.samples.table.modified-date", new Object[] {}, locale), - messageSource.getMessage("project.samples.table.modified", new Object[] {}, locale), - messageSource.getMessage("project.samples.table.created-date", new Object[] {}, locale), - messageSource.getMessage("project.samples.table.created", new Object[] {}, locale), - messageSource.getMessage("project.samples.table.coverage", new Object[] {}, locale), - messageSource.getMessage("project.samples.table.project-id", new Object[] {}, locale)); - Project project = projectService.read(projectId); - SampleMetadataStorage stored = (SampleMetadataStorage) session.getAttribute("pm-" + projectId); - boolean hasErrors = false; - String message; - int samplesUpdatedCount = 0; - int samplesCreatedCount = 0; - - if (sampleNames != null) { - String sampleNameColumn = stored.getSampleNameColumn(); - - for (String sampleName : sampleNames) { - try { - Set metadataEntrySet = new HashSet<>(); - SampleMetadataStorageRow row = stored.getRow(sampleName, sampleNameColumn); - String name = row.getEntryValue(sampleNameColumn); - Sample sample = null; - - if (row.getFoundSampleId() != null) { - sample = sampleService.getSampleBySampleName(project, name); - samplesUpdatedCount++; - } else { - sample = new Sample(name); - projectService.addSampleToProject(project, sample, true); - samplesCreatedCount++; - } - - // Need to overwrite duplicate keys - for (Map.Entry entry : row.getEntry().entrySet()) { - // Make sure we are not saving non-metadata items. - if (!DEFAULT_HEADERS.contains(entry.getKey()) && !sampleNameColumn.contains(entry.getKey())) { - MetadataTemplateField key = metadataTemplateService - .readMetadataFieldByLabel(entry.getKey()); - - if (key == null) { - key = metadataTemplateService - .saveMetadataField(new MetadataTemplateField(entry.getKey(), "text")); - } - - metadataEntrySet.add(new MetadataEntry(entry.getValue(), "text", key)); - } - } - - // Save metadata back to the sample - sampleService.mergeSampleMetadata(sample, metadataEntrySet); - row.setSaved(true); - } catch (Exception e) { - SampleMetadataStorageRow row = stored.getRow(sampleName, sampleNameColumn); - row.setError(e.getMessage()); - row.setSaved(false); - hasErrors = true; - } - } - } - - if (hasErrors) { - throw new SavedMetadataException(stored); - } - - message = ((samplesUpdatedCount == 1) - ? messageSource.getMessage("server.metadataimport.results.save.success.single-updated", - new Object[] { samplesUpdatedCount }, locale) - : messageSource.getMessage("server.metadataimport.results.save.success.multiple-updated", - new Object[] { samplesUpdatedCount }, locale)); - message += (samplesCreatedCount == 1) - ? messageSource.getMessage("server.metadataimport.results.save.success.single-created", - new Object[] { samplesCreatedCount }, locale) - : messageSource.getMessage("server.metadataimport.results.save.success.multiple-created", - new Object[] { samplesCreatedCount }, locale); - - return message; - } - - /** - * Clear any uploaded sample metadata stored into the session. - * - * @param session - * {@link HttpSession} - * @param projectId - * identifier for the {@link Project} currently uploaded metadata - * to. - */ - public void clearProjectSampleMetadata(HttpSession session, Long projectId) { - session.removeAttribute("pm-" + projectId); - } - - /** - * Get the currently stored metadata. - * - * @param session - * {@link HttpSession} - * @param projectId - * {@link Long} identifier for the current {@link Project} - * @return the currently stored {@link SampleMetadataStorage} - */ - public SampleMetadataStorage getProjectSampleMetadata(HttpSession session, Long projectId) { - return (SampleMetadataStorage) session.getAttribute("pm-" + projectId); - } -} diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIMetadataFileImportServiceTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIMetadataFileImportServiceTest.java deleted file mode 100644 index 499625e15ba..00000000000 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/unit/web/services/UIMetadataFileImportServiceTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package ca.corefacility.bioinformatics.irida.ria.unit.web.services; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; -import org.springframework.http.MediaType; -import org.springframework.mock.web.MockMultipartFile; - -import ca.corefacility.bioinformatics.irida.model.project.Project; -import ca.corefacility.bioinformatics.irida.model.sample.Sample; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorage; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorageRow; -import ca.corefacility.bioinformatics.irida.ria.web.services.UIMetadataFileImportService; -import ca.corefacility.bioinformatics.irida.service.ProjectService; -import ca.corefacility.bioinformatics.irida.service.sample.SampleService; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.when; - -public class UIMetadataFileImportServiceTest { - private final Long PROJECT_ID = 1L; - private final Project project = new Project(); - private final Sample sample = new Sample(); - private UIMetadataFileImportService service; - private ProjectService projectService; - private SampleService sampleService; - - @BeforeEach - public void setUp() { - this.projectService = Mockito.mock(ProjectService.class); - this.sampleService = Mockito.mock(SampleService.class); - service = new UIMetadataFileImportService(projectService, sampleService); - } - - @Test - public void parseCSV() { - try { - SampleMetadataStorage expected_storage = getSampleMetadataStorage(); - - project.setId(PROJECT_ID); - when(projectService.read(PROJECT_ID)).thenReturn(project); - when(sampleService.getSampleBySampleName(project, "value2")).thenReturn(sample); - - MockMultipartFile file = new MockMultipartFile("file", "test.csv", MediaType.TEXT_PLAIN_VALUE, - "header1,header2,header3\nvalue1,value2,value3".getBytes()); - - byte[] byteArr = file.getBytes(); - InputStream inputStream = new ByteArrayInputStream(byteArr); - SampleMetadataStorage actual_storage = service.parseCSV(PROJECT_ID, inputStream); - assertEquals(actual_storage, expected_storage); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private SampleMetadataStorage getSampleMetadataStorage() { - SampleMetadataStorage expected_storage = new SampleMetadataStorage(); - List headers_list = new ArrayList<>(); - headers_list.add("header1"); - headers_list.add("header2"); - headers_list.add("header3"); - expected_storage.setHeaders(headers_list); - List rows = new ArrayList<>(); - Map rowMap = new HashMap<>(); - rowMap.put("header1", "value1"); - rowMap.put("header2", "value2"); - rowMap.put("header3", "value3"); - rows.add(new SampleMetadataStorageRow(rowMap)); - expected_storage.setRows(rows); - expected_storage.setSampleNameColumn("header2"); - return expected_storage; - } -} diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/web/controller/test/unit/projects/metadata/ProjectSampleMetadataAjaxControllerTest.java b/src/test/java/ca/corefacility/bioinformatics/irida/web/controller/test/unit/projects/metadata/ProjectSampleMetadataAjaxControllerTest.java deleted file mode 100644 index f9be7db47fd..00000000000 --- a/src/test/java/ca/corefacility/bioinformatics/irida/web/controller/test/unit/projects/metadata/ProjectSampleMetadataAjaxControllerTest.java +++ /dev/null @@ -1,174 +0,0 @@ -package ca.corefacility.bioinformatics.irida.web.controller.test.unit.projects.metadata; - -import java.util.*; - -import javax.servlet.http.HttpSession; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.context.MessageSource; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.mock.web.MockMultipartFile; - -import ca.corefacility.bioinformatics.irida.model.project.Project; -import ca.corefacility.bioinformatics.irida.model.sample.Sample; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorage; -import ca.corefacility.bioinformatics.irida.ria.utilities.SampleMetadataStorageRow; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxResponse; -import ca.corefacility.bioinformatics.irida.ria.web.ajax.dto.ajax.AjaxSuccessResponse; -import ca.corefacility.bioinformatics.irida.ria.web.projects.metadata.ProjectSampleMetadataAjaxController; -import ca.corefacility.bioinformatics.irida.ria.web.services.UIMetadataFileImportService; -import ca.corefacility.bioinformatics.irida.ria.web.services.UIMetadataImportService; -import ca.corefacility.bioinformatics.irida.service.ProjectService; -import ca.corefacility.bioinformatics.irida.service.sample.MetadataTemplateService; -import ca.corefacility.bioinformatics.irida.service.sample.SampleService; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.*; - -public class ProjectSampleMetadataAjaxControllerTest { - private ProjectSampleMetadataAjaxController controller; - private UIMetadataImportService metadataImportService; - private MessageSource messageSource; - private ProjectService projectService; - private SampleService sampleService; - private MetadataTemplateService metadataTemplateService; - private UIMetadataFileImportService metadataFileImportService; - private HttpSession session; - - private final Long PROJECT_ID = 1L; - private final Long SAMPLE_ID = 1L; - private final String SAMPLE_NAME = "value2"; - private final String SAMPLE_NAME_COLUMN = "header2"; - - @BeforeEach - public void setUp() { - session = mock(HttpSession.class); - messageSource = mock(MessageSource.class); - projectService = mock(ProjectService.class); - sampleService = mock(SampleService.class); - metadataTemplateService = mock(MetadataTemplateService.class); - metadataFileImportService = new UIMetadataFileImportService(projectService, sampleService); - metadataImportService = new UIMetadataImportService(messageSource, projectService, sampleService, - metadataTemplateService, metadataFileImportService); - controller = new ProjectSampleMetadataAjaxController(metadataImportService); - } - - private SampleMetadataStorage createSampleMetadataStorage() { - SampleMetadataStorage expected_storage = new SampleMetadataStorage(); - List headers_list = new ArrayList<>(); - headers_list.add("header1"); - headers_list.add("header2"); - headers_list.add("header3"); - expected_storage.setHeaders(headers_list); - List rows = new ArrayList<>(); - Map rowMap = new HashMap<>(); - rowMap.put("header1", "value1"); - rowMap.put("header2", "value2"); - rowMap.put("header3", "value3"); - rows.add(new SampleMetadataStorageRow(rowMap)); - expected_storage.setRows(rows); - expected_storage.setSampleNameColumn(SAMPLE_NAME_COLUMN); - return expected_storage; - } - - private Sample createSample() { - Sample sample = new Sample(); - sample.setSampleName(SAMPLE_NAME); - sample.setId(SAMPLE_ID); - return sample; - } - - private Project createProject() { - Project project = new Project(); - project.setId(PROJECT_ID); - return project; - } - - @Test - public void createProjectSampleMetadataTest() throws Exception { - MockMultipartFile file = new MockMultipartFile("file", "test.csv", MediaType.TEXT_PLAIN_VALUE, - "header1,header2,header3\nvalue1,value2,value3".getBytes()); - SampleMetadataStorage stored = createSampleMetadataStorage(); - - when(session.getAttribute("pm-" + PROJECT_ID)).thenReturn(stored); - - ResponseEntity response = controller.createProjectSampleMetadata(session, PROJECT_ID, - file); - stored = (SampleMetadataStorage) session.getAttribute("pm-" + PROJECT_ID); - - assertEquals(response.getStatusCode(), HttpStatus.OK, "Receive an 200 OK response"); - assertEquals(stored.getRows().size(), 1, "Sample name columns is saved"); - assertEquals(stored.getHeaders().size(), 3, "Sample is saved"); - } - - @Test - public void setProjectSampleMetadataSampleIdTest() { - SampleMetadataStorage stored = createSampleMetadataStorage(); - Sample sample = createSample(); - Project project = createProject(); - - when(session.getAttribute("pm-" + PROJECT_ID)).thenReturn(stored); - when(projectService.read(project.getId())).thenReturn(project); - when(sampleService.getSampleBySampleName(project, sample.getSampleName())).thenReturn(sample); - - ResponseEntity response = controller.setProjectSampleMetadataSampleId(session, PROJECT_ID, - SAMPLE_NAME_COLUMN); - stored = (SampleMetadataStorage) session.getAttribute("pm-" + PROJECT_ID); - - assertEquals(response.getStatusCode(), HttpStatus.OK, "Receive an 200 OK response"); - assertEquals(((AjaxSuccessResponse) response.getBody()).getMessage(), "complete", "Receive a complete message"); - assertEquals(stored.getSampleNameColumn(), SAMPLE_NAME_COLUMN, "Sample name columns is saved"); - assertEquals((long) stored.getRow(sample.getSampleName(), SAMPLE_NAME_COLUMN).getFoundSampleId(), - (long) sample.getId(), "Found sample id is saved"); - } - - @Test - public void saveProjectSampleMetadataTest() { - Sample sample = createSample(); - List sampleNames = List.of(sample.getSampleName()); - Locale locale = new Locale("en"); - SampleMetadataStorage stored = createSampleMetadataStorage(); - when(session.getAttribute("pm-" + PROJECT_ID)).thenReturn(stored); - when(messageSource.getMessage("project.samples.table.sample-id", new Object[] {}, locale)) - .thenReturn("Sample Id"); - when(messageSource.getMessage("project.samples.table.id", new Object[] {}, locale)).thenReturn("ID"); - when(messageSource.getMessage("project.samples.table.modified-date", new Object[] {}, locale)) - .thenReturn("Modified Date"); - when(messageSource.getMessage("project.samples.table.modified", new Object[] {}, locale)) - .thenReturn("Modified On"); - when(messageSource.getMessage("project.samples.table.created-date", new Object[] {}, locale)) - .thenReturn("Created Date"); - when(messageSource.getMessage("project.samples.table.created", new Object[] {}, locale)) - .thenReturn("Created On"); - when(messageSource.getMessage("project.samples.table.coverage", new Object[] {}, locale)) - .thenReturn("Coverage"); - when(messageSource.getMessage("project.samples.table.project-id", new Object[] {}, locale)) - .thenReturn("Project ID"); - - ResponseEntity response = controller.saveProjectSampleMetadata(locale, session, PROJECT_ID, - sampleNames); - stored = (SampleMetadataStorage) session.getAttribute("pm-" + PROJECT_ID); - - assertEquals(response.getStatusCode(), HttpStatus.OK, "Receive an 200 OK response"); - assertTrue(stored.getRow(sample.getSampleName(), SAMPLE_NAME_COLUMN).isSaved(), "Sample is saved"); - } - - @Test - public void clearProjectSampleMetadataTest() { - controller.clearProjectSampleMetadata(session, PROJECT_ID); - - verify(session, times(1)).removeAttribute("pm-" + PROJECT_ID); - } - - @Test - public void getProjectSampleMetadataTest() { - ResponseEntity response = controller.getProjectSampleMetadata(session, PROJECT_ID); - - assertEquals(response.getStatusCode(), HttpStatus.OK, "Receive an 200 OK response"); - verify(session, times(1)).getAttribute("pm-" + PROJECT_ID); - } -} From 2f65a56f8346cb912e0f42cf5fa0c5efd80d5d15 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 12 Dec 2022 12:20:40 -0600 Subject: [PATCH 20/53] setting up delete samples during import test --- .../irida/ria/integration/CartPageIT.java | 64 +- .../pages/projects/ProjectSamplesPage.java | 1048 +++++++++-------- .../pipelines/AssemblyPipelinePageIT.java | 2 +- .../pipelines/BioHanselPipelinePageIT.java | 2 +- .../PipelinesPhylogenomicsPageIT.java | 2 +- .../integration/projects/CreateProjectIT.java | 2 +- .../projects/NcbiExportPageIT.java | 2 +- .../ProjectSampleMetadataImportPageIT.java | 23 +- .../projects/ProjectSamplesPageIT.java | 54 +- .../projects/ProjectShareSamplesIT.java | 22 +- 10 files changed, 630 insertions(+), 591 deletions(-) diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/CartPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/CartPageIT.java index e718bba1839..d2482371a3b 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/CartPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/CartPageIT.java @@ -1,5 +1,18 @@ package ca.corefacility.bioinformatics.irida.ria.integration; +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.JavascriptExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + import ca.corefacility.bioinformatics.irida.ria.integration.components.FastQCModal; import ca.corefacility.bioinformatics.irida.ria.integration.components.SampleDetailsViewer; import ca.corefacility.bioinformatics.irida.ria.integration.pages.LoginPage; @@ -7,20 +20,9 @@ import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSamplesPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.TableSummary; import ca.corefacility.bioinformatics.irida.ria.integration.utilities.FileUtilities; + import com.github.springtestdbunit.annotation.DatabaseSetup; import com.google.common.collect.ImmutableList; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.openqa.selenium.JavascriptExecutor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; import static org.junit.jupiter.api.Assertions.*; @@ -101,7 +103,7 @@ public void testCartPageAsUser() { LoginPage.loginAsUser(driver()); driver().manage().window().maximize(); // Add some samples to the cart and test to see if they get displayed/ - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); SampleDetailsViewer sampleDetailsViewer = SampleDetailsViewer.getSampleDetails(driver()); @@ -159,7 +161,8 @@ public void testCartPageAsUser() { assertEquals(sampleName, sampleDetailsViewer.getSampleName(), "Should be viewing the proper sample"); assertEquals(projectName, sampleDetailsViewer.getProjectName(), "Should have proper project name displayed for sample"); - assertEquals("Jul 19, 2013, 2:18 PM", sampleDetailsViewer.getCreatedDateForSample(), "Should display the correct created date"); + assertEquals("Jul 19, 2013, 2:18 PM", sampleDetailsViewer.getCreatedDateForSample(), + "Should display the correct created date"); sampleDetailsViewer.clickMetadataTabLink(); assertFalse(sampleDetailsViewer.addNewMetadataButtonVisible()); @@ -214,7 +217,8 @@ public void testCartPageAsUser() { sampleDetailsViewer.clickRemoveSampleFromCartButtonCartPage(); - assertFalse(sampleDetailsViewer.sampleDetailsViewerVisible(), "The sample details viewer should not be displayed as the sample was removed from the cart"); + assertFalse(sampleDetailsViewer.sampleDetailsViewerVisible(), + "The sample details viewer should not be displayed as the sample was removed from the cart"); // Test removing a sample from the project page.removeSampleFromCart(0); @@ -229,7 +233,7 @@ public void testCartPageAsAdmin() { LoginPage.loginAsAdmin(driver()); driver().manage().window().maximize(); // Add some samples to the cart and test to see if they get displayed/ - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); SampleDetailsViewer sampleDetailsViewer = SampleDetailsViewer.getSampleDetails(driver()); // Test that the add/remove buttons for the sample detail viewer are displayed correctly depending on if the sample is in the cart or not @@ -258,7 +262,6 @@ public void testCartPageAsAdmin() { sampleDetailsViewer.clickRemoveSampleFromCartButton(); sampleDetailsViewer.clickSampleDetailsViewerCloseButton(); - samplesPage.selectSampleByName("sample5fg44"); samplesPage.selectSampleByName("sample5fdgr"); samplesPage.selectSampleByName("sample554sg5"); @@ -279,7 +282,6 @@ public void testCartPageAsAdmin() { final String projectName = "project"; page.viewSampleDetailsFor(sampleName); - assertFalse(sampleDetailsViewer.isAddSampleToCartButtonVisible(), "The add cart to sample button should not be displayed"); assertTrue(sampleDetailsViewer.isRemoveSampleFromCartButtonVisible(), @@ -289,7 +291,8 @@ public void testCartPageAsAdmin() { assertEquals(projectName, sampleDetailsViewer.getProjectName(), "Should have proper project name displayed for sample"); - assertEquals("Jul 19, 2013, 2:18 PM", sampleDetailsViewer.getCreatedDateForSample(), "Should display the correct created date"); + assertEquals("Jul 19, 2013, 2:18 PM", sampleDetailsViewer.getCreatedDateForSample(), + "Should display the correct created date"); sampleDetailsViewer.clickMetadataTabLink(); assertTrue(sampleDetailsViewer.addNewMetadataButtonVisible()); @@ -396,14 +399,18 @@ public void testCartPageAsAdmin() { "Should not have any concatenation checkboxes"); assertEquals(7, sampleDetailsViewer.actionButtonsVisible(), "Should have 7 file action buttons"); - assertEquals(1, sampleDetailsViewer.numberOfSequencingObjectsSetAsDefault(), "One sequencing object should have a default tag"); - assertEquals(2, sampleDetailsViewer.numberOfSetAsDefaultSeqObjsButtons(), "There should be two set as default buttons for sequencing objects"); + assertEquals(1, sampleDetailsViewer.numberOfSequencingObjectsSetAsDefault(), + "One sequencing object should have a default tag"); + assertEquals(2, sampleDetailsViewer.numberOfSetAsDefaultSeqObjsButtons(), + "There should be two set as default buttons for sequencing objects"); // Remove the 5 remaining files (1 single end sequencing object and 2 paired end sequencing objects containing 2 files each, and 2 assemblies) js.executeScript("document.getElementsByClassName('t-filelist-scroll')[0].scrollTop= 600"); - assertEquals(1, sampleDetailsViewer.numberOfGenomeAssembliesSetAsDefault(), "One sequencing object should have a default tag"); - assertEquals(1, sampleDetailsViewer.numberOfGenomeAssembliesSetAsDefaultButtons(), "There should be one set as default button for sequencing objects"); + assertEquals(1, sampleDetailsViewer.numberOfGenomeAssembliesSetAsDefault(), + "One sequencing object should have a default tag"); + assertEquals(1, sampleDetailsViewer.numberOfGenomeAssembliesSetAsDefaultButtons(), + "There should be one set as default button for sequencing objects"); sampleDetailsViewer.removeFile(6); sampleDetailsViewer.removeFile(5); @@ -419,7 +426,8 @@ public void testCartPageAsAdmin() { sampleDetailsViewer.clickRemoveSampleFromCartButtonCartPage(); - assertFalse(sampleDetailsViewer.sampleDetailsViewerVisible(), "The sample details viewer should not be displayed as the sample was removed from the cart"); + assertFalse(sampleDetailsViewer.sampleDetailsViewerVisible(), + "The sample details viewer should not be displayed as the sample was removed from the cart"); // Test removing a sample from the project page.removeSampleFromCart(0); @@ -461,11 +469,10 @@ void addAndRemoveAssociatedProjectSamplesToCart() { LoginPage.loginAsAdmin(driver()); driver().manage().window().maximize(); - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.toggleAssociatedProject(PROJECT_NAME); TableSummary summary = samplesPage.getTableSummary(); - assertEquals(22, summary.getTotal(), - "Should have more samples visible with another project selected"); + assertEquals(22, summary.getTotal(), "Should have more samples visible with another project selected"); samplesPage.selectSampleByName(ASSOCIATED_SAMPLE_NAME); samplesPage.selectSampleByName(SAMPLE_NAME); samplesPage.addSelectedSamplesToCart(); @@ -478,7 +485,8 @@ void addAndRemoveAssociatedProjectSamplesToCart() { viewer.clickRemoveSampleFromCartButtonCartPage(); - assertFalse(viewer.sampleDetailsViewerVisible(), "The sample details viewer should not be displayed as the sample was removed from the cart"); + assertFalse(viewer.sampleDetailsViewerVisible(), + "The sample details viewer should not be displayed as the sample was removed from the cart"); assertEquals(1, cartPage.getNumberOfSamplesInCart(), "Should only be 1 sample in the cart"); } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSamplesPage.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSamplesPage.java index dad7ab10fb4..6673e16364d 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSamplesPage.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSamplesPage.java @@ -1,5 +1,12 @@ package ca.corefacility.bioinformatics.irida.ria.integration.pages.projects; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; @@ -9,456 +16,452 @@ import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.time.Duration; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - /** *

* Page Object to represent the project samples page. *

*/ public class ProjectSamplesPage extends ProjectPageBase { - private static final String RELATIVE_URL = "projects/"; + private static final String RELATIVE_URL = "projects/"; - @FindBy(tagName = "h1") - private WebElement pageHeader; + @FindBy(tagName = "h1") + private WebElement pageHeader; - @FindBy(className = "t-sample-tools") - private WebElement toolsDropdownBtn; + @FindBy(className = "t-sample-tools") + private WebElement toolsDropdownBtn; - @FindBy(className = "t-tools-dropdown") - private WebElement toolsDropdown; + @FindBy(className = "t-tools-dropdown") + private WebElement toolsDropdown; - @FindBy(className = "t-merge") - private WebElement mergeBtn; + @FindBy(className = "t-merge") + private WebElement mergeBtn; - @FindBy(className = "t-share") - private WebElement shareBtn; + @FindBy(className = "t-share") + private WebElement shareBtn; - @FindBy(className = "t-remove") - private WebElement removeBtn; + @FindBy(className = "t-remove") + private WebElement removeBtn; - @FindBy(className = "t-export") - private WebElement exportSamplesDropdownBtn; + @FindBy(className = "t-export") + private WebElement exportSamplesDropdownBtn; - @FindBy(className = "t-export-dropdown") - private WebElement exportDropdown; + @FindBy(className = "t-export-dropdown") + private WebElement exportDropdown; - @FindBy(className = "t-download") - private WebElement downloadBtn; + @FindBy(className = "t-download") + private WebElement downloadBtn; - @FindBy(className = "t-linker") - private WebElement linkerBtn; + @FindBy(className = "t-linker") + private WebElement linkerBtn; - @FindBy(className = "t-ncbi") - private WebElement ncbiExportBtn; + @FindBy(className = "t-ncbi") + private WebElement ncbiExportBtn; - @FindBy(className = "t-create-sample") - private WebElement createSampleButton; + @FindBy(className = "t-create-sample") + private WebElement createSampleButton; - @FindBy(className = "t-linker-modal") - private WebElement linkerModal; + @FindBy(className = "t-linker-modal") + private WebElement linkerModal; - @FindBy(className = "t-cmd-text") - private WebElement linkerCmd; + @FindBy(className = "t-cmd-text") + private WebElement linkerCmd; - @FindBy(className = "t-summary") - private WebElement tableSummary; + @FindBy(className = "t-summary") + private WebElement tableSummary; - // FILTERS - @FindBy(css = ".t-td-name .ant-table-filter-trigger") - private WebElement sampleNameFilterToggle; + // FILTERS + @FindBy(css = ".t-td-name .ant-table-filter-trigger") + private WebElement sampleNameFilterToggle; - @FindBy(css = ".t-name-select input") - private WebElement nameFilterInput; + @FindBy(css = ".t-name-select input") + private WebElement nameFilterInput; - @FindBy(css = ".t-name-select .ant-select-selector") - private WebElement nameFilterSelectedOptions; + @FindBy(css = ".t-name-select .ant-select-selector") + private WebElement nameFilterSelectedOptions; - @FindBy(css = ".t-td-organism .ant-table-filter-trigger") - private WebElement organismFilterToggle; + @FindBy(css = ".t-td-organism .ant-table-filter-trigger") + private WebElement organismFilterToggle; - @FindBy(css = ".t-organism-select input") - private WebElement organismSelectInput; + @FindBy(css = ".t-organism-select input") + private WebElement organismSelectInput; - @FindBy(css = ".t-organism-select .ant-select-selector") - private WebElement organismFilterSelectedOptions; + @FindBy(css = ".t-organism-select .ant-select-selector") + private WebElement organismFilterSelectedOptions; - @FindBy(css = ".t-td-project .ant-dropdown-trigger") - private WebElement projectsFilterToggle; + @FindBy(css = ".t-td-project .ant-dropdown-trigger") + private WebElement projectsFilterToggle; - @FindBy(css = ".t-td-created .ant-table-filter-trigger") - private WebElement createdDateFilterToggle; + @FindBy(css = ".t-td-created .ant-table-filter-trigger") + private WebElement createdDateFilterToggle; - @FindBy(className = "t-created-filter") - private WebElement createdDateFilter; + @FindBy(className = "t-created-filter") + private WebElement createdDateFilter; - @FindBy(css = ".t-td-modified .ant-table-filter-trigger") - private WebElement modifiedDateFilterToggle; + @FindBy(css = ".t-td-modified .ant-table-filter-trigger") + private WebElement modifiedDateFilterToggle; - @FindBy(className = "t-modified-filter") - private WebElement modifiedDateFilter; + @FindBy(className = "t-modified-filter") + private WebElement modifiedDateFilter; - @FindBy(className = "t-samples-table") - private WebElement samplesTable; + @FindBy(className = "t-samples-table") + private WebElement samplesTable; - @FindBy(css = ".t-select-all input") - private WebElement selectAllCheckbox; + @FindBy(css = ".t-select-all input") + private WebElement selectAllCheckbox; - @FindBy(className = "t-merge-modal") - private WebElement mergeModal; + @FindBy(className = "t-merge-modal") + private WebElement mergeModal; - //----- OLD BELOW + //----- OLD BELOW - @FindBy(className = "t-associated-btn") - private WebElement associatedProjectMenuBtn; + @FindBy(className = "t-associated-btn") + private WebElement associatedProjectMenuBtn; - @FindBy(className = "t-associated-dropdown") - private WebElement associatedDropdown; + @FindBy(className = "t-associated-dropdown") + private WebElement associatedDropdown; - @FindBy(className = "t-associated-cb") - private List associatedCbs; + @FindBy(className = "t-associated-cb") + private List associatedCbs; - @FindBy(className = "selected-counts") - private WebElement selectedCountInfo; + @FindBy(className = "selected-counts") + private WebElement selectedCountInfo; - @FindBy(id = "samplesTable_info") - private WebElement samplesTableInfo; + @FindBy(id = "samplesTable_info") + private WebElement samplesTableInfo; - @FindBy(css = "tbody tr") - private List tableRows; + @FindBy(css = "tbody tr") + private List tableRows; - @FindBy(id = "giveOwner") - private WebElement giveOwnerBtn; + @FindBy(id = "giveOwner") + private WebElement giveOwnerBtn; - @FindBy(className = "t-move-btn") - private WebElement moveBtn; + @FindBy(className = "t-move-btn") + private WebElement moveBtn; - @FindBy(className = "t-add-cart-btn") - private WebElement addToCartBtn; + @FindBy(className = "t-add-cart-btn") + private WebElement addToCartBtn; - @FindBy(className = "t-remove-modal") - private WebElement removeModal; + @FindBy(className = "t-remove-modal") + private WebElement removeModal; - @FindBy(id = "confirmMergeBtn") - private WebElement mergeBtnOK; + @FindBy(id = "confirmMergeBtn") + private WebElement mergeBtnOK; - @FindBy(id = "sampleName") - private WebElement newMergeNameInput; + @FindBy(id = "sampleName") + private WebElement newMergeNameInput; - @FindBy(className = "t-copy-samples-modal") - private WebElement copySamplesModal; + @FindBy(className = "t-copy-samples-modal") + private WebElement copySamplesModal; - @FindBy(id = "js-confirm") - private WebElement copyModalConfirmBtn; + @FindBy(id = "js-confirm") + private WebElement copyModalConfirmBtn; - @FindBy(id = "projectsSelect") - private WebElement projectsSelectInput; + @FindBy(id = "projectsSelect") + private WebElement projectsSelectInput; - @FindBy(id = "confirm-copy-samples") - private WebElement copyOkBtn; + @FindBy(id = "confirm-copy-samples") + private WebElement copyOkBtn; - @FindBy(css = "a.select2-choice") - private WebElement select2Opener; + @FindBy(css = "a.select2-choice") + private WebElement select2Opener; - @FindBy(className = "select2-search__field") - private WebElement select2Input; + @FindBy(className = "select2-search__field") + private WebElement select2Input; - @FindBy(className = "select2-results__options") - private WebElement select2Results; + @FindBy(className = "select2-results__options") + private WebElement select2Results; - @FindBy(className = "t-filters-btn") - private WebElement filterByPropertyBtn; + @FindBy(className = "t-filters-btn") + private WebElement filterByPropertyBtn; - @FindBy(className = "t-apply-filter-btn") - private WebElement applyFiltersBtn; + @FindBy(className = "t-apply-filter-btn") + private WebElement applyFiltersBtn; - @FindBy(className = "filter-modal") - private WebElement filterModal; + @FindBy(className = "filter-modal") + private WebElement filterModal; - @FindBy(className = "t-clear-filters") - private WebElement clearFilterBtn; + @FindBy(className = "t-clear-filters") + private WebElement clearFilterBtn; - // This will be 'Previous', 1, 2, ..., 'Next' - @FindBy(css = ".pagination li") - private List pagination; + // This will be 'Previous', 1, 2, ..., 'Next' + @FindBy(css = ".pagination li") + private List pagination; - // Samples filter date range picker - @FindBy(className = "t-daterange-filter") - private WebElement dateRangeInput; + // Samples filter date range picker + @FindBy(className = "t-daterange-filter") + private WebElement dateRangeInput; - @FindBy(name = "daterangepicker_start") - private WebElement daterangepickerStart; + @FindBy(name = "daterangepicker_start") + private WebElement daterangepickerStart; - @FindBy(name = "daterangepicker_end") - private WebElement daterangepickerEnd; + @FindBy(name = "daterangepicker_end") + private WebElement daterangepickerEnd; - @FindBy(css = "div.ranges li") - private List dateRanges; + @FindBy(css = "div.ranges li") + private List dateRanges; - @FindBy(className = "applyBtn") - private WebElement applyDateRangeBtn; + @FindBy(className = "applyBtn") + private WebElement applyDateRangeBtn; - @FindBy(id = "selection-main") - private WebElement selectionMain; + @FindBy(id = "selection-main") + private WebElement selectionMain; - @FindBy(id = "selection-toggle") - private WebElement selectionToggle; + @FindBy(id = "selection-toggle") + private WebElement selectionToggle; - @FindBy(className = "dt-select-all") - private WebElement selectionAll; + @FindBy(className = "dt-select-all") + private WebElement selectionAll; - @FindBy(className = "dt-select-none") - private WebElement selectionNone; + @FindBy(className = "dt-select-none") + private WebElement selectionNone; - @FindBy(id = "linkerCloseBtn") - private WebElement linkerCloseBtn; + @FindBy(id = "linkerCloseBtn") + private WebElement linkerCloseBtn; - @FindBy(className = "locked-sample") - private List lockedSamples; + @FindBy(className = "locked-sample") + private List lockedSamples; - @FindBy(css = "[data-dt-idx=\"1\"]") - private WebElement firstTablePageBtn; + @FindBy(css = "[data-dt-idx=\"1\"]") + private WebElement firstTablePageBtn; - @FindBy(css = ".paginate_button.next a") - private WebElement nextTablePageBtn; + @FindBy(css = ".paginate_button.next a") + private WebElement nextTablePageBtn; - @FindBy(id = "name") - private WebElement sampleNameInput; + @FindBy(id = "name") + private WebElement sampleNameInput; - @FindBy(className = "t-filter-by-file-btn") - private WebElement filterByFileBtn; + @FindBy(className = "t-filter-by-file-btn") + private WebElement filterByFileBtn; - @FindBy(className = "t-filter-by-file-input") - private WebElement filterByFileInput; + @FindBy(className = "t-filter-by-file-input") + private WebElement filterByFileInput; - @FindBy(className = "t-filter-submit") - private WebElement filterSubmitBtn; + @FindBy(className = "t-filter-submit") + private WebElement filterSubmitBtn; - @FindBy(className = "t-filter-cancel") - private WebElement filterCancelBtn; + @FindBy(className = "t-filter-cancel") + private WebElement filterCancelBtn; - @FindBy(className = "ant-pagination-prev") - private WebElement prevTablePage; + @FindBy(className = "ant-pagination-prev") + private WebElement prevTablePage; - @FindBy(className = "ant-pagination-next") - private WebElement nextTablePage; + @FindBy(className = "ant-pagination-next") + private WebElement nextTablePage; - public ProjectSamplesPage(WebDriver driver) { - super(driver); - } + public ProjectSamplesPage(WebDriver driver) { + super(driver); + } - public static ProjectSamplesPage initPage(WebDriver driver) { - return PageFactory.initElements(driver, ProjectSamplesPage.class); - } + public static ProjectSamplesPage initPage(WebDriver driver) { + return PageFactory.initElements(driver, ProjectSamplesPage.class); + } - public static ProjectSamplesPage goToPage(WebDriver driver, int projectId) { - get(driver, RELATIVE_URL + projectId); - // Wait for full page to get loaded - waitForTime(800); - return PageFactory.initElements(driver, ProjectSamplesPage.class); - } - - public String getTitle() { - return pageHeader.getText(); - } - - public boolean isSampleToolsAvailable() { - try { - return toolsDropdownBtn.isDisplayed(); - } catch (Exception e) { - return false; - } - } - - public void openToolsDropDown() { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); - toolsDropdownBtn.click(); - wait.until(ExpectedConditions.visibilityOf(toolsDropdown)); - } - - public void closeToolsDropdown() { - closeDropdown(toolsDropdown); - } - - public boolean isMergeBtnEnabled() { - return isElementEnabled(mergeBtn); - } - - public boolean isMergeBtnVisible() { - try { - return mergeBtn.isDisplayed(); - } catch (Exception e) { - return false; - } - } - - public boolean isShareBtnEnabled() { - return isElementEnabled(shareBtn); - } - - public boolean isRemoveBtnEnabled() { - return isElementEnabled(removeBtn); - } - - public void openExportDropdown() { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); - exportSamplesDropdownBtn.click(); - wait.until(ExpectedConditions.visibilityOf(exportDropdown)); - } - - public void closeExportDropdown() { - closeDropdown(exportDropdown); - } - - private boolean isElementEnabled(WebElement element) { - try { - return !element.getAttribute("aria-disabled").equals("true"); - } catch (Exception e) { - // If it does not have "aria-disabled" then it is enabled; - return true; - } - } - - private void closeDropdown(WebElement dropdown) { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10L)); - dropdown.sendKeys(Keys.ESCAPE); - wait.until(ExpectedConditions.invisibilityOf(dropdown)); - } - - public boolean isDownloadBtnEnabled() { - return isElementEnabled(downloadBtn); - } - - public boolean isLinkerBtnEnabled() { - return isElementEnabled(linkerBtn); - } - - public boolean isNcbiBtnEnabled() { - return isElementEnabled(ncbiExportBtn); - } - - public TableSummary getTableSummary() { - return new TableSummary(tableSummary.getText()); - } - - public int getNumberProjectsDisplayed() { - return tableRows.size(); - } - - public void openCreateNewSampleModal() { - openToolsDropDown(); - createSampleButton.click(); - } - - public void filterBySampleName(String name) { - int prevTotal = getTableSummary().getTotal(); - sampleNameFilterToggle.click(); - nameFilterInput.sendKeys(name); - nameFilterInput.sendKeys(Keys.ENTER); - nameFilterInput.sendKeys(Keys.TAB); - waitForTableToUpdate(prevTotal); - } - - public void clearIndividualSampleNameFilter(String name) { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3)); - int prevTotal = getTableSummary().getTotal(); - sampleNameFilterToggle.click(); - WebElement filter = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("[title=\"" + name + "\"]"))); - filter.findElement(By.className("ant-select-selection-item-remove")).click(); - sampleNameFilterToggle.sendKeys(Keys.TAB); - waitForTableToUpdate(prevTotal); - } - - public void filterByOrganism(String organism) { - int prevTotal = getTableSummary().getTotal(); - organismFilterToggle.click(); - organismSelectInput.sendKeys(organism); - organismSelectInput.sendKeys(Keys.ENTER); - organismFilterToggle.sendKeys(Keys.TAB); - waitForTableToUpdate(prevTotal); - } - - public void clearIndividualOrganismFilter(String organism) { - int prevTotal = getTableSummary().getTotal(); - organismFilterToggle.click(); - WebElement filter = organismFilterSelectedOptions.findElement(By.cssSelector("[title=\"" + organism + "\"]")); - filter.findElement(By.className("ant-select-selection-item-remove")).click(); - organismFilterToggle.sendKeys(Keys.TAB); - waitForTableToUpdate(prevTotal); - } - - public void toggleAssociatedProject(String projectName) { - int prevTotal = getTableSummary().getTotal(); - projectsFilterToggle.click(); - WebElement selection = driver - .findElement(By.xpath("//li[@class='ant-dropdown-menu-item' and span='" + projectName + "']")); - selection.click(); - driver.findElement(By.xpath("//button[@type='button' and span='OK']")).click(); - waitForTableToUpdate(prevTotal); - } - - public void removeAssociatedProject(String projectName) { - projectsFilterToggle.click(); - WebElement selection = driver.findElement(By.xpath("//li/span/span[text()='" + projectName + "']")); - selection.click(); - driver.findElement(By.xpath("//button[@type='button' and span='OK']")).click(); - waitForTime(200); - } - - public void filterByCreatedDate(String start, String end) { - int prevTotal = getTableSummary().getTotal(); - createdDateFilterToggle.click(); - driver.findElement(By.xpath("//div[@class='t-created-filter']//input[@placeholder='Start date']")) - .sendKeys(start); - WebElement endInput = driver - .findElement(By.xpath("//div[@class='t-created-filter']//input[@placeholder='End date']")); - endInput.sendKeys(end); - endInput.sendKeys(Keys.ENTER); - createdDateFilter.findElement(By.className("t-search-btn")).click(); - waitForTableToUpdate(prevTotal); - } - - public void clearFilterByCreatedDate() { - int prevTotal = getTableSummary().getTotal(); - createdDateFilterToggle.click(); - createdDateFilter.findElement(By.className("t-clear-btn")).click(); - createdDateFilterToggle.click(); - waitForTableToUpdate(prevTotal); - } - - public void filterByModifiedDate(String start, String end) { - int prevTotal = getTableSummary().getTotal(); - modifiedDateFilterToggle.click(); - driver.findElement(By.xpath("//div[@class='t-modified-filter']//input[@placeholder='Start date']")) - .sendKeys(start); - WebElement endInput = driver - .findElement(By.xpath("//div[@class='t-modified-filter']//input[@placeholder='End date']")); - endInput.sendKeys(end); - endInput.sendKeys(Keys.ENTER); - modifiedDateFilter.findElement(By.className("t-search-btn")).click(); - waitForTableToUpdate(prevTotal); - } - - public void clearFilterByModifiedDate() { - int prevTotal = getTableSummary().getTotal(); - modifiedDateFilterToggle.click(); - modifiedDateFilter.findElement(By.className("t-clear-btn")).click(); - modifiedDateFilterToggle.click(); - waitForTableToUpdate(prevTotal); - } - - public void selectSampleByName(String sampleName) { - WebElement checkbox = samplesTable.findElement(By.xpath("//td/button[span[text()='" + sampleName + "']]/../..//input")); - checkbox.click(); - } + public static ProjectSamplesPage goToPage(WebDriver driver, Long projectId) { + get(driver, RELATIVE_URL + projectId); + // Wait for full page to get loaded + waitForTime(800); + return PageFactory.initElements(driver, ProjectSamplesPage.class); + } + + public String getTitle() { + return pageHeader.getText(); + } + + public boolean isSampleToolsAvailable() { + try { + return toolsDropdownBtn.isDisplayed(); + } catch (Exception e) { + return false; + } + } + + public void openToolsDropDown() { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + toolsDropdownBtn.click(); + wait.until(ExpectedConditions.visibilityOf(toolsDropdown)); + } + + public void closeToolsDropdown() { + closeDropdown(toolsDropdown); + } + + public boolean isMergeBtnEnabled() { + return isElementEnabled(mergeBtn); + } + + public boolean isMergeBtnVisible() { + try { + return mergeBtn.isDisplayed(); + } catch (Exception e) { + return false; + } + } + + public boolean isShareBtnEnabled() { + return isElementEnabled(shareBtn); + } + + public boolean isRemoveBtnEnabled() { + return isElementEnabled(removeBtn); + } + + public void openExportDropdown() { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + exportSamplesDropdownBtn.click(); + wait.until(ExpectedConditions.visibilityOf(exportDropdown)); + } + + public void closeExportDropdown() { + closeDropdown(exportDropdown); + } + + private boolean isElementEnabled(WebElement element) { + try { + return !element.getAttribute("aria-disabled").equals("true"); + } catch (Exception e) { + // If it does not have "aria-disabled" then it is enabled; + return true; + } + } + + private void closeDropdown(WebElement dropdown) { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10L)); + dropdown.sendKeys(Keys.ESCAPE); + wait.until(ExpectedConditions.invisibilityOf(dropdown)); + } + + public boolean isDownloadBtnEnabled() { + return isElementEnabled(downloadBtn); + } + + public boolean isLinkerBtnEnabled() { + return isElementEnabled(linkerBtn); + } + + public boolean isNcbiBtnEnabled() { + return isElementEnabled(ncbiExportBtn); + } + + public TableSummary getTableSummary() { + return new TableSummary(tableSummary.getText()); + } + + public int getNumberProjectsDisplayed() { + return tableRows.size(); + } + + public void openCreateNewSampleModal() { + openToolsDropDown(); + createSampleButton.click(); + } + + public void filterBySampleName(String name) { + int prevTotal = getTableSummary().getTotal(); + sampleNameFilterToggle.click(); + nameFilterInput.sendKeys(name); + nameFilterInput.sendKeys(Keys.ENTER); + nameFilterInput.sendKeys(Keys.TAB); + waitForTableToUpdate(prevTotal); + } + + public void clearIndividualSampleNameFilter(String name) { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3)); + int prevTotal = getTableSummary().getTotal(); + sampleNameFilterToggle.click(); + WebElement filter = wait.until( + ExpectedConditions.elementToBeClickable(By.cssSelector("[title=\"" + name + "\"]"))); + filter.findElement(By.className("ant-select-selection-item-remove")).click(); + sampleNameFilterToggle.sendKeys(Keys.TAB); + waitForTableToUpdate(prevTotal); + } + + public void filterByOrganism(String organism) { + int prevTotal = getTableSummary().getTotal(); + organismFilterToggle.click(); + organismSelectInput.sendKeys(organism); + organismSelectInput.sendKeys(Keys.ENTER); + organismFilterToggle.sendKeys(Keys.TAB); + waitForTableToUpdate(prevTotal); + } + + public void clearIndividualOrganismFilter(String organism) { + int prevTotal = getTableSummary().getTotal(); + organismFilterToggle.click(); + WebElement filter = organismFilterSelectedOptions.findElement(By.cssSelector("[title=\"" + organism + "\"]")); + filter.findElement(By.className("ant-select-selection-item-remove")).click(); + organismFilterToggle.sendKeys(Keys.TAB); + waitForTableToUpdate(prevTotal); + } + + public void toggleAssociatedProject(String projectName) { + int prevTotal = getTableSummary().getTotal(); + projectsFilterToggle.click(); + WebElement selection = driver.findElement( + By.xpath("//li[@class='ant-dropdown-menu-item' and span='" + projectName + "']")); + selection.click(); + driver.findElement(By.xpath("//button[@type='button' and span='OK']")).click(); + waitForTableToUpdate(prevTotal); + } + + public void removeAssociatedProject(String projectName) { + projectsFilterToggle.click(); + WebElement selection = driver.findElement(By.xpath("//li/span/span[text()='" + projectName + "']")); + selection.click(); + driver.findElement(By.xpath("//button[@type='button' and span='OK']")).click(); + waitForTime(200); + } + + public void filterByCreatedDate(String start, String end) { + int prevTotal = getTableSummary().getTotal(); + createdDateFilterToggle.click(); + driver.findElement(By.xpath("//div[@class='t-created-filter']//input[@placeholder='Start date']")) + .sendKeys(start); + WebElement endInput = driver.findElement( + By.xpath("//div[@class='t-created-filter']//input[@placeholder='End date']")); + endInput.sendKeys(end); + endInput.sendKeys(Keys.ENTER); + createdDateFilter.findElement(By.className("t-search-btn")).click(); + waitForTableToUpdate(prevTotal); + } + + public void clearFilterByCreatedDate() { + int prevTotal = getTableSummary().getTotal(); + createdDateFilterToggle.click(); + createdDateFilter.findElement(By.className("t-clear-btn")).click(); + createdDateFilterToggle.click(); + waitForTableToUpdate(prevTotal); + } + + public void filterByModifiedDate(String start, String end) { + int prevTotal = getTableSummary().getTotal(); + modifiedDateFilterToggle.click(); + driver.findElement(By.xpath("//div[@class='t-modified-filter']//input[@placeholder='Start date']")) + .sendKeys(start); + WebElement endInput = driver.findElement( + By.xpath("//div[@class='t-modified-filter']//input[@placeholder='End date']")); + endInput.sendKeys(end); + endInput.sendKeys(Keys.ENTER); + modifiedDateFilter.findElement(By.className("t-search-btn")).click(); + waitForTableToUpdate(prevTotal); + } + + public void clearFilterByModifiedDate() { + int prevTotal = getTableSummary().getTotal(); + modifiedDateFilterToggle.click(); + modifiedDateFilter.findElement(By.className("t-clear-btn")).click(); + modifiedDateFilterToggle.click(); + waitForTableToUpdate(prevTotal); + } + + public void selectSampleByName(String sampleName) { + WebElement checkbox = samplesTable.findElement( + By.xpath("//td/button[span[text()='" + sampleName + "']]/../..//input")); + checkbox.click(); + } public void clickSampleName(String sampleName) { - WebElement sampleNameLink = samplesTable.findElement(By.xpath("//td/button[span[text()='" + sampleName + "']]")); + WebElement sampleNameLink = samplesTable.findElement( + By.xpath("//td/button[span[text()='" + sampleName + "']]")); sampleNameLink.click(); } @@ -467,161 +470,162 @@ public Long getCoverageForSampleByName(String sampleName) { By.xpath("//td/button[span[text()='" + sampleName + "']]/../../td[contains(@class, 't-td-coverage')]")); String coverageString = coverageCell.getText(); - return coverageString == null || coverageString.isEmpty() ? null : Long.parseLong(coverageString); - } - - public void addSelectedSamplesToCart() { - addToCartBtn.click(); - // Make sure the item were added to the cart. - waitForElementVisible(By.className("t-cart-count")); - // If the cart count is already visible this can go too fast, - // wait for the cart to fully update it's total. - waitForTime(500); - } - - public String getLinkerCommand() { - openLinkerModal(); - String command = linkerCmd.getText(); - closeLinkerModal(); - return command; - } - - public String getLinkerCommandWithAssembly() { - openLinkerModal(); - WebElement fileTypeCheckbox = linkerModal.findElement(By.xpath("//input[@value='assembly']")); - boolean isChecked = fileTypeCheckbox.isSelected(); - fileTypeCheckbox.click(); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); - wait.until(ExpectedConditions.elementSelectionStateToBe(fileTypeCheckbox, !isChecked)); - String command = linkerCmd.getText(); - closeLinkerModal(); - return command; - - } - - private void openLinkerModal() { - openExportDropdown(); - linkerBtn.click(); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); - wait.until(ExpectedConditions.visibilityOf(linkerModal)); - } - - private void closeLinkerModal() { - driver.findElement(By.xpath("//button[@type='button' and span='Close']")).click(); - } - - public void toggleSelectAll() { - boolean checked = selectAllCheckbox.isSelected(); - selectAllCheckbox.click(); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); - wait.until(ExpectedConditions.elementSelectionStateToBe(selectAllCheckbox, !checked)); - } - - public void mergeSamplesWithOriginalName(String sampleName) { - toolsDropdownBtn.click(); - mergeBtn.click(); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); - wait.until(ExpectedConditions.visibilityOf(mergeModal)); - WebElement existing = null; - try { - mergeModal.findElement(By.xpath("//label[(.//*|.)[contains(text(), '" + sampleName + "')]]")).click(); - } catch (Exception e) { - driver.findElement(By.className("t-custom-checkbox")).click(); - driver.findElement(By.id("newName")).sendKeys(sampleName); - } - driver.findElement(By.xpath("//button[@type='button' and span='Merge Samples']")).click(); - wait.until(ExpectedConditions.textMatches(By.className("t-summary"), Pattern.compile("^Selected: 0"))); - } - - public String getMostRecentlyModifiedSampleName() { - WebElement nameAnchor = driver.findElement(By.xpath("//tbody/tr[1]/td[2]/button")); - return nameAnchor.getText(); - } - - public void removeSamples() { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); - openToolsDropDown(); - removeBtn.click(); - wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className("t-remove-modal"))); - removeModal.findElement(By.xpath("//button[@type='button' and span='Remove Samples']")).click(); - wait.until(ExpectedConditions.textMatches(By.className("t-summary"), Pattern.compile("^Selected: 0"))); - } - - public void shareSamples() { - WebDriverWait wait = openToolsDropdownAndWait(); - wait.until(ExpectedConditions.visibilityOf(shareBtn)); - shareBtn.click(); - } - - private WebDriverWait openToolsDropdownAndWait() { - toolsDropdownBtn.click(); - return new WebDriverWait(driver, Duration.ofSeconds(10)); - } - - public void enterSampleName(String sampleName) { - sampleNameInput.sendKeys(Keys.CONTROL + "a", Keys.DELETE); - sampleNameInput.sendKeys(sampleName); - waitForTime(1000); - } - - public boolean isSampleNameErrorDisplayed() { - return driver.findElements(By.cssSelector(".t-sample-name-wrapper .ant-form-item-explain-error")).size() > 0; - } - - private void waitForTableToUpdate(int prevTotal) { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5)); - wait.until(ExpectedConditions.presenceOfElementLocated( - By.xpath("//td[contains(@class, 't-summary') and not(text()='Selected: 0 of " + prevTotal + "')]"))); - } - - public void filterByFile(String file1) { - filterByFileBtn.click(); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); - wait.until(ExpectedConditions.visibilityOf(filterByFileInput)); - Path path = Paths.get(file1); - filterByFileInput.sendKeys(path.toAbsolutePath().toString()); - waitForTime(200); - } - - public List getInvalidSampleNames() { - List invalidSampleNames = new ArrayList<>(); - List invalidSampleNamesElements = driver.findElements(By.cssSelector(".t-invalid-sample")); - for (WebElement invalidSampleNameElement : invalidSampleNamesElements) { - invalidSampleNames.add(invalidSampleNameElement.getText()); - } - return invalidSampleNames; - } - - public void cancelFilterByFile() { - filterCancelBtn.click(); - } - - public void submitFilterByFile() { - int total = getTableSummary().getTotal(); - filterSubmitBtn.click(); - waitForTableToUpdate(total); - } - - public void shareExportSamplesToNcbi() { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); - openExportDropdown(); - ncbiExportBtn.click(); - wait.until(ExpectedConditions.urlContains("/ncbi")); - } - - public void goToNextTablePage() { - nextTablePage.click(); - waitForTime(200); - } - - public void gotToPreviousTablePage() { - prevTablePage.click(); - waitForTime(200); - } - - public boolean isMessageDisplayed(String message) { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(4)); - WebElement notification = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("ant-notification-notice-message"))); - return wait.until(ExpectedConditions.textToBePresentInElement(notification, message)); - } + return coverageString == null || coverageString.isEmpty() ? null : Long.parseLong(coverageString); + } + + public void addSelectedSamplesToCart() { + addToCartBtn.click(); + // Make sure the item were added to the cart. + waitForElementVisible(By.className("t-cart-count")); + // If the cart count is already visible this can go too fast, + // wait for the cart to fully update it's total. + waitForTime(500); + } + + public String getLinkerCommand() { + openLinkerModal(); + String command = linkerCmd.getText(); + closeLinkerModal(); + return command; + } + + public String getLinkerCommandWithAssembly() { + openLinkerModal(); + WebElement fileTypeCheckbox = linkerModal.findElement(By.xpath("//input[@value='assembly']")); + boolean isChecked = fileTypeCheckbox.isSelected(); + fileTypeCheckbox.click(); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); + wait.until(ExpectedConditions.elementSelectionStateToBe(fileTypeCheckbox, !isChecked)); + String command = linkerCmd.getText(); + closeLinkerModal(); + return command; + + } + + private void openLinkerModal() { + openExportDropdown(); + linkerBtn.click(); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + wait.until(ExpectedConditions.visibilityOf(linkerModal)); + } + + private void closeLinkerModal() { + driver.findElement(By.xpath("//button[@type='button' and span='Close']")).click(); + } + + public void toggleSelectAll() { + boolean checked = selectAllCheckbox.isSelected(); + selectAllCheckbox.click(); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); + wait.until(ExpectedConditions.elementSelectionStateToBe(selectAllCheckbox, !checked)); + } + + public void mergeSamplesWithOriginalName(String sampleName) { + toolsDropdownBtn.click(); + mergeBtn.click(); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); + wait.until(ExpectedConditions.visibilityOf(mergeModal)); + WebElement existing = null; + try { + mergeModal.findElement(By.xpath("//label[(.//*|.)[contains(text(), '" + sampleName + "')]]")).click(); + } catch (Exception e) { + driver.findElement(By.className("t-custom-checkbox")).click(); + driver.findElement(By.id("newName")).sendKeys(sampleName); + } + driver.findElement(By.xpath("//button[@type='button' and span='Merge Samples']")).click(); + wait.until(ExpectedConditions.textMatches(By.className("t-summary"), Pattern.compile("^Selected: 0"))); + } + + public String getMostRecentlyModifiedSampleName() { + WebElement nameAnchor = driver.findElement(By.xpath("//tbody/tr[1]/td[2]/button")); + return nameAnchor.getText(); + } + + public void removeSamples() { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); + openToolsDropDown(); + removeBtn.click(); + wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className("t-remove-modal"))); + removeModal.findElement(By.xpath("//button[@type='button' and span='Remove Samples']")).click(); + wait.until(ExpectedConditions.textMatches(By.className("t-summary"), Pattern.compile("^Selected: 0"))); + } + + public void shareSamples() { + WebDriverWait wait = openToolsDropdownAndWait(); + wait.until(ExpectedConditions.visibilityOf(shareBtn)); + shareBtn.click(); + } + + private WebDriverWait openToolsDropdownAndWait() { + toolsDropdownBtn.click(); + return new WebDriverWait(driver, Duration.ofSeconds(10)); + } + + public void enterSampleName(String sampleName) { + sampleNameInput.sendKeys(Keys.CONTROL + "a", Keys.DELETE); + sampleNameInput.sendKeys(sampleName); + waitForTime(1000); + } + + public boolean isSampleNameErrorDisplayed() { + return driver.findElements(By.cssSelector(".t-sample-name-wrapper .ant-form-item-explain-error")).size() > 0; + } + + private void waitForTableToUpdate(int prevTotal) { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5)); + wait.until(ExpectedConditions.presenceOfElementLocated( + By.xpath("//td[contains(@class, 't-summary') and not(text()='Selected: 0 of " + prevTotal + "')]"))); + } + + public void filterByFile(String file1) { + filterByFileBtn.click(); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); + wait.until(ExpectedConditions.visibilityOf(filterByFileInput)); + Path path = Paths.get(file1); + filterByFileInput.sendKeys(path.toAbsolutePath().toString()); + waitForTime(200); + } + + public List getInvalidSampleNames() { + List invalidSampleNames = new ArrayList<>(); + List invalidSampleNamesElements = driver.findElements(By.cssSelector(".t-invalid-sample")); + for (WebElement invalidSampleNameElement : invalidSampleNamesElements) { + invalidSampleNames.add(invalidSampleNameElement.getText()); + } + return invalidSampleNames; + } + + public void cancelFilterByFile() { + filterCancelBtn.click(); + } + + public void submitFilterByFile() { + int total = getTableSummary().getTotal(); + filterSubmitBtn.click(); + waitForTableToUpdate(total); + } + + public void shareExportSamplesToNcbi() { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); + openExportDropdown(); + ncbiExportBtn.click(); + wait.until(ExpectedConditions.urlContains("/ncbi")); + } + + public void goToNextTablePage() { + nextTablePage.click(); + waitForTime(200); + } + + public void gotToPreviousTablePage() { + prevTablePage.click(); + waitForTime(200); + } + + public boolean isMessageDisplayed(String message) { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(4)); + WebElement notification = wait.until( + ExpectedConditions.visibilityOfElementLocated(By.className("ant-notification-notice-message"))); + return wait.until(ExpectedConditions.textToBePresentInElement(notification, message)); + } } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/AssemblyPipelinePageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/AssemblyPipelinePageIT.java index 0307561fd76..e94eea17e33 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/AssemblyPipelinePageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/AssemblyPipelinePageIT.java @@ -33,7 +33,7 @@ public void setUpTest() throws IOException { private void addSamplesToCart() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample1"); samplesPage.selectSampleByName("sample2"); samplesPage.addSelectedSamplesToCart(); diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/BioHanselPipelinePageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/BioHanselPipelinePageIT.java index 03e07e4d538..0c7f810cde1 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/BioHanselPipelinePageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/BioHanselPipelinePageIT.java @@ -35,7 +35,7 @@ public void setUpTest() throws IOException { private void addSamplesToCart() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample1"); samplesPage.selectSampleByName("sample2"); samplesPage.addSelectedSamplesToCart(); diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/PipelinesPhylogenomicsPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/PipelinesPhylogenomicsPageIT.java index f90b54d1205..04164095c81 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/PipelinesPhylogenomicsPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pipelines/PipelinesPhylogenomicsPageIT.java @@ -35,7 +35,7 @@ public void setUpTest() throws IOException { private void addSamplesToCart() { LoginPage.loginAsUser(driver()); - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample1"); samplesPage.selectSampleByName("sample2"); samplesPage.addSelectedSamplesToCart(); diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/CreateProjectIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/CreateProjectIT.java index a274769368d..2942a200d5d 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/CreateProjectIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/CreateProjectIT.java @@ -92,7 +92,7 @@ public void testCreateProjectWithSamples() { String name = "TESTING PROJECT NAME"; // Add some samples - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample"); samplesPage.addSelectedSamplesToCart(); diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/NcbiExportPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/NcbiExportPageIT.java index cf6680cb340..43382c94607 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/NcbiExportPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/NcbiExportPageIT.java @@ -27,7 +27,7 @@ void testCreateNcbiSubmission() throws Exception { String DEFAULT_PROTOCOL = "DEFAULT_PROTOCOL"; LoginPage.loginAsManager(driver()); - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName(SAMPLE_1); samplesPage.selectSampleByName(SAMPLE_2); samplesPage.selectSampleByName(SAMPLE_3); diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java index 8c2fa75ac0c..6df95f495b1 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java @@ -13,6 +13,7 @@ import ca.corefacility.bioinformatics.irida.ria.integration.pages.LoginPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectDeletePage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSampleMetadataImportPage; +import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSamplesPage; import com.github.springtestdbunit.annotation.DatabaseSetup; import com.google.common.collect.ImmutableList; @@ -25,6 +26,7 @@ public class ProjectSampleMetadataImportPageIT extends AbstractIridaUIITChromeDr private static final String MIXED_FILE_PATH = "src/test/resources/files/metadata-upload/mixed.xlsx"; private static final String INVALID_FILE_PATH = "src/test/resources/files/metadata-upload/invalid.xlsx"; private static final String SAMPLE_NAME_COLUMN = "NLEP #"; + private static final Long PROJECT_ID = 1L; @BeforeEach public void init() { @@ -100,7 +102,7 @@ public void testFailedUploadByDeletingProject() { page.goToReviewPage(); //admin deletes project - ProjectDeletePage deleteProjectPage = ProjectDeletePage.goTo(driver2(), 1L); + ProjectDeletePage deleteProjectPage = ProjectDeletePage.goTo(driver2(), PROJECT_ID); deleteProjectPage.clickConfirm(); deleteProjectPage.deleteProject(); @@ -109,4 +111,23 @@ public void testFailedUploadByDeletingProject() { page.goToCompletePage(); }); } + + @Test + public void testFailedUploadByDeletingSamples() { + //manager starts a metadata import + ProjectSampleMetadataImportPage page = ProjectSampleMetadataImportPage.goToPage(driver()); + page.uploadMetadataFile(GOOD_FILE_PATH); + page.selectSampleNameColumn(SAMPLE_NAME_COLUMN); + page.goToReviewPage(); + + //admin deletes samples + ProjectSamplesPage projectSamplesPage = ProjectSamplesPage.goToPage(driver2(), PROJECT_ID); + projectSamplesPage.toggleSelectAll(); + projectSamplesPage.removeSamples(); + + //manager tries to complete metadata import + assertThrows(TimeoutException.class, () -> { + page.goToCompletePage(); + }); + } } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSamplesPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSamplesPageIT.java index 19080dde050..f1fef3675af 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSamplesPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSamplesPageIT.java @@ -1,18 +1,20 @@ package ca.corefacility.bioinformatics.irida.ria.integration.projects; +import java.time.Duration; +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + import ca.corefacility.bioinformatics.irida.ria.integration.AbstractIridaUIITChromeDriver; import ca.corefacility.bioinformatics.irida.ria.integration.pages.LoginPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSamplesPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ShareSamplesPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.TableSummary; + import com.github.springtestdbunit.annotation.DatabaseSetup; import com.google.common.collect.ImmutableList; -import org.junit.jupiter.api.Test; -import org.openqa.selenium.support.ui.ExpectedConditions; -import org.openqa.selenium.support.ui.WebDriverWait; - -import java.time.Duration; -import java.util.List; import static org.junit.jupiter.api.Assertions.*; @@ -36,14 +38,14 @@ public void testGoingToInvalidPage() { LoginPage.loginAsManager(driver()); assertThrows(AssertionError.class, () -> { - ProjectSamplesPage.goToPage(driver(), 100); + ProjectSamplesPage.goToPage(driver(), 100L); }); } @Test public void testPageSetUp() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); assertEquals("Samples", page.getActivePage(), "Should have the project name as the page main header."); assertEquals(10, page.getNumberProjectsDisplayed(), "Should display 10 projects initially."); @@ -52,14 +54,14 @@ public void testPageSetUp() { @Test public void testToolbarButtonsAsCollaborator() { LoginPage.loginAsUser(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); assertFalse(page.isSampleToolsAvailable(), "Sample Tools should be hidden from a collaborator"); } @Test public void testToolbarButtonsAsManager() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); // Test set up with no sample selected assertTrue(page.isSampleToolsAvailable(), "Sample Tools should be visible for a manager"); @@ -99,7 +101,7 @@ public void testToolbarButtonsAsManager() { @Test public void testSampleSelection() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); TableSummary summary = page.getTableSummary(); assertEquals(0, summary.getSelected(), "Should be 0 selected samples"); assertEquals(PROJECT_SAMPLES_COUNT, summary.getTotal(), "Should be 0 selected samples"); @@ -126,7 +128,7 @@ public void testSampleSelection() { @Test public void testMergeSamples() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); TableSummary originalSummary = page.getTableSummary(); String NEW_NAME = "I-AM-NEW-HERE"; @@ -154,7 +156,7 @@ public void testMergeSamples() { public void testRemoteProjectSamplesManagerSetup() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 7); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 7L); page.selectSampleByName("sample23p7"); page.selectSampleByName("sample24p7"); @@ -166,7 +168,7 @@ public void testRemoteProjectSamplesManagerSetup() { @Test public void testRemoveSamplesFromProject() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); TableSummary summary = page.getTableSummary(); page.selectSampleByName(FIRST_SAMPLE_NAME); @@ -187,7 +189,7 @@ public void testFilteringSamplesByProperties() { String ASSOCIATED_PROJECT_FILTER = "project6"; LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); TableSummary summary = page.getTableSummary(); assertEquals(PROJECT_SAMPLES_COUNT, summary.getTotal(), "Without the filter there should be 23 elements in the table"); @@ -273,7 +275,7 @@ public void testFilteringSamplesByProperties() { @Test public void testCartFunctionality() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); // Select some samples page.selectSampleByName(FIRST_SAMPLE_NAME); @@ -289,7 +291,7 @@ public void testCartFunctionality() { @Test public void testLinkerFunctionality() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); assertEquals("ngsArchiveLinker.pl -p 1 -t fastq", page.getLinkerCommand(), "Should be the correct linker command"); @@ -312,7 +314,7 @@ public void testLinkerFunctionality() { @Test public void testAddNewSamples() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); page.openCreateNewSampleModal(); page.enterSampleName("BAD"); assertTrue(page.isSampleNameErrorDisplayed(), "Should show a warning message"); @@ -330,7 +332,7 @@ public void testFilterByFile() { int numberValidSampleNames = 5; LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); TableSummary summary = page.getTableSummary(); assertEquals(PROJECT_SAMPLES_COUNT, summary.getTotal(), @@ -353,7 +355,7 @@ public void testFilterByFileWithAssociatedProjects() { String ASSOCIATED_SAMPLE_NAME = "sample5fg45"; LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); TableSummary summary = page.getTableSummary(); assertEquals(PROJECT_SAMPLES_COUNT, summary.getTotal(), @@ -381,7 +383,7 @@ public void testFilterByFileWindowsEncoding() { List actualInvalidNames = ImmutableList.of("11-0001", "10-1928", "10-8727"); LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); page.filterByFile("src/test/resources/files/filter-by-file/sample-filter-windows.txt"); List invalidSamples = page.getInvalidSampleNames(); invalidSamples.forEach( @@ -393,7 +395,7 @@ public void testCoverageColumnWithProjectCoverageSettings() { String SAMPLE_WITH_COVERAGE_QC_ENTRY = "sample1"; LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); page.filterBySampleName(SAMPLE_WITH_COVERAGE_QC_ENTRY); TableSummary summary = page.getTableSummary(); @@ -409,7 +411,7 @@ public void testCoverageColumnWithoutProjectCoverageSettings() { String SAMPLE_WITH_COVERAGE_QC_ENTRY = "sample5fg44"; LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 6); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 6L); assertNull(page.getCoverageForSampleByName(SAMPLE_WITH_COVERAGE_QC_ENTRY), SAMPLE_WITH_COVERAGE_QC_ENTRY + " should have a value"); @@ -418,7 +420,7 @@ public void testCoverageColumnWithoutProjectCoverageSettings() { @Test void testRemoveLockedSample() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); page.selectSampleByName(FIRST_SAMPLE_NAME); page.openToolsDropDown(); page.shareSamples(); @@ -432,7 +434,7 @@ void testRemoveLockedSample() { shareSamplesPage.gotToNextStep(); shareSamplesPage.submitShareRequest(); - page = ProjectSamplesPage.goToPage(driver(), 2); + page = ProjectSamplesPage.goToPage(driver(), 2L); TableSummary summary = page.getTableSummary(); assertEquals(1, summary.getTotal(), "Should have 1 sample"); page.selectSampleByName(FIRST_SAMPLE_NAME); @@ -445,7 +447,7 @@ void testRemoveLockedSample() { @Test void testSharingWithLockedSamplesAsManager() { LoginPage.loginAsManager(driver()); - ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage page = ProjectSamplesPage.goToPage(driver(), 1L); page.selectSampleByName(LOCKED_SAMPLE_NAME); page.openToolsDropDown(); page.shareSamples(); diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectShareSamplesIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectShareSamplesIT.java index 70e5f5e4155..00ec93e03cf 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectShareSamplesIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectShareSamplesIT.java @@ -1,11 +1,13 @@ package ca.corefacility.bioinformatics.irida.ria.integration.projects; +import org.junit.jupiter.api.Test; + import ca.corefacility.bioinformatics.irida.ria.integration.AbstractIridaUIITChromeDriver; import ca.corefacility.bioinformatics.irida.ria.integration.pages.LoginPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSamplesPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ShareSamplesPage; + import com.github.springtestdbunit.annotation.DatabaseSetup; -import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; @@ -20,11 +22,12 @@ public void testShareSamplesAsManager() { LoginPage.loginAsManager(driver()); // SHARING SINGLE SAMPLE - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample5fg44"); samplesPage.shareSamples(); - assertFalse(shareSamplesPage.isNextButtonEnabled(), "The next button should not be enabled when going to the page"); + assertFalse(shareSamplesPage.isNextButtonEnabled(), + "The next button should not be enabled when going to the page"); shareSamplesPage.searchForProject("3"); assertThat(shareSamplesPage.getProjectSelectText()).contains("ID: 3"); assertTrue(shareSamplesPage.isNextButtonEnabled(), "Next button should be enabled"); @@ -41,7 +44,7 @@ public void testShareSamplesAsManager() { assertTrue(shareSamplesPage.isShareSingleSuccessDisplayed(), "Success message should be displayed"); // MOVING MULTIPLE SAMPLES - samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample5fg44"); samplesPage.selectSampleByName("sample554sg5"); samplesPage.selectSampleByName("sample5ddfg4"); @@ -69,7 +72,7 @@ public void testShareSamplesAsManager() { assertEquals(shareSamplesPage.getSuccessTitle(), "Successfully Moved Samples"); // MOVE SINGLE SAMPLE - samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample5fg44"); samplesPage.shareSamples(); @@ -85,7 +88,7 @@ public void testShareSamplesAsManager() { assertEquals(shareSamplesPage.getSuccessTitle(), "Successfully Moved 1 Sample"); // SHARING MULTIPLE SAMPLES - samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample_5_fg_22"); samplesPage.selectSampleByName("sample-5-fg-22"); samplesPage.selectSampleByName("sample5dt5"); @@ -101,7 +104,7 @@ public void testShareSamplesAsManager() { assertTrue(shareSamplesPage.isSuccessResultDisplayed(), "Success result should be displayed"); assertEquals(shareSamplesPage.getSuccessTitle(), "Successfully Shared Samples"); - samplesPage = ProjectSamplesPage.goToPage(driver(), 2); + samplesPage = ProjectSamplesPage.goToPage(driver(), 2L); samplesPage.selectSampleByName("sample5fg44"); samplesPage.shareSamples(); assertFalse(shareSamplesPage.isNextButtonEnabled(), @@ -125,12 +128,13 @@ void testSharingWithALockedSample() { LoginPage.loginAsManager(driver()); // SHARING SINGLE SAMPLE - ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1); + ProjectSamplesPage samplesPage = ProjectSamplesPage.goToPage(driver(), 1L); samplesPage.selectSampleByName("sample5fg44"); samplesPage.selectSampleByName(LOCKED_SAMPLE_NAME); samplesPage.shareSamples(); - assertFalse(shareSamplesPage.isNextButtonEnabled(), "The next button should not be enabled when going to the page"); + assertFalse(shareSamplesPage.isNextButtonEnabled(), + "The next button should not be enabled when going to the page"); shareSamplesPage.searchForProject("3"); assertThat(shareSamplesPage.getProjectSelectText()).contains("ID: 3"); assertTrue(shareSamplesPage.isNextButtonEnabled(), "Next button should be enabled"); From 07a587bd23bb2cc067c0ac2d3bb3fec3ee16fe9b Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 12 Dec 2022 13:31:43 -0600 Subject: [PATCH 21/53] setting up create new sample during import test --- .../pages/projects/ProjectSamplesPage.java | 7 ++ .../ProjectSampleMetadataImportPageIT.java | 28 ++++++- .../projects/ProjectSampleMetadataView.xml | 73 +++++++++---------- 3 files changed, 66 insertions(+), 42 deletions(-) diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSamplesPage.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSamplesPage.java index 6673e16364d..5be755a86ec 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSamplesPage.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSamplesPage.java @@ -230,6 +230,9 @@ public class ProjectSamplesPage extends ProjectPageBase { @FindBy(id = "name") private WebElement sampleNameInput; + @FindBy(css = "button.ant-btn.ant-btn-primary") + private WebElement okButton; + @FindBy(className = "t-filter-by-file-btn") private WebElement filterByFileBtn; @@ -567,6 +570,10 @@ public void enterSampleName(String sampleName) { waitForTime(1000); } + public void clickOk() { + okButton.click(); + } + public boolean isSampleNameErrorDisplayed() { return driver.findElements(By.cssSelector(".t-sample-name-wrapper .ant-form-item-explain-error")).size() > 0; } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java index 6df95f495b1..437f2c6c1f8 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java @@ -40,8 +40,8 @@ public void testGoodFileAndHeaders() { page.uploadMetadataFile(GOOD_FILE_PATH); page.selectSampleNameColumn(SAMPLE_NAME_COLUMN); page.goToReviewPage(); - assertEquals(5, page.getUpdateCount(), "Has incorrect amount of update sample rows"); - assertEquals(0, page.getNewCount(), "Has incorrect amount of new sample rows"); + assertEquals(4, page.getUpdateCount(), "Has incorrect amount of update sample rows"); + assertEquals(1, page.getNewCount(), "Has incorrect amount of new sample rows"); /* Check formatting. A special check for number column formatting has been added in July 2020. @@ -67,8 +67,8 @@ public void testMixedFileAndHeaders() { page.uploadMetadataFile(MIXED_FILE_PATH); page.selectSampleNameColumn(SAMPLE_NAME_COLUMN); page.goToReviewPage(); - assertEquals(5, page.getUpdateCount(), "Has incorrect amount of update sample rows"); - assertEquals(2, page.getNewCount(), "Has incorrect amount of new sample rows"); + assertEquals(4, page.getUpdateCount(), "Has incorrect amount of update sample rows"); + assertEquals(3, page.getNewCount(), "Has incorrect amount of new sample rows"); } @Test @@ -130,4 +130,24 @@ public void testFailedUploadByDeletingSamples() { page.goToCompletePage(); }); } + + @Test + public void testFailedUploadByCreatingNewSample() { + //manager starts a metadata import + ProjectSampleMetadataImportPage page = ProjectSampleMetadataImportPage.goToPage(driver()); + page.uploadMetadataFile(GOOD_FILE_PATH); + page.selectSampleNameColumn(SAMPLE_NAME_COLUMN); + page.goToReviewPage(); + + //admin creates new sample + ProjectSamplesPage projectSamplesPage = ProjectSamplesPage.goToPage(driver2(), PROJECT_ID); + projectSamplesPage.openCreateNewSampleModal(); + projectSamplesPage.enterSampleName("sample5"); + projectSamplesPage.clickOk(); + + //manager tries to complete metadata import + assertThrows(TimeoutException.class, () -> { + page.goToCompletePage(); + }); + } } diff --git a/src/test/resources/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml b/src/test/resources/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml index 9109c58113a..5d0b1793e12 100644 --- a/src/test/resources/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml +++ b/src/test/resources/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml @@ -32,49 +32,46 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + From e2c6c7fe6914a44c764279a63be8a9a7dd41f807 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 12 Dec 2022 13:56:27 -0600 Subject: [PATCH 22/53] setting up remove access during import test --- .../ProjectSampleMetadataImportPageIT.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java index 437f2c6c1f8..449208d32da 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java @@ -11,6 +11,7 @@ import ca.corefacility.bioinformatics.irida.ria.integration.AbstractIridaUIITChromeDriver; import ca.corefacility.bioinformatics.irida.ria.integration.pages.LoginPage; +import ca.corefacility.bioinformatics.irida.ria.integration.pages.ProjectMembersPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectDeletePage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSampleMetadataImportPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSamplesPage; @@ -150,4 +151,22 @@ public void testFailedUploadByCreatingNewSample() { page.goToCompletePage(); }); } + + @Test + public void testFailedUploadByRemovingPrivileges() { + //manager starts a metadata import + ProjectSampleMetadataImportPage page = ProjectSampleMetadataImportPage.goToPage(driver()); + page.uploadMetadataFile(GOOD_FILE_PATH); + page.selectSampleNameColumn(SAMPLE_NAME_COLUMN); + page.goToReviewPage(); + + //admin removes manager from project + ProjectMembersPage projectMembersPage = ProjectMembersPage.goTo(driver2()); + projectMembersPage.removeManager(0); + + //manager tries to complete metadata import + assertThrows(TimeoutException.class, () -> { + page.goToCompletePage(); + }); + } } From ac0fdaa18801b31c954852259a91343944f5e592 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 16 Dec 2022 13:09:21 -0600 Subject: [PATCH 23/53] finishing tests --- .../ajax/metadata/MetadataAjaxController.java | 8 +++-- .../components/SampleMetadataImportReview.tsx | 34 ++++++++++++------- .../redux/importReducer.ts | 2 ++ .../ProjectSampleMetadataImportPage.java | 27 ++++++++++++--- .../ProjectSampleMetadataImportPageIT.java | 24 ++++++------- 5 files changed, 62 insertions(+), 33 deletions(-) diff --git a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/metadata/MetadataAjaxController.java b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/metadata/MetadataAjaxController.java index a1a0d0c5098..f43d9709fc9 100644 --- a/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/metadata/MetadataAjaxController.java +++ b/src/main/java/ca/corefacility/bioinformatics/irida/ria/web/ajax/metadata/MetadataAjaxController.java @@ -115,8 +115,12 @@ public List getMetadataFieldsForProject(@RequestParam Long @PostMapping("/fields") public ResponseEntity createMetadataFieldsForProject(@RequestParam Long projectId, @RequestBody List fields, Locale locale) { - return ResponseEntity.ok( - new AjaxSuccessResponse(service.createMetadataFieldsForProject(projectId, fields, locale))); + try { + return ResponseEntity.ok( + new AjaxSuccessResponse(service.createMetadataFieldsForProject(projectId, fields, locale))); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new AjaxErrorResponse(e.getMessage())); + } } /** diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx index a1c9d198f37..7c6ae862b61 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx @@ -4,6 +4,7 @@ import { Alert, Button, List, + notification, Popover, Progress, Table, @@ -207,19 +208,26 @@ export function SampleMetadataImportReview(): JSX.Element { .map((metadataItem) => metadataItem.rowKey); if (projectId) { - const response = await dispatch( - saveMetadata({ projectId, selectedMetadataKeys }) - ).unwrap(); - - if ( - Object.entries(response.metadataSaveDetails).filter( - ([, metadataSaveDetailsItem]) => metadataSaveDetailsItem.error - ).length === 0 - ) { - navigate(`/${projectId}/sample-metadata/upload/complete`); - } else { - setLoading(false); - } + await dispatch(saveMetadata({ projectId, selectedMetadataKeys })) + .unwrap() + .then(({ metadataSaveDetails }) => { + if ( + Object.entries(metadataSaveDetails).filter( + ([, metadataSaveDetailsItem]) => metadataSaveDetailsItem.error + ).length === 0 + ) { + navigate(`/${projectId}/sample-metadata/upload/complete`); + } else { + setLoading(false); + } + }) + .catch((payload) => { + setLoading(false); + notification.error({ + message: payload.message, + className: "t-metadata-uploader-review-error", + }); + }); } }; diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index ad965407042..951b9c9ec82 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -95,6 +95,8 @@ export const saveMetadata = createAsyncThunk< label: header.name, restriction: header.targetRestriction, })), + }).catch((error) => { + throw new Error(error.response.data.error); }); const selectedSampleList = metadata.filter((metadataItem) => { diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSampleMetadataImportPage.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSampleMetadataImportPage.java index 85eb7a5fd03..471c6b2427e 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSampleMetadataImportPage.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/projects/ProjectSampleMetadataImportPage.java @@ -42,10 +42,14 @@ public class ProjectSampleMetadataImportPage extends AbstractPage { List headers; @FindBy(css = "tbody tr.ant-table-row") List rows; + @FindBy(className = "anticon-exclamation-circle") + List tableErrors; @FindBy(css = "div.ant-alert-error") WebElement validationAlert; @FindBy(css = "div.ant-result-success") WebElement successMessage; + @FindBy(className = "t-metadata-uploader-review-error") + WebElement errorNotification; public ProjectSampleMetadataImportPage(WebDriver driver) { super(driver); @@ -57,22 +61,22 @@ public static ProjectSampleMetadataImportPage goToPage(WebDriver driver) { } public void uploadMetadataFile(String filePath) { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); Path path = Paths.get(filePath); dropzone.sendKeys(path.toAbsolutePath().toString()); - wait.until(ExpectedConditions.visibilityOf(fileBtn)); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + wait.until(ExpectedConditions.urlContains("/columns")); } public void goToReviewPage() { previewBtn.click(); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); - wait.until(ExpectedConditions.visibilityOf(reviewTable)); + wait.until(ExpectedConditions.urlContains("/review")); } public void goToCompletePage() { uploadBtn.click(); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); - wait.until(ExpectedConditions.visibilityOf(successMessage)); + wait.until(ExpectedConditions.urlContains("/complete")); } public void selectSampleNameColumn(String sampleNameColumn) { @@ -107,6 +111,14 @@ public List getValuesForColumnByName(String column) { .collect(Collectors.toList()); } + public void clickUploadButton() { + uploadBtn.click(); + } + + public boolean hasTableErrors() { + return !tableErrors.isEmpty(); + } + public boolean isAlertDisplayed() { return validationAlert.isDisplayed(); } @@ -114,4 +126,11 @@ public boolean isAlertDisplayed() { public boolean isSuccessDisplayed() { return successMessage.isDisplayed(); } + + public boolean isErrorNotificationDisplayed() { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + wait.until(ExpectedConditions.visibilityOf(errorNotification)); + return true; + } + } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java index 449208d32da..51e07294c3a 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectSampleMetadataImportPageIT.java @@ -7,7 +7,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.openqa.selenium.TimeoutException; import ca.corefacility.bioinformatics.irida.ria.integration.AbstractIridaUIITChromeDriver; import ca.corefacility.bioinformatics.irida.ria.integration.pages.LoginPage; @@ -19,7 +18,8 @@ import com.github.springtestdbunit.annotation.DatabaseSetup; import com.google.common.collect.ImmutableList; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; @DatabaseSetup("/ca/corefacility/bioinformatics/irida/ria/web/projects/ProjectSampleMetadataView.xml") public class ProjectSampleMetadataImportPageIT extends AbstractIridaUIITChromeDriver { @@ -108,9 +108,8 @@ public void testFailedUploadByDeletingProject() { deleteProjectPage.deleteProject(); //manager tries to complete metadata import - assertThrows(TimeoutException.class, () -> { - page.goToCompletePage(); - }); + page.clickUploadButton(); + assertTrue(page.isErrorNotificationDisplayed(), "Error notification did not display"); } @Test @@ -127,9 +126,8 @@ public void testFailedUploadByDeletingSamples() { projectSamplesPage.removeSamples(); //manager tries to complete metadata import - assertThrows(TimeoutException.class, () -> { - page.goToCompletePage(); - }); + page.clickUploadButton(); + assertTrue(page.hasTableErrors(), "Table errors did not display"); } @Test @@ -147,9 +145,8 @@ public void testFailedUploadByCreatingNewSample() { projectSamplesPage.clickOk(); //manager tries to complete metadata import - assertThrows(TimeoutException.class, () -> { - page.goToCompletePage(); - }); + page.clickUploadButton(); + assertTrue(page.hasTableErrors(), "Table errors did not display"); } @Test @@ -165,8 +162,7 @@ public void testFailedUploadByRemovingPrivileges() { projectMembersPage.removeManager(0); //manager tries to complete metadata import - assertThrows(TimeoutException.class, () -> { - page.goToCompletePage(); - }); + page.clickUploadButton(); + assertTrue(page.isErrorNotificationDisplayed(), "Error notification did not display"); } } From 4a394f0a30ad075d81d3518383954053e4621ca9 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 16 Dec 2022 16:45:38 -0600 Subject: [PATCH 24/53] updating documentation --- .../user/sample-metadata/images/loading.png | Bin 0 -> 107506 bytes .../images/upload-column-after.png | Bin 0 -> 82186 bytes .../images/upload-column-before.png | Bin 0 -> 58721 bytes .../sample-metadata/images/upload-column.png | Bin 61008 -> 0 bytes .../images/upload-preview-errors.png | Bin 71551 -> 110991 bytes .../images/upload-preview-success.png | Bin 38743 -> 42486 bytes .../sample-metadata/images/upload-preview.png | Bin 55140 -> 95209 bytes .../images/upload-selection.png | Bin 35408 -> 35417 bytes doc/user/user/sample-metadata/index.md | 20 ++++++++++++------ 9 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 doc/user/user/sample-metadata/images/loading.png create mode 100644 doc/user/user/sample-metadata/images/upload-column-after.png create mode 100644 doc/user/user/sample-metadata/images/upload-column-before.png delete mode 100644 doc/user/user/sample-metadata/images/upload-column.png diff --git a/doc/user/user/sample-metadata/images/loading.png b/doc/user/user/sample-metadata/images/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..dd38ae352b4f4434109c04016d43db1ecbe67a9b GIT binary patch literal 107506 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

{y6lbt zuqmAzbI!<}H+V|6{k>$i&3&0Y21{VRIr0%>DrhD?r(u(pbrUfSIW^L;+=r)rGt};@ zbAdmBQLQhE*@^kj17xHVCONGBCEEtk2&T?!b9or@&MX5!0>g3kdRU5K&&16l{KLEf z6?xd{90Qju zjak#jhaQ0LKludmbMnzAbYx+Ke5GPAe~U7Ci+p=e-UpvYsFZeM1&si== zNcxR9xe|O#&4@j;pc&(nvL6%hX}d1r^*<>scDp!!*jA``rA4NMB&?I1G^CdBd}? z+<8!~&e@+OSIFvMttQoa+=1Wo8Czle68$W?Bq0GwrBRR<(%bsf@0lNvi33_hYNU=u z4;t4zMegs%7sDH>EYN){Fdp@hT6{DVV&0pa#Ana1EZ58tAn-2hsV@S2X0vwhu%ZlK zXFtlr%NvNy=F?oUU!@CE(vJEp*w&j{a+dy4e});yoRj{+AcDKXR%-UxMyFVBxP_UsRKdKc&Zjwn@ zl?V*LrOr6Vo9k?}?@4}z(q**!X>HpWea>c%S3qIWg6t{glJl&qLdlqMvpWVx!O#)<7 z`3bzq@WQp5`uo_l;XHQHm^0qAev?z}Iy=>+%KHw@)X?uL2@%`O;IgDloO?MpE33l} zR^z@PAxbz>5R7J$YdSJ)AziLlKbH1Dql&g>CZ;%yaWKt>KuoZJ^MjYCIH33|nA zq`$^o3Rl*zCfLi4Cw9v5P00(>WO$9Dd6;WYT3 zsy+s;Luax=#}l^$`;6kIUT*0;fCHnk!n`IBa`J1CZ%tbDdu6=? zGxN&KWD|cYMtBPm_egV96)0NHmD?c9opYb~dt=JOjl2@3k>bqTBF?^~>FWod?k%G& z&jIj^%3dEdYJaXfB8m00pwe>AoGm7I;Opt^BHp4fHScVZ>rAQ>>TYa^x&HZVae!>+ zhknj;SEsaL2_%eCPKexjWm7#f!?f z@HZ9hSG6gaqTVEF@Up8Ybp_?I7wm*Gu(I3)uw*WtU%-Tz;(GL5Z66pi)$-ne_10M$ zuM?{kR}EK%O!t*y{`*;MAy(LDY%X@bR{ji~-2?@{nS<>seN%0E*cMYjE8r0CK zvE3Y|%x?vkk+YvUx$pQ#ClDif$f&K5`azO}!AU%-?Di`sl|zK))L!(xW(p%*&T+;| zf>G}Ypwqo0OpPSL3D>d$*m%0^U7@x73tf5MsDIGGcIWv{wxCZvuHz}XS}t{3)0C1! zEkzw)T+K~VlA`_+o%*b#nHe>rl)-ersK{zXUk(fXf*lL00DnH#Ol#6gm+b1hG_Z77 z!*4rXn6}!^KBNYt4T&$vwOW@(Q1SOenGqGUuk^c65}n`{wvMLU-JJwTK)G3^527E zXmGk;O?&S;xeMW+f{2roL^-h!?b`|NG5=LXaKcDZ?y%7gZ4(-1|CM6qx5WIPLdO4< za{YS%eqvxIDvplHq`+7cA_1q+CR#3lOThczoc&kQzF*=V2B+!M)XH@duZy3j@lLiw zd#n4s65L#L{{%{nk%|s_61Im+SSR!=`OA#9XY)nY-?jCny2KL&N^jsq;&4?{o!*Xu z%JjACLI3zy{N>+r%)Ymq;dk*2Euf7zyYE6oj(n>-OI?cyoKb{T_E8RTy~Zp-3KXI)6Gq-C-}qGoJ4A_^S*8iZq9^}6UV?E$>#c6 z++tJU-o!sFg2lt(4Dlv8oQ?yg%eXVcH>Ml4XitxmjftsHN(^kl%gJ4555^8CjWb+{ zP$Lf4Om*4*J&bjG^F50C40k0fVYeY$l5Xet36Kcm^w&=B8(MG*FNJ+Gv9s-gkTe`W zZ$DDTfW33lU6BhrNbdxxII8w)ptZdch>Q+?w4u_E zvtVjW_h!avrNknqsK7rY?*oq3I2L@l)Wq3xTyHq7Fg~2eH(V=GVHkW0cbXFu!|P|u zE8DaA^gg1J+=6=VWmCh=(bdFsbtL0hpjfse^LM#D8(#x=DV7E0b!%4WpK)7Y|FdQa zKR@Vg+0|51g^+d~$$T~We7z4m-pp`}a8OPz0mlbeNoaEbXZJA@8HHa5M?wkfxlGX!P%}TCwThlNzT7Dl5{Bh;|Ow z4Z|09)+a(T9my!!H;A`L;4T%=Iy}U}OFkrE1IeKv+@&I_YgJKMZBAwMGlxeL1(SB9 zVukZc{~+fx%NN=N(~CNu2N(ja6QcmjQya|{JFtHYD3#RryC&8#v`690!I4IGKBfYY zZ)ez#Ww)z}6S*WY^Qn|`WB?ZUG@U+^X0NA|Z%XVyo_-Tb-qGjcj1b;?8KeFBiX1%TL28Ylpi6z(TEy|}o!2hxtyCvU-8515 zPKQL~`vyuLNXr?y4Txe@&Qiag*j+%)YB(iN*x$&z3vKd0K|qUI>BzN!D<;*KXs; z-a4^7uK;dk;NZ>N40_^E6LdaPtqS;Bfaz<+2{WjNX5_xC{DwYgMmg0p&6OSiByS2m_1tSzxFI9HzPIy{}w+K1--klNI4M+5qo&ur*2b zeN3_ON*m^D1uaYV_87wau;J|SNVQ9WZ|pOZdunL^hMxQZClPV7ci?0fxV3MU?Qr9k z;Rqla9@7KfbUB7r(^XU~E_LP`sP0=?Vjg$FeVe_7YwUA8Nt;2$m=4C!S2?lqh582x zmX^DBeTuM*Y@Oiv^(tBv4zo{B#9y@Ov%86WEN4JRHVNfK@=+uBNrT{TgUNAsDmXe{ zah@_yN8uY!tSfRay5t{xVIdk zF0L0iWuHRF?916;5epzQtK|B$Nc3VxM9%DMi@`*YW)SRM=;a|_x)MeS+v|%6%B(AV zEh+G@iV>1%XX}~za~*m$`q%ljF@#EQCW=#nqJ3}Hbu0J^N(7LQrC za`alKTowb+fx2B9iK-ktX8W)d4BWmhws}qwmUD4}d?UH7hCj!saS(g}iedi!knd}zzKsd`;XwByoh4pld znYoTm^Cz3zjJ*JHz6d|k(7d7R)5vqor`Fv1`7Gj6zF9toF3Mli_lps_r0zZDyfR`% zUSFz%B>CQy#;y(pwR>T=aXfiZ)+qZwU&AACTCzy=KSU?PFFLf@J zEL-+;DBM?wEu(XrdU&|3J`mQa;>o>mwF`NA@~YX3+qF7@auXSCj8m%T^^Y%HUy6{+ z5-i9RR%0`KJC*CwwH9w9z`}L#Fc^?AWt0mT+E>F*q>2wvS6|Prh$%{pl1=GM_bR=$ zK6I=()2xRn2J{;7>9WHc`BKNVzE@e0ydsbGfWk+?bso>Q$EFaL`1k;^DLy@6z9O5! z6ndN$vAGVKCQwGUq!%QNrQrBn<;Q7aF6R!Hv$KjYJKy~af&D^aldd@NbfN0=&$S=5 z<_v&F(Q;io=?uOCP3=MfO$e0r^!p>ejfhp&0P2qqQ=1Lbv>O*xm{Bwe;kg`Wu2@{r zg;9EfT*9i$P5N^i?Z@?NClT5H$y?UKf$HMTKXR>iWiqFTY+ceaUBM4?ef;_BH+K%8 zT4Ob$?k))N(34ngY8J;(TGLm)$hqeWq_7)Ls;Bz*2+9;(yYKI#f2y>eiE~7udiRBe z`dc?#GGgZrda-d?yUAnDf;jx!XdCKZf4ie|Re<(eyrhfSLhdP2W8SE*B?WP87gcr^ z#~Jf^j160a4dKBI9L>UzYT|0yA{~>m65)g3=IL12Cmvxyjm1G}v-QxG zsO7o=4RIv>6|K;q%^?$iWYZcS?VBoV(}@}dEBx$tk4Gt}?V>3+u|+{h6MV1??%8z! zGNqYks6=t!Qw{$^{cIj2A$5w;>uHHM#hKWP4SH!LHhFkoYo&V5;xGX>JkNc+62ywv zKF0bvki5g0c0c(X=s;hykHy`*+(}{VGQR;2`cD6PRqo43qa4g`>Y)52GgE`5{^KjV z!{M6)>kgTUOOGdcn~1(7(o02TB^^nCo3><++Z|4l$9a4JMQ3U}u4qp>5)V+8HUY+t@NG`~KV=4k0v;&rXY93d0 zQD3I;6H;VTyOO+==e)ZUv75!bC2OyQV7YJy%7_>9pWUp-^3ADJQ;@DC*dQ}Z%E{6o zVPMN0w8LmRyw3vkp{i7eVTTtSM>%9QD3yMbI2l50L90suA=HmLU9BCKBuTn>c`I*4 zoC_Tpu_H;=F84n5>V8Jjqi_O%LlrU7oA1 zO&4pjYMe3zPst8$QD>Y|SZ^LR$s%WrUYxk4b~1Dq+bV}d+JmXzMk)Czpxp3Y88`>G ze?$9*5()%@yZU$E&t-VdQA9TFTEzo3w1e+ao3Lz*9Y&-&q!a`0OParfcb4=GJw99A zmWL43Nk-I$RMNmJRr!a>)IwQkluNbbin!*RKJ5?gsZW_fXTN){bZV#wJ{2)GE}Ttz zw4g~mNpM_~Jy_USJ6`kVczvIJ7Uhs^gwffs<_PMSUYp{VVNG^IVaiyl57)TyBGd^r zXzbKbg}LJWlpl?H&-7MMShl}v*U}#GDdmnMh}k+OKOp1^v(zvk4Rc#LC@Y?(P>I%A z6#=Z2_0B61+o|H^1dxjlOE+8d>xa}c=RR>(Wgf`&u8fO6(B1ArJqxqt^V4&pZgM@5 zL1;A7<0rv`_b@_bjQ$dn1=-j{bcs^tLS7^;JA9-z%G(5c7xxI8XUdND_PhQ|g|3-I zm`R)WchJvDXZ2}67G45*5x*uGZk+LV9a1;*XP_Z7HfZf79y5czpg0d6@XvjGgkfk= z&t_witnZf8yAY`>kT{)Hfp7dK zuzNOjZeOJ@H9`bhK1}HgG@RKS`S{|HWgzk5DC6t2u#~3WC+nS0Fio=Ix`$3Vs+1MUIL z#%shy(p^&URbzeowMDKle~G5C8H)tvn8M1JWyj2$y9GzdaCG{avJuO|z1cI;kS`bN zv;9kobUQ?az2>|Lz#e`C3FQh~h7Jg^g4@D)U$y;#B~(ccs#nFZ~A`oPX8Y9@2*)VX)!J6@;dYYaI&{FKh zo5>-0Nzd1iSU=Bx;mnSvJD`m-H|xqzSvA5BH7F^K)R3Kx!7qlsW-FH@HL0fdyJppM z!uzL-lnW?)0?Y?&<<=A{`p*urIAe(^?|J(+t=Q{85|pP&c|F&QdxuL>J_D`#7eF%w zyoHKMX*Y=Q>g@d!3y`YbZSZ&P)x?PNS+AR~L}u%c*{Yujdhkxz)l-ZENGojB7YB@t zaQ6WQUX6*-dH0$YK9N;0X4=UPiUZ>hR%y^u#B;h5upagGC5it;nXhGin3ui8gx-C3 zTWc`h+?{`v8*j!(&6v{_W(+O!H<2=>*_p#fG1mijDV;&K&ADt#cD2HgwrlL^tgvOA z(P1ETOMmYa12hLv_Z74d=TVHYtOmf5B6#)V~$dAI{;F3ku&uv+!B zvfqgdND-6m7Dq|<_aCi*K^~dj@|nQSu@e~=ksm3qCY!*H1t)7hJ*AhUH2ar&buq|x z(s$=+w2S_WtLCGZ>J>6DDhIfwkI1)@?fzp~Z$TI2D&12(44h#Eez@)PxUFWJcm(fI z&(WFK-0DVqCKZFY-@I2?pE2=j-l)s(`#~G$N3lCYkF>4~5+HGN*A6xQojnI`+ezf~ zKF)9QnzMA1YeMKI?VmQBtl5_7n1Ihdn#zNts*C@CiEI3IsuxfA@~PE*|A4TNZXOB} z28VcJH#-Zg19Q)OzAAK-jIiQAG|}smr4Z-aHO41yv1^PCweQ&K8Rbdb(A;8)bp9A| zULn6h`KYqpJy13>4Y1%2lK=LcQ&~F)``trvH5Es`R7k=@dA5)1&`#X*G zZ*r#@5c@k_`|oR5UibVnqYvS?KQ#acd0}ti)3(1Q=fC$c2D(myyNt z?~2HelB^eGMLghXq<_ovh6!pUSB%owKnqxu^`^Q1HwGtUuw2vMr^Urt+p5S(E?}2OLb%rxB8VX1cwAxR>uA9b?AUfL99^RO$)LzHAy#sB3GR0kztAnA>`EgKWc} zUhv%WeRT(va}^E_mX#$!x~S6j;E^suemM7<@kA({sn^z)x5M>!>8G%h#!nOdU zeBxMWZT7MbMYS^SzRdnQi(;SD%rllqWjoit(%q|4h7D|B&L#itk!nudx6o9l;8bxb zxa#TWX4*!pX>O1T-aM`O+`_+e=9<|3eUI{k_*tP^b*0e`{s<-m&VsIeHwt@UH5sy#`V@y8z9Aw2Uq zGb-4Gd%|M=5ne_0fJ1Ju8|OELm=NxF(`lv_b+0Fjq~<=SObMLy_sgw35iz2{4DKsQ znh#_5IVkDyHaRDvOU~fDx*mS&lhTRub!W+qzwT;4J{I!)8}G>}tHkK>PfunAR^=Vf zmeF92Mz}`f0(0`Lu5SA;bkX<9uSU!743re|-Ob%!3*%;YpWo7`R0xy%j?XWhKtq(0 zALlL@OZ%LK3&05RU6UTHV@Xb4;slG)3-?h9U3?Do5?H;k#j62eC(yf}c=#;=fuR(N zjUZ2EHrTR93hh4ha}=1PY1?S)T&4as>s17>(OoF`?36APMMfCd(6*b8Z`xmi{k8k? zhnZ@hrP1q^fyk4S{fkUbjjujnZS2euAa0%ESQa@+c#HT-mgUi=V>lmP6!{PZ2)E6W z04?fdYnksTu1IH`mhUp;1~2_mWP`{li7NidsEDvAxBfDgD<}V0Wctk7SM>OK`SYfx za4h;mcnZ98jv!BcV3j}87aWYFG6jAl6#XT6r?|seeC+g-=_hKRUkP%C*Rc0_Obgvv zL&^JQMUFG89+rcve2;eb(d!sRgVrM+OsWrEw1Q!K~O%N`J4r9sQbCuAC{T28*5gv=U;6gYz<@+E}WBZ!Kqf5x7l4MvYs} zj>K_Ihw>yBIQ0^ES;%GhMTOz*am{FaB|8H3kc?D+&Rd41N5&g&M}vu0_=vqzlHuQu z?D>rl8~xDI+nWNINE|v>1M7_w3Hd^BMhwUv9%1J%-nZh|j-2Vta|;v79Be*0j~K~B zTdI0Z69m~l&zV}V1W?TXOe`+Ru*(Bx{oQsMr=i|QrjRT5i<`kF=HD-p%C8qmPWJ4v zVyY16KhQbu4Bm0VtZWe_+gk;D?Z63 zb&X|d-ufhI0ZL z=jMT8@q9k7pt|ey9vd6iP`EqM@vLTob1eYewGv{OH&X)y4Mp6lfiNwOGknKN^ASRbdBbGOM zy8qnt#WpH5GV0xOQ~J>V8o<5&HIoq!*u9->`s4Vj}v~QpK0HK5~AAB+v@=~*`<<+g$2Z*d)a+c zFVtMNpS&(kqhD(HzI;G686@xFD6*&zLsOV`qVquxuzU zSu3=bm$GPVe@-xJ9aSgd<}kzj7L?ssjppwPVYt0!S}dtu`V>#R4lRlcEsrvm2$gzc zRhYN+#B~+2q3;~wpCUG94{|4~bPs=Ih%}eMaA2POC{s^fexg>~Iwb6As_}dE!!zJo*U3Jm3xW_+oB4g<{fG`w=2H8O z08@^`5;FHEN%3O3UvPr&pgFXgcI+8={XfIhFqn9JMD&=f8Tvmjq-GU5B)1-)DHacD3kvKP&zGv>k=Z*B$MM`ZW#F zGR;LX1?GVLDY~MmgNlV$Ty?GfCwckF1_8#pg3UbX2e0-pk?y_vfw*EL#elA4hVSml zGs~rmCYvH66`F`5YYn=i#*KDmrcf(@M7%1_uu2RNbWi8kH_R;CApxGg^h*o zhL=v?&wy4*)N=>bUnks<^;94$Mow$2)Zb-t!4If5seWLir1RR=NJ*BEZi4S{O@MB8 zDxY#8CSDwrAdNx@NLmPZ=zG^T)uR}%3E1Vdc}-AJuSC-@W7P*?Rs!L6=3k944MkV%nl{g-Z}~)Nz-R| zKq^4>>}WrrSH&{=ID1zU!ZXMDs=wkD)a9!-4L4MViO|EE0d z(n zU8^#^z3*nHxQf?N)hCz2Kap$#Jd)jJ`mi8~QK8GZNt!i>H^PE3r~fs?M&U?huj+*? zhv=r*R&;eF8bD&a)GJm^4!Yri~SSo8jpD?)g5-8yrO*s zj^@SlWe{fvP!XdqpMAvr{ET_CJ8_|Dpl7}3#xUSkYL{Z26GCX@+_UMB6oZC1cg+wo zb5o;TK;BeRrQt*ybVO*TQMCx87(F!_N5_vEeC7zd_8>wK54qOHmen$5q%;&pDkP?) z7pwpB?E~!-%XgvOGN{%xDP(sm%u*51u)0%Jig9k?YQMNeBcPE#q)@TF8b^AQC2JUEv`RvpwISsfS4$g)Ph7Ay=}6Gd z0+y7|=gXRO-ck*fSu>iDHtc-b)lY;oG=D9}C|#zNv6do!IBFx94Xk-!9hYL_i#NP` z$YW8$-}y!#W9ID>VKtl^t5{ZBDOH-6=ti29-sJQSsG+W)Qf`gjfB`oItiPV&n0ejt z%%@zdV2^M&{o@+q_vrCs$OE zdNOr z4=+yVQ&IVTGPP!^5_8$uls1Wq)%{mgru=I+MR6xJM4Q99N^^8~Hc_=syQ|boe(_|~ zbagZC{@Q5&t2@b{he(-&ngq)LJOO5@68}*n?q*jLalTsLnxbw12G+@Yy`cPQf1Kh$ zjk~DJ^NpA77clOE3P-Cw0y{a8qYQhS@al(VpZGW(BYU6t`9dr|1|2aV3GB&u#rQZ? zgKR~ijTyr`Z8_gB#*4(+NM)Asm2dtltjr}CL@H;apoAv0VP1X@6cD_O(Q{;{>1RM~Tk5Xf9VVuc zL=OYQH+z=XjW2UE6w7Z~i-BA97p^wW8FOqTguW>qWDiWhSOoZlHlt$A^Uzb!`ZqA%ienP!4^YNxYf%Vw| z$IUGPv}5=vNpERAOk{@0w?%#Z{p#v1RH(31Z?J69_ufRvhgY)OIs&e)e0(cysfzll z`Yyc&990sPWa*GZCaM%sdcQlka2_821MO(ezn4eR-R*117*xO5bFBVj*MwUaUhK?i z$8c>fBc!P1t@W3+6Wo$*cTJP6X$ZGaN zv!`wo*CHu6#iB)2jMX+F`X~H2&MKh%n_Fdy_K3#FwsBIaORoL%=w#CWAFxl$rd`4K zzc8)tc>C{henAk&;rD+V2ja#MuBoPn6}Qn3bN|z1?*9~u`%eO_|0Gy+A0~Jj!#_Kq zRJgyY+_d$R+hmDyNyd;QCam}mi@bgH8)|m$2;t2niXv1Dcy3Gm!++Um(!+Sk22r*AZP8sBOwgJgKQMABG5;S9_1zM+a1bU! zi;H$y&Dk8~Ht1a0-7itVMDpg~scl0kx-M%Kpn&bZUAcHT3}yJp){T$&(s5_S z+U(STcvX>60U1zU;K*#V7tL0epzWO`>ABSmoaNMF&lvclgm{jAskSK*w~%P63> zS2fGkkddlAn-}62%mcp{hX-@H+n4-hOtZ!(a^dsfp7?7@{mjNEuJek(g^Lzo8*MyD zyqXO&15{9{1^@44UyDf#ryNcZggW9vcZDi1 zw21?PDeUqlA6l8ncNP2lt2B^}CNkABDjRz@xK;WH>TQHpRL43NlFdv_pDA9FP#f@R z`*iN<1{`_%((W@=fZ2Oazw}H-1s#qu^CG-Qg^czL*xJMjPM}pK=efdjz^Kg|**nB2 zFCt|Khc6dxOeI~#=aWz_2Gu zKM`+cUw;;fDXC9oKU{Tr0+LJ%mBQJIN<&+&LJxqrpW3Ctw*`UeNO&`S!DI zu}d)G<@$Pk{Ls=yx^L|CgG`{R=M@2CL+YNVCkd&-QVsJbm=Wehi;V?pFxB>*U~99| zH6CK4YDmW+-+TuCtS8hR7R1!?f}EsFE6Jp3FXNuqENUG_aWy#eaM(TrzI1jC)Fyb* z4mW<|)N*SmYCk`JI6N4j#a^_rWIODev2;oGx_xixc6W*7heN&)1$(Rdzukz9PS=If!7lD0#b(V2)dFEZN_CuMX&s-`u;@#}cCGBlB;EB;%t$ z*8bQJV7tGHji3@GnGNCK7FIB0{s?^f&9OGoj#jMLt?_N*-pC`=qgVWetA1mYXR{)g z%kuTj1%n{r`uA))dP2(zw&G->F&IOY)0ilqX6E@AJ~J-&{{P_s_IuNf6BOy zX~OiX@VjR4Xl>4>UfDaF%?Y6IYKfxFGw2{k)t6Rpfk!`*mbym4C-aLL_S7!jZM&cm zGhG#58fW&${~8|$h=^IowA_CpxCF}*}@9J4gkQGkq57J zf-_Irqu7!)WK=*!oM!Pva?zLsQ;Tm@@*hDd1w28wFc`AplR0>!MG7!UCLhr#nMD;f zQNh~IX&L__vN8%`-~MXgC8XiFmJS2ix8S50W` z)S-CU=9q0d?U*#Xt3-nW!YQG;@>O_sqW`0T;p1OR;I~MV?0i1yqm|74ukYu-BE&Ei zo0x`nFmFY*jFAHrH^B19kNPP@cZ^J%dMT8h8EZ2bHjcj9x^viN$9=7SnUa&maN1f@+&C6>J^-W$OS&;}{CxbCJD1~13zT*hpM z(P!|^)LkWdI%SMMQoWd3aM`XE5FO+E=z?N9PivL>R=%QXb;RB?r1r5sF2!@Ix_h`2 zn*FmFE@7=TMWeV3y`>j|-R%L0!MxZD7gEPn$!;umY3OFoSZOJKCbh&dxHdRf`5Qou zH1AHQS)+ZNj5J=1cTk2BmbRsN4s`H+?*$WUtv;<}o#U=?)?S|%c!L8y1k27dtEHgl zz+D%K{mI4Ry6(lWMlsu~#Y1xeruGqSbjKw`n62Vx%U~;L9$KW}w|1?yI}>@V*Ynh4 z7g=H1mkd-a60j8QXT!wyu6_{_fS6Xa+;jsYZ=8mWJO>vwnYA|`LNo1$0!Zx-Q|iPhp(*oKGSAu(ozW_0lZsb-*MkweaN zPCqZ+_RD{-6`P7Z*PH^qsC`uIEk&$8tJDFw2A6(dWtTQB1NGMAgyMZIGAf*+~(*VVC4WMQu|!63GShZ+6S-qnA0Uv z9NN|P_~|Yf9gTCN4$sb!x&s4?EANA_90P9V3CDyDa>7=!L$r-7CfAfpJxH43jZDwY zeAJQKNxv7Aq%YkYgbfsZ*)61v^?Qt(d$H{DY^B-bHMN)@JDNvMkbk4*jv5CJL#(-6^(>eTm)N;v+X_TD?Hsi5l{wW6Yc z1w^_ENC%~Nu+Tds^diy;y-Js^D4W@3DWL=d0wNux1qfAo4=n@&f$yMCS@+&` z*LvP}t*`v?ot3~@=S=|m5uyaa?_cN41kj^21o zJ*0Jf%uoW=|5u8Q$J9JEu-Gtoc6*Gn)Wq!l^*2|wvbxOe-m9{{=(c%7#XN7Rn9NUE z!eVX`P*Qo}Ao@0RwjS6aTCKbxrO9rKcKCwacyXE0BezdQVrVms3c7C{q4jOIt<7WWOr9%5yVp!pn}ckd?o@0t&lU687q-aW0YB@`i* zQvs%rUuGWR0aHG_=9cT*bC-fI|FaJ&=E?EfvKY1t!JV6TkD!uWe1KDE%mltcR(blb zAUk4wivvvl34n-J(IOyj93aPvaX)%pGS#jh-&xbt=j8AF@X&(*=uPs*r=yY>Oo8;GoUEkX;yWDLSba)i%i_1 zP=#EYvUKb00Ao|8>8#^Rul)h7NlSAvwT^0zb>6S({L8D5wsZD}YSwH827RNV3pePT zliDMWR$@-yNvu}vkUyps9_@8P8GW0cejd5>rYDqAj@sq=dVbJiGD@gZ!TH+ZE6Vo} z%jkQzD1P02Fxyj}*mr9uXkFYyFU&%R^RCQm&^loSRoU1)J77AO#`OBOhbQfNDX*)h zhf9^<9xP3~y!Yrg~4O z)N5LoH_6?;@+)vcbU3U>KN~?m-pdv+o<0GvqGX7CEG3IMQ3`py z_5Yq(Y-X=)6zoU~XCSS9Zf+CYs+Jsc(hI35MP98MwpS~2HZxpsqiNX@3h2{Fi_X#@ zti{%aE?P;h5r1@=P$2|&r%#*ZSAOiur_XN9&+#-MfQ_yG=j<_Oy#d_?Eo6ifKju!+pTXt-BdNr! zAmUgnJ&<@AQxg0L+g^@56o8ISr-%mr+{ibWAf)ir#7Ypo-`1S(CGR?V?=T)I`uUQ7 z=m!@0w~akJ|3M}$D8w*knEKS5W8}apk0?AXz1(Wx)AYXNQfy|lQ2M5VP}|RSI<)uh zsD2m#3uD5v&chm$QnM@^B~&_uw%a6VXz2Y0gtB2L@8b=r*`Q5?Lt;8rWv*1SqS78hzxc;^-KSR8G_^yzcTTx*c~ zp7c?wv~v_}DSkarQz*35FK9`3se>42zFnX+vEAs#d~N0|q{ zoH26RwYT5VN#ij=r1M64-g-X&Ui`n1uX~GL2Ex82>yghHCRQTO7MF58$fhi-M1~CW zVDovkUNl){K2EFr_8pcpZOHu&**Z|KI*BQx-ot;UOLi`s3|r11)E)e!Eha1b#{LaT z<42-9zUM3#u;L^gasS4!mBvFnv);suhu|XrjRM;J6#P){UGS9x^j2nda+D7I~`g5C3zCt46kEb~~#%%`I+bw|`#+UQqV$ zg|GknfoK1nY}cZk-i&+gFo4?n_cnx`wF4cpEpv6tod4vY;&nH8ubkfRc-z#k|GM@+ z5kmLhX~};E2yFhgO!`(aV`CA3qPfCMJ;15_TQ|2@%0INr>HTvJ^T~YxPssc3m1ox5 znu|b&t{-gI2?Mu-y%PTkK&%S^P>S<$E-+KVi~DcJ7Eyb7)c^SPmvR94=u&fz%b*Z_ zGU}Bnd@t&m!dBOi%0E-e^AC;JKAq+2!U)1#W4mRs|72*p+?hmcC|$}t+k@~QM{++R z^AR^wTSxH|8G*i1EXlMa{mf*MCvSL(nDwG?&gm1gSjKwu7l`)F0l{6!W%13Rw&;19 z@XIVrtt1i59{!fLiu(05EI797p6^!vcTZv*et{e=#|i(M`Gwz%GUxt*^pt&yiwL3D(;+b`?4IPO2~1a8*3PMe(>NNN6Chf&_}Y zRRt>P=hw;=cPq|`NVN_5$IO?sO~la9=Ub=vNJZoJ7&8hoMoo+!Sv#gJs8VcOK5LSH zL0jaYE`Tu3Swk~B$*HYp_*h#%+78Qlayz1BL9csL?%;G|az&5UV0v@={RL$})_y#Y zkA7+~V7dgR8>M%V){ULl}3#-8E3Zd5s4C&QFV=xg-i^G@3Kn!oCNV>?k0iL z8E3zm7)2EEz*|QiCl>3PN)GP5zdMQQ_jXgL+YD?UAgl}Uj8O{)9w9N&A=Oa%t@`idL|DZzYHpTD=Kd*Q~Y`xquO4a7eJ{eg3pQ#D#? z<>-;t;5?Z7{4g?9^;G9J`ue7@pbXAXcUoxjq*P7a%V2jfKGpe9DbFNgr|cBn zZU3I64a+&T$X>$_A6s(g$Hu^R!#?(PaIYNhA^jQ7lb;JFDLk4aWNJvQx)N`d~r3|R-mX=afxvj_MYvKj`f1c2YQXG8QtQ+Nx_7X-$ zmGucfq(yl?r^du?G{dbp5`LAWU6YH!r*p=HP&=;>Y-=ts?Oel{j1bfnsc&B-tx4U9 zM0(nNRY4Pq1`-9(tO`aDI=5M7+Eu6cX$SE9tQD^2+pu9LVSXeakS3~%q9ZE^Cc?V3 z*ScO~s5&_kx^Oy>)rH@4a90|OV%e~DUC={yV`b2~oH#QAel^4k&jew`SsvC2uSrV1 zS+oZGN0}-wYkSvU;3*+ByQl39F|DUjDcWR5n1U?Xb2h(n1gX^f@=|c78;uy2?jPvj z$>KoO3$N7>msAgprii;4!p-Z&I4bW%zDUYw?{@5`d5E5~US#^D36;8pl>&+g?D12= zljX}7U0B(ZP=&3 zhtlAf9lV`oq0ae1&{xQd=cs{2LWBcV6)I8Z>uDUXM|G!jHO!qohY^d^cHX#?)&o1B zI^Fa$*|39?|vA0OM^n2|`#4SvQO%}WyFOO3&SysVNlLh{~N9LFPb?7@}vU5IG zC7J5}{$W+&ixPt}xPwIaj%A2LK_=U)71q_lmT(gW9_`Yq5wBqes|{U*uJ?ZPGng?( zt79D$32$I{0gL5~Cr92ypVM+vZb!Jk;S-w@zEPO1k*N`6oKufwtRC|^4V(>EX&UsJ!0kVe zVOIFrAJ9-Hmmfdkv>DdgH>z;>P%C_+#?a5`BXb9bgROg;rXWUZobNJnNMs29(JT%# zB;cz?O&%0%nBTL9npU2G2+x?0}uBp1Tdw>0P_6*63ehm2r46 zt3-M1V_#5J{XG8Aa=cn4$Y&cSC0S%^rBznZipTPn+6~6o-~Z;VX;TFkncyMsbE!z%X8o;Kqs}+EPXxi5~z>K)Zk=57GBSY099Ld1$nS! zwXrpFjP1idO`Wf|Zx^Je*$Aa=bXC!d#DI-chq~7$v4L(_Vdf_Nfx z3Z2IGu~Rb)D)yODGT)Rqa$RZN5#`%(zaAeE$he%)h=fNc$ERjG_4lj=aDF>5 ziH9J}Vm`!l5dyK_A_^cn)1#kv1}l9J#y`vpQPuq_u)WW`G&B-KknZf@wzcPlw>P^{w8mFREYIV$@tqc|d@bd4w|%Qf@tRaVNXqAunF*NT zIDw9_A^-Pmg7wJ(lNjUk;L(rBhY`Y~br(db={I;a>{bzZ*GJeW1;9r!7kl%bAKA=E zy2#!8Tmwzvv6JMKGqewWiGFzX_~8X2EwMpG9UP~ybA<(K)Oce&3FV!}(!trG>u9MM zAnikpiLx?^lqp>R`gM9KhGL7uze$U1@nmRi&q(f>LMXW9-mimju2s?PPZ_IQrRbTROEVvY=z&WiZfWD`aG) z!cPQ{c%r{BoQXV%QjWB>fqL7htX8s0aFO*|Y2R2N6ycU!O1`O~1<}F3%+h5nwS)gE zm{O_PBZi~efPMR~UcjTr(FOhW0Z51OxDmD%gONQto!}&V>;US7a8wAqKWd?c8OaDK zVVJA&T6=X`bmEW7nQZbxWZe8FR%eBJePXDN4J)Pa{5GzasEb>T_V_J7edSvWru|;M z1N?3Ydeq9Onol31>|D?5kB{dCIgIUeEb-Vbba16?_`kbo>y=c!bb@w3swF!|bD@zz z5^X28UQAzuNP5qYSdJV8zw9r)9C9hx>}^|ttWjD>j_~Di%sgIM-blYmTet4HfZ>LN zdR-DZB4e0trwYbAuOponAmWsl3Km`)>g}4b&!5eBzC&%gioiL^BKxR68uY+jUNeSU z4EMIOD%tDRw)Q)@s!1#edsf|x8_N;)Qy6b$pz1Ds_JQ+!Z;i69bEbx!fM`D52>IpU zILm4-%66`JsXbQn4R)g&oRs4AX^CbU_JKZ2?fS@94fj*>RbwBRtxZYaAIg7YmyT+P zmk$Oph`HIzRHR`u`9=v3CS?^`H^`vgtSw9NzdxmKI9h!mM?_AU5xN6F!#>UvFA-Di ziOon;$slHn<)j7)`b)~3&Oony9-N(<#x0?MZ)27nRC5S3g!L7zAx`OpW5%KDy*bxm zqMcTiJBS+iF!NYl4Q8U8rL0VtY+M;4VZ%u;9hhiw&h}9?e@CNG^4ica^V4k6{kA$6 z^jR=ve1}9CA?xyBw{-eb=bcNKB&b_Q9N3kmEeTu!s&)_q+h7|)){Evr4v8vBok`3a zr$OcWkhdnhLnqQ3ER2q*)s60zp5qGs%PI>KNK>9~;IB0rw_?BeuEpiVG%(V@zT6e@ z0#}nN^Yz$4C!m@48tdC-vQ-{DhjnA>IBA{Hgw{4$8G$_v#oB2^`uc{PRUl;n zGal{loPaDyTp2=9CuJZ36acN9<0BiKJrBIXilZ@Q=vZ0nQv+kh>yTgpw9N}~DwxA^ z&sqj%`J3`nx~{d(8c*1671M{_Q3@(;_td}?5b`A)2+sW7o?Bxt%V{8Iw`q`LZ4G`DgCQRA;cq#%Rq2mC4OO48idX;46TB*2MZlL;v*+efiMEOpa z6m8mD1gfv4psudpiEUkTTsqxzJ!LCViK|3qCv!y*6i9{)#j0XwN14>VOxYY169rrt zUl$D{8=XZ;v|%hQ4zT)eGdSBcBiYbN4|J_;F0w&`d-GeN6XYb8%}^|mjFdUI>kflq zmN97az~ycAgMg97yp`k?yu9*fYNwTg^4|CnE5|ilmsrWSp054Nlq+h>JJ3?hA>2(# zD)99Va`X6cu5fJLF(!R68J)Hd&O-U>5*(Ni|4uUOE5bjgujG0@^?CLE7{BVY zhB6z2l~;YSzyjGo2oHQvW{0Ni?)PM!UukXlMAgP1#&6$SjR+6=Il$L3fjI3Bgd>$> zR!I4EWWqh&A0T2tOKi>Xv^@mhlOE?RoWLQWiW;Iy%!B9eJplrpqEd!x0KSWvqEE8u)XVP%8SMQ7X&UTG}PZ`>kd zZf-EP)!Fuoq|c65py#tixXtMdAU~yRZR4aR$FKqwY;61E=46i}Ae>%^0b;;%f!Ofg zQJEGnJ^V{j5@8G^;AVC2AgAH*@lCab^~Ya*ZjxL$2OJZd-y(viJzO@39}WpwyTJ1I zvm=`(V9L?$3__zbT`3nOp*DX?|z>c!wk=Cm99(fjhr z=l@)5Fju`p^7rA!A&+nVJ#)F%Ec^HDJL}bpe+!;VzJKFyJ?H)x6nq?U4rucIb4o9s zf&fasv-(H#&bW&vD(9*ECG1>pv^yOM!C!i;dUBcn@3om{($j|@h9!sX5t!wN|0w70 zlP>UoOtbzp<=-6L5<>o=(oDV1ILXSONEdGAiDHaZ$hYgn;zvw)6O-=>XpbE#hi`1t z4QT2|U0LHBS>I3yU^~)Xg?L5VHxAY=1UOfFdBbeJ%-)8pBMM^zM48 z-n;sj=e3v2@BclUxg8e#_w0?zKg9psIo_xLS;3i5M+b-H{yc?f-iul7Bg=oZXU4*S z%8r)@sxr_>VAaUGF8)OuW*Zo2N=HXm1md)JcGi3NNz>2IFHa?&#UKe+uPgqf*7VRw7DjzKEe@jYjV9dmL9Jb5)tvfc|+*ETV3&cYQELk*7sLxgmmhK;wv%s_V&sV=F6Lt^#FfT zQ&R_;n?vN~<*Om6ba6_4U3d$91ZML*KuD*9+o_Ws*T39Ml>b88s4+ zGRcnPzQ+gU7+~kA<6|28H_EM(dTC!r*Wf=jjGV z4-N$oC)MQ(!TI)ZYj9b~&f&L#m8!tQh2+p9KC^~mYCcn2;GuwG0Y3r*9r^|Hw%Jy& z$e0%oHfw1pE#;MZy(N3rB1uMPMY62UYDY3MG7iSrMiFhDI9*-cq49C})Rd{x08}Np zs=Pc0#Oe8J%ibV~G`#tp%uT2^M^9fL#KlFktE-DMxodTGbzpS#^EcBn7CV68Gm*Lb z9uOH?dU{Fy*f~+(!yTwLECIOB3lJ9`ei^6?R#Ss-C&p2dM+%9H7Xh2ft*%j!gmzk2 zVkRfSMn>cBy4E*0iwsN90h!L%{)*8ZD$>iqC;VBCjzXkh^U2%qABIQ8)!i356PbgO zm05ix84rmkBw&xB-@PcuaYIv6U3N7}NCfI#Ph+mb!f?fy;C9U4*Iv>tm~+vRr0 z-!A%N4*NeA23M+@e{a3Z^O9nWRffiqhKB?aR@la>OCl+l?9I)eCi9u;N@tDi?NvQ` z^k`^!7^?axk4+If-Z)(b@K(xi zUsZ;m(V366C9N}72Sg0e zTv*8W-JjKtJ-xjE!G$a0DfrFF!Lr7aB7f~q8EM+5H zy3GtCaNnca!*gNr)WU2h4}dgerfrX>#KTWr@-PFXV<`-iL|<1GAmX1<_h(bRx6-8 zHWS9}5k*Z+Pn8h&OA88??hiRTIu7$S9_MauI?+VrD6+UccGHLx77-a9ANRZ2&3gMC z^EetH-D72d6|i{ik8hYDJ(K`GNJvO{npvo*yuT3q2H+2%wzZS4^b2lcBhmYg4bHk} zCY($M21@8!031u&B7N`@xLkjz(xz{yzduJMnO6vzj-Nn!sw7#h;MPWb345^3i8}Yk z(Pf{ezWKP{yf2ss*s_!M>5)>CLEx-(W5coaRXGV5_nSO6lQ6I(UOb}9#K{=TMNbZF zgneeuBh2YlZ5+dZj+OAMXYKBy^XnTJ4A=r0uj z+6{p~l%d*Ja>}d>uADc4fyDVcg>PP^zmy0xF;Q6#FlvF$8R5@0Y$;V!T9`Xq4zHz7XqJ{7;++Et<3jm-?61H zT$eMksQzrJ?nJ76A+c?&W!7!WlzB9p_$X(m7i0&?YfxU-Odm502NTZMv2dMKJsgk1g0 zv}(pobTnCFmla?bXJ&)}2O}m1o0^)6$l%*_;o05YrKP167rm0^I1ZQ+&%Ta**4L;h z9ffDZ^?g`8;81o|k{+$BR|EE1N>p$Bga`;2znV_4tZav+c9PXFLooU(RC}cz{IM|{ z20dctJ32a|a2g*Q6WgAB0JxBXOg@*aIZ@!*R~!Kzk)H(F*eLYd?%lsy<#=@ebG-di zmvVi{gL)7r!?kxP(=sn_@7S>5NSWt0+lT%D8zeqIoJOP32?fjt0~7eDvj8@ogOU`c z$+hW@yR2f=pwb~(hi!=QnN!Qi$XH!pm*h9>UfLD%r!BQh1*irz z{MYhwp}%xiQgZUb_UqpCS9qa491d1rf7I?s!6*snzb4Q-p+&xJOS>F^eY3V+y#HDC zQ9RImupq6Yi)YV5arMq?N#NN--Q6GL6%;6%TZrd4Z@*g}tF$4FYyrX%AgTZ?wA1q5 zHsIs!eSHlB0s@f!hi)ya2l{~QRy#5soA4$BRsc}Ih26uU>FF}S3bNmR2Yi-$(nJ8i z!&dDno*^xuDtzO4nJG#epsLOo5XV$r6!1s8v@wR*AhpD?flUgnV+4VQHzU<v+!9gshy zFV21vw-NieG3c~`GcgKTU+=j+E2o5jr(oCDm#0vE_I7q!0E1zmfv#jetJM66$Vf2v zUEGLSP=}xz>+NgM!IjXy?yaq@CaNfWW1~78k*Seleay2B(n#$l1LScg?PJ#hC26?y zn%JLkkhpw3%D)|nEm3UT8!?%GfB4b!^v(tzCT%%6g!fr<+6Mx4frbb^T!T#DvHslL zToy5}U8dieejj&(D=Q66F zoM}QfZ_DG<3SiJ@*0nJX?6~EzSF;WX5MeG>rmDXF%=ZHvVK9C{a+^)K0NG#;*z_|GT2`YCYoFUruS=i)=!Vu~U;dm9Ho_aEqKJi9%W36+o>Hw1Z`zt~ z*dFvIuu!nZ!YuFlS%q5*pYvg_$_wog1n|h(_G`dGr*x5pLsxiU>;B=nitqpVGXiiEc`E07$;w9HK;RSJ@>@Rn&rs2fe(Zch!tO+)bdC88P!5SiTBch6 zDcV&5gz>Jtjm2l3I%DyPVMax)kGSS8p;oI6`}*V}6QIR`x6T5>8CuIL2im>vr-X@! z;Iq=eAx&<6|Li|-_rEv3WdvfWv*4k%we=^Jmg(R;Hnys2y!N)VqEOzvS)-lx;HQL< zf%xe?hvA}0JypB?ektPq(H)*8RzEHnThK}VG$TtQOt@+_2=vIutg*+T)6V0;89i?n zap6aYMwNJvAZg-xmAi=JbrC5aon!uRe-Mw^RA2*8F|CQR&bAQpjkPxST_Fhx_~fLC z3Cb5Ym{l03XK(kEE6r{}nW|%p>t+q?XqP3r1(NdM+Y-D)(;G$E(Cw4 zHt6$dY5y*jqADLBA79~U1h`0DmfMFvY$_0m=|jdC&}pIs;c)5nSKqXTt*C>Ym9KKw zVNlh&fIh~zGP|dFL_hg~0Hv;r^AW;Pf%Fm;KN*dirQR1=BgOohTTFFjV}EEpC-|v5 z^)8yfg3hGvnj4*pp?XlARulsR12W*K+F=|$KmUb4rJLGl#Am=G$A#I!$;lpw8Gv!j zbO1g>GPCa zxtNGh945PPp&&M4g;7tmvKUm#-t~lvfpJ9N*ifvJfdvA2>V6%9=^Wp=oVVJT@M~s@ z?+zLrvUpcVd5Nck3G~HA|6LPaK{S5}3n_|wjfZFnmDDxnTbiB7&6#Lh{|?SC4van! zMtn=uE5EIIyz|+&t4q1mDuGXo6c-Eef6SegF)&1=3jaCFS(=}~L1}gLkd~fK=Ts@{ z)|ptzUR*%z9lYb8ycRyth3Ph`kb2t67j4Jl)ofd(tPbh;k~D1%Dn6jJjkSNt;`*zv zMxZOz50P8qpcGRhmou7un;Avw!`h*>*i*b{>da{-L={89<%L5~rNf+PEtIPWv<7a7? zM{I1spgCWkdw)gafXpS}UM&(?1Z1vo`}_7D9(%i4zwT&0wzYK(Fj#5Ne#mpw6b)0< z@W-AqK+V)R43>uxST@T2u}*FcJ9}~1_l&TZ7$r#y1LgwgikMaIh{u|}{?E+{>r4#} znp$`{wv;0%NV#{JPh2|HAg-#uIHj(td9FtAme7J_G7#qHLAPRQuQfKl4z$vBU&;Q7 zozU#ALLfx*3{=FWBlrb96h!tEHQb1V!+O(0OS=W^k+SF1a7pkRP>-FRukK2(>m*HV zyN8>hpBNN&_+~SvZGKlV0s#a0ytw1dOnSfojrYWS=jxbaMeY7>m{14>f94cVYRGTadhc-K%x42T_* zetxU2wq~-kw$s^$xC$Ge$&;-xqr%ECPwOM66(@MkD|=-P(??XKW;)01FK-(e9R*BC zh)`}DDf0~zY8NxYa^($G`0j$%Gk;C4-8$?vQkKpdm{8WQ;U$4~hgehZM429Gd5Z^d zIFLH%aQ>!a(XN_Ylxoo9PE6dF}U$AZ@D8{#Uxr{03 zM8Liry(C!wd$1j6HZ;D?sebumhuO_{P=xe%KY*|a2(Zu6O!)-`Ktf_@WCTys_qw4@TnE^xZ)jj3j^xS} zijz_sAQ5vha~OnOaHTTqwF9;t@78<)*t1WHpmJM9=~x!F5(JsTHsq)Ssqy>z#i-J5 z&O{~l+v0m3Hau%;9N-VOukYu+(bIk{`)>P96jMcF71{F7SR(&%1BUP7@6WkStWa+r z4*%n8+|U|#(w}#tF5ghf&%Njxt}AW+)=?OW(0;)jdMhP@h55@=aBb45x?NYyFz^c6 z^Q{C6gk4*&E>UZ*%+KMmQ6>+m_%~S9!Erne(;leZ)vP8#8pDOu&OtV-CTa z=UesARmZnHY5N1oywD`IVfDGByc@Wz5&^Df0o9dH>bQ#NK%J<ZuRlj zd%Jh`uV)p=lH8QBmI)nS5d1Y?zVMa)@V1E3+vUWtI!Y43&M}g|^3>Nxxlgo-R*o84 zNiv$(FR&^_gk-p0W?dE^IA-;~_B{sKtqM#)jZvs?z$8nKh^J~wD0INXD{1X)_#Yd6$V7VCxX zMLYnvCcZx#KV&O0)X9doC9HTSa4@Yc8Oc#)yvZ$z^i7bLJwK?MZ>h4=fickC>B)Cv zRoGEfAB!6_SR*rp=H3u+Da^9xym?SN1siiKRG%|BJ?uUqlvA#B8*&0pImuoph84Ej zUX)6jF`(y7nr5hPtm8WpH}?rt4&F`|oWGUTGHgEc>(@us!DE|(YfP`I!YHEwEFvCq zpsjvANT$Czt#+0e2kb+F3{VJlWRv{rzm65}!oW1j%4&t-Dd6WVBb$XX^YIBIJMjt_ z!rP^T`IkjdjgcTlb~o(`vpA3AecugSY&yv>@TM|)nU_i^Go~~7o1wEDY8G7zleTD0 zVt)Sf_sMUWe!U43^w4{?@KV)fC+_>twHJp2q~P8e(W^3|4qr@zh|lSVUO@!JpqJrh zcWNHl3lKXYsoxsicIMKn;s)J2Jxm6p;r*EQA2pRo5&UnsG~~-PFn&c;S1%ImnoApR zKQ%MUDm6tF0m&aVb@d`c;+q^x9Hq8$FE2-cWY!J|mA#Nv!Gr-TiTXjr>wjEt45>lz=>sA zVe9e*{x0ALGU#$k28yTn09C($5Lt+(dQPEtS#e=WqLt$!ev@l4_Cp}|-6-w*+28$w zp4wk)L6dG!Y2(CudDtvJOt~+b(b8Ml93yg^k7g@m>kZU z{YDE^?y`K1%V$AF`m&*ag*(kcPoZ!91;3nVsPU#r*^r=`nC`Zw45IMZF5obBubhZO zB0#&HmX6_b#4FTHu3iwGKn+kQhfO#o_N+k*-tMRE>$O1YwWCAnY=&xe7+y+#fwfsy z35ci%fBXoGYRzSo2`qlKEx-$LOm*W|Nlh`(OU2l8`lxw%{3vNPiC z-0hwk$te_JI!k(&JL1J08K=MZ8dgi?zrGJ(DbyCas*Ahh;@rDBLH5oizgZtRUeBgnl4`Sd6QGp#5>dFTfqP$2FHA>jQE?<1f z)$Y^-(FseQs!~|%dc5iiQuWKoHI=wj|B7@;uc|63-qEPDgvZwD3C}p!WeeBvU5Mc* zd*>%hY^j|cs!&lfe=eEg8p#DWHySI>xOw)PRP9B9N~^POkhQoxcQHy=S5Tt9xWvH} z(DoIOw$5(a4vvi7Yx$e@{(h=%MKz02-7uA-Pi|C1tQ?;_2sIfYJk8CelQgfd+-RzW z`M|~a#Paj`!%i`)ofr@z!BpKI{z^HCRYm*p?Zgy=!JQ=50(-8ShT@)Fbt&*?^Lue% zP=iBO0B1?;df7-xs|DvviAuK;Ok9R-E9F$&3EI;~kk z*aa08!%TyI2iQX&B5ByeD3iLJCY1BLcIdTeRI1KShm;!lMoLa0q3jXm?%JrJdEQ9{ zDP(K)^ZMassXDWSx$B%>+o`voWPSPiO6mdBRO(k=MwpX{lrJtrbNVeoz&-WYT}>XM zk7}`?g=7s@9&$+SPXCI&-qaG#J}Q&{>9{y9cGC{cr0xIJ3{~P@P(Ucy4ikLsX{_$1 z)OV7e$deV4L8N6`3*viu^i^0C5`Y_j+H^kJtX!yG6ehFia2TS6Go{gSe$Rq~97mPZ zwXzW`&`HM+-?`i}yk*8cjThR?rV2hA&fy&a`s#V6IzBq1ku^3_*Cfl{VCD@cvG3|Kh$^-J!Y zPBwG?k70AU8%m$fNB^)%@ORTtImyl?UW+y%w_iMr%k24#6p}71Z^~UXofuIb2G!c= z6DRF>(g#FDn4h$o_SvmImA`0^KM6l~?n31m7GT;0&U7ijGHCMc5TM%!TiMmtHlC-` z?xa<1Lh1MPMn4a&zh~obtj`P9Hx8z*^xYCI*_OCQ7VBWQIDCejZOH$+ z|DS?0W`RV7X_;P<6+qpLaXGh&X<1GGA5HzP_tfhR--0B*EC4`L=y-a2Lo6(wCn`hx zq34z&M%KXI-rjj#e~2p!SwCmi>9c9(R|Mby`sMzReD2)APVdG)GhyeLBL7p8{tp6{ h01f$Hl}DRBy=dl@@mRl&BKM4aN^Y%$ literal 0 HcmV?d00001 diff --git a/doc/user/user/sample-metadata/images/upload-column-after.png b/doc/user/user/sample-metadata/images/upload-column-after.png new file mode 100644 index 0000000000000000000000000000000000000000..938c5f87a8f190874b88e0663c2b5354e9ae4464 GIT binary patch literal 82186 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%0D^_o$WwKZ%?c+79?1 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 OpsA+&u;hVd;J*Q?x7@`5 literal 0 HcmV?d00001 diff --git a/doc/user/user/sample-metadata/images/upload-column-before.png b/doc/user/user/sample-metadata/images/upload-column-before.png new file mode 100644 index 0000000000000000000000000000000000000000..2475c27b62e4c4f7c2d5e93513b88ba68dce5e35 GIT binary patch literal 58721 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

FZ$={!C3U!>X5Y92OZF)n*D-NF6#i$#dbAX5 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 literal 71551 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 diff --git a/doc/user/user/sample-metadata/images/upload-preview-success.png b/doc/user/user/sample-metadata/images/upload-preview-success.png index 6e2c4f1764e2024e442b142d4fc85a2fe0f21bfe..df4c265657aed8047f090c83f32dac837e3da5a1 100644 GIT binary patch literal 42486 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 literal 38743 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

q{H=ZTiY#nn<^d8=&UQEBmwXj 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 diff --git a/doc/user/user/sample-metadata/images/upload-preview.png b/doc/user/user/sample-metadata/images/upload-preview.png index 469c98cd7be1d7309a7cad9d14dd5335a09e3134..3b5227de0c84b8c2b6f932e1aa451f7d6935ea5c 100644 GIT binary patch literal 95209 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%0DMtO*VsUQ_p-O4s*sj& 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μ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 ZKx(DrJ=7X&twch68R!@TtF#>d{x8Q3p)~*i literal 55140 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 Jl|s7y{|6lE^Pm6# literal 35408 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

h0q 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 Date: Mon, 19 Dec 2022 14:32:56 -0600 Subject: [PATCH 25/53] trying to fix flaky tests --- .../components/UserGroupMembersTable.jsx | 13 ++++------- .../components/AddMemberButton.java | 23 ++----------------- .../ria/integration/groups/UserGroupsIT.java | 15 ++++++++---- .../integration/pages/ProjectMembersPage.java | 13 ++++++----- .../projects/ProjectMembersPageIT.java | 13 +++++++---- .../projects/ProjectUserGroupsPageIT.java | 5 ++-- .../irida/test/integration/TableReset.xml | 2 ++ 7 files changed, 35 insertions(+), 49 deletions(-) diff --git a/src/main/webapp/resources/js/pages/UserGroupsPage/components/UserGroupMembersTable.jsx b/src/main/webapp/resources/js/pages/UserGroupsPage/components/UserGroupMembersTable.jsx index 5dc9c6f82ff..4d4a85a4e29 100644 --- a/src/main/webapp/resources/js/pages/UserGroupsPage/components/UserGroupMembersTable.jsx +++ b/src/main/webapp/resources/js/pages/UserGroupsPage/components/UserGroupMembersTable.jsx @@ -9,17 +9,11 @@ import { import { RemoveTableItemButton } from "../../../components/Buttons"; import { GroupRole } from "../../../components/roles/GroupRole"; import { SPACE_XS } from "../../../styles/spacing"; -import { - formatInternationalizedDateTime -} from "../../../utilities/date-utilities"; +import { formatInternationalizedDateTime } from "../../../utilities/date-utilities"; import { stringSorter } from "../../../utilities/table-utilities"; import { setBaseUrl } from "../../../utilities/url-utilities"; -import { - AddUserToGroupButton -} from "../../admin/components/user-groups/AddUserToGroupButton"; -import { - getPaginationOptions -} from "../../../utilities/antdesign-table-utilities"; +import { AddUserToGroupButton } from "../../admin/components/user-groups/AddUserToGroupButton"; +import { getPaginationOptions } from "../../../utilities/antdesign-table-utilities"; /** * Custom sorter for the name column since this is NOT paged server side. @@ -56,6 +50,7 @@ export default function UserGroupMembersTable({ ); }, + defaultSortOrder: "ascend", }, { title: i18n("UserGroupMembersTable.role"), diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java index 14d46aec874..80458ccfeed 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java @@ -33,21 +33,6 @@ public static AddMemberButton getAddMemberButton(WebDriver driver) { return PageFactory.initElements(driver, AddMemberButton.class); } - public void addMember(WebDriver driver, String name) { - wait.until(ExpectedConditions.elementToBeClickable(addMemberBtn)); - addMemberBtn.click(); - wait.until(ExpectedConditions.visibilityOf(addMemberModal)); - AbstractPage.waitForTime(100); - WebElement input = driver.switchTo().activeElement(); - input.sendKeys(name); - wait.until(ExpectedConditions.visibilityOf(newMemberList.get(0))); - newMemberList.get(0).click(); - WebElement modalOkBtn = addMemberModal.findElement(By.cssSelector(".ant-btn.ant-btn-primary")); - wait.until(ExpectedConditions.elementToBeClickable(modalOkBtn)); - modalOkBtn.click(); - wait.until(ExpectedConditions.invisibilityOf(addMemberModal)); - } - public void addMember(WebDriver driver, String name, String role) { wait.until(ExpectedConditions.elementToBeClickable(addMemberBtn)); addMemberBtn.click(); @@ -57,12 +42,8 @@ public void addMember(WebDriver driver, String name, String role) { input.sendKeys(name); wait.until(ExpectedConditions.visibilityOf(newMemberList.get(0))); newMemberList.get(0).click(); - if(role.equals("GROUP_OWNER")) { - WebElement element = driver.findElements(By.className("t-group-role-owner")).get(0); - wait.until(ExpectedConditions.elementToBeClickable(element)); - element.click(); - } else { - WebElement element = driver.findElements(By.className("t-group-role-member")).get(0); + if (role.equals("PROJECT_OWNER")) { + WebElement element = driver.findElements(By.cssSelector("#projectRole > label")).get(1); wait.until(ExpectedConditions.elementToBeClickable(element)); element.click(); } diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/groups/UserGroupsIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/groups/UserGroupsIT.java index 3a7550889b9..a82623e069f 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/groups/UserGroupsIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/groups/UserGroupsIT.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import ca.corefacility.bioinformatics.irida.model.enums.ProjectRole; import ca.corefacility.bioinformatics.irida.ria.integration.AbstractIridaUIITChromeDriver; import ca.corefacility.bioinformatics.irida.ria.integration.pages.LoginPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.ProjectMembersPage; @@ -32,7 +33,8 @@ public void testUserGroupsAsManager() { final String PRE_CREATION_URL = driver().getCurrentUrl(); listingPage.createNewUserGroup(GROUP_NAME); listingPage.validateRouteChange(PRE_CREATION_URL); - assertFalse(driver().getCurrentUrl().contains("/admin/groups"), "Does not redirect to admin panel user details page"); + assertFalse(driver().getCurrentUrl().contains("/admin/groups"), + "Does not redirect to admin panel user details page"); assertTrue(driver().getCurrentUrl().contains("/groups"), "Redirects user to main app user details page"); UserGroupsDetailsPage detailsPage = UserGroupsDetailsPage.initPage(driver()); @@ -56,7 +58,8 @@ public void testUserGroupsAsManager() { final String PRE_DELETION_URL = driver().getCurrentUrl(); detailsPage.deleteGroup(); listingPage.validateRouteChange(PRE_DELETION_URL); - assertFalse(driver().getCurrentUrl().endsWith("/admin/groups"), "Does not redirect to admin panel user groups page"); + assertFalse(driver().getCurrentUrl().endsWith("/admin/groups"), + "Does not redirect to admin panel user groups page"); assertTrue(driver().getCurrentUrl().endsWith("/groups"), "Redirects user to main app user groups page"); assertEquals(2, listingPage.getNumberOfExistingUserGroups(), "Should have 2 user groups"); } @@ -99,7 +102,8 @@ public void testUserGroupsAsAdmin() { final String PRE_DELETION_URL = driver().getCurrentUrl(); detailsPage.deleteGroup(); listingPage.validateRouteChange(PRE_DELETION_URL); - assertTrue(driver().getCurrentUrl().endsWith("/admin/groups"), "Redirects user to admin panel user groups page"); + assertTrue(driver().getCurrentUrl().endsWith("/admin/groups"), + "Redirects user to admin panel user groups page"); assertEquals(2, listingPage.getNumberOfExistingUserGroups(), "Should have 2 user groups"); } @@ -110,7 +114,7 @@ public void testAddGroupMemberWhenManagerOnMemberProjectAsCollaborator() { LoginPage.loginAsUser(driver()); ProjectMembersPage projectMembersPage = ProjectMembersPage.goToRemoteProject(driver(), PROJECT_ID); // Add manager as collaborator on project - projectMembersPage.addUserToProject("mrtest"); + projectMembersPage.addUserToProject("mrtest", ProjectRole.PROJECT_USER.toString()); LoginPage.logout(driver()); // Login as manager and create a new group @@ -157,7 +161,8 @@ public void testAddUserGroupMemberWithSelectedRole() { final String PRE_CREATION_URL = driver().getCurrentUrl(); listingPage.createNewUserGroup(GROUP_NAME); listingPage.validateRouteChange(PRE_CREATION_URL); - assertFalse(driver().getCurrentUrl().contains("/admin/groups"), "Does not redirect to admin panel user details page"); + assertFalse(driver().getCurrentUrl().contains("/admin/groups"), + "Does not redirect to admin panel user details page"); assertTrue(driver().getCurrentUrl().contains("/groups"), "Redirects user to main app user details page"); UserGroupsDetailsPage detailsPage = UserGroupsDetailsPage.initPage(driver()); diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/ProjectMembersPage.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/ProjectMembersPage.java index 823775c5a89..d92c8000896 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/ProjectMembersPage.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/pages/ProjectMembersPage.java @@ -1,7 +1,8 @@ package ca.corefacility.bioinformatics.irida.ria.integration.pages; -import ca.corefacility.bioinformatics.irida.ria.integration.components.AddMemberButton; -import ca.corefacility.bioinformatics.irida.ria.integration.components.AntTable; +import java.time.Duration; +import java.util.List; + import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -10,8 +11,8 @@ import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; -import java.time.Duration; -import java.util.List; +import ca.corefacility.bioinformatics.irida.ria.integration.components.AddMemberButton; +import ca.corefacility.bioinformatics.irida.ria.integration.components.AntTable; /** *

@@ -103,8 +104,8 @@ public boolean isNotificationDisplayed() { return true; } - public void addUserToProject(String name) { - addMemberButton.addMember(driver, name); + public void addUserToProject(String name, String role) { + addMemberButton.addMember(driver, name, role); } public boolean isAddMemberBtnVisible() { diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectMembersPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectMembersPageIT.java index 25444e22c2a..15f566554a1 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectMembersPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectMembersPageIT.java @@ -1,5 +1,7 @@ package ca.corefacility.bioinformatics.irida.ria.integration.projects; +import org.junit.jupiter.api.Test; + import ca.corefacility.bioinformatics.irida.model.enums.ProjectMetadataRole; import ca.corefacility.bioinformatics.irida.model.enums.ProjectRole; import ca.corefacility.bioinformatics.irida.ria.integration.AbstractIridaUIITChromeDriver; @@ -9,8 +11,9 @@ import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectDetailsPage; import ca.corefacility.bioinformatics.irida.ria.integration.pages.projects.ProjectSyncPage; import ca.corefacility.bioinformatics.irida.ria.integration.utilities.RemoteApiUtilities; + import com.github.springtestdbunit.annotation.DatabaseSetup; -import org.junit.jupiter.api.Test; +import com.github.springtestdbunit.annotation.DatabaseTearDown; import static org.junit.jupiter.api.Assertions.*; @@ -20,6 +23,7 @@ *

*/ @DatabaseSetup("/ca/corefacility/bioinformatics/irida/ria/web/ProjectsPageIT.xml") +@DatabaseTearDown("/ca/corefacility/bioinformatics/irida/test/integration/TableReset.xml") public class ProjectMembersPageIT extends AbstractIridaUIITChromeDriver { @Test @@ -40,7 +44,7 @@ public void testCanManagePageSetUp() { assertEquals(2, page.getNumberOfMembers(), "Should be 2 member in the project"); // Test Add user to project - page.addUserToProject("test"); + page.addUserToProject("test", ProjectRole.PROJECT_USER.toString()); page.isNotificationDisplayed(); assertEquals(3, page.getNumberOfMembers(), "Should be 3 members in the project"); @@ -99,9 +103,8 @@ public void testRemoteProjectManagerPageSetup() { ProjectMembersPage remoteProjectMembersPage = ProjectMembersPage.goToRemoteProject(driver(), projectId); assertEquals(1, remoteProjectMembersPage.getNumberOfMembers(), "Should be 1 members in the project"); - remoteProjectMembersPage.addUserToProject("Mr. Manager"); + remoteProjectMembersPage.addUserToProject("Mr. Manager", ProjectRole.PROJECT_OWNER.toString()); assertTrue(remoteProjectMembersPage.isNotificationDisplayed()); - remoteProjectMembersPage.updateUserRole(0, ProjectRole.PROJECT_OWNER.toString()); assertEquals(2, remoteProjectMembersPage.getNumberOfMembers(), "Should be 2 members in the project"); LoginPage.loginAsManager(driver()); @@ -113,7 +116,7 @@ public void testRemoteProjectManagerPageSetup() { ProjectMembersPage managerRemoteProjectMembersPage = ProjectMembersPage.goToRemoteProject(driver(), projectId); assertTrue(managerRemoteProjectMembersPage.isAddMemberBtnVisible(), "Add member button should be visible"); - managerRemoteProjectMembersPage.addUserToProject("testUser"); + managerRemoteProjectMembersPage.addUserToProject("testUser", ProjectRole.PROJECT_USER.toString()); assertTrue(remoteProjectMembersPage.isNotificationDisplayed()); assertEquals(3, remoteProjectMembersPage.getNumberOfMembers(), "Should be 3 members in the project"); managerRemoteProjectMembersPage.removeUser(0); diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectUserGroupsPageIT.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectUserGroupsPageIT.java index 1fdae061721..a09d3cbcbfc 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectUserGroupsPageIT.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/projects/ProjectUserGroupsPageIT.java @@ -68,12 +68,11 @@ public void testRemoteProjectPageAsAManager() { page.submitProject(); String pathTokens[] = driver().getCurrentUrl().split("/"); - Long projectId = Long.valueOf(pathTokens[pathTokens.length-1]); + Long projectId = Long.valueOf(pathTokens[pathTokens.length - 1]); ProjectMembersPage remoteProjectMembersPage = ProjectMembersPage.goToRemoteProject(driver(), projectId); assertEquals(1, remoteProjectMembersPage.getNumberOfMembers(), "Should be 1 members in the project"); - remoteProjectMembersPage.addUserToProject("Mr. Manager"); - remoteProjectMembersPage.updateUserRole(0, ProjectRole.PROJECT_OWNER.toString()); + remoteProjectMembersPage.addUserToProject("Mr. Manager", ProjectRole.PROJECT_OWNER.toString()); assertEquals(2, remoteProjectMembersPage.getNumberOfMembers(), "Should be 2 members in the project"); LoginPage.loginAsManager(driver()); diff --git a/src/test/resources/ca/corefacility/bioinformatics/irida/test/integration/TableReset.xml b/src/test/resources/ca/corefacility/bioinformatics/irida/test/integration/TableReset.xml index 6d97954755a..dd04465b732 100644 --- a/src/test/resources/ca/corefacility/bioinformatics/irida/test/integration/TableReset.xml +++ b/src/test/resources/ca/corefacility/bioinformatics/irida/test/integration/TableReset.xml @@ -99,6 +99,8 @@ + + From 84c31f220593a0d66060401d945651ba665b7958 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 19 Dec 2022 17:25:00 -0600 Subject: [PATCH 26/53] trying to fix flaky tests --- .../js/components/Buttons/AddMemberButton.jsx | 6 +++++- .../integration/components/AddMemberButton.java | 14 +++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/resources/js/components/Buttons/AddMemberButton.jsx b/src/main/webapp/resources/js/components/Buttons/AddMemberButton.jsx index 2d888be7e44..2c63657062e 100644 --- a/src/main/webapp/resources/js/components/Buttons/AddMemberButton.jsx +++ b/src/main/webapp/resources/js/components/Buttons/AddMemberButton.jsx @@ -173,7 +173,11 @@ export function AddMemberButton({ }} > {projectRoles.map((role) => ( - + {role.label} ))} diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java index 80458ccfeed..b921c11ff3a 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java @@ -43,7 +43,19 @@ public void addMember(WebDriver driver, String name, String role) { wait.until(ExpectedConditions.visibilityOf(newMemberList.get(0))); newMemberList.get(0).click(); if (role.equals("PROJECT_OWNER")) { - WebElement element = driver.findElements(By.cssSelector("#projectRole > label")).get(1); + WebElement element = driver.findElements(By.className("t-project-role-owner")).get(0); + wait.until(ExpectedConditions.elementToBeClickable(element)); + element.click(); + } else if (role.equals("PROJECT_USER")) { + WebElement element = driver.findElements(By.className("t-project-role-collaborator")).get(0); + wait.until(ExpectedConditions.elementToBeClickable(element)); + element.click(); + } else if (role.equals("GROUP_OWNER")) { + WebElement element = driver.findElements(By.className("t-group-role-owner")).get(0); + wait.until(ExpectedConditions.elementToBeClickable(element)); + element.click(); + } else if (role.equals("GROUP_MEMBER")) { + WebElement element = driver.findElements(By.className("t-group-role-member")).get(0); wait.until(ExpectedConditions.elementToBeClickable(element)); element.click(); } From 874f6ab11802841bb3b0f2bc7c6d566e86e1b68f Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Tue, 20 Dec 2022 08:46:45 -0600 Subject: [PATCH 27/53] trying to fix flaky tests --- .../irida/ria/integration/components/AddMemberButton.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java index b921c11ff3a..00cbd9631bf 100644 --- a/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java +++ b/src/test/java/ca/corefacility/bioinformatics/irida/ria/integration/components/AddMemberButton.java @@ -43,7 +43,7 @@ public void addMember(WebDriver driver, String name, String role) { wait.until(ExpectedConditions.visibilityOf(newMemberList.get(0))); newMemberList.get(0).click(); if (role.equals("PROJECT_OWNER")) { - WebElement element = driver.findElements(By.className("t-project-role-owner")).get(0); + WebElement element = driver.findElements(By.className("t-project-role-manager")).get(0); wait.until(ExpectedConditions.elementToBeClickable(element)); element.click(); } else if (role.equals("PROJECT_USER")) { From eb581b8501124b4ffcc6d213e8bd6624ac57e7be Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 10:22:42 -0600 Subject: [PATCH 28/53] removing old restriction code --- .../projects/samples-metadata-import/redux/importReducer.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 951b9c9ec82..7a062dc28fc 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -127,8 +127,6 @@ export const saveMetadata = createAsyncThunk< .map(([key, value]) => ({ field: key, value, - restriction: headers.filter((header) => header.name === key)[0] - .targetRestriction, })); return { name, sampleId, metadata: metadataFields }; }); @@ -205,8 +203,6 @@ export const saveMetadata = createAsyncThunk< .map(([key, value]) => ({ field: key, value, - restriction: headers.filter((header) => header.name === key)[0] - .targetRestriction, })); return { name, metadata: metadataFields }; }); From d0b34951729cd3f0daa459248ba73bbaa2937048 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 10:42:01 -0600 Subject: [PATCH 29/53] adding more comments --- .../projects/samples-metadata-import/redux/importReducer.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 7a062dc28fc..e48f555ee7c 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -87,6 +87,8 @@ export const saveMetadata = createAsyncThunk< state.importReducer; const metadataSaveDetails: Record = {}; + //save header details (metadata field & restriction) + //if failure display error notification on page await createMetadataFieldsForProject({ projectId, body: headers @@ -99,6 +101,8 @@ export const saveMetadata = createAsyncThunk< throw new Error(error.response.data.error); }); + //save selected metadata entry rows + //during a partial failure only save data that has not already been saved const selectedSampleList = metadata.filter((metadataItem) => { const name: string = metadataItem[sampleNameColumn]; return ( From 4712e69ac8787e4238a85a17bec852d98e153c06 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 11:13:04 -0600 Subject: [PATCH 30/53] using metadataSaveDetails from state --- .../redux/importReducer.ts | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index e48f555ee7c..26fcc083ded 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -83,9 +83,15 @@ export const saveMetadata = createAsyncThunk< `importReducer/saveMetadata`, async ({ projectId, selectedMetadataKeys }, { dispatch, getState }) => { const state: ImportState = getState(); - const { sampleNameColumn, headers, metadata, metadataValidateDetails } = - state.importReducer; - const metadataSaveDetails: Record = {}; + const { + sampleNameColumn, + headers, + metadata, + metadataValidateDetails, + metadataSaveDetails, + } = state.importReducer; + + const newMetadataSaveDetails = { ...metadataSaveDetails }; //save header details (metadata field & restriction) //if failure display error notification on page @@ -98,6 +104,8 @@ export const saveMetadata = createAsyncThunk< restriction: header.targetRestriction, })), }).catch((error) => { + console.log("HERE1"); + console.log(error); throw new Error(error.response.data.error); }); @@ -107,7 +115,7 @@ export const saveMetadata = createAsyncThunk< const name: string = metadataItem[sampleNameColumn]; return ( selectedMetadataKeys.includes(metadataItem.rowKey) && - metadataSaveDetails[name]?.saved !== true + newMetadataSaveDetails[name]?.saved !== true ); }); @@ -153,17 +161,19 @@ export const saveMetadata = createAsyncThunk< const { responses } = response.data; Object.keys(responses).map((key) => { const { error, errorMessage } = responses[key]; - metadataSaveDetails[key] = { + newMetadataSaveDetails[key] = { saved: !error, error: errorMessage, }; }); }) .catch((error) => { + console.log("HERE2"); + console.log(error); const { responses } = error.response.data; Object.keys(responses).map((key) => { const { error, errorMessage } = responses[key]; - metadataSaveDetails[key] = { + newMetadataSaveDetails[key] = { saved: !error, error: errorMessage, }; @@ -182,7 +192,7 @@ export const saveMetadata = createAsyncThunk< for (const chunk of chunkedUpdateSamplesPromises) { await Promise.all(chunk).then(() => { dispatch( - setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) + setMetadataSaveDetails(Object.assign({}, newMetadataSaveDetails)) ); }); } @@ -229,17 +239,19 @@ export const saveMetadata = createAsyncThunk< const { responses } = response.data; Object.keys(responses).map((key) => { const { error, errorMessage } = responses[key]; - metadataSaveDetails[key] = { + newMetadataSaveDetails[key] = { saved: !error, error: errorMessage, }; }); }) .catch((error) => { + console.log("HERE3"); + console.log(error); const { responses } = error.response.data; Object.keys(responses).map((key) => { const { error, errorMessage } = responses[key]; - metadataSaveDetails[key] = { + newMetadataSaveDetails[key] = { saved: !error, error: errorMessage, }; @@ -258,13 +270,13 @@ export const saveMetadata = createAsyncThunk< for (const chunk of chunkedCreateSamplesPromises) { await Promise.all(chunk).then(() => { dispatch( - setMetadataSaveDetails(Object.assign({}, metadataSaveDetails)) + setMetadataSaveDetails(Object.assign({}, newMetadataSaveDetails)) ); }); } } - return { metadataSaveDetails }; + return { metadataSaveDetails: newMetadataSaveDetails }; } ); From 3eda36cae2c77d65cf02cda447b24fad0320e37b Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 11:18:02 -0600 Subject: [PATCH 31/53] removing log statements --- .../projects/samples-metadata-import/redux/importReducer.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 26fcc083ded..3de5e8a2eed 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -104,8 +104,6 @@ export const saveMetadata = createAsyncThunk< restriction: header.targetRestriction, })), }).catch((error) => { - console.log("HERE1"); - console.log(error); throw new Error(error.response.data.error); }); @@ -168,8 +166,6 @@ export const saveMetadata = createAsyncThunk< }); }) .catch((error) => { - console.log("HERE2"); - console.log(error); const { responses } = error.response.data; Object.keys(responses).map((key) => { const { error, errorMessage } = responses[key]; @@ -246,8 +242,6 @@ export const saveMetadata = createAsyncThunk< }); }) .catch((error) => { - console.log("HERE3"); - console.log(error); const { responses } = error.response.data; Object.keys(responses).map((key) => { const { error, errorMessage } = responses[key]; From 8f6bde80e99f4db32664cf7a413c76e4e7f206ed Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 12:09:26 -0600 Subject: [PATCH 32/53] adding partial success upload notification --- src/main/resources/i18n/messages.properties | 1 + .../components/SampleMetadataImportReview.tsx | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 259e662eb50..4c87a86557d 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -2018,6 +2018,7 @@ SampleMetadataImportReview.alert.valid.rule2=minimum 3 characters long SampleMetadataImportReview.alert.valid.rule3=contain only alphanumeric characters and '-', '_' SampleMetadataImportReview.alert.locked.description.popover.content={0} sample metadata SampleMetadataImportReview.alert.locked.description=\ cannot be imported, because these samples are locked in the current project. +SampleMetadataImportReview.notification.partialError=There are {0} rows that were unable to be saved. Please review the errors in the table. SampleMetadataImportComplete.result.title=The sample metadata imported successfully! SampleMetadataImportComplete.button.upload=Upload another file diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx index 7c6ae862b61..832eba86ee8 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx @@ -211,14 +211,19 @@ export function SampleMetadataImportReview(): JSX.Element { await dispatch(saveMetadata({ projectId, selectedMetadataKeys })) .unwrap() .then(({ metadataSaveDetails }) => { - if ( - Object.entries(metadataSaveDetails).filter( - ([, metadataSaveDetailsItem]) => metadataSaveDetailsItem.error - ).length === 0 - ) { + const errorCount = Object.entries(metadataSaveDetails).filter( + ([, metadataSaveDetailsItem]) => metadataSaveDetailsItem.error + ).length; + if (errorCount === 0) { navigate(`/${projectId}/sample-metadata/upload/complete`); } else { setLoading(false); + notification.error({ + message: i18n( + "SampleMetadataImportReview.notification.partialError", + errorCount + ), + }); } }) .catch((payload) => { From 8665d0c031927435772176010f7a2b1d312da5fb Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 13:10:18 -0600 Subject: [PATCH 33/53] removing returned metadataSaveDetails as it is redundant --- .../components/SampleMetadataImportReview.tsx | 2 +- .../samples-metadata-import/redux/importReducer.ts | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx index 832eba86ee8..21fd2b9acd9 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx @@ -210,7 +210,7 @@ export function SampleMetadataImportReview(): JSX.Element { if (projectId) { await dispatch(saveMetadata({ projectId, selectedMetadataKeys })) .unwrap() - .then(({ metadataSaveDetails }) => { + .then(() => { const errorCount = Object.entries(metadataSaveDetails).filter( ([, metadataSaveDetailsItem]) => metadataSaveDetailsItem.error ).length; diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 3de5e8a2eed..9dd0ef86868 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -44,10 +44,6 @@ interface MetadataSaveDetailsItem { error?: string; } -interface SaveMetadataResponse { - metadataSaveDetails: Record; -} - interface SetSampleNameColumnResponse { sampleNameColumn: string; metadataValidateDetails: Record; @@ -76,7 +72,7 @@ Redux async thunk for saving the metadata to samples. For more information on redux async thunks see: https://redux-toolkit.js.org/api/createAsyncThunk */ export const saveMetadata = createAsyncThunk< - SaveMetadataResponse, + string, { projectId: string; selectedMetadataKeys: string[] }, { dispatch: ImportDispatch; state: ImportState } >( @@ -270,7 +266,7 @@ export const saveMetadata = createAsyncThunk< } } - return { metadataSaveDetails: newMetadataSaveDetails }; + return "success"; } ); @@ -436,7 +432,4 @@ export const importReducer = createReducer(initialState, (builder) => { state.sampleNameColumn = action.payload.sampleNameColumn; state.metadataValidateDetails = action.payload.metadataValidateDetails; }); - builder.addCase(saveMetadata.fulfilled, (state, action) => { - state.metadataSaveDetails = action.payload.metadataSaveDetails; - }); }); From 687f4bf19a4bf9dae4774d3137f8b19fcce41d53 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 14:34:02 -0600 Subject: [PATCH 34/53] creating a import-utilities.js file for refactoring --- .../resources/js/apis/projects/samples.ts | 37 +++++++- .../redux/import-utilities.ts | 36 ++++++++ .../redux/importReducer.ts | 87 +++++++------------ 3 files changed, 102 insertions(+), 58 deletions(-) create mode 100644 src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 7fe33568c8d..db0fa70c08b 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -25,6 +25,19 @@ export interface LockedSamplesResponse { sampleIds: number[]; } +export interface CreateSamplesResponse { + responses: Record; +} + +export interface UpdateSamplesResponse { + responses: Record; +} + +export interface SampleItemResponse { + error: boolean; + errorMessage: string; +} + export interface MetadataItem { [field: string]: string; rowKey: string; @@ -135,8 +148,16 @@ export async function createSamples({ }: { projectId: string; body: SampleRequest[]; -}) { - return await axios.post(`${URL}/${projectId}/samples/create`, body); +}): Promise { + try { + const { data } = await axios.post( + `${URL}/${projectId}/samples/create`, + body + ); + return Promise.resolve(data); + } catch (error: any) { + return Promise.reject(error.response.data); + } } export async function updateSamples({ @@ -145,8 +166,16 @@ export async function updateSamples({ }: { projectId: string; body: SampleRequest[]; -}) { - return await axios.patch(`${URL}/${projectId}/samples/update`, body); +}): Promise { + try { + const { data } = await axios.patch( + `${URL}/${projectId}/samples/update`, + body + ); + return Promise.resolve(data); + } catch (error: any) { + return Promise.reject(error.response.data); + } } /** diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts new file mode 100644 index 00000000000..7b36b9ba586 --- /dev/null +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -0,0 +1,36 @@ +import { + MetadataItem, + SampleItemResponse, +} from "../../../../apis/projects/samples"; +import { MetadataHeaderItem, MetadataSaveDetailsItem } from "./importReducer"; + +export function updateMetadataSaveDetails( + responses: Record, + metadataSaveDetails: Record +) { + Object.keys(responses).map((key) => { + const { error, errorMessage } = responses[key]; + metadataSaveDetails[key] = { + saved: !error, + error: errorMessage, + }; + }); + return metadataSaveDetails; +} + +export function createMetadataFields( + sampleNameColumn: string, + headers: MetadataHeaderItem[], + metadataItem: MetadataItem +) { + return Object.entries(metadataItem) + .filter( + ([key]) => + headers.map((header) => header.name).includes(key) && + key !== sampleNameColumn + ) + .map(([key, value]) => ({ + field: key, + value, + })); +} diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 9dd0ef86868..da42af56f81 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -25,6 +25,10 @@ import { MetadataField, } from "../../../../apis/metadata/field"; import { Restriction } from "../../../../utilities/restriction-utilities"; +import { + createMetadataFields, + updateMetadataSaveDetails, +} from "./import-utilities"; export interface MetadataHeaderItem { name: string; @@ -33,18 +37,18 @@ export interface MetadataHeaderItem { rowKey: string; } -interface MetadataValidateDetailsItem { +export interface MetadataValidateDetailsItem { isSampleNameValid: boolean; foundSampleId?: number; locked: boolean; } -interface MetadataSaveDetailsItem { +export interface MetadataSaveDetailsItem { saved: boolean; error?: string; } -interface SetSampleNameColumnResponse { +export interface SetSampleNameColumnResponse { sampleNameColumn: string; metadataValidateDetails: Record; } @@ -87,7 +91,7 @@ export const saveMetadata = createAsyncThunk< metadataSaveDetails, } = state.importReducer; - const newMetadataSaveDetails = { ...metadataSaveDetails }; + let newMetadataSaveDetails = { ...metadataSaveDetails }; //save header details (metadata field & restriction) //if failure display error notification on page @@ -124,16 +128,11 @@ export const saveMetadata = createAsyncThunk< .map((metadataItem) => { const name = metadataItem[sampleNameColumn]; const sampleId = metadataValidateDetails[name].foundSampleId; - const metadataFields = Object.entries(metadataItem) - .filter( - ([key]) => - headers.map((header) => header.name).includes(key) && - key !== sampleNameColumn - ) - .map(([key, value]) => ({ - field: key, - value, - })); + const metadataFields = createMetadataFields( + sampleNameColumn, + headers, + metadataItem + ); return { name, sampleId, metadata: metadataFields }; }); //create a request with a list of project samples to be updated @@ -152,24 +151,15 @@ export const saveMetadata = createAsyncThunk< body: chunk, }) .then((response) => { - const { responses } = response.data; - Object.keys(responses).map((key) => { - const { error, errorMessage } = responses[key]; - newMetadataSaveDetails[key] = { - saved: !error, - error: errorMessage, - }; - }); + const { responses } = response; + newMetadataSaveDetails = updateMetadataSaveDetails( + responses, + newMetadataSaveDetails + ); }) .catch((error) => { const { responses } = error.response.data; - Object.keys(responses).map((key) => { - const { error, errorMessage } = responses[key]; - newMetadataSaveDetails[key] = { - saved: !error, - error: errorMessage, - }; - }); + updateMetadataSaveDetails(responses, newMetadataSaveDetails); }) ); } @@ -200,16 +190,11 @@ export const saveMetadata = createAsyncThunk< }) .map((metadataItem) => { const name = metadataItem[sampleNameColumn]; - const metadataFields = Object.entries(metadataItem) - .filter( - ([key]) => - headers.map((header) => header.name).includes(key) && - key !== sampleNameColumn - ) - .map(([key, value]) => ({ - field: key, - value, - })); + const metadataFields = createMetadataFields( + sampleNameColumn, + headers, + metadataItem + ); return { name, metadata: metadataFields }; }); //create a request with a list of project samples to be created @@ -228,24 +213,18 @@ export const saveMetadata = createAsyncThunk< body: chunk, }) .then((response) => { - const { responses } = response.data; - Object.keys(responses).map((key) => { - const { error, errorMessage } = responses[key]; - newMetadataSaveDetails[key] = { - saved: !error, - error: errorMessage, - }; - }); + const { responses } = response; + newMetadataSaveDetails = updateMetadataSaveDetails( + responses, + newMetadataSaveDetails + ); }) .catch((error) => { const { responses } = error.response.data; - Object.keys(responses).map((key) => { - const { error, errorMessage } = responses[key]; - newMetadataSaveDetails[key] = { - saved: !error, - error: errorMessage, - }; - }); + newMetadataSaveDetails = updateMetadataSaveDetails( + responses, + newMetadataSaveDetails + ); }) ); } From 6ee25903aea4c99d990cb9d807230d903ed99f10 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 15:34:10 -0600 Subject: [PATCH 35/53] simplifying code and calling Promise.all --- .../redux/import-utilities.ts | 11 ++++- .../redux/importReducer.ts | 49 ++++++------------- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index 7b36b9ba586..08978e8c878 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -2,11 +2,17 @@ import { MetadataItem, SampleItemResponse, } from "../../../../apis/projects/samples"; -import { MetadataHeaderItem, MetadataSaveDetailsItem } from "./importReducer"; +import { + MetadataHeaderItem, + MetadataSaveDetailsItem, + setMetadataSaveDetails, +} from "./importReducer"; +import { ImportDispatch } from "./store"; export function updateMetadataSaveDetails( responses: Record, - metadataSaveDetails: Record + metadataSaveDetails: Record, + dispatch: ImportDispatch ) { Object.keys(responses).map((key) => { const { error, errorMessage } = responses[key]; @@ -15,6 +21,7 @@ export function updateMetadataSaveDetails( error: errorMessage, }; }); + dispatch(setMetadataSaveDetails(Object.assign({}, metadataSaveDetails))); return metadataSaveDetails; } diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index da42af56f81..430c3ed0733 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -154,30 +154,22 @@ export const saveMetadata = createAsyncThunk< const { responses } = response; newMetadataSaveDetails = updateMetadataSaveDetails( responses, - newMetadataSaveDetails + newMetadataSaveDetails, + dispatch ); }) .catch((error) => { - const { responses } = error.response.data; - updateMetadataSaveDetails(responses, newMetadataSaveDetails); + const { responses } = error; + newMetadataSaveDetails = updateMetadataSaveDetails( + responses, + newMetadataSaveDetails, + dispatch + ); }) ); } //send multiple update project sample requests in parallel - const updateSamplesPromiseChunkSize = calculateChunkSize( - updateSamplesPromises.length - ); - const chunkedUpdateSamplesPromises = chunkArray( - updateSamplesPromises, - updateSamplesPromiseChunkSize - ); - for (const chunk of chunkedUpdateSamplesPromises) { - await Promise.all(chunk).then(() => { - dispatch( - setMetadataSaveDetails(Object.assign({}, newMetadataSaveDetails)) - ); - }); - } + await Promise.all(updateSamplesPromises); } //create new project samples @@ -216,33 +208,22 @@ export const saveMetadata = createAsyncThunk< const { responses } = response; newMetadataSaveDetails = updateMetadataSaveDetails( responses, - newMetadataSaveDetails + newMetadataSaveDetails, + dispatch ); }) .catch((error) => { - const { responses } = error.response.data; + const { responses } = error; newMetadataSaveDetails = updateMetadataSaveDetails( responses, - newMetadataSaveDetails + newMetadataSaveDetails, + dispatch ); }) ); } //send multiple create project sample requests in parallel - const createSamplesPromiseChunkSize = calculateChunkSize( - updateSamplesPromises.length - ); - const chunkedCreateSamplesPromises = chunkArray( - createSamplesPromises, - createSamplesPromiseChunkSize - ); - for (const chunk of chunkedCreateSamplesPromises) { - await Promise.all(chunk).then(() => { - dispatch( - setMetadataSaveDetails(Object.assign({}, newMetadataSaveDetails)) - ); - }); - } + await Promise.all(createSamplesPromises); } return "success"; From 0d84b2c53cd7b88ea6b195486e146ae648d43517 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 15:46:45 -0600 Subject: [PATCH 36/53] using forEach instead of map --- .../projects/samples-metadata-import/redux/import-utilities.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index 08978e8c878..d46f76dc27c 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -14,7 +14,7 @@ export function updateMetadataSaveDetails( metadataSaveDetails: Record, dispatch: ImportDispatch ) { - Object.keys(responses).map((key) => { + Object.keys(responses).forEach((key) => { const { error, errorMessage } = responses[key]; metadataSaveDetails[key] = { saved: !error, From 54cc39e2e25d01d27e572c0b363f4b3cd8b64344 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 21 Dec 2022 16:03:05 -0600 Subject: [PATCH 37/53] returning more explicit filter --- .../projects/samples-metadata-import/redux/importReducer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 430c3ed0733..0b628c0b804 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -123,7 +123,7 @@ export const saveMetadata = createAsyncThunk< .filter((metadataItem) => { const name = metadataItem[sampleNameColumn]; const sampleId = metadataValidateDetails[name].foundSampleId; - return sampleId; + return typeof sampleId === "number"; }) .map((metadataItem) => { const name = metadataItem[sampleNameColumn]; @@ -178,7 +178,7 @@ export const saveMetadata = createAsyncThunk< .filter((metadataItem) => { const name = metadataItem[sampleNameColumn]; const sampleId = metadataValidateDetails[name].foundSampleId; - return !sampleId; + return !(typeof sampleId === "number"); }) .map((metadataItem) => { const name = metadataItem[sampleNameColumn]; From 03e22a8824f48bf0906aabaf16423751acb9f1fd Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Thu, 22 Dec 2022 10:00:20 -0600 Subject: [PATCH 38/53] adding comments --- .../redux/import-utilities.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index d46f76dc27c..130149c1694 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -9,6 +9,12 @@ import { } from "./importReducer"; import { ImportDispatch } from "./store"; +/** + * Save the responses from creating and updating samples in a hash. + * @param responses - from creating and updating samples + * @param metadataSaveDetails - the hash storing the responses + * @param dispatch - a function of the Redux store to dispatch an action to trigger a state change + */ export function updateMetadataSaveDetails( responses: Record, metadataSaveDetails: Record, @@ -25,6 +31,12 @@ export function updateMetadataSaveDetails( return metadataSaveDetails; } +/** + * Create a list of metadata fields and their values for each sample. + * @param sampleNameColumn - the name of the header that represents the sample name column + * @param headers - a list of the table headers + * @param metadataItem - the data of a row in the table representing the metadata of a sample + */ export function createMetadataFields( sampleNameColumn: string, headers: MetadataHeaderItem[], From 9071f0c195cecbe68fb0136fd04d4c9d61cf9b2a Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Thu, 22 Dec 2022 15:49:06 -0600 Subject: [PATCH 39/53] more refactoring --- .../resources/js/apis/projects/samples.ts | 30 ++- .../components/SampleMetadataImportReview.tsx | 8 +- .../redux/import-utilities.ts | 34 +-- .../redux/importReducer.ts | 201 ++++++++---------- .../resources/js/utilities/array-utilities.ts | 8 +- 5 files changed, 117 insertions(+), 164 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index db0fa70c08b..dfeb943b3b9 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -25,11 +25,7 @@ export interface LockedSamplesResponse { sampleIds: number[]; } -export interface CreateSamplesResponse { - responses: Record; -} - -export interface UpdateSamplesResponse { +export interface SamplesResponse { responses: Record; } @@ -48,13 +44,27 @@ export interface FieldUpdate { value: string; } -export interface SampleRequest { +export interface UpdateSampleItem extends CreateSampleItem { + sampleId: number; +} + +export interface CreateSampleItem { name: string; organism?: string; description?: string; metadata: FieldUpdate[]; } +export interface UpdateSamplesRequest { + projectId: string; + body: UpdateSampleItem[]; +} + +export interface CreateSamplesRequest { + projectId: string; + body: CreateSampleItem[]; +} + export interface ValidateSampleNamesRequest { samples: ValidateSampleNameModel[]; associatedProjectIds?: number[]; @@ -147,8 +157,8 @@ export async function createSamples({ body, }: { projectId: string; - body: SampleRequest[]; -}): Promise { + body: CreateSampleItem[]; +}): Promise { try { const { data } = await axios.post( `${URL}/${projectId}/samples/create`, @@ -165,8 +175,8 @@ export async function updateSamples({ body, }: { projectId: string; - body: SampleRequest[]; -}): Promise { + body: UpdateSampleItem[]; +}): Promise { try { const { data } = await axios.patch( `${URL}/${projectId}/samples/update`, diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx index 21fd2b9acd9..37ff5af8bb5 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx @@ -76,6 +76,7 @@ export function SampleMetadataImportReview(): JSX.Element { metadata, metadataValidateDetails, metadataSaveDetails, + percentComplete, } = useImportSelector((state: ImportState) => state.importReducer); const dispatch: ImportDispatch = useImportDispatch(); @@ -94,11 +95,8 @@ export function SampleMetadataImportReview(): JSX.Element { }; React.useEffect(() => { - const savedCount = Object.entries(metadataSaveDetails).filter( - ([, metadataSaveDetailsItem]) => metadataSaveDetailsItem.saved - ).length; - setProgress(Math.round((savedCount / selected.length) * 100)); - }, [metadataSaveDetails, selected.length]); + setProgress(percentComplete); + }, [percentComplete]); React.useEffect(() => { const sampleColumn: ColumnType = { diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index 130149c1694..01029447518 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -1,35 +1,5 @@ -import { - MetadataItem, - SampleItemResponse, -} from "../../../../apis/projects/samples"; -import { - MetadataHeaderItem, - MetadataSaveDetailsItem, - setMetadataSaveDetails, -} from "./importReducer"; -import { ImportDispatch } from "./store"; - -/** - * Save the responses from creating and updating samples in a hash. - * @param responses - from creating and updating samples - * @param metadataSaveDetails - the hash storing the responses - * @param dispatch - a function of the Redux store to dispatch an action to trigger a state change - */ -export function updateMetadataSaveDetails( - responses: Record, - metadataSaveDetails: Record, - dispatch: ImportDispatch -) { - Object.keys(responses).forEach((key) => { - const { error, errorMessage } = responses[key]; - metadataSaveDetails[key] = { - saved: !error, - error: errorMessage, - }; - }); - dispatch(setMetadataSaveDetails(Object.assign({}, metadataSaveDetails))); - return metadataSaveDetails; -} +import { MetadataItem } from "../../../../apis/projects/samples"; +import { MetadataHeaderItem } from "./importReducer"; /** * Create a list of metadata fields and their values for each sample. diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 0b628c0b804..d63b5393c75 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -5,30 +5,27 @@ import { } from "@reduxjs/toolkit"; import { validateSampleName } from "../../../../apis/metadata/sample-utils"; import { + CreateSampleItem, createSamples, getLockedSamples, LockedSamplesResponse, MetadataItem, + SampleItemResponse, + UpdateSampleItem, updateSamples, ValidateSampleNameModel, validateSamples, ValidateSamplesResponse, } from "../../../../apis/projects/samples"; import { ImportDispatch, ImportState } from "./store"; -import { - calculateChunkSize, - chunkArray, -} from "../../../../utilities/array-utilities"; +import { chunkArray } from "../../../../utilities/array-utilities"; import { createMetadataFieldsForProject, getMetadataFieldsForProject, MetadataField, } from "../../../../apis/metadata/field"; import { Restriction } from "../../../../utilities/restriction-utilities"; -import { - createMetadataFields, - updateMetadataSaveDetails, -} from "./import-utilities"; +import { createMetadataFields } from "./import-utilities"; export interface MetadataHeaderItem { name: string; @@ -48,6 +45,10 @@ export interface MetadataSaveDetailsItem { error?: string; } +export interface SaveMetadataResponse { + metadataSaveDetails: Record; +} + export interface SetSampleNameColumnResponse { sampleNameColumn: string; metadataValidateDetails: Record; @@ -60,6 +61,7 @@ export interface InitialState { metadata: MetadataItem[]; metadataValidateDetails: Record; metadataSaveDetails: Record; + percentComplete: number; } const initialState: InitialState = { @@ -69,6 +71,7 @@ const initialState: InitialState = { metadata: [], metadataValidateDetails: {}, metadataSaveDetails: {}, + percentComplete: 0, }; /* @@ -76,7 +79,7 @@ Redux async thunk for saving the metadata to samples. For more information on redux async thunks see: https://redux-toolkit.js.org/api/createAsyncThunk */ export const saveMetadata = createAsyncThunk< - string, + SaveMetadataResponse, { projectId: string; selectedMetadataKeys: string[] }, { dispatch: ImportDispatch; state: ImportState } >( @@ -91,7 +94,7 @@ export const saveMetadata = createAsyncThunk< metadataSaveDetails, } = state.importReducer; - let newMetadataSaveDetails = { ...metadataSaveDetails }; + const newMetadataSaveDetails = { ...metadataSaveDetails }; //save header details (metadata field & restriction) //if failure display error notification on page @@ -117,116 +120,70 @@ export const saveMetadata = createAsyncThunk< ); }); - //update existing project samples - const updateSamplesPromises: Promise[] = []; - const updateSampleList = selectedSampleList - .filter((metadataItem) => { - const name = metadataItem[sampleNameColumn]; - const sampleId = metadataValidateDetails[name].foundSampleId; - return typeof sampleId === "number"; - }) - .map((metadataItem) => { - const name = metadataItem[sampleNameColumn]; - const sampleId = metadataValidateDetails[name].foundSampleId; - const metadataFields = createMetadataFields( - sampleNameColumn, - headers, - metadataItem - ); - return { name, sampleId, metadata: metadataFields }; - }); - //create a request with a list of project samples to be updated - if (updateSampleList.length > 0) { - const updateSampleListChunkSize = calculateChunkSize( - updateSampleList.length - ); - const chunkedUpdateSampleList = chunkArray( - updateSampleList, - updateSampleListChunkSize + const createSampleList: CreateSampleItem[] = []; + const updateSampleList: UpdateSampleItem[] = []; + + selectedSampleList.forEach((metadataItem) => { + const name = metadataItem[sampleNameColumn]; + const sampleId = metadataValidateDetails[name].foundSampleId; + const metadata = createMetadataFields( + sampleNameColumn, + headers, + metadataItem ); - for (const chunk of chunkedUpdateSampleList) { - updateSamplesPromises.push( - updateSamples({ - projectId, - body: chunk, - }) - .then((response) => { - const { responses } = response; - newMetadataSaveDetails = updateMetadataSaveDetails( - responses, - newMetadataSaveDetails, - dispatch - ); - }) - .catch((error) => { - const { responses } = error; - newMetadataSaveDetails = updateMetadataSaveDetails( - responses, - newMetadataSaveDetails, - dispatch - ); - }) - ); + + if (typeof sampleId === "number") { + updateSampleList.push({ name, sampleId, metadata }); + } else { + createSampleList.push({ name, metadata }); } - //send multiple update project sample requests in parallel - await Promise.all(updateSamplesPromises); - } + }); - //create new project samples - const createSamplesPromises: Promise[] = []; - const createSampleList = selectedSampleList - .filter((metadataItem) => { - const name = metadataItem[sampleNameColumn]; - const sampleId = metadataValidateDetails[name].foundSampleId; - return !(typeof sampleId === "number"); - }) - .map((metadataItem) => { - const name = metadataItem[sampleNameColumn]; - const metadataFields = createMetadataFields( - sampleNameColumn, - headers, - metadataItem - ); - return { name, metadata: metadataFields }; - }); - //create a request with a list of project samples to be created - if (createSampleList.length > 0) { - const createSampleListChunkSize = calculateChunkSize( - updateSampleList.length + const promiseList: Promise[] = []; + const chunkedCreateSampleList = chunkArray(createSampleList); + const chunkedUpdateSampleList = chunkArray(updateSampleList); + + chunkedUpdateSampleList.forEach((chunk) => { + promiseList.push( + updateSamples({ projectId, body: chunk }) + .then(handleResponse) + .catch(handleResponse) ); - const chunkedCreateSampleList = chunkArray( - createSampleList, - createSampleListChunkSize + }); + + chunkedCreateSampleList.forEach((chunk) => { + promiseList.push( + createSamples({ projectId, body: chunk }) + .then(handleResponse) + .catch(handleResponse) ); - for (const chunk of chunkedCreateSampleList) { - createSamplesPromises.push( - createSamples({ - projectId, - body: chunk, - }) - .then((response) => { - const { responses } = response; - newMetadataSaveDetails = updateMetadataSaveDetails( - responses, - newMetadataSaveDetails, - dispatch - ); - }) - .catch((error) => { - const { responses } = error; - newMetadataSaveDetails = updateMetadataSaveDetails( - responses, - newMetadataSaveDetails, - dispatch - ); - }) - ); - } - //send multiple create project sample requests in parallel - await Promise.all(createSamplesPromises); + }); + + await Promise.all(promiseList); + + function handleResponse({ + responses, + }: { + responses: Record; + }) { + dispatch( + updatePercentComplete( + Math.round( + (Object.keys(responses).length / selectedSampleList.length) * 100 + ) + ) + ); + Object.keys(responses).forEach((key) => { + const { error, errorMessage } = responses[key]; + newMetadataSaveDetails[key] = { + saved: !error, + error: errorMessage, + }; + }); + return; } - return "success"; + return { metadataSaveDetails: newMetadataSaveDetails }; } ); @@ -363,6 +320,17 @@ export const setMetadataSaveDetails = createAction( }) ); +/* +Redux action for update the progress bar. +For more information on redux actions see: https://redux-toolkit.js.org/api/createAction + */ +const updatePercentComplete = createAction( + `importReducer/updatePercentComplete`, + (amount: number) => ({ + payload: { amount }, + }) +); + /* Redux reducer for project metadata. For more information on redux reducers see: https://redux-toolkit.js.org/api/createReducer @@ -378,6 +346,7 @@ export const importReducer = createReducer(initialState, (builder) => { state.metadata = []; state.metadataValidateDetails = {}; state.metadataSaveDetails = {}; + state.percentComplete = 0; }); builder.addCase(setMetadata, (state, action) => { state.metadata = action.payload.metadata; @@ -392,4 +361,10 @@ export const importReducer = createReducer(initialState, (builder) => { state.sampleNameColumn = action.payload.sampleNameColumn; state.metadataValidateDetails = action.payload.metadataValidateDetails; }); + builder.addCase(saveMetadata.fulfilled, (state, action) => { + state.metadataSaveDetails = action.payload.metadataSaveDetails; + }); + builder.addCase(updatePercentComplete, (state, action) => { + state.percentComplete = state.percentComplete + action.payload.amount; + }); }); diff --git a/src/main/webapp/resources/js/utilities/array-utilities.ts b/src/main/webapp/resources/js/utilities/array-utilities.ts index d7fc57a94e4..d544566af76 100644 --- a/src/main/webapp/resources/js/utilities/array-utilities.ts +++ b/src/main/webapp/resources/js/utilities/array-utilities.ts @@ -1,12 +1,12 @@ /** - * Splits an array into multiple, smaller arrays of the given size + * Splits an array into multiple, smaller arrays * * @param items the array to be chunked - * @param size the size of the chunk * * @returns a chunked array */ -export function chunkArray(items: any[], size: number) { +export function chunkArray(items: any[]) { + const size = calculateChunkSize(items.length); const chunks = []; items = [].concat(...items); @@ -24,7 +24,7 @@ export function chunkArray(items: any[], size: number) { * * @returns the chunk size */ -export function calculateChunkSize(arraySize: number) { +function calculateChunkSize(arraySize: number) { const MIN = 10; const MAX = 100; const estimated = Math.ceil(arraySize / 10); From 2cd44f6a8e37911ae579b7f87683b65887734ec0 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 23 Dec 2022 12:54:31 -0600 Subject: [PATCH 40/53] more refactoring --- .../resources/js/apis/projects/samples.ts | 4 +- .../components/SampleMetadataImportReview.tsx | 2 +- .../redux/import-utilities.ts | 52 +++++- .../redux/importReducer.ts | 159 ++++++++---------- 4 files changed, 122 insertions(+), 95 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index dfeb943b3b9..c5db136a707 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -166,7 +166,7 @@ export async function createSamples({ ); return Promise.resolve(data); } catch (error: any) { - return Promise.reject(error.response.data); + return Promise.resolve(error.response.data); } } @@ -184,7 +184,7 @@ export async function updateSamples({ ); return Promise.resolve(data); } catch (error: any) { - return Promise.reject(error.response.data); + return Promise.resolve(error.response.data); } } diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx index 37ff5af8bb5..bc8cdf9d4d9 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx @@ -227,7 +227,7 @@ export function SampleMetadataImportReview(): JSX.Element { .catch((payload) => { setLoading(false); notification.error({ - message: payload.message, + message: payload, className: "t-metadata-uploader-review-error", }); }); diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index 01029447518..ea39217b452 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -1,5 +1,53 @@ -import { MetadataItem } from "../../../../apis/projects/samples"; -import { MetadataHeaderItem } from "./importReducer"; +import { + CreateSampleItem, + MetadataItem, + SamplesResponse, + UpdateSampleItem, +} from "../../../../apis/projects/samples"; +import { + MetadataHeaderItem, + MetadataSaveDetailsItem, + updatePercentComplete, +} from "./importReducer"; +import { ImportDispatch } from "./store"; +import { chunkArray } from "../../../../utilities/array-utilities"; + +export function createPromiseList( + sampleList: CreateSampleItem[] | UpdateSampleItem[], + sampleFunction: (p: { + body: any[]; + projectId: string; + }) => Promise, + projectId: string, + totalCount: number, + metadataSaveDetails: Record, + dispatch: ImportDispatch +) { + const newMetadataSaveDetails = { ...metadataSaveDetails }; + const promiseList: Promise[] = []; + const chunkedSampleList = chunkArray(sampleList); + + chunkedSampleList.forEach((chunk) => { + promiseList.push( + sampleFunction({ projectId, body: chunk }).then(({ responses }) => { + dispatch( + updatePercentComplete( + Math.round((Object.keys(responses).length / totalCount) * 100) + ) + ); + Object.keys(responses).forEach((key) => { + const { error, errorMessage } = responses[key]; + newMetadataSaveDetails[key] = { + saved: !error, + error: errorMessage, + }; + }); + }) + ); + }); + + return { promiseList, newMetadataSaveDetails }; +} /** * Create a list of metadata fields and their values for each sample. diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index d63b5393c75..edf52c3884b 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -10,7 +10,6 @@ import { getLockedSamples, LockedSamplesResponse, MetadataItem, - SampleItemResponse, UpdateSampleItem, updateSamples, ValidateSampleNameModel, @@ -18,14 +17,13 @@ import { ValidateSamplesResponse, } from "../../../../apis/projects/samples"; import { ImportDispatch, ImportState } from "./store"; -import { chunkArray } from "../../../../utilities/array-utilities"; import { createMetadataFieldsForProject, getMetadataFieldsForProject, MetadataField, } from "../../../../apis/metadata/field"; import { Restriction } from "../../../../utilities/restriction-utilities"; -import { createMetadataFields } from "./import-utilities"; +import { createMetadataFields, createPromiseList } from "./import-utilities"; export interface MetadataHeaderItem { name: string; @@ -81,12 +79,15 @@ For more information on redux async thunks see: https://redux-toolkit.js.org/api export const saveMetadata = createAsyncThunk< SaveMetadataResponse, { projectId: string; selectedMetadataKeys: string[] }, - { dispatch: ImportDispatch; state: ImportState } + { dispatch: ImportDispatch; state: ImportState; rejectValue: string } >( `importReducer/saveMetadata`, - async ({ projectId, selectedMetadataKeys }, { dispatch, getState }) => { + async ( + { projectId, selectedMetadataKeys }, + { dispatch, getState, rejectWithValue } + ) => { const state: ImportState = getState(); - const { + let { sampleNameColumn, headers, metadata, @@ -94,96 +95,74 @@ export const saveMetadata = createAsyncThunk< metadataSaveDetails, } = state.importReducer; - const newMetadataSaveDetails = { ...metadataSaveDetails }; - - //save header details (metadata field & restriction) - //if failure display error notification on page - await createMetadataFieldsForProject({ - projectId, - body: headers - .filter((header) => header.name !== sampleNameColumn) - .map((header) => ({ - label: header.name, - restriction: header.targetRestriction, - })), - }).catch((error) => { - throw new Error(error.response.data.error); - }); - - //save selected metadata entry rows - //during a partial failure only save data that has not already been saved - const selectedSampleList = metadata.filter((metadataItem) => { - const name: string = metadataItem[sampleNameColumn]; - return ( - selectedMetadataKeys.includes(metadataItem.rowKey) && - newMetadataSaveDetails[name]?.saved !== true - ); - }); - - const createSampleList: CreateSampleItem[] = []; - const updateSampleList: UpdateSampleItem[] = []; + try { + //save header details (metadata field & restriction) + //if failure display error notification on page + await createMetadataFieldsForProject({ + projectId, + body: headers + .filter((header) => header.name !== sampleNameColumn) + .map((header) => ({ + label: header.name, + restriction: header.targetRestriction, + })), + }).catch((error) => { + throw new Error(error.response.data.error); + }); - selectedSampleList.forEach((metadataItem) => { - const name = metadataItem[sampleNameColumn]; - const sampleId = metadataValidateDetails[name].foundSampleId; - const metadata = createMetadataFields( - sampleNameColumn, - headers, - metadataItem - ); + //save selected metadata entry rows + //during a partial failure only save data that has not already been saved + const selectedSampleList = metadata.filter((metadataItem) => { + const name: string = metadataItem[sampleNameColumn]; + return ( + selectedMetadataKeys.includes(metadataItem.rowKey) && + metadataSaveDetails[name]?.saved !== true + ); + }); - if (typeof sampleId === "number") { - updateSampleList.push({ name, sampleId, metadata }); - } else { - createSampleList.push({ name, metadata }); - } - }); + const createSampleList: CreateSampleItem[] = []; + const updateSampleList: UpdateSampleItem[] = []; - const promiseList: Promise[] = []; - const chunkedCreateSampleList = chunkArray(createSampleList); - const chunkedUpdateSampleList = chunkArray(updateSampleList); + selectedSampleList.forEach((metadataItem) => { + const name = metadataItem[sampleNameColumn]; + const sampleId = metadataValidateDetails[name].foundSampleId; + const metadata = createMetadataFields( + sampleNameColumn, + headers, + metadataItem + ); - chunkedUpdateSampleList.forEach((chunk) => { - promiseList.push( - updateSamples({ projectId, body: chunk }) - .then(handleResponse) - .catch(handleResponse) - ); - }); + if (typeof sampleId === "number") { + updateSampleList.push({ name, sampleId, metadata }); + } else { + createSampleList.push({ name, metadata }); + } + }); - chunkedCreateSampleList.forEach((chunk) => { - promiseList.push( - createSamples({ projectId, body: chunk }) - .then(handleResponse) - .catch(handleResponse) + let { promiseList, newMetadataSaveDetails } = createPromiseList( + createSampleList, + createSamples, + projectId, + selectedSampleList.length, + metadataSaveDetails, + dispatch ); - }); + await Promise.all(promiseList); - await Promise.all(promiseList); - - function handleResponse({ - responses, - }: { - responses: Record; - }) { - dispatch( - updatePercentComplete( - Math.round( - (Object.keys(responses).length / selectedSampleList.length) * 100 - ) - ) - ); - Object.keys(responses).forEach((key) => { - const { error, errorMessage } = responses[key]; - newMetadataSaveDetails[key] = { - saved: !error, - error: errorMessage, - }; - }); - return; + metadataSaveDetails = newMetadataSaveDetails; + ({ promiseList, newMetadataSaveDetails } = createPromiseList( + updateSampleList, + updateSamples, + projectId, + selectedSampleList.length, + metadataSaveDetails, + dispatch + )); + await Promise.all(promiseList); + return { metadataSaveDetails: newMetadataSaveDetails }; + } catch (error) { + return rejectWithValue("Something went wrong."); } - - return { metadataSaveDetails: newMetadataSaveDetails }; } ); @@ -321,10 +300,10 @@ export const setMetadataSaveDetails = createAction( ); /* -Redux action for update the progress bar. +Redux action for updating the progress bar. For more information on redux actions see: https://redux-toolkit.js.org/api/createAction */ -const updatePercentComplete = createAction( +export const updatePercentComplete = createAction( `importReducer/updatePercentComplete`, (amount: number) => ({ payload: { amount }, From 63ca76488cee1e966aa315f2ae4adb51d4cb2f32 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Wed, 4 Jan 2023 10:02:33 -0600 Subject: [PATCH 41/53] fixing some tests --- .../components/SampleMetadataImportReview.tsx | 2 +- .../redux/import-utilities.ts | 2 +- .../redux/importReducer.ts | 30 +++++++++++-------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx index bc8cdf9d4d9..1d253d0cda4 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportReview.tsx @@ -208,7 +208,7 @@ export function SampleMetadataImportReview(): JSX.Element { if (projectId) { await dispatch(saveMetadata({ projectId, selectedMetadataKeys })) .unwrap() - .then(() => { + .then(({ metadataSaveDetails }) => { const errorCount = Object.entries(metadataSaveDetails).filter( ([, metadataSaveDetailsItem]) => metadataSaveDetailsItem.error ).length; diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index ea39217b452..cc18253ce75 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -12,7 +12,7 @@ import { import { ImportDispatch } from "./store"; import { chunkArray } from "../../../../utilities/array-utilities"; -export function createPromiseList( +export function generatePromiseList( sampleList: CreateSampleItem[] | UpdateSampleItem[], sampleFunction: (p: { body: any[]; diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index edf52c3884b..1450f35f3dd 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -23,7 +23,7 @@ import { MetadataField, } from "../../../../apis/metadata/field"; import { Restriction } from "../../../../utilities/restriction-utilities"; -import { createMetadataFields, createPromiseList } from "./import-utilities"; +import { createMetadataFields, generatePromiseList } from "./import-utilities"; export interface MetadataHeaderItem { name: string; @@ -87,7 +87,7 @@ export const saveMetadata = createAsyncThunk< { dispatch, getState, rejectWithValue } ) => { const state: ImportState = getState(); - let { + const { sampleNameColumn, headers, metadata, @@ -139,7 +139,10 @@ export const saveMetadata = createAsyncThunk< } }); - let { promiseList, newMetadataSaveDetails } = createPromiseList( + const { + promiseList: createPromiseList, + newMetadataSaveDetails: createMetadataSaveDetails, + } = generatePromiseList( createSampleList, createSamples, projectId, @@ -147,21 +150,24 @@ export const saveMetadata = createAsyncThunk< metadataSaveDetails, dispatch ); - await Promise.all(promiseList); + await Promise.all(createPromiseList); - metadataSaveDetails = newMetadataSaveDetails; - ({ promiseList, newMetadataSaveDetails } = createPromiseList( + const { + promiseList: updatePromiseList, + newMetadataSaveDetails: updateMetadataSaveDetails, + } = generatePromiseList( updateSampleList, updateSamples, projectId, selectedSampleList.length, - metadataSaveDetails, + createMetadataSaveDetails, dispatch - )); - await Promise.all(promiseList); - return { metadataSaveDetails: newMetadataSaveDetails }; - } catch (error) { - return rejectWithValue("Something went wrong."); + ); + await Promise.all(updatePromiseList); + return { metadataSaveDetails: updateMetadataSaveDetails }; + } catch (error: any) { + const { message } = error; + return rejectWithValue(message); } } ); From 47a06aa40a26f6c6f73d23662f58868d77cc3326 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Thu, 5 Jan 2023 19:20:36 -0600 Subject: [PATCH 42/53] fixing chunkArray function --- src/main/webapp/resources/js/utilities/array-utilities.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/webapp/resources/js/utilities/array-utilities.ts b/src/main/webapp/resources/js/utilities/array-utilities.ts index d544566af76..76e465cd32e 100644 --- a/src/main/webapp/resources/js/utilities/array-utilities.ts +++ b/src/main/webapp/resources/js/utilities/array-utilities.ts @@ -5,10 +5,9 @@ * * @returns a chunked array */ -export function chunkArray(items: any[]) { +export function chunkArray(items: unknown[]) { const size = calculateChunkSize(items.length); const chunks = []; - items = [].concat(...items); while (items.length) { chunks.push(items.splice(0, size)); From 234c460df2cb6e24c97c9ad94ccf107ac0758039 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Thu, 5 Jan 2023 19:35:37 -0600 Subject: [PATCH 43/53] fixing chunkArray function --- src/main/webapp/resources/js/utilities/array-utilities.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/resources/js/utilities/array-utilities.ts b/src/main/webapp/resources/js/utilities/array-utilities.ts index 76e465cd32e..b686ee4d69d 100644 --- a/src/main/webapp/resources/js/utilities/array-utilities.ts +++ b/src/main/webapp/resources/js/utilities/array-utilities.ts @@ -5,7 +5,7 @@ * * @returns a chunked array */ -export function chunkArray(items: unknown[]) { +export function chunkArray(items: T[]) { const size = calculateChunkSize(items.length); const chunks = []; From a62081db3c6f7b1db56b4d5b89a581aacaff9cc4 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Thu, 5 Jan 2023 20:12:06 -0600 Subject: [PATCH 44/53] taking care of all the 'any' types --- .../resources/js/apis/projects/samples.ts | 24 +++++++++++++++---- .../redux/import-utilities.ts | 7 ++++-- .../redux/importReducer.ts | 9 +++++-- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index c5db136a707..0de3908655d 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -165,8 +165,16 @@ export async function createSamples({ body ); return Promise.resolve(data); - } catch (error: any) { - return Promise.resolve(error.response.data); + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response) { + return Promise.resolve(error.response.data.error); + } else { + return Promise.reject(error.message); + } + } else { + return Promise.reject("An unexpected error occurred"); + } } } @@ -183,8 +191,16 @@ export async function updateSamples({ body ); return Promise.resolve(data); - } catch (error: any) { - return Promise.resolve(error.response.data); + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response) { + return Promise.resolve(error.response.data.error); + } else { + return Promise.reject(error.message); + } + } else { + return Promise.reject("An unexpected error occurred"); + } } } diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index cc18253ce75..8694dfc2ecd 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -14,9 +14,12 @@ import { chunkArray } from "../../../../utilities/array-utilities"; export function generatePromiseList( sampleList: CreateSampleItem[] | UpdateSampleItem[], - sampleFunction: (p: { - body: any[]; + sampleFunction: ({ + projectId, + body, + }: { projectId: string; + body: CreateSampleItem[] | UpdateSampleItem[]; }) => Promise, projectId: string, totalCount: number, diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts index 1450f35f3dd..06bf508c4a7 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/importReducer.ts @@ -165,8 +165,13 @@ export const saveMetadata = createAsyncThunk< ); await Promise.all(updatePromiseList); return { metadataSaveDetails: updateMetadataSaveDetails }; - } catch (error: any) { - const { message } = error; + } catch (error) { + let message; + if (error instanceof Error) { + ({ message } = error); + } else { + message = String(error); + } return rejectWithValue(message); } } From b7cbb8934bf9c11817b97b076715c366ce758572 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Thu, 5 Jan 2023 20:34:15 -0600 Subject: [PATCH 45/53] memorizing filter --- .../SampleMetadataImportComplete.tsx | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx index d1acdeca86e..cef7abb8d38 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useMemo } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { Button, Result } from "antd"; import { SampleMetadataImportWizard } from "./SampleMetadataImportWizard"; @@ -20,19 +20,35 @@ export function SampleMetadataImportComplete(): JSX.Element { metadataSaveDetails, } = useImportSelector((state: ImportState) => state.importReducer); - const samplesUpdatedCount = metadata.filter( - (metadataItem: MetadataItem) => + const filteredSamples = ( + metadataItem: MetadataItem, + isSampleFound: boolean + ) => { + return ( metadataSaveDetails[metadataItem[sampleNameColumn]]?.saved === true && !metadataValidateDetails[metadataItem[sampleNameColumn]].locked && - metadataValidateDetails[metadataItem[sampleNameColumn]].foundSampleId - ).length; + (isSampleFound + ? metadataValidateDetails[metadataItem[sampleNameColumn]].foundSampleId + : !metadataValidateDetails[metadataItem[sampleNameColumn]] + .foundSampleId) + ); + }; - const samplesCreatedCount = metadata.filter( - (metadataItem: MetadataItem) => - metadataSaveDetails[metadataItem[sampleNameColumn]]?.saved === true && - !metadataValidateDetails[metadataItem[sampleNameColumn]].locked && - !metadataValidateDetails[metadataItem[sampleNameColumn]].foundSampleId - ).length; + const samplesUpdatedCount = useMemo( + () => + metadata.filter((metadataItem: MetadataItem) => + filteredSamples(metadataItem, true) + ).length, + [metadata] + ); + + const samplesCreatedCount = useMemo( + () => + metadata.filter((metadataItem: MetadataItem) => + filteredSamples(metadataItem, false) + ).length, + [metadata] + ); let stats = samplesUpdatedCount == 1 From 600dcbda931aea9a918bac0b70220c49bc8d6bbe Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 6 Jan 2023 09:45:51 -0600 Subject: [PATCH 46/53] applying eslint suggestions --- .../SampleMetadataImportComplete.tsx | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx index cef7abb8d38..5e8f3c7166d 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/components/SampleMetadataImportComplete.tsx @@ -20,26 +20,27 @@ export function SampleMetadataImportComplete(): JSX.Element { metadataSaveDetails, } = useImportSelector((state: ImportState) => state.importReducer); - const filteredSamples = ( - metadataItem: MetadataItem, - isSampleFound: boolean - ) => { - return ( - metadataSaveDetails[metadataItem[sampleNameColumn]]?.saved === true && - !metadataValidateDetails[metadataItem[sampleNameColumn]].locked && - (isSampleFound - ? metadataValidateDetails[metadataItem[sampleNameColumn]].foundSampleId - : !metadataValidateDetails[metadataItem[sampleNameColumn]] - .foundSampleId) - ); - }; + const filteredSamples = React.useCallback( + (metadataItem: MetadataItem, isSampleFound: boolean) => { + return ( + metadataSaveDetails[metadataItem[sampleNameColumn]]?.saved === true && + !metadataValidateDetails[metadataItem[sampleNameColumn]].locked && + (isSampleFound + ? metadataValidateDetails[metadataItem[sampleNameColumn]] + .foundSampleId + : !metadataValidateDetails[metadataItem[sampleNameColumn]] + .foundSampleId) + ); + }, + [metadataSaveDetails, metadataValidateDetails, sampleNameColumn] + ); const samplesUpdatedCount = useMemo( () => metadata.filter((metadataItem: MetadataItem) => filteredSamples(metadataItem, true) ).length, - [metadata] + [filteredSamples, metadata] ); const samplesCreatedCount = useMemo( @@ -47,7 +48,7 @@ export function SampleMetadataImportComplete(): JSX.Element { metadata.filter((metadataItem: MetadataItem) => filteredSamples(metadataItem, false) ).length, - [metadata] + [filteredSamples, metadata] ); let stats = From 2a6ad22b2b08acea866dcb6d364d19572de3219c Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 6 Jan 2023 09:56:37 -0600 Subject: [PATCH 47/53] making a clone of param because splice is destructive --- src/main/webapp/resources/js/utilities/array-utilities.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/resources/js/utilities/array-utilities.ts b/src/main/webapp/resources/js/utilities/array-utilities.ts index b686ee4d69d..d4c5823d1fa 100644 --- a/src/main/webapp/resources/js/utilities/array-utilities.ts +++ b/src/main/webapp/resources/js/utilities/array-utilities.ts @@ -7,10 +7,11 @@ */ export function chunkArray(items: T[]) { const size = calculateChunkSize(items.length); + const clone = [...items]; const chunks = []; - while (items.length) { - chunks.push(items.splice(0, size)); + while (clone.length) { + chunks.push(clone.splice(0, size)); } return chunks; From c391d577909b3071b86b971f1b3bbca37fdf6ad2 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 6 Jan 2023 11:24:32 -0600 Subject: [PATCH 48/53] resolving typescript warning --- src/main/webapp/resources/js/apis/projects/samples.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 0de3908655d..2f3f220e1e3 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -157,7 +157,7 @@ export async function createSamples({ body, }: { projectId: string; - body: CreateSampleItem[]; + body: UpdateSampleItem[] | CreateSampleItem[]; }): Promise { try { const { data } = await axios.post( @@ -183,7 +183,7 @@ export async function updateSamples({ body, }: { projectId: string; - body: UpdateSampleItem[]; + body: UpdateSampleItem[] | CreateSampleItem[]; }): Promise { try { const { data } = await axios.patch( From 3ce8e16404e51b0a097315f2311ba0e916dfec23 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 6 Jan 2023 11:33:06 -0600 Subject: [PATCH 49/53] resolving typescript warning --- .../resources/js/apis/projects/samples.ts | 25 +++++++------------ .../redux/import-utilities.ts | 10 ++------ 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 2f3f220e1e3..eae43f9759b 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -70,6 +70,11 @@ export interface ValidateSampleNamesRequest { associatedProjectIds?: number[]; } +export type SamplesFunction = (params: { + projectId: string; + body: Array | Array; +}) => Promise; + const PROJECT_ID = getProjectIdFromUrl(); const URL = setBaseUrl(`/ajax/projects`); @@ -152,13 +157,7 @@ export async function getLockedSamples({ return response.data; } -export async function createSamples({ - projectId, - body, -}: { - projectId: string; - body: UpdateSampleItem[] | CreateSampleItem[]; -}): Promise { +export const createSamples: SamplesFunction = async ({ projectId, body }) => { try { const { data } = await axios.post( `${URL}/${projectId}/samples/create`, @@ -176,15 +175,9 @@ export async function createSamples({ return Promise.reject("An unexpected error occurred"); } } -} +}; -export async function updateSamples({ - projectId, - body, -}: { - projectId: string; - body: UpdateSampleItem[] | CreateSampleItem[]; -}): Promise { +export const updateSamples: SamplesFunction = async ({ projectId, body }) => { try { const { data } = await axios.patch( `${URL}/${projectId}/samples/update`, @@ -202,7 +195,7 @@ export async function updateSamples({ return Promise.reject("An unexpected error occurred"); } } -} +}; /** * Server side validation of a new sample name. diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index 8694dfc2ecd..9e421a5fd6d 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -1,7 +1,7 @@ import { CreateSampleItem, MetadataItem, - SamplesResponse, + SamplesFunction, UpdateSampleItem, } from "../../../../apis/projects/samples"; import { @@ -14,13 +14,7 @@ import { chunkArray } from "../../../../utilities/array-utilities"; export function generatePromiseList( sampleList: CreateSampleItem[] | UpdateSampleItem[], - sampleFunction: ({ - projectId, - body, - }: { - projectId: string; - body: CreateSampleItem[] | UpdateSampleItem[]; - }) => Promise, + sampleFunction: SamplesFunction, projectId: string, totalCount: number, metadataSaveDetails: Record, From 8a388a5d8fa2188d67707266f29e6809bfbedcc0 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 6 Jan 2023 13:06:57 -0600 Subject: [PATCH 50/53] renaming type --- .../webapp/resources/js/apis/projects/samples.ts | 12 +++++++++--- .../redux/import-utilities.ts | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index eae43f9759b..7776aaf2bfd 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -70,7 +70,7 @@ export interface ValidateSampleNamesRequest { associatedProjectIds?: number[]; } -export type SamplesFunction = (params: { +export type CreateUpdateSamples = (params: { projectId: string; body: Array | Array; }) => Promise; @@ -157,7 +157,10 @@ export async function getLockedSamples({ return response.data; } -export const createSamples: SamplesFunction = async ({ projectId, body }) => { +export const createSamples: CreateUpdateSamples = async ({ + projectId, + body, +}) => { try { const { data } = await axios.post( `${URL}/${projectId}/samples/create`, @@ -177,7 +180,10 @@ export const createSamples: SamplesFunction = async ({ projectId, body }) => { } }; -export const updateSamples: SamplesFunction = async ({ projectId, body }) => { +export const updateSamples: CreateUpdateSamples = async ({ + projectId, + body, +}) => { try { const { data } = await axios.patch( `${URL}/${projectId}/samples/update`, diff --git a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts index 9e421a5fd6d..3ecb5c92b54 100644 --- a/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts +++ b/src/main/webapp/resources/js/pages/projects/samples-metadata-import/redux/import-utilities.ts @@ -1,7 +1,7 @@ import { CreateSampleItem, + CreateUpdateSamples, MetadataItem, - SamplesFunction, UpdateSampleItem, } from "../../../../apis/projects/samples"; import { @@ -14,7 +14,7 @@ import { chunkArray } from "../../../../utilities/array-utilities"; export function generatePromiseList( sampleList: CreateSampleItem[] | UpdateSampleItem[], - sampleFunction: SamplesFunction, + sampleFunction: CreateUpdateSamples, projectId: string, totalCount: number, metadataSaveDetails: Record, From 7931412d0db959b3778c7fb4a97fe38a5802c92e Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Fri, 6 Jan 2023 19:15:15 -0600 Subject: [PATCH 51/53] fixing tests --- src/main/webapp/resources/js/apis/projects/samples.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 7776aaf2bfd..604f64d8804 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -170,7 +170,7 @@ export const createSamples: CreateUpdateSamples = async ({ } catch (error) { if (axios.isAxiosError(error)) { if (error.response) { - return Promise.resolve(error.response.data.error); + return Promise.resolve(error.response.data); } else { return Promise.reject(error.message); } @@ -193,7 +193,7 @@ export const updateSamples: CreateUpdateSamples = async ({ } catch (error) { if (axios.isAxiosError(error)) { if (error.response) { - return Promise.resolve(error.response.data.error); + return Promise.resolve(error.response.data); } else { return Promise.reject(error.message); } From e17ee8dfff84ca10254ec8396a555f20da128916 Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 9 Jan 2023 09:13:18 -0600 Subject: [PATCH 52/53] applying eslint suggestion --- src/main/webapp/resources/js/utilities/array-utilities.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/webapp/resources/js/utilities/array-utilities.ts b/src/main/webapp/resources/js/utilities/array-utilities.ts index d4c5823d1fa..7454ddb8b5b 100644 --- a/src/main/webapp/resources/js/utilities/array-utilities.ts +++ b/src/main/webapp/resources/js/utilities/array-utilities.ts @@ -28,5 +28,6 @@ function calculateChunkSize(arraySize: number) { const MIN = 10; const MAX = 100; const estimated = Math.ceil(arraySize / 10); - return estimated < MIN ? MIN : estimated > MAX ? MAX : estimated; + const isAboveMax = estimated > MAX ? MAX : estimated; + return estimated < MIN ? MIN : isAboveMax; } From 7fd0d333ab3b187fca608eafb2b88296e602e83e Mon Sep 17 00:00:00 2001 From: Katherine Thiessen Date: Mon, 9 Jan 2023 09:22:02 -0600 Subject: [PATCH 53/53] renaming SampleItemResponse --- src/main/webapp/resources/js/apis/projects/samples.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 604f64d8804..fde366a7c6b 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -26,10 +26,10 @@ export interface LockedSamplesResponse { } export interface SamplesResponse { - responses: Record; + responses: Record; } -export interface SampleItemResponse { +export interface SampleItemErrorResponse { error: boolean; errorMessage: string; }

;i_Qqh56zL$>N@{@`@j`vn@8GNvd0~WV#Uwf z4P21{wa|fmA8?QV!-zdEUknuQ5hqT3Am)?6!|)EbLv2`P;kB9uTED7L(MN|AVK6D4 zqT|oC%DhDI$Q*$Ru9_RjE`==Yj)S%RYD~lLrFqoZ6nFG$cvO+&m9lVSARW0g@7ljBHL&N9V3aZ5phKY;kY5AjS?|K<#8peFuH*Woi4{Q z3FP^J)WvwxV19&h9q-ciz^=v17HCwL%O@GUvtasE4zokft^UTl!`qZfV~~V=a}#&( z;Go$YM7`)|PIS|M4yoLfm7_m8*Vrj=1J%9Db5Aw&VMtC+rlFIr3lZpzHQxE60&IVB zL`99?s}{#oCS9K>U!^R)nJ|gJ5WO5spa!0>6gD2bVUnBakQ%;O-}Lvy8EQ~8LDZBs z@^%Cro z69{@!mjX#bWGn8K5yl8T2@GRO3z?qVmD2SkxIF+vuzHH_XEaTdWU@tWKPYS>i{5p- z3?am_w3;I##hI^MPN#EL%Z((h>hJpmH>~>y?XN}Cb_pb>zX(TGf?icTfdbE~uch1X z^WQ5rb4IR`r(9l~;+D6tB$Ze-3*4ooYAyIhaM{xm#0r@RZt0?e;RELSgAc=iZlO85A#yH92 zGo;bMVTz(UoBJe?+k>^_Lvi-GTWXnDtMj0e?zKWpfigw6T zNIXSIuPi?Q61u($d~OX=vKK)lzU|5e9If!gXE=@6s(Nst3a&e!P*DL)=#{&&v?!PO z(m0CFGUe>;gwfZZL>^h9KB7H9RZN^LiZ&mHhK_nokIRGPIa`bkKVT)4YwGEZfI%H9 z($dmbmujK$mqX*($7O=UkxA~o1i=J0l?-eeru5|!|au}*E1&dFAH3)CgU49dUUqP)#!(H$w9#nJ!sohCD4Jn zW$(3E^7QfU4@;}x?qncCzmrRdG^BeIafFIo_VQNa% zW&EYeY(U!ci#t1YB0blSHspN|*kEx;d7tkP8U$4`ari-OwYM`t%jIM+jx;x*+3}#x z6&`ve5tZ#(M6GIJH7+B;c6EA4?30w#Lk1kf(m$B}x;r_Xp_{yunwrbxBYDmtqdKkg+ zI3&a2nb`6h1o9HxSANwP?|1C$Fcs$}0) zi*GzGXpokgjZEc@pCRCtD#!J9R`CTeNPb#kh0D zBRa@*n2!08NBBCsGA;pH`_|mAT45T0nl|S);0QmD4+nJG&@w3#Ri!?bh8P9iSOdXy(rfnV>2q!(Y zccZWB3J(Q6{a(^!*UJSUlGkhqS*Rox(XLIW4JZB|?TdE$k(>mmoTj~qVOiPRC*;GxAjF9D17h~B!;v$CUg@k?B7f<=v z_2gmxb55 z{&u#FxWYn)dH3(%9uPzSGmw8s_kU2Mq7wgq9OmkTeUjO#%9aX;3*~I?#?8z}?KQ2y zM@7XZ)-QpaFe>|0)_3R&~ikA88Z z75iUY)dlPQ4duxVdZ+O})AFAV0u&)g zs>HpQvsN0x)Q_FAmL;CS6nu}7iY0uUd)HEvz9&z; zUGF!1%R_Q8&RL+8H8>isz~JjfSu-;uJCZiCwO*?p3!GX&iy%MfT)6__mOBcmp+Kly zBu(Hg$e%EOmZZHSBA%KYUsU<3{@g2JsjOhOgcki~N&DT|wcp-EnzZhN9o|d-#6gN% zUUp^_gO}(h0q*S9)V0mn^>R!1^XOKC_OL8D_^w-duQKN}w?UNyYLxVoxDObXE3FZq zwKDV@;3j%z()gW;M%HY-zRjyljp3xH)kjP-Za6VSPtzrO=wao!-;a9oJ)+M)AVJzi z9F!%jZ?A;QLsFFO^p-N?_s#K%2z!Z}QLSX5#JDvP;_epcvWsE>y-w8fnoCftzu@g#kPAdU4<^2C)~A`wCFPxs>i^>M{NV_qhW9JzlEP zT72pT@8ego_OIQsWqo?2eydbvrn6aa=8Gk70{7O>>pYfl$dKDpRSqoSkogg89C-uUb+GlNOZ1IA)!P*tBlK;`=ittod5NPfd3;bWns z@8hpAu@+Rw@eLPid!Z5-dL=HO!fd`c5)gCH#M~4Jr4`zSEB0ugQhsEPX+=PQ$L^V| zc2^+2$Kr5203omGYiNA3*~9~*1DNBn0#~(GblS`8)muamSEv_G&E0%iQRRr_R8L3e zasVsSUmZWqXsg2aZN@I0`QC&sXkeJZ-&iz13{55~`s%=e({a3CWbKox0PV|bSQ+%D zTZ_%=PK|-quVQM-2fp5oR(1S^4PReYY)mtg6xM|K;14RBviclT&cSVqc^!tIZ`t$K z8nRw{7D|*6x0DeWH70%&Ng8GFxG;j(tIj;uDJtV$62G~1Ie*MWoN$d!2ipeUowJs^ zG&xNS(b+b`z);X;zK*xr9vtj`jp4B#sQUbw9I$TQH5inzu6rV<-%w^ebj|xniQyXf znj$T2ECXC!X^*tIs46uHD(vx13jc=%NOU7X)8gy5O7b+qQ|@e92;S#l%W3dqhk(b& zgcpu@2j(9@H1kTQ24utJOyAE!?dDh3Oj|w<_^-=PhZiJzm*JQhMO>`!ZZ98G%LuQevmq!r{wVIy8IpCwy@R^iY^<952F%V&NaEgK@_!!FeM%c{F*3x z&3%e`3+BPQX3#I}RgNgerW+*dm~=W><}cQ8i)bzHYFrT z4Q(8JkK3lr4)5utLM09pH(pI)jQ+uOl7V=TZ{Kj)!Imf2da zlcW0+DO~~MKhGu)$H$ofNFn6xFOrBftOQin*Jxy`iGVV}FP;XomegbmrFQx?R2-(idL;1tYY^8f6wcOiVnN{} zZx%Ocz*RguiuIc>yQItpo~8E!;}2u+!oKs?FIYDbev{+2t``6s;Mli2oQUw@uQ&50 zEs#MBu@1h&_NYaP;R|1is0KQrg7*Cfx;UI&X0Rn?d&+*LQ^6A+)x_M=&c1T}3`c)Z z5TH|2jP78}klM8c-;w{dr#!Jn{1h^ufK_AiiBcdR+Qg9cqo?ge+2S_Lc!m8xy|911 zBmfh9l)~xR&uuBT^-(RsY9no<(-KONUtlGY3y+_qJ8h$zr|(^{h+3#6v73iJp4eLC zD)fK^d~Si%4Y@^HnhA_vX;9ArtRi$Eh7|hGYxRrZQ07sFUe~Qr@6meAnN`E?9|DAm zU|q^*h@jcG;xK-~pI>nJo{A9$2&2i+=9t4TC@xMFEeMQ+RI^Csn zu7zOKkh0~d-OWcw3~R{h!0WkA)&anTFRE#e66%Yj)|a!m6VA~=SU$)~h@APf(M%P^ z$MaD;Is7v@tLapk>(II}wiqSP#d^?spdc$RANV}eSW#BQmsPftoyzqC{4Jz&g%>bB z&~ZN}<*(B#>v;f)kK>9CfMcA(Y|NIYynF{Z$4<FcbQ);hVy< zE-DGajVF673$VdXTWwfY0*kUBPi84nKCbqLM5PDE z%k%ax6V*Uw5+Qj8Ly%Qx7M!00CP7t#Hp`td$2;ok!H4D+xjG_t(QG$8${dVn?X=w< zk-5lNd1!L4voMP10>$ZVG-1ggdA5Ap5k$=tHJ{EP@lTz;`F92S3kM6MKN+cCOoB_# z#fJlq5TcVtM?ZXfH}`#P_4&x7d`loYDGOww{&0c~?Hd%fuqfIcB#!y=5LoE;g%ort z8Y5*~5$~e%YM{xr|I*gV1%0Gr*JO&V6?cs{sk(@jL^`6Aj=T$#e~)=nh!B3(GAYSW zzP%wLA0yLTiTzyENCI*i+#th<`NX1}EhzAsc-ITyAJOe3_+9KPRwYz;ZgJPY>ar#Z zAA1W5>KdIokJnAE`UJjhU)%I07JbPjUFZbF410#X(K{)gy5>q-xkyFdm@ek_-I;Rf zTwF~IezZS_Q(#oc(Rp_o1N(gA0yUEJAhI{BuPIssn+g@9(^+hFF-T@4cRzvh<|3`p z!Dz@4avud5dwZJF_>~vXU_7vOhZa~ZF}X#vpK7b^Y(=L$GVry-P-5uFP?T(g>Zo1g z@n#?$h|1T5!P=QjkoQ<5A&+5Iwbdkymj^^FXDgUpzqcM595fNnO5HL_-sDpo^6{co zD0g59I@&mzKdft)EN}59+E0VrA5xQ5Srqcws*V5DKSg8R4Tt>Z{RJ^bGHIYRsa;{v zQ9DoT-3L}3^%IiS!@e4hw_~z=ix}mb`2#f(2$lRgs*M@D4F%Xfg%O|W<qk>%>P?-7lsu5pCAx|ulV1Z!2b`!Lv7z?sOXQY!#gRE4ZdvK}K7@{mG(LqZh{H8ls?$fpq9=f;Q!H;E?B?ZQ6jj}F+{O6G2c+(H*h#x6{qsl1^wZZ zKB|wwe?n@i?A-q|!M4fC0la<;qzKQq8HvgT%6_diUA<7*`Fc*Pp=CXsJYet>6ik}1 z_XV6y`X4%F7akNf;pZ0?01K%RS1e`&al5lc>UQhxZDRo@;G2^yLH8&Qv;Lp!f1Hg3 z!;*#Ypk@aAgv;0X_ycJikS+tBY~Wjvm@WAE3A_k-Vb&i*$;w(j=lYWk`+pWFVeOk1 z8jgdvYniV-)&XN=WaI}etr|!h^Ds1GX-E|m6u!XE= zktOCote$?4?{Bf8qrrQP4D~M0H-=Owr7IX=`xXoV9NvNng}vAzWS?Al9~}ktvnnPB z|NT`k>k@lqS?2CTO*OeG1wpmf_})5rfY!z~d%~L_5E)2Azigq8{xyL- z>v^hwYg$<=qaD&J9b(?)(f9TBahP<&*4r<`cZMM0EM?JGmT=$r5=s1}ZuR5`63lDp zsKGue28PI7nfRRNXNmW3{tDk}*+5U{8Ugf8KX3GvJ1H7aO--%2h<3l=-$>00@nJ#u zR3Frx=&2?}{KY-P-62~Q8TL<}B~Rg6o4~7`Z;vHj^A|l8zOLSr^2{rcpD!KU=fBfT zX7wTfCV$U{ev8#azyr!07aN?ZH2JeN4j4s5t&9g4Ug0LJ<=F;{|9Lmz(pkKx^Rj41 z$ls37BB+=XH$mFKFlYhjpKTQi2t)m|)d%mJjZKWLdg@aK<^b19-~q-RoP@Zj`gKTw z%6d~z(?k6}|A}H{;oH9~8<%Ma4>EWSougo2U{F|24Z%~|`)^?4;NV=JPoAr)x+4CG z9A&KxzPiFoK*Lt&F@GY{&qwJQGH^Y!&CUrfu9 zHTusDRjF|;8HtvMhyM2BoPev`Hq}b5xd3FWzpTn_WcGtR@A@R zSBLDv)$e6*9Tuu&joyh&R^&7{Ke(b(o?3VQFX@6m^twCC(V;WP5%>p@2UNQ7aW>OC zx+BjHYPcWOg8&h3h4T+-Va1{u7${`sp)ptqWmRZx_GW?ehHrlUn}4%H$AiP0)T2R$ z<>iLDp?g~!lZmQ+%I@pQ{x6$1dfz%#r38ylD$90L0t#hdW!euGFr@ps-YSedEg8i& zQbPg$WzZs}Q-3oOw!T5o338ket~{&mk9eza7A{o$YTGbkG9?i_~=D$_u&7dGNv5L+)SZ9;hG1Gq#R z{vpur45+`cufVQkf)@X$?_F38h~PcmX&B1{cg~ZEEliqWC5-UGuW$6Kyev7#BU;$Up<4GS5AO1DJ2`N5) zPzlzx?w63HF7Zzcod20<0;K3CJZNg=s=lGw(ia7?nXceZSO})4HhV}HW&T>P{7YmQ zAz!W~!^wp;o)7P-soFF~o=d2o*6(lX{^$#;Sk_{bZu?MwB13wrw$&!aoVkuavl|SZ zEHl}-M|ZastS!%d%>yafjjn&FxG4~xRQ;z<(D7S2D{J@~n-5<9Ml;+v9{vrR@|g79 zdP4NT?Ym~#%?#z&>Ta$?mw`BTH%?BgYL=GFdDcmb=dMu^Qk(ic!FpiBzw`=e3;7yr zt<*~Eq0JaXM|^0ji+L9hH|S@B)}$W8Do_|9s}TF7*%9!h{DPYG+|;%`UZ=vnAiD1Q zhnIs^1Mf5l31Z8Up(Tk??rx|>rvopTy=UyLc+;SU$@F@UV?O3Jai(P_L6S5$h-!W^ zM6Q4fJ|UG2Emyggvb4SHFe<9CqC-f5^zVli9-kZ4&XIp5l!VdBfx+_pi7X4F-10u= zu0Zchv?>j7Dr?nu6u4DEUTW2M_3CB69lDjCWQCtTdn420&W89FL-ko1Q)@n!zqzgt za{lB|brt)E>lcd)_9n(!tF<2Yu}3$cuG(zo z3TI32C>%vNuc?+5(^tMP2z&DMIy-hr;9+Xt)qtFbO_O%zKui3Q{euWY4#mbJ2M;Ab zN1v)dSESQG-0EYkfD9JmYPPp$+F!Po={TKDd$g9Qs^aW?f&&?dG_kqf?F2#u@Q9w7uORR@%TvN1dtK>WReR z#04W-zNTxg#(lrY&*39yq8k)vYh){zD?r_K4XK?hUDmVjaAJRWnkRIvZDAa*(a+rr zs6X&7eas2=B!7nL(<45F!O7;2r3iZaa|nt~13dm{r#L}1bEei_jyh4!_C-MQ{kI4= zat*A%W<#s_R~S+QPoXBnyp+TPF!oQxHtA~^8Cu22CrmnJ>22d;FO2ZE7HuW$5noUg z?w1xW7{pebz9cBmU&HUJyuLiI(`iI-ms6M8;bP8cSNsn6BSZR#`0ogSu6$kRje)g^ zE8lm8uY$3m3&bBVv}#OkK7IC{ka&1Hfuwu(Cb?wtEiE?rO}3klW;lF)?owSW z<{SUhG!PS@yy7nHDr*a_)gql~EIS9M7{!7Y=H}k(=_&a6O_VKR`B)LU0&1&V49Hj& z;&~*cd?JgB86ldFgCk+W$kfynVqT3(jNaCOh;JQdm;63YjdJ|-M*L&rU|D~_N%@58 zCQZh|h4qF@{_f+ds5pAC*+oS6*RK)T{meq~1L^#o)HvWl?avSb zjj-;S-vj9W2)D@Y4>TC}8fGg0pa;P}Uu^mUalZa?1u|x{W~{q56LuIk6VAt4gj)<*})g|8t{Ge*D+bQy%#L*a_8f8G35;4Xx*M96CcSHkuvL zRMt5eFLJ#1$lr z+o*j---;`&7It!qKa_3WxykAy*Q_uod7iXuK0Zt{XT59nS17TXHXgJI5K*gf0KhMY zSn=S~UFNgVf>|62(BbS1n7^MtBRr@O?oB{xga{#%_H7L_(L}EoeUZ8WKY*1I7rE;o z7tM}3i@)D3FM)TOTwDCcK3e-mU(oi{W6PHlP>t2pdZ%PnBO)2dVtLT^p`TIKuZRNv$(_t6{ew(%| zVn{!qR-L$;2^9eauGIGdz~1c~>BT2+V9t=(!{XME&0ckTl1@)5+_Tm8N% zH9I~C@Eg9Syz3&ZpFnA}xDV4h*FyNTHS)4ga(G?%!)H%s7&7)o8$$7A#^O=a@BVTn z!TPF=z4CR~>z}bMkB6)nIrbh7e&6IUfrDEVNA0cUA7?4>707ftAAM8aTg&y;taT;s z6Bom(pj<39%LiOsdTJBm=Ur{S+j(gWxmw@b_<5~%^_H^hNUP>~;h>lFM%8J;^kSje z>)gRgPs@JXX3Kw3a<7K%qMsmmqq)!TWD{D=pk$C}Y3-g%=l+NUy5WB4yp(PPUJ;EK zEO51_*8XIB_sr#3L$~l%KKR_A^LaYm59hlfv33&qYg`>R}clKL!2Qxe|0Xc)KGV; zEmQy3yBp~3?PZ6Ytg|-lB<48ChhLwwPtx33a^z>84C>^Jsi6;wmnPs(~@2FfYgnLK42`B%qR+SLlMuB-#Fx+ z3??$^)d#A@p#%c9=OukSMV5T)Ho(f)u=P-u?Bh)J$c9(+R2cc|)!)8XPlX-X(C<~i zz}iyIO)t4iv7$?cqtnvS!AJK^Ge6oABJ(;NSyK=w0sn;@dA6hiE>b2NeG|R6J9g7K zHg{F?y(C}d=V3|)GXv<_IoEZEYiIMvFnCrPCQvmUI*Q*+G83vpw2a34 zkc^$bJb5v>!V~e5ytQ66E%&YzuKpC6FeE=wEK5uJ)}B^$9cl}E`|d8V71nXWfs9P| zn16t`C{m$zyHlYOJA$uhMO(4UapWAt)rHIx&cx9Hl!r4f19WFXG*1sKYL;i&W-OR` z-<>~0f68V+bhcN^9hKtY65!q@0{fZL4>V@El{Ch;=zt83X0m~Z5NAmVAocA|UzlP? z{Rvkl_t)WsM6D2$t-|+R9ij=WzxeFiXs#|{IuXKDEpKz^en=)H^e*+DT=n}^)YmDB zOK`N|B7E17K1o2K{D4>T;>c^sl9uDQ*RjU^%_eaC?Q-f%vep92$HsolVYZP#X#Mx^USY2S=s8u_#0 zYyAkiG-~f%3BO=SZ*LxQ+LZq+jzfe$3B;#~AoZmRSv$w7Y|#-NnZm@<++5d1axUZP z?&K}F-X~sp9n$Y3#U)!g+$ky?H)$l~@{GrfPGa_*`HX|^yf7R${6@osre8)RMCXrb zhhTx|_EuVCUD2z_^(7AXAlC}2%O1ds1sRA#X9|CPHf2B|zun5pShDl7{q^?C##)Mz z#)oX{ZESi!+^3%er`qDDd9vJ=5N&@!2!;Go7V`Ea-QeZU1#6A56IJcOPk=Ht^Xj`X zjbMb(@jydQ$P#1g#1pPc9VsJI(Q#)Dn*E!6a|J}i&A@ip_`cX>i!AV?Cd^NoN}-UC z^^c3vdrIlEt%g$P{fwP?hdoqy>kmB0yf%{+e~lR=+3uPgWY8r$WOA*b92KaccrHl` z%cKhUz`Ib%hFzO7Zb*FWUPr6sSPbZtZmkd@M&TLR@SHDM-XnuL` zCTki&7!Zj1h9W90j2E=O?MyZ!-SgY?rKW=V?{0CgzH`9r(rgVr_aKG_Qz7PG=e>G5}dHd!+2~%te-2Wt*kuZ@V7^FeIsD-1GBgTk` zL2v0>cr2`h?cd)?aQr$U_R?BWLP15fPq<1988uG*Kd$Hh+rR!5JXl1y-+}CS{R4|R zy;ZddXyGeJ;`~r+rM;|w>4T? zSe{unYA6KziTa6>^JbPc%t1hYIFP*PfH|iLZzd8lGIXaoCl)TQTQ{_u&uY7)4Czd> z9%%gF_)^JvXArBqr>8@gvTlNXyZ`m^;VDBeXG{x#)$;UKIbr?i$3@^F;`18faeooU zuAePRa#a$cryS_wI%U5OE~fo9e;h+I>^1ld*C9gy&_WNq9}c%$=~1ZgCh%OA?S_y! zcJJRD%mS9-^o}{nGQ`J1Lbcjn+hES>8tYhcPkfc!HJC+(Y=sV%ANZ9V2S_sTzOCFG zNG}C9URw6>#w5JBAh?1uhX)hQ?sDkHyw39=|IhMdbyX7-{ptSG0|A|YqLaxRt#QrrZ^bep`6hTM;v zYEHxtYcI3EM`UVWhr{L7LNKxJ#{u4?Bjkf&gH(IZ8%)wm9%2*C`(}4tL!X1%_&Y?{ zM26`mOkX5Vo7!2as0zCRmKhCO3x+z>E`4*p>QLZyHm^ABzh zS;r||g931+ZDnnSN{uBRRScfAmw0-M)i-qQOZ2v>zS^EVjpne_DuqA8vh9YK$K7!r zyEbv~xtmshk!-(NBzyZ+sVP0lGM1e~k9rI7qA5q;-+DsxleiV$M!~ zC+$P@F$o`X8_d9RUgL9X+_9ca($_5My*6T?M(wAmhH|s`Tbe?1bV}x>FqUHbCUaOE z%k>G;o|469&E2Y1qUYuyI8XhFUpq9?g;t4|zm)Y)ECT9-!!518q-05{xeyW7ked!z zbpo_po>~i?11jS(E5=QG4CymZ36zw(@HCalP8^egbuEtDWc80O@C!!SQq#YV($7a& zKJa$u$Z!q$*kL4xauH;oW42&;0NAL@%FsPoEEK@*0xB7|5g7V#? zvK;t&rrJd&>;-%R>dLcaj%;PN)YjbnLQ1i7b6#!6UJHEjm)A6s=>ch-^~!h@Jk!Mw zO=;3qcmt+i;|O}r@W8Mn3mYAq94<*jDb!c_^}bZH1|p!niWSmn*dY|=+fmom?9Ody zTD)p8@EUEiU&W6xIjz)vLPdex&wN+Ae!eFJy4>5YscLWj0{5~T=;Y7fh$LioYBjP9 zx(xV8d23W1z3a_3#cqk!F(TI`n>G^di0^Xi)Oq~$j;LIOi%s5gE*rnFL99&)?xox~#018frxS0e9;CT``VMNrWEka8SsA$~&d> zZ~R-n%DlYJF{%ttSj2y@o+PAnGwK@|E z0H!}gFKRc4_7otX>L4St8H8sCC9P~}lNeh$$to^C zp=ak?7I`I9$T@9k+#6$d6S&9eTYEk0?y%BVPpYKPXD`UW+i6E_(QlwXquL#J8`tnG zbl{GIB|zVuR%uR5Yg@oY1&vt8wfR8)c6WfkwHEF!BeLb0Rn4>;k;`~OujMD1Kzd7g zl}TC;fxxyyd9?NV!n>jQhRPRf-lXtwDEN9?OV@$qIXhqX3BrYG^_FO~%!ZjP7c_?N zpRDlp3~eo^OAlgVUX7Z>w7Lp@9HVWm&0JgUX%-lWV>DVGKi%|XKY1_-2@T^g9X53d zK2zqTXTfWw$nJ<99iMP05k z558mC+H@>@GhP>(HETbx&_-4nYd)P=H>z}jzf)S=dpWPB*3nSwx~3q#aj}%f?JBqo z0*F6kQp*u$ck|#lm`-aze7s&VoEd-JvLu`M>^sT<^`3U2xXf3|Jb`&507rehaJ5*1 z<9c`xExyiVr{dpww%kjU$z+v!LjA@Qf6VgRRO~WmQ4blfscGDco0^t-EY@q+M;V$+ z_ANFpAoPa2n$C&ktsbEtTg9bwDW4WhA=mrJ@KtZVq}ui#yo#<$4)viYi{*H&y5tXh z{N4xj>t^bOt?=76#2b5SYdwMhGf2ZS`Iuj6+qbHAF!9WC@N~9JmP0O5X;!vTwy;p*1a@xmhrcS&yPb52@B`p+&xkLUW|lX_=*0( zFX9DuecA;gb7QN6c2@oB6*Xt_FU5t`A&)XB42v2;HRCW?9$PZ`N$x7Vggwg+f;^#$ z3P#d8o+{*f{M7*8^em=kxuc8;JLA||95L3UEMKcHUb+}xNShei_iX}5+Y-cBluzvU zX4G{grk-gy2Oc`c`91MABgSZ0ZdOQ?rFK?q$+^xxfVow*w!>6^mK66(@`-cQWDjBB zC5hVN3#~879h8g=F#@}P&|kD*klo0$k-Jbim`}QLRdAi!k)v$Zn>rekN1=z!f2KP&9hq$XIdQJ=i zN$J=*@9o)s6q{{r`Z_ft1hTxkx^gc~&I$?=A5O$ZE^y-;8#wUuA&P0_0<@CfJMyA| z%Bc4@;ZL>MQ=Lhpx#Nvb$)g{8gt90~7j7%n0cKoe?LHCZgo64^kSt}{t0OwQFZ>{# z=MN9`FKVsn`3GcC_@h)6k_%L3#}f4^t>Z_esV9LHEi6v^i`f&kLVN04awf%&jKr5wB^hp%Qi?1Sl{T~m zUui(M^|O1RsAxvcQ=-X+lj>rXf_>W&&{_Bz%?p*7I)FdD<^Q7XEr9Z9x<)}P5L|;> zfMCJh2_aYr5Fl7^cXxU41b26b;K75tySux)+ntBJ@AvP$wR`LCU%OpT6~oN*>7MS> zeWZ`XZOB*ZVA!i_W;WEQTbVoPAW=;!beAS4oBF9OC}9dn z61F7{sBcQpfl%kx-QUfW+|{i6jt>=+ki!a(oU*tq-@Wm$?ANZw#6+Bo36<7oo2YZS zq|-tQ=H_Va^`FPKdS;I)QhgdY)yB;HiEj99{nx=w?|!Soe6>6FvG&!Bwo^g!H2VhQblVc|AXSN;&;F*~_sDblZ8&N1a+}FOMIziR9aWhV1M;f1}-bjCzBucp| z>z?CfWacP>_4M(EJD=rrcqdabNJ;)K^^dl7N1k4Ig#+vRye{28i$o|!T0|JrAZPxC zh9c-gbNebxL5`rJQwRKlltn%YZkj*j3EVO8kE#JVEp``sazo0TffcGMM)JN?m{n*jrCPyS@DV>NIW%Ka`dN)T9O-qvuo4c zEx=77Biltf`>wGG z({r7=y?ag2GT(AEDD(TA$rl1m)TIk1QDdnkx48}iwd9(U>9|{^=&A5o{xmx+ib`L% z4P+~kuhu=*R!tHX3`l!M`rTdj2Srymg41d0;!{NZv$7rz$J*_bYTZ3DX{)1|z~cHd zBVQRBb6d}afe??Jj?!(2>{N%vesCud{9uQ;uW>b;z3|%+kwBw}ax)ixrk*<#I9H}S z@%CC|qPyvq;vrJViGJdbOgir2vJQ8uNC|dE?5!*JYaJf;%*&0A6r7CUqP*-_hf?N? ze$0T`UkEV+ZQ5(xs8GBsJfq05n+Au_r#B$14>%Wjf+#=Oma8GSC zpatrMb34fs3^#wTJsL=+_Tk|f6dN;**YT*wdfagK9@|`5#-K80po-)qPcui?>3vVy zJ!0Qa`i&nof-63emwGM;wT2=Af-^>5T1xPpek`*$eFo)>_j}ub|6h#rd*?gDXI{JL-ZIfVe>NbOFCm zLuc6P%fuA6QI{mP(o>%>&^a&7t~V9{kbtL12`6_!pV6#RLkDY$@w^V`#$9)PCY>#v zTsTYZ&34{LK@N467zNWK(t{krG5IK5P`B_mjoRdfdQs1awgt^)k(sL>dTJ@3`yJ{?h+;@6$ryAlIboM3NCxV7k&P*}Q8HaOVI>2U-tKac z&W-4|%ioMn(BPRn6W8>Wc_uPaeVzr?SYONVAN_Ca)+})@ihJ&%b$H@F5 z7b}dxq>3AD8;o5+*VGk{L0#wR*+3v=WaX>>1AU8X&D*l5bH#8$XM~)Zrh$s_c}qg# zP@84XpnAE|$WrW#{_{q&no?!|z=)v(oNQU7{?m`1Pgc2hBF;0Wwsg zYagqz_3WQb6@IaH`8`JB(Qco-{SF zk!9wrD$M+0c*;*JRbS>~dMi}R=M64wi%e3WyG@9wB4)N5`^4Q{5_ zF{_Sxz6X$72f~FXjku(~$Jqcdo{RrNIbgslBqRg@TzPwYODlUym(E`w{?h&KxWCAq z0&1cOCFK6-qaMMkG6#>`X68f+Gi!CS1`dKy4q{7#`PsEM}_0DHycu(c^zeOG5b^CR+ zR$9lUK=r)2L@gFnN6ORs@2`F_?V0R7+$+R{*Od5|%j}&fduCZI#0FcKj1HbAOYf<@ z8<3zrvO&hMu738#HR&b>8320&MmS%+azcb~=b&>@O2S9wLlh1H&0hZ`IV|8fy%x=_ zA#@<^fZ{ZRZ%Y$XqP;}S`L2{hE;nW9ODmvrHDqY<_JTbf=PY-(QFY}b_w5m%FT;M* zeT82iK8TuaZ-HmT;U5gqWWLQCeFt}Kj!LR=YH9YMOG(V=^f``MU$y(TajqNbphwah*H4}Df;e2*=qjCx(36<@sC(2(m5 z8gj=amcD0wewnSDTR0JSUG(1P*&v@Ty)x%}Ik|cQD(mNfZfx`jVqBVm$IC@J&Bo|p zD5})o+Sv=0@e90{Xf$LtLN`aigPpaE1rPlTKGd!nQJY0jVSG|HGb*6uTtN7(MT!gk zi0PCpXGCG$zFv1sNf;%4cYWUD+Tf3uRsK5(vi&D0zM1G}eP-PHtMBF=Dz4){vud}6 zW`{50rKzMD&5NPcCnnj@xalyma+3q=oLDSmcsY0z*VhsFC{mYJ4;;w$-&;)xnYiu? zh9N3tA*;%$7X#}(yDc)eVsCdBqz?E+bCbi8v&6}U*A|t6J(nOwG5s$RQwHE{{GU}B z#tpV*FY*uw6{HF4C28&s-Exa*$t}J$2#U{ifmX08WK+HG!!eaY5P{!zDhq_?tJ+JjtIA3(!y?Zuk(J6Z15XPRZOD%_D+S}ZHt zKUqETA7|o?r0tI>Qpzv-(7$SaC|~dY@&<5g;lCm=NirL^^Ju+(Q*HOLCykDlL4<+wi>aRd` z7J`%2OWA+VtYI=oM!w<`5Zu?{Yx07R4u;B3POQFAj+bd^xuX5%7oR@0pHA0ubrD1O z$Luwk$m^yk+oBD?|M^q|Mw)3vRp_ZW&i3|3BznqG;+`oiAU}xu zvidl#C0c4oKF-$JvH#Q!pl}Y-K{BM=AcS+y=+(2-%+yr5*hP6jna3$|z9oO~)Mv=} zZ{rw774WKME}wfqY(5ika?C@22z_qqfeo$v(KkB0XMH}{T5`7T!KDqdL2O1znm7();IY0&888?G$OGH9pwR&3o7&Zl@v-~K)78EOe)Z0Z^0Twa)-yd4|(VT!F~|JYbC$y*DNlO8)lllcL? zUVeO|v`5HgemXO#nP2d4ug4G>n{IUSJenn-iuAQuk@|I3!zAOY3c`b_4A8FG;pT!@ zj%r*THknP$@s9A};EJSkAJDCi+ei80jalC--xzTOARzoTKLR8Wd39*dSBuU5a9BIKwLZmq`}4ie!tW+y^EgPTU70TJCdE+j$@7 z=wMALmr_I~|FosSc&}JAGF})ceoMNwy$%sTgQQLIWc04^nZD^>hhRA``O_0WR*S^# zk~oIpRh`YhLtz8kL<89@4?mzqs@1r<-0QxIZ9_uyjvaGHA7|l;8Cs@R#sp>fNsLDk zLh>~r!6L} zH1G|Fbi_98CWI zzXAS#+zembQoPLBjefNAeciuz-tcBarYWR>pQsv7@t|G4H@-IffZzbv z@IF2Oi149{W+*WK>hCrS48n!R3Jf%mfHb)#LCl?PqIr+IMXYqI%&e7;FG5wtX;TFS zPP8Ke*V-ZI-$jScE$=lg#l?o9S~=L<(G}%zEmvM*CHH*~A{lETbs)JrNZG-ZrT0AW z6e1N+FB?khndv~m=TEcf3qk5%egHAs%9ZNRrtuM>tYn`I!BCdu?<`2os1GD>&}>*T z>Wv1|d?6H!Evp&Ivl>2aC`oZ1sI{kqhldYtv`4x1upyGPJ?=AnI-HJ7j{k6WGar9G zFQ>NW{x63>)`;fR+G2r=-7=3I&Fbppp^A6)uJq*2XBRis=4_iGi_YP#2lc%t>gTDb z(G%XIdwu2-f3`8PTAD=__lDnza-W~D#qL5*Q&4pvzY}6LuDsokFm%2RQMyrZ<92SQ zX+{33&;mmI?4SHdVHwvrs9PgE3TjUO1^bIZ@2T;f^6}ij{3glC73Qq6X6i6#n7cW4 zpZwn$T1J8-M!HyWtMbfj7K!93p?5Nb6g7yn&p|f*1xXV7RV_(;YIy87fhT)v(e5;6 zd4(_MesQ*XT%fBV&8B(rg&MD9K5ndZm;NFN^QD+dhaZ%(L<0-T@H3Bhl&$3+qu^p9G@(jV-$#5I| zgfUfJ?85K#alKdhcj^zC?ruav6G4Fl|M}f)2C`5tQ$L*phl6N&CFm*Z-E4t)ncdVM z6dJ2*gNK_l<2b2$W8vata3q4E+F%9#SEbDs|7u;qSQBz#(+35Io zQ~z2J&GF~u`HB~&Av=c;voZfMU$Xm^As_ZXup&IstrmSlyc`b7%q8tOy;>NG9C#z_ zQ3#Jv2vVezv3akkAv}~;p*@!rySrBNZ5(#4_OmbYp+3_-8gmhH z@kry!9k*?Aml6J_pHc9Cw6sb?21v=PliS23A6skgY|c0vM8});!l$O}XLuM=C=6+w z85?BWTwMH0n(`Qr>g+JyBldcfK-J8PblN)8-Amyeef6(r@aafgj=HvcWx?nKX!KG* zbFy**8tXql$LgnZfa{ET?_MN|5cm8$HzCaun?fqhl7K|#Kv}z?gLL| z#JSI3b{EHgZtgo!{_JE14N2Sr8Q;3Px)9HBEWn_-`Ckr>{na1INGYM>OTYzwGiuwiY!6HS>c&@a^GU+;l*+MH2}}i&f4BUxmlB`^S$T0RTJu1;D2ZiHpAmEM<=O3&3OEqw<$x_Bdx(S7S%@ ze$vy^(^T4w@97c$LWx;bRRvN9_ZIy&@UMjsw+tblQ+RAFc4k)AeH|?o@Ljn%IX{5D zU)clh62O?f|7&El!Dn@Iq79_|bJ2i>nimlhv%T1nMIjMbm{tJ8i(t)uq156erbb39 zV3h|jRvbz9bv#u197zG8p%4f4E#OsKKsJ z=8+NL6nK{|WwU0=bo?It7q@PS>fi`Y8&Ekf{p)c~*KBsrdxLZUxWfL_{%yG|0Awz_ ziK&0%+NiN$!3h|i@)xiB2;$;mVO_+8zC`>03G2QDaZ=L)hR~qmwg_eeP!%yH4dxNO zcn?G%CN*7xoq*Il0Y?NWDJjj`2fpWW-Lz`$G_FF(^wOM^#dNa-J}_iSrxGcq^t+_V{;n{yG>hk5l19UD7W#S6T) zq5QqQaOya>q8i%z?hYj-9!=K$0G#T11w`4>srnAcRp4fAAmNL&w6c8GmN#VoGzJIa zbK-Iwkc&p0j(bqKCKs2QP9t-^8QzSz_LJ*-pYo?s(JZdxynWtQ`6lX95yU^-#MQB8 zQx1}@9M7rYl&Uzmi{R4K3S|U^&Y6Qcq@$ujp;B0Vb~R6O;&7_F5nQx>eSVaYUS7KI zNH!fS@L+&9-EI$^Ra21VdCI58emK!WX`Sxu> z0IMxczRB=m?plJ#7fIk2a{|DZkX!U_jWgk+B)VpHGP80@U72}BlX*X=Ev`mn3&?k9t5`Ts)7Bk42+ck zYFsFO{rXi?DPx+Ug9p6$#Yta54+;kau~K_vc$O!IN^P5EOAnEqeB0*$QqQb24hhhq44050IM(wJQCg@`;*r_&-Qw@aU~DSs;jd#&i`rMn?V*cP zADr!>)f{->0y-=#lO~7jQT;FvIA_AB<}oCiAx~o0t?Fo&xg+|g?HF2Jf-wEz+NHbJ z2K5H)<(@3?HjiWEuOclQLb=Vr5|l{v!T8lLK*tpeQI7} z6G+UM+os$7WNyXtB-D-4bA%t~u_!Mz%7`QTyWaF#@BQhigVpq?yrs6Q8R36etDM=N z0JaPv3Z#X_#>O_4bm5sA8@Fzs18Q*a3eU!YqQb?+3&`V3yFcpBy5WZ_ap5f4L-?Hb zUG(WnYpg`FjcKf>;jM3^)T`)eXkr|F0tA|h#V?|PkmwEv=+b@5<^*~^jA(m{|76a_ zP*X%gb0HU19GIlIY@OeN$@!@hAHW8TE-V0~kVkiLa1i)!_0$Rc=nXDds;Y&6k>*?- z`4%fshJJ5(M)RjRT!h`?&&*FyhtU{`TjT-3gSx#uPLbhifg1K=eAqbVPte3AoqC*b z0c3bzuq$hP^Oi%G0C#*wTuubY6~9x2O0eiKHil2FCV1iAl4AJPm25(hT8vaO-XCq6 zu!+scnhnu2Q$Aeg0KJ8JfY*oB3V$jT{C(%>j8&2%@np!bpj@VoF^o!8YIrUqFLQ9m zOBWI>+e~###VPkxK{fj@PDiYTWp$Xy!70L35CxO7!9=PsFzMO9_x$!45p>ILtF;Pb7_fy4bP z%n#=-ja(_xO_#-%_DRH8Sf2nN*Wb!e+m2wzsamGmMSkQq2OCYd(^s;xvW8_Gnqe)w zFP?d0aC52yDSO=$?vHosUv=TCD=S9;|C*@Wn(FGYu`%!Ieg0hm@Ry8n{=*=3yWmSQ zQc!HXf24i1x2<3F_4Q4*AqjbLt+R2LTLu*E0Q1*l#-UrLEIoV1NJobh*WU>^?*I$} zZWlZ`bQ%sH@o?EGBped1RUe2RyZ_brA=ur3BK)rk!zL66*ASMTP6`aGgzCVo8Hd30 zgKdKbV@ODdrY*8eSg&3tz_S1~l5NtiAbtVV!#~;Mf?f)^vq8Ael_7eM>%I8u6~F{8 z!&UL}g4L)~o{5!UTD|e`58E?M0q{~mo!*@~z#>ffttLKaC~^D;465h$AI4Q+gxwQB zX@KY8$Hq1D015n^7@|VkdsE;W(Q8ls=`XPnYKeWaT^4`=<74)!_b%NY^-V{=bgvh$ zriq@-HS00}98Q{OnuI%j7 z2Kx6*Z}vYv92Ps~^UU>Eo+s4AhArK_Pvf|-7s1bW@t}G>AKt1^HPdWjl&W$&JDNXm z+Xr2-U;RFIJ{L&Vhr2#;nAO-*1r$8nLADo;V67Jp1)xY@* z@)d>Cm)Sl`J3nfjIiq9!d1+4+Rw3gaAJ@%(t7H-w&sy(0QAN-jcxj0c@cUYQ6By`h zH$Q=lgDe9EsYe0fJEHl%*0BDYB;LU64Xz@g!+C;ymt%Dk^2k3X%Fj_aCU~FJKH}yE z%~ed6En^Oa`>$Y*59vzzUD;k_zD25o*mI%eNzo($KBL6MMAh%)Fr2GGOyc*xrBmR5p?<^q!x_@n9cyVMa^XQ9n!;J&vsekcl6zwM%Q!J#0L8k-u zhP~rG%aPsDm3q1Sn=lK}f&ytY>roQo;s$F2YM%?{Z0qx#4A95NfLmV-4vH&!K$8J* zq!T~+r;ao;i*a$4{bs_XOlnlD$o2mi(H@P=g`DL+$hTux=)%?@vOf9#rKQyVC(RD%Oomey*vkH@B7=ROGp# zk($HWPf+hwpTng#3j5=4VICehODmlJc$pd!U(>}43mqtyizVNEJ;lT8;8*w}p@7Xg z_Z=}dE_#fO!>{r+b)^%vYf1D)ck1S*GW0g0?H`Z?!)d^Num3Mnk0VBEf_o-LzU06` zfB}f)UZ`jrdXJi?%YR-7=;vasV3k2`E<3LURDA_;Z7)bKKVh)1kouu=ViN3GmQ31g zFd=WfK2S`rO)Y3dxtiu2TQGUsf!~=E*NN_o{=|@{KdBrg%G`6waO`o#-ITuA0Al*- z8rUo&gJg1oGvPH6uJA&O zsDRB+CYyc(5aDF;a3o#y>?OPd0r~(~L!eYiI zSJtO1tHC!zq&%GBrkQs>j@A=3E4IfQS{twB{O;x5G!G1q1q*(e8+BpfOB^^dQsp)a z`cB&X32cnH=XR>ZyZeE`ydn2flLc5jd+=_ue!9nb6U4@uuMpp^%Bt}+9Nvw#Z9m(s z%qVq782nbllKysJ#SntT&8)m-nq566H0edo<}Br_Opb?-(;Z&TbKCT5bG%XEXi3?2TRx7O;e2zw=!^l*iPY)kojen{H7@PXs_k$(^I<`TQTrk z!?ojVcU!d54=p**Y(AnMXC0l3ey8*KWA}+J*MsMmfLk=BC6jD>DXGO*Cbr{kOOHjF z=VPSI)3ho!r|+bCXk~GzhT=N`(?y)yBkRkT`A?2++8GlH zin1P+0S5h~Yio>Ddznkqhcm94haShmut>WXj_w7|rQMb8(vz;o>(yba_oL=vP-2Bn z*C0;j{AEM&uZ+X1BUBHw+Ha3ANZ<;>tSa;I32v!rD=53 zni8#xz|;v6OOvM1X`#6;oJ&8=th4VZXEqVymPlwn1?v>aMdfmMFY2IvbgZkEBeMv5 zR>En;H#1nR5Gq>(*j3&j8vE<5M1Y_Kcn9F(O82j}yDf2OsEliK4r)XD<5@9_?e7~y zwsc1bi)podXp^F!;J*4jOwjp;W*wK4GGJzfM_{%-t%Tg|GE8dCCMjSfK0*zo(9O_o z?(H`5JpN;I?3i`0;F~CDK7B~GQ;1}RzbB7GX`LXsCB9Hz0(Z>&yu!szXwiensN~TX zHHH3DXCBK@A~OXtV#ZSxLcv^D94jO}T%oleDwXksLNFelk7KhBh-yLdqyO#GHLi{_ z?pdRC@U4a3JWja5-W4ay%9(619&6xCxQoE!GSBm+ae;x12vKYXIiBqxSJwk6cE1<@ z!R+#cl$7eP;s;-!x7NY<`_1mwIFl7M<+0f5ITnm02j|Q;2+z*J_}G0B%^p2X!}YQ2 zSxcvHL%Sf|IB!k5)Io2SLyR`Y!w4r_PvK+*=K3R^+9mL9+4E0*j7sj%x`p~BhDsZi zITc6_bDlD}BD+F$)%xCisyfgeUN(I^wnQ75>v_T_VOFBBR@hTeTYBy}H60DQ&Uwzs z!sV_M%=K!=W3ARD{e8Ubx0TrFCTI9|3r>j@JT6FHk0iXmOa*&MNiM7Wc0E)ulyZW} zsx^s1QLo0hoM0q+^MfC-zdawj&TbzFLX-*q37i;JV&=Pe9onp9`*G049)aekh-)MC#B1>Ehc zq;8}?vOrHNzXIFUiR0+|Mt(oi^!(VwE^1MV5Hj{n1X$;So66jKTR=A$(S-A%^#dtS zNOHHvb_!>z{%(r#j4Cbl!!V7SYd=|Fp%)KW^gUSS2;F8rm@!A@DwMfS`bOd4s>(I= zBKKaQtl!T9a_?Jo-g_&q#pu$68Eu_#y)8>ed8PG(rXA^n1wNWL+wVKSIe9h5eBHZ! zi>Dhl-8gPdAMr`l>6b10iUUu+?Hg9AjP`7bsB>$lJ*!j?+k8M*X7v#kiF87KdFtJt zA9r`K48&+cJD!j*oP=BcVY=#m?Qo)6tsgh^l_KsMGcJzd;)VSQ2~k4QY%h=~KfEU9 z@_mbQYkAtbs`#-{ij5umNSN>fWlh!LeJm+vD>UP#DzvoXXI3~8Ffwi4Iv7=()jikGlI60G;f*QkiChDa2&3(F03Y;;JH z@|fMOTuJ`8EEhBE1Z;X}t;l})#~4D#i`5~hq8uc#xe;l5>P-=xW%R;Nqbj~V8LKNmL;FlfATQxPmtce1+E6+;eY#B`Y)(qTkcLX+c17x2g_hS?D%rbZe{Dsplj4$H;KPbcebXS{JR#4QvrQ*Fk z6-n~0U3Hn>cE9)O)$>+7flTcZ1vu>0Lr%fnT`|b^QqLN z-&6Opl!-hqeo-aXv`vB?!nfis*`B7Iy*T&X9~y;MZ^OKF+j%*@QmWN@uG2;_Q|c;c zBkl35mLz?lblHb)ybM}mX;`LR5P3k?uXt){3Af8cF3iSHoXcJoocn-3#v$PmHGO`% zkk@q%x!Dysy;^MI zI25Um?s!Nnl~u4Qx{;ASaQa_9$4Z18wmOE7%cclxX{vjax<08(eOr5#QX};RVJ>OZ zYU>_DVR6XqN@&+MQUwn$a&Cd&jWP3)%41`jRDy+)W+!X^2Bq`L90mg7knWidGj)5 z@gYhEzfK_6y2z$HXO0|2BKAt3p}rv1n)X`tRo_$Kx5Jwc8aeMrfK%SKcjNID$MrFa z>5-NXYDsCOk=LHz?3$~_9fowJC5Vcl8>P9`DfRVo`}kN?@j~ov*uNuf$+3=7d#?jEKy)-_RTa3 zKC5JeT`5>DQfRFAy7Kw)>DL0&E><`xo~UNVz6~o`f%Te5+@6VPtbi$BeiW5D&(jt2 zWLWLz>EPxMuz1l9wF*ie+yfJJXTF4vz6^twB-@PN_PfiH#ZlWr5jlM?Cbz?*3c66A zGPCGa`s%L=u43bebhWQiu1n=mnW%1$KvewLu}g)v~AKLARw3n(wcW! zSvIPaj5-4c3)~mqDrKpb-0@64xu?)xQRZuPRk0)>u(=wPo48LiSCmY@o6q9amu!}J zCod)Uy}Eonxx9I5H01hINWoKm64Te+y45bI6qnqOF{Skz7Iwe3;tCb2r)i>ki!zgf zCV)hKw3^luXMLA0KVp}7#Pmx)F$rW)^cHy&SdQf9aTXR-iHl6zY3vJp%}MdFmb586 zLgiI3rTgmDNue&EIlF#1SDXJGC5$3WcoKDBy6DZ@3QTAS9ged#HoU}zyPI!OY-gFF zz1&EjB_(6FCnQqL%;aq5eqAZ*FAYyjuzXC=JbH~o;VfVpSOx^lz=(>Bz7eTtFmyPW z-j+)9V@wV&iq_k`*lyKU2}(>-jY)RXZhnSdYl{X_uo;t(FsuY&SJ_$1K4@0^EH{@!qSj2RUb zGqE7@`;9z1gwd;!*Lpb{U^a^ifIA>S@u379TS21K@zyuZQ-K}6) zF~NfheM)_{tE%01%6C81#*KzER6!5*_zH_{peuR{kllkWXe(^ZH9{*KgTmu$KmRih z{dTYn0tCd6<|!s@u5#5@&HP0pvxCACtI~Mhrs*9$A}}e1-pIU_?gn)fQAL6a1q$ot z-}&FmI8P;29X+ZQ&z65tjH1X=0EEb%Mo?((AnoJ=vOR6QJgNMj(MI0vdvW z{t7$wRyFey#*sTXocG<-35F%Ix9YRyi-MBQ&bNt|!KAWYM zw-djDK%;N(31S;_l)EHxjZWk^8_@g{K+Y)ld0ec(k&5gd?8S`^a zrx7YW8Wta3ns61|<)Zfy@{=WIr4~DSYYyfmP44a2PSNZp;O`bsk2ZsHr#O0--Q+?A zNhUIE4Ihmxi!bkl8V~Ji{HV=~?+z*qZl!uzXk_tpSvHQtF7@>v*uv8?R%=+5Id3w4_C$H>U2>|q)9f}CPqhs|bo8s-cU zdgdIPLurs*5h(bBM}9%RAIyw#|5EPZ+ymp@#rdL#y2jP?pV5Bsqu64+h%teXU{-a$Zk zKA{UP`o1#`RzP$≠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 literal 0 HcmV?d00001 diff --git a/doc/user/user/sample-metadata/images/upload-column.png b/doc/user/user/sample-metadata/images/upload-column.png deleted file mode 100644 index 3ca4ff8b8fbf4979466d6065cfddd69ec1352992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61008 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%0A7jj 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