From fe67e051936abc7e456ea3a2f0cccab7714de94b Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Tue, 21 May 2024 23:39:20 +0000 Subject: [PATCH 01/18] Initial bruno test commit --- .../Add attachment to Datarecord.bru | 29 +++ .../Create Datarecord for Attachments.bru | 127 ++++++++++ .../Create RDMP For Deletion.bru | 76 ++++++ .../1 - Record Management/Create RDMP.bru | 81 ++++++ .../Create Temporary Datapub.bru | 215 ++++++++++++++++ .../Delete Record Again.bru | 27 ++ .../1 - Record Management/Delete Record.bru | 27 ++ .../Destroy Deleted Record.bru | 22 ++ .../Export RDMP Records.bru | 40 +++ .../Get RDMP-s Metadata - Updated Test.bru | 27 ++ .../Get RDMP-s Metadata.bru | 27 ++ .../Get RDMP-s ObjectMetadata.bru | 29 +++ ... RDMP-s Record Audit with Date filters.bru | 34 +++ .../Get RDMP-s Record Audit.bru | 36 +++ .../Give user edit permissions to RDMP.bru | 34 +++ .../List Attachments for Datarecord.bru | 41 +++ .../List Deleted RDMPs.bru | 37 +++ .../1 - Record Management/List RDMPs.bru | 37 +++ .../Restore Deleted Record.bru | 22 ++ ...ransition Workflow of Data publication.bru | 29 +++ .../Update RDMP Metadata.bru | 75 ++++++ ...t to retrieve user that does not exist.bru | 49 ++++ .../Create API Researcher User.bru | 44 ++++ ...Generate API Researcher User API Token.bru | 32 +++ .../Get Admin User Details.bru | 47 ++++ .../2 - User Management/List Users.bru | 34 +++ .../Revoke API Researcher User API Token.bru | 32 +++ .../Update API Researcher User.bru | 42 ++++ .../1 - REST API/3 - Search/Index Record.bru | 25 ++ .../1 - REST API/3 - Search/Remove All.bru | 27 ++ .../1 - REST API/3 - Search/Search Index.bru | 30 +++ .../4 - Form Management/Get Form.bru | 30 +++ .../4 - Form Management/List Forms.bru | 27 ++ .../Get Record Type.bru | 30 +++ .../List Record Types.bru | 27 ++ .../Refresh Cached Resources.bru | 22 ++ .../7 - App Config/Get App Config.bru | 26 ++ .../7 - App Config/Update App Config.bru | 44 ++++ ...her user from the user management page.bru | 61 +++++ .../Create data publication.bru | 230 +++++++++++++++++ .../Create data record via form.bru | 137 ++++++++++ .../Create new researcher user.bru | 54 ++++ .../Dashboard List RDMP Records.bru | 44 ++++ .../Delete the created data record.bru | 26 ++ .../Admin User Tests/Download attachment.bru | 22 ++ .../Admin User Tests/Export RDMP Data.bru | 61 +++++ .../First Phase of attachment upload.bru | 39 +++ ...nerate API key for new researcher user.bru | 48 ++++ .../Get Dashboard Type Consolidated.bru | 30 +++ .../Get Dashboard Type Standard.bru | 30 +++ .../Get Dashboard Type Workspace.bru | 30 +++ .../Get DataPublication Workflow Steps.bru | 40 +++ .../Get DataRecord Type info.bru | 40 +++ .../Get all Record Types Info.bru | 39 +++ .../Get edit form config for RDMP.bru | 42 ++++ ...cher user no longer has librarian role.bru | 51 ++++ .../Get list of users and roles.bru | 51 ++++ ...sers list and find new researcher user.bru | 54 ++++ .../Get view form config for RDMP.bru | 42 ++++ .../Admin User Tests/List Dashboard Types.bru | 36 +++ .../Login via Internal authentication.bru | 48 ++++ .../Admin User Tests/Logout Admin User.bru | 31 +++ .../Migrate data publication to reviewing.bru | 233 ++++++++++++++++++ ...ve Librarian role from Researcher User.bru | 53 ++++ .../Admin User Tests/Report.bru | 41 +++ .../Save attachment on Data Record.bru | 151 ++++++++++++ .../Admin User Tests/Search Index.bru | 42 ++++ .../Second Phase of attachment upload.bru | 46 ++++ .../Try to create same researcher user.bru | 60 +++++ ...ate RDMP Metadata using AJAX form call.bru | 80 ++++++ .../Update researcher user-s password.bru | 61 +++++ ...ew form config for RDMP - Unauthorised.bru | 34 +++ .../Create data publication.bru | 230 +++++++++++++++++ .../Create data record via form.bru | 137 ++++++++++ ...l authentication using researcher data.bru | 50 ++++ ...g researcheruser with invalid password.bru | 53 ++++ .../Logout Researcher User.bru | 31 +++ .../Migrate data publication to reviewing.bru | 233 ++++++++++++++++++ ...pdate data publication after in review.bru | 224 +++++++++++++++++ test/bruno/4 - General/Get logo.bru | 24 ++ test/bruno/4 - General/Get stylesheet.bru | 26 ++ test/bruno/5 - Solr/Start indexing.bru | 35 +++ test/bruno/attachment.png | Bin 0 -> 30148 bytes test/bruno/bruno.json | 14 ++ test/bruno/environments/int-test.bru | 6 + 85 files changed, 4790 insertions(+) create mode 100644 test/bruno/1 - REST API/1 - Record Management/Add attachment to Datarecord.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Delete Record Again.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Delete Record.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Destroy Deleted Record.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Export RDMP Records.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Get RDMP-s ObjectMetadata.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit with Date filters.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Give user edit permissions to RDMP.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/List Deleted RDMPs.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/List RDMPs.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Restore Deleted Record.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Transition Workflow of Data publication.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru create mode 100644 test/bruno/1 - REST API/2 - User Management/Attempt to retrieve user that does not exist.bru create mode 100644 test/bruno/1 - REST API/2 - User Management/Create API Researcher User.bru create mode 100644 test/bruno/1 - REST API/2 - User Management/Generate API Researcher User API Token.bru create mode 100644 test/bruno/1 - REST API/2 - User Management/Get Admin User Details.bru create mode 100644 test/bruno/1 - REST API/2 - User Management/List Users.bru create mode 100644 test/bruno/1 - REST API/2 - User Management/Revoke API Researcher User API Token.bru create mode 100644 test/bruno/1 - REST API/2 - User Management/Update API Researcher User.bru create mode 100644 test/bruno/1 - REST API/3 - Search/Index Record.bru create mode 100644 test/bruno/1 - REST API/3 - Search/Remove All.bru create mode 100644 test/bruno/1 - REST API/3 - Search/Search Index.bru create mode 100644 test/bruno/1 - REST API/4 - Form Management/Get Form.bru create mode 100644 test/bruno/1 - REST API/4 - Form Management/List Forms.bru create mode 100644 test/bruno/1 - REST API/5 - Record Type Management/Get Record Type.bru create mode 100644 test/bruno/1 - REST API/5 - Record Type Management/List Record Types.bru create mode 100644 test/bruno/1 - REST API/6 - Administration/Refresh Cached Resources.bru create mode 100644 test/bruno/1 - REST API/7 - App Config/Get App Config.bru create mode 100644 test/bruno/1 - REST API/7 - App Config/Update App Config.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Report.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru create mode 100644 test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru create mode 100644 test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru create mode 100644 test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru create mode 100644 test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru create mode 100644 test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru create mode 100644 test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru create mode 100644 test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru create mode 100644 test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru create mode 100644 test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru create mode 100644 test/bruno/4 - General/Get logo.bru create mode 100644 test/bruno/4 - General/Get stylesheet.bru create mode 100644 test/bruno/5 - Solr/Start indexing.bru create mode 100644 test/bruno/attachment.png create mode 100644 test/bruno/bruno.json create mode 100644 test/bruno/environments/int-test.bru diff --git a/test/bruno/1 - REST API/1 - Record Management/Add attachment to Datarecord.bru b/test/bruno/1 - REST API/1 - Record Management/Add attachment to Datarecord.bru new file mode 100644 index 0000000000..7620e53a32 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Add attachment to Datarecord.bru @@ -0,0 +1,29 @@ +meta { + name: Add attachment to Datarecord + type: http + seq: 18 +} + +post { + url: {{host}}/default/rdmp/api/records/datastreams/{{attDataRecordOid}} + body: multipartForm + auth: none +} + +headers { + Authorization: Bearer {{token}} + ~Content-Type: application/json +} + +body:multipart-form { + attachmentFields: undefined + ~dataLocations: +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru b/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru new file mode 100644 index 0000000000..7edbc0deb5 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru @@ -0,0 +1,127 @@ +meta { + name: Create Datarecord for Attachments + type: http + seq: 17 +} + +post { + url: {{host}}/default/rdmp/api/records/metadata/dataRecord + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "parameterRetriever": "", + "rdmpGetter": "", + "": {}, + "rdmp": { + "oid": "{{dmpOid}}", + "title": "Andrew's Postman test - Updated from form AJAX call" + }, + "aim_project_name": "Andrew's Postman test - Updated from form AJAX call", + "foaf:fundedBy_foaf:Agent": [ + "" + ], + "dc:coverage_vivo:DateTimeInterval_vivo:end": "", + "foaf:fundedBy_vivo:Grant": [ + "" + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "title": "A Data record", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator", + "orcid": null + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "username": "", + "role": "Contributors", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "contributor_supervisor": { + "text_full_name": null, + "full_name_honorific": "", + "email": null, + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor", + "orcid": null + }, + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "redbox:retentionPeriod_dc:date": "1year", + "redbox:retentionPeriod_dc:date_skos:note": "", + "disposalDate": "", + "related_publications": [ + { + "related_url": "", + "related_title": "", + "related_notes": "" + } + ], + "dataLocations": [], + "software_equipment": "" + } +} + +tests { + + test("Status code is 201", function () { + expect(res.getStatus()).to.equal(201); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + bru.setEnvVar("attDataRecordOid", jsonData.oid); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru b/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru new file mode 100644 index 0000000000..60eb216825 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru @@ -0,0 +1,76 @@ +meta { + name: Create RDMP For Deletion + type: http + seq: 11 +} + +post { + url: {{host}}/default/rdmp/api/records/metadata/rdmp + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "title": "Andrew's Postman test", + "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", + "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "vivo:Dataset_redbox:DataCollectionMethodology": "The data collection methodology", + "vivo:Dataset_dc_format": "xls", + "vivo:Dataset_dc:location_rdf:PlainLiteral": "eResearch Store network drive", + "vivo:Dataset_dc:source_dc:location_rdf:PlainLiteral": "shared university network drive (e.g. G, H, etc)", + "vivo:Dataset_dc:extent": "100GB - 2TB", + "redbox:retentionPeriod_dc:date": "1year", + "dc:rightsHolder_dc:name": "myUni", + "dc:accessRights": "permission from the data manager", + "authorization": [] + } +} + +tests { + + test("Status code is 201", function () { + expect(res.getStatus()).to.equal(201); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + bru.setEnvVar("dmpOidToDelete", jsonData.oid); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru new file mode 100644 index 0000000000..1b42a68fa5 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru @@ -0,0 +1,81 @@ +meta { + name: Create RDMP + type: http + seq: 1 +} + +post { + url: {{host}}/default/rdmp/api/records/metadata/rdmp + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "title": "Andrew's Postman test", + "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", + "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "vivo:Dataset_redbox:DataCollectionMethodology": "The data collection methodology", + "vivo:Dataset_dc_format": "xls", + "vivo:Dataset_dc:location_rdf:PlainLiteral": "eResearch Store network drive", + "vivo:Dataset_dc:source_dc:location_rdf:PlainLiteral": "shared university network drive (e.g. G, H, etc)", + "vivo:Dataset_dc:extent": "100GB - 2TB", + "redbox:retentionPeriod_dc:date": "1year", + "dc:rightsHolder_dc:name": "myUni", + "dc:accessRights": "permission from the data manager", + "authorization": [] + } +} + +tests { + + test("Status code is 201", function () { + expect(res.getStatus()).to.equal(201); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + bru.setEnvVar("dmpOid",jsonData.oid); + + var randomNumber = Math.floor(Math.random() * (1000 - 0 + 1) + 0) + bru.setEnvVar("randomNumber",randomNumber); + bru.setEnvVar("researcherUsername", "researcheruser" + randomNumber); + bru.setEnvVar("researcherEmail", "researcheruser" + randomNumber + "@email.edu.au"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru b/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru new file mode 100644 index 0000000000..70167396c1 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru @@ -0,0 +1,215 @@ +meta { + name: Create Temporary Datapub + type: http + seq: 20 +} + +post { + url: {{host}}/default/rdmp/api/records/metadata/dataPublication + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "parameterRetriever": "", + "dataRecordGetter": "", + "": {}, + "title": "A Data record", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "foaf:fundedBy_foaf:Agent": [ + {} + ], + "foaf:fundedBy_vivo:Grant": [ + {} + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "startDate": "", + "endDate": "", + "timePeriod": "", + "geolocations": [ + "" + ], + "geospatial": {}, + "accessRightsToggle": "", + "dataLocations": [ + { + "type": "attachment", + "location": "b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "mimeType": "image/png", + "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", + "fileId": "d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "selected": true + } + ], + "dataLicensingAccess_manager": "Prof Paul Gleeson", + "dc:accessRights": "Open", + "accessRights_url": "", + "related_publications": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_websites": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_metadata": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_data": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_services": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "license_identifier": "", + "license_notes": "", + "license_other_url": "", + "license_statement": "Copyright ReDBox Research Data 2018", + "license_statement_url": "", + "citation_doi": "", + "requestIdentifier": [], + "citation_title": "A Data Record", + "creators": [ + { + "text_full_name": "Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "role": "Chief Investigator", + "username": "", + "orcid": "", + "family_name": "Zweinstein", + "given_name": "Alberto" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Data manager", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Contributors", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": null, + "email": null, + "role": "Supervisor", + "username": "", + "orcid": "", + "family_name": "", + "given_name": "" + } + ], + "citation_publisher": "ReDBox Research Data", + "citation_url": "", + "citation_publication_date": "", + "citation_generated": "Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}", + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "full_name_honorific": "", + "email": "notAReal@email.edu.au", + "given_name": "Prof", + "family_name": "Paul Gleeson", + "honorific": "", + "full_name_family_name_first": "Paul Gleeson, Prof", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_supervisor": { + "text_full_name": "", + "full_name_honorific": "", + "email": "", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor" + }, + "embargoByDate": "", + "embargoUntil": null, + "embargoNote": "", + "reviewerNote": "", + "ckanLocation": "" + } +} + +tests { + + test("Status code is 201", function () { + expect(res.getStatus()).to.equal(201); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + bru.setEnvVar("tempDataPubOid", jsonData.oid); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Delete Record Again.bru b/test/bruno/1 - REST API/1 - Record Management/Delete Record Again.bru new file mode 100644 index 0000000000..c9375be665 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Delete Record Again.bru @@ -0,0 +1,27 @@ +meta { + name: Delete Record Again + type: http + seq: 15 +} + +delete { + url: {{host}}/default/rdmp/api/records/metadata/{{dmpOidToDelete}} + body: none + auth: bearer +} + +auth:bearer { + token: {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Success is set and is true", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('success'); + expect(jsonData.success).to.eql(true); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Delete Record.bru b/test/bruno/1 - REST API/1 - Record Management/Delete Record.bru new file mode 100644 index 0000000000..80b4f46880 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Delete Record.bru @@ -0,0 +1,27 @@ +meta { + name: Delete Record + type: http + seq: 12 +} + +delete { + url: {{host}}/default/rdmp/api/records/metadata/{{dmpOidToDelete}} + body: none + auth: bearer +} + +auth:bearer { + token: {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Success is set and is true", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('success'); + expect(jsonData.success).to.eql(true); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Destroy Deleted Record.bru b/test/bruno/1 - REST API/1 - Record Management/Destroy Deleted Record.bru new file mode 100644 index 0000000000..7907cc909c --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Destroy Deleted Record.bru @@ -0,0 +1,22 @@ +meta { + name: Destroy Deleted Record + type: http + seq: 16 +} + +delete { + url: {{host}}/default/rdmp/api/deletedrecords/{{dmpOidToDelete}} + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Export RDMP Records.bru b/test/bruno/1 - REST API/1 - Record Management/Export RDMP Records.bru new file mode 100644 index 0000000000..348e0dc247 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Export RDMP Records.bru @@ -0,0 +1,40 @@ +meta { + name: Export RDMP Records + type: http + seq: 6 +} + +get { + url: {{host}}/default/rdmp/api/export/record/download/json?before=&after=&recType=rdmp + body: none + auth: none +} + +query { + before: + after: + recType: rdmp +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("There is more than 1 RDMP record in the records", function () { + var jsonData = res.getBody(); + expect(jsonData.records.length).to.be.greaterThan(0); + }); + + test("Content-Disposition is present and valid", function () { + console.log(res.getHeaders()) + expect(res.getHeader("content-disposition")).to.not.be.undefined; + expect(res.getHeader("content-disposition")).to.equal('attachment; filename="Plan - Exported Records.json"'); + }); + +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru new file mode 100644 index 0000000000..62724af918 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru @@ -0,0 +1,27 @@ +meta { + name: Get RDMP-s Metadata - Updated Test + type: http + seq: 7 +} + +get { + url: {{host}}/default/rdmp/api/records/metadata/{{dmpOid}} + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Title is correct", function () { + var jsonData = res.getBody(); + expect(jsonData.title).to.eql("Andrew's Postman test - Updated"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru new file mode 100644 index 0000000000..eebd8481d9 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru @@ -0,0 +1,27 @@ +meta { + name: Get RDMP-s Metadata + type: http + seq: 2 +} + +get { + url: {{host}}/default/rdmp/api/records/metadata/{{dmpOid}} + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Title is correct", function () { + var jsonData = res.getBody(); + expect(jsonData.title).to.eql("Andrew's Postman test"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s ObjectMetadata.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s ObjectMetadata.bru new file mode 100644 index 0000000000..e209571366 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s ObjectMetadata.bru @@ -0,0 +1,29 @@ +meta { + name: Get RDMP-s ObjectMetadata + type: http + seq: 3 +} + +get { + url: {{host}}/default/rdmp/api/records/objectmetadata/{{dmpOid}} + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Type and Form is correct", function () { + var jsonData = res.getBody(); + expect(jsonData.type).to.eql("rdmp"); + expect(jsonData.form).to.eql("default-1.0-draft"); + bru.setEnvVar("brandId", jsonData.brandId); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit with Date filters.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit with Date filters.bru new file mode 100644 index 0000000000..faa5a817c0 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit with Date filters.bru @@ -0,0 +1,34 @@ +meta { + name: Get RDMP-s Record Audit with Date filters + type: http + seq: 9 +} + +get { + url: {{host}}/default/rdmp/api/records/audit/{{dmpOid}}?dateFrom=2023&dateTo=2021 + body: none + auth: none +} + +query { + dateFrom: 2023 + dateTo: 2021 +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200) + }); + + test("Zero items found", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('summary') + .and.to.have.property('numFound') + .and.equal(0) + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit.bru new file mode 100644 index 0000000000..32a0b89d1b --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit.bru @@ -0,0 +1,36 @@ +meta { + name: Get RDMP-s Record Audit + type: http + seq: 8 +} + +get { + url: {{host}}/default/rdmp/api/records/audit/{{dmpOid}} + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.eql(200) + }); + + test("Number of found items is returned", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('summary') + .and.to.have.property('numFound') + .and.equal(2) + }); + + test("Data is returned", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('records') + .and.to.have.property(0) + .and.to.have.property('redboxOid') + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Give user edit permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Give user edit permissions to RDMP.bru new file mode 100644 index 0000000000..7d5714b644 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Give user edit permissions to RDMP.bru @@ -0,0 +1,34 @@ +meta { + name: Give user edit permissions to RDMP + type: http + seq: 10 +} + +post { + url: {{host}}/default/rdmp/api/records/permissions/edit/{{dmpOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "users": ["user"] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Edit permissions applied", function () { + var jsonData = res.getBody(); + //TODO: This is because of the save trigger + expect(true).to.eql(true); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru b/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru new file mode 100644 index 0000000000..47439354d2 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru @@ -0,0 +1,41 @@ +meta { + name: List Attachments for Datarecord + type: http + seq: 19 +} + +put { + url: {{host}}/default/rdmp/api/records/datastreams/{{attDataRecordOid}} + body: none + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +tests { + //Replacement for lodash not being in bruno by default + function size(collection) { + if (collection == null) { + return 0; + } + if (Array.isArray(collection) || typeof collection === 'string') { + return collection.length; + } + if (typeof collection === 'object') { + return Object.keys(collection).length; + } + return 0; // return zero if none of the above conditions apply + } + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has attachments", function () { + var jsonData = res.getBody(); + expect(size(jsonData)).to.gt(0); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/List Deleted RDMPs.bru b/test/bruno/1 - REST API/1 - Record Management/List Deleted RDMPs.bru new file mode 100644 index 0000000000..9c79d72d90 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/List Deleted RDMPs.bru @@ -0,0 +1,37 @@ +meta { + name: List Deleted RDMPs + type: http + seq: 13 +} + +get { + url: {{host}}/default/rdmp/api/deletedrecords/list?recordType=rdmp + body: none + auth: none +} + +query { + recordType: rdmp +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("There is more than 1 RDMP record in the records", function () { + var jsonData = res.getBody(); + expect(jsonData.records.length).to.be.greaterThan(0); + }); + + test("Check record has oid and metadata properties", function () { + var jsonData = res.getBody(); + expect(jsonData.records[0]).to.have.property("oid") + expect(jsonData.records[0]).to.have.property("deletedRecord") + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/List RDMPs.bru b/test/bruno/1 - REST API/1 - Record Management/List RDMPs.bru new file mode 100644 index 0000000000..227ac25ad3 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/List RDMPs.bru @@ -0,0 +1,37 @@ +meta { + name: List RDMPs + type: http + seq: 5 +} + +get { + url: {{host}}/default/rdmp/api/records/list?recordType=rdmp + body: none + auth: none +} + +query { + recordType: rdmp +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("There is more than 1 RDMP record in the records", function () { + var jsonData = res.getBody(); + expect(jsonData.records.length).to.be.greaterThan(0); + }); + + test("Check record has oid and metadata properties", function () { + var jsonData = res.getBody(); + expect(jsonData.records[0]).to.have.property("oid") + expect(jsonData.records[0]).to.have.property("metadata") + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Restore Deleted Record.bru b/test/bruno/1 - REST API/1 - Record Management/Restore Deleted Record.bru new file mode 100644 index 0000000000..a3b9df6d6a --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Restore Deleted Record.bru @@ -0,0 +1,22 @@ +meta { + name: Restore Deleted Record + type: http + seq: 14 +} + +put { + url: {{host}}/default/rdmp/api/deletedrecords/{{dmpOidToDelete}} + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Transition Workflow of Data publication.bru b/test/bruno/1 - REST API/1 - Record Management/Transition Workflow of Data publication.bru new file mode 100644 index 0000000000..0bcf4025f5 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Transition Workflow of Data publication.bru @@ -0,0 +1,29 @@ +meta { + name: Transition Workflow of Data publication + type: http + seq: 21 +} + +post { + url: {{host}}/default/rdmp/api/records/workflow/step/queued/{{tempDataPubOid}} + body: none + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Success is set and is equal to true", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('success'); + expect(jsonData.success).to.eql(true); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru new file mode 100644 index 0000000000..ee07b444e9 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru @@ -0,0 +1,75 @@ +meta { + name: Update RDMP Metadata + type: http + seq: 4 +} + +put { + url: {{host}}/default/rdmp/api/records/metadata/{{dmpOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "title": "Andrew's Postman test - Updated", + "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", + "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "vivo:Dataset_redbox:DataCollectionMethodology": "The data collection methodology", + "vivo:Dataset_dc_format": "xls", + "vivo:Dataset_dc:location_rdf:PlainLiteral": "eResearch Store network drive", + "vivo:Dataset_dc:source_dc:location_rdf:PlainLiteral": "shared university network drive (e.g. G, H, etc)", + "vivo:Dataset_dc:extent": "100GB - 2TB", + "redbox:retentionPeriod_dc:date": "1year", + "dc:rightsHolder_dc:name": "myUni", + "dc:accessRights": "permission from the data manager", + "authorization": [] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test oid is equal to the requested oid value", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + expect(jsonData.oid).to.eql(bru.getEnvVar("dmpOid")); + }); +} diff --git a/test/bruno/1 - REST API/2 - User Management/Attempt to retrieve user that does not exist.bru b/test/bruno/1 - REST API/2 - User Management/Attempt to retrieve user that does not exist.bru new file mode 100644 index 0000000000..a2a5a1eff8 --- /dev/null +++ b/test/bruno/1 - REST API/2 - User Management/Attempt to retrieve user that does not exist.bru @@ -0,0 +1,49 @@ +meta { + name: Attempt to retrieve user that does not exist + type: http + seq: 3 +} + +get { + url: {{host}}/default/rdmp/api/users/get?searchBy=email&query=fake@redboxresearchdata.com.au + body: none + auth: none +} + +query { + searchBy: email + query: fake@redboxresearchdata.com.au +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 404", function () { + expect(res.getStatus()).to.equal(404); + }); + + test("Error message is correct", function () { + var jsonData = res.getBody(); + + var message = jsonData.message; + + expect(message).to.eql('No user found with given criteria'); + + + }); + + test("Details message is correct", function () { + var jsonData = res.getBody(); + + var details = jsonData.details; + + expect(details).to.eql('Searchby: email and Query: fake@redboxresearchdata.com.au'); + + + }); + + +} diff --git a/test/bruno/1 - REST API/2 - User Management/Create API Researcher User.bru b/test/bruno/1 - REST API/2 - User Management/Create API Researcher User.bru new file mode 100644 index 0000000000..e9a5d770de --- /dev/null +++ b/test/bruno/1 - REST API/2 - User Management/Create API Researcher User.bru @@ -0,0 +1,44 @@ +meta { + name: Create API Researcher User + type: http + seq: 4 +} + +put { + url: {{host}}/default/rdmp/api/users + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "username": "apiresearcher34", + "name": "researcher created via API", + "email": "apiresearcher34@redboxresearchdata.com.au", + "password": "a12345672A!", + "roles": ["Admin","Researcher","Librarian"] + } +} + +tests { + + test("Status code is 201", function () { + expect(res.getStatus()).to.equal(201); + }); + + test("Test response", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('id'); + expect(jsonData).to.have.property('username'); + expect(jsonData).to.have.property('name'); + expect(jsonData).to.have.property('email'); + expect(jsonData).to.have.property('type'); + expect(jsonData).to.have.property('lastLogin'); + bru.setEnvVar("apiUserId", jsonData.id); + }); +} diff --git a/test/bruno/1 - REST API/2 - User Management/Generate API Researcher User API Token.bru b/test/bruno/1 - REST API/2 - User Management/Generate API Researcher User API Token.bru new file mode 100644 index 0000000000..ae50b55c37 --- /dev/null +++ b/test/bruno/1 - REST API/2 - User Management/Generate API Researcher User API Token.bru @@ -0,0 +1,32 @@ +meta { + name: Generate API Researcher User API Token + type: http + seq: 6 +} + +get { + url: {{host}}/default/rdmp/api/users/token/generate?id={{apiUserId}} + body: json + auth: none +} + +query { + id: {{apiUserId}} +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test response", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('token'); + }); +} diff --git a/test/bruno/1 - REST API/2 - User Management/Get Admin User Details.bru b/test/bruno/1 - REST API/2 - User Management/Get Admin User Details.bru new file mode 100644 index 0000000000..2001fe2572 --- /dev/null +++ b/test/bruno/1 - REST API/2 - User Management/Get Admin User Details.bru @@ -0,0 +1,47 @@ +meta { + name: Get Admin User Details + type: http + seq: 2 +} + +get { + url: {{host}}/default/rdmp/api/users/get?searchBy=email&query=admin@redboxresearchdata.com.au + body: none + auth: none +} + +query { + searchBy: email + query: admin@redboxresearchdata.com.au +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Username is admin", function () { + var jsonData = res.getBody(); + + var username = jsonData.username; + + expect(username).to.eql('admin'); + + + }); + + test("email address is admin@redboxresearchdata.com.au", function () { + var jsonData = res.getBody(); + + var email = jsonData.email; + + expect(email).to.eql('admin@redboxresearchdata.com.au'); + + + }); +} diff --git a/test/bruno/1 - REST API/2 - User Management/List Users.bru b/test/bruno/1 - REST API/2 - User Management/List Users.bru new file mode 100644 index 0000000000..77c75c5b00 --- /dev/null +++ b/test/bruno/1 - REST API/2 - User Management/List Users.bru @@ -0,0 +1,34 @@ +meta { + name: List Users + type: http + seq: 1 +} + +get { + url: {{host}}/default/rdmp/api/users + body: none + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Number of users returned in results array equals numFound or 10", function () { + var jsonData = res.getBody(); + + var numFound = jsonData.summary.numFound; + + if(numFound < 10) { + expect(jsonData.records.length).to.eql(numFound); + } else { + expect(jsonData.records.length).to.eql(10); + } + }); +} diff --git a/test/bruno/1 - REST API/2 - User Management/Revoke API Researcher User API Token.bru b/test/bruno/1 - REST API/2 - User Management/Revoke API Researcher User API Token.bru new file mode 100644 index 0000000000..b9465745d8 --- /dev/null +++ b/test/bruno/1 - REST API/2 - User Management/Revoke API Researcher User API Token.bru @@ -0,0 +1,32 @@ +meta { + name: Revoke API Researcher User API Token + type: http + seq: 7 +} + +get { + url: {{host}}/default/rdmp/api/users/token/revoke?id={{apiUserId}} + body: json + auth: none +} + +query { + id: {{apiUserId}} +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test response", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('id'); + }); +} diff --git a/test/bruno/1 - REST API/2 - User Management/Update API Researcher User.bru b/test/bruno/1 - REST API/2 - User Management/Update API Researcher User.bru new file mode 100644 index 0000000000..58366a6858 --- /dev/null +++ b/test/bruno/1 - REST API/2 - User Management/Update API Researcher User.bru @@ -0,0 +1,42 @@ +meta { + name: Update API Researcher User + type: http + seq: 5 +} + +post { + url: {{host}}/default/rdmp/api/users + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "id": "{{apiUserId}}", + "name": "researcher created via API - modified", + "email": "apiresearcher@redboxresearchdata.com.au", + "password": "a12345672A!" + } +} + +tests { + + test("Status code is 201", function () { + expect(res.getStatus()).to.equal(201); + }); + + test("Test response", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('id'); + expect(jsonData).to.have.property('username'); + expect(jsonData).to.have.property('name'); + expect(jsonData).to.have.property('email'); + expect(jsonData).to.have.property('type'); + expect(jsonData).to.have.property('lastLogin'); + }); +} diff --git a/test/bruno/1 - REST API/3 - Search/Index Record.bru b/test/bruno/1 - REST API/3 - Search/Index Record.bru new file mode 100644 index 0000000000..73eabf6edb --- /dev/null +++ b/test/bruno/1 - REST API/3 - Search/Index Record.bru @@ -0,0 +1,25 @@ +meta { + name: Index Record + type: http + seq: 2 +} + +get { + url: {{host}}/default/rdmp/api/search/index?oid={{dmpOid}} + body: none + auth: none +} + +query { + oid: {{dmpOid}} +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); +} diff --git a/test/bruno/1 - REST API/3 - Search/Remove All.bru b/test/bruno/1 - REST API/3 - Search/Remove All.bru new file mode 100644 index 0000000000..d12fc137d6 --- /dev/null +++ b/test/bruno/1 - REST API/3 - Search/Remove All.bru @@ -0,0 +1,27 @@ +meta { + name: Remove All + type: http + seq: 3 +} + +get { + url: {{host}}/default/rdmp/api/search/removeAll + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has expected message", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("message"); + expect(jsonData.message).to.eql("Remove all records request added to message queue for processing") + }); +} diff --git a/test/bruno/1 - REST API/3 - Search/Search Index.bru b/test/bruno/1 - REST API/3 - Search/Search Index.bru new file mode 100644 index 0000000000..0165f638dd --- /dev/null +++ b/test/bruno/1 - REST API/3 - Search/Search Index.bru @@ -0,0 +1,30 @@ +meta { + name: Search Index + type: http + seq: 1 +} + +get { + url: {{host}}/default/rdmp/api/search/?searchStr=Andrew + body: none + auth: none +} + +query { + searchStr: Andrew +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has record array", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("records"); + }); +} diff --git a/test/bruno/1 - REST API/4 - Form Management/Get Form.bru b/test/bruno/1 - REST API/4 - Form Management/Get Form.bru new file mode 100644 index 0000000000..0e768effc6 --- /dev/null +++ b/test/bruno/1 - REST API/4 - Form Management/Get Form.bru @@ -0,0 +1,30 @@ +meta { + name: Get Form + type: http + seq: 2 +} + +get { + url: {{host}}/default/rdmp/api/forms/get?name=default-1.0-draft + body: none + auth: none +} + +query { + name: default-1.0-draft +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has name property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("name"); + }); +} diff --git a/test/bruno/1 - REST API/4 - Form Management/List Forms.bru b/test/bruno/1 - REST API/4 - Form Management/List Forms.bru new file mode 100644 index 0000000000..ab6b9c9566 --- /dev/null +++ b/test/bruno/1 - REST API/4 - Form Management/List Forms.bru @@ -0,0 +1,27 @@ +meta { + name: List Forms + type: http + seq: 1 +} + +get { + url: {{host}}/default/rdmp/api/forms + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has forms in response", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("records"); + expect(jsonData.records.length).to.be.greaterThan(0) + }); +} diff --git a/test/bruno/1 - REST API/5 - Record Type Management/Get Record Type.bru b/test/bruno/1 - REST API/5 - Record Type Management/Get Record Type.bru new file mode 100644 index 0000000000..ff01e963b9 --- /dev/null +++ b/test/bruno/1 - REST API/5 - Record Type Management/Get Record Type.bru @@ -0,0 +1,30 @@ +meta { + name: Get Record Type + type: http + seq: 2 +} + +get { + url: {{host}}/default/rdmp/api/forms/get?name=default-1.0-draft + body: none + auth: none +} + +query { + name: default-1.0-draft +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has name property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("name"); + }); +} diff --git a/test/bruno/1 - REST API/5 - Record Type Management/List Record Types.bru b/test/bruno/1 - REST API/5 - Record Type Management/List Record Types.bru new file mode 100644 index 0000000000..ddc6ca6799 --- /dev/null +++ b/test/bruno/1 - REST API/5 - Record Type Management/List Record Types.bru @@ -0,0 +1,27 @@ +meta { + name: List Record Types + type: http + seq: 1 +} + +get { + url: {{host}}/default/rdmp/api/forms + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has forms in response", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("records"); + expect(jsonData.records.length).to.be.greaterThan(0) + }); +} diff --git a/test/bruno/1 - REST API/6 - Administration/Refresh Cached Resources.bru b/test/bruno/1 - REST API/6 - Administration/Refresh Cached Resources.bru new file mode 100644 index 0000000000..db28110c82 --- /dev/null +++ b/test/bruno/1 - REST API/6 - Administration/Refresh Cached Resources.bru @@ -0,0 +1,22 @@ +meta { + name: Refresh Cached Resources + type: http + seq: 1 +} + +get { + url: {{host}}/default/rdmp/api/admin/refreshCachedResources + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} + ~: +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); +} diff --git a/test/bruno/1 - REST API/7 - App Config/Get App Config.bru b/test/bruno/1 - REST API/7 - App Config/Get App Config.bru new file mode 100644 index 0000000000..ac0c46b9c1 --- /dev/null +++ b/test/bruno/1 - REST API/7 - App Config/Get App Config.bru @@ -0,0 +1,26 @@ +meta { + name: Get App Config + type: http + seq: 1 +} + +get { + url: {{host}}/default/rdmp/api/appconfig/systemMessage + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has enabled property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("enabled");; + }); +} diff --git a/test/bruno/1 - REST API/7 - App Config/Update App Config.bru b/test/bruno/1 - REST API/7 - App Config/Update App Config.bru new file mode 100644 index 0000000000..edae0cc0eb --- /dev/null +++ b/test/bruno/1 - REST API/7 - App Config/Update App Config.bru @@ -0,0 +1,44 @@ +meta { + name: Update App Config + type: http + seq: 2 +} + +post { + url: {{host}}/default/rdmp/api/appconfig/systemMessage + body: json + auth: none +} + +headers { + Authorization: Bearer {{token}} +} + +body:json { + { + "enabled": false, + "title": "The new title", + "message": "The new message" + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has enabled property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("enabled"); + }); + + test("Has title property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("title"); + }); + + test("Has message property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("message"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru new file mode 100644 index 0000000000..31a7357f7b --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru @@ -0,0 +1,61 @@ +meta { + name: Add librarian role to researcher user from the user management page + type: http + seq: 15 +} + +post { + url: {{host}}/default/rdmp/admin/users/update + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/admin/users + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "userid": "{{researcherUserId}}", + "details": { + "name": "A dummy researcher", + "email": "{{researcherEmail}}", + "password": "{{researcherPassword}}", + "roles": [ + "Librarians", + "Researcher", + "Guest" + ] + } + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Check response status", function () { + var jsonData = res.getBody(); + expect(jsonData.status).to.eql(true); + }); + + test("Check response message", function () { + var jsonData = res.getBody(); + expect(jsonData.message).to.eql("User updated successfully"); + }); + + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru new file mode 100644 index 0000000000..a3d412c418 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru @@ -0,0 +1,230 @@ +meta { + name: Create data publication + type: http + seq: 29 +} + +post { + url: {{host}}/default/rdmp/recordmeta/dataPublication + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/record/dataPublication/edit + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "parameterRetriever": "", + "dataRecordGetter": "", + "": {}, + "dataRecord": { + "oid": "{{dataRecordOid}}", + "title": "A Data record" + }, + "title": "A Data record", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "foaf:fundedBy_foaf:Agent": [ + {} + ], + "foaf:fundedBy_vivo:Grant": [ + {} + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "startDate": "", + "endDate": "", + "timePeriod": "", + "geolocations": [ + "" + ], + "geospatial": {}, + "accessRightsToggle": "", + "dataLocations": [ + { + "type": "attachment", + "location": "b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "mimeType": "image/png", + "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", + "fileId": "d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "selected": true + } + ], + "dataLicensingAccess_manager": "Prof Paul Gleeson", + "dc:accessRights": "Open", + "accessRights_url": "", + "related_publications": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_websites": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_metadata": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_data": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_services": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "license_identifier": "", + "license_notes": "", + "license_other_url": "", + "license_statement": "Copyright ReDBox Research Data 2018", + "license_statement_url": "", + "citation_doi": "", + "requestIdentifier": [], + "citation_title": "A Data Record", + "creators": [ + { + "text_full_name": "Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "role": "Chief Investigator", + "username": "", + "orcid": "", + "family_name": "Zweinstein", + "given_name": "Alberto" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Data manager", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Contributors", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": null, + "email": null, + "role": "Supervisor", + "username": "", + "orcid": "", + "family_name": "", + "given_name": "" + } + ], + "citation_publisher": "ReDBox Research Data", + "citation_url": "", + "citation_publication_date": "", + "citation_generated": "Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}", + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "full_name_honorific": "", + "email": "notAReal@email.edu.au", + "given_name": "Prof", + "family_name": "Paul Gleeson", + "honorific": "", + "full_name_family_name_first": "Paul Gleeson, Prof", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_supervisor": { + "text_full_name": "", + "full_name_honorific": "", + "email": "", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor" + }, + "embargoByDate": "", + "embargoUntil": null, + "embargoNote": "", + "reviewerNote": "", + "ckanLocation": "" + } +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + bru.setEnvVar("dataPublicationOid", jsonData.oid); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru new file mode 100644 index 0000000000..acc60cb912 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru @@ -0,0 +1,137 @@ +meta { + name: Create data record via form + type: http + seq: 20 +} + +post { + url: {{host}}/default/rdmp/recordmeta/dataRecord + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}{/default/rdmp/record/dataRecord/edit + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "parameterRetriever": "", + "rdmpGetter": "", + "": {}, + "rdmp": { + "oid": "{{dmpOid}}", + "title": "Andrew's Postman test - Updated from form AJAX call" + }, + "aim_project_name": "Andrew's Postman test - Updated from form AJAX call", + "foaf:fundedBy_foaf:Agent": [ + "" + ], + "dc:coverage_vivo:DateTimeInterval_vivo:end": "", + "foaf:fundedBy_vivo:Grant": [ + "" + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "title": "A Data record", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator", + "orcid": null + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "username": "", + "role": "Contributors", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "contributor_supervisor": { + "text_full_name": null, + "full_name_honorific": "", + "email": null, + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor", + "orcid": null + }, + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "redbox:retentionPeriod_dc:date": "1year", + "redbox:retentionPeriod_dc:date_skos:note": "", + "disposalDate": "", + "related_publications": [ + { + "related_url": "", + "related_title": "", + "related_notes": "" + } + ], + "dataLocations": [], + "software_equipment": "" + } +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + bru.setEnvVar("dataRecordOid", jsonData.oid); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru new file mode 100644 index 0000000000..17dd41ccbb --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru @@ -0,0 +1,54 @@ +meta { + name: Create new researcher user + type: http + seq: 10 +} + +post { + url: {{host}}/default/rdmp/admin/users/newUser + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/admin/users + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "username": "{{researcherUsername}}", + "details": { + "name": "A dummy researcher", + "email": "{{researcherEmail}}", + "password": "{{researcherPassword}}", + "roles": [ + "Researcher", + "Guest" + ] + } + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Check response status", function () { + var jsonData = res.getBody(); + expect(jsonData.status).to.eql(true); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru new file mode 100644 index 0000000000..ba11fb54c1 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru @@ -0,0 +1,44 @@ +meta { + name: Dashboard List RDMP Records + type: http + seq: 6 +} + +get { + url: {{host}}/default/rdmp/listRecords?recordType=rdmp&state=draft&sort="lastSaveDate":-1&start=0&rows=10 + body: none + auth: none +} + +query { + recordType: rdmp + state: draft + sort: "lastSaveDate":-1 + start: 0 + rows: 10 +} + +headers { + Content-Type: application/json + X-Source: jsclient + Accept: application/json, text/plain, */* + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Number of items returned in results array equals totalItems or 10", function () { + var jsonData = res.getBody(); + + var numFound = jsonData.totalItems; + + if(numFound < 10) { + expect(jsonData.items.length).to.eql(numFound); + } else { + expect(jsonData.items.length).to.eql(10); + } + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru new file mode 100644 index 0000000000..f2b2e4aaca --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru @@ -0,0 +1,26 @@ +meta { + name: Delete the created data record + type: http + seq: 33 +} + +delete { + url: {{host}}/default/rdmp/record/delete/{{dataRecordOid}} + body: none + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: http://localhost:1500/default/rdmp/record/edit/ee3a12b7a95dd42619ebe16ecd2461f9 + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru new file mode 100644 index 0000000000..e4b057f0ce --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru @@ -0,0 +1,22 @@ +meta { + name: Download attachment + type: http + seq: 25 +} + +get { + url: http:{{attachmentLocation}} + body: none + auth: none +} + +headers { + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru new file mode 100644 index 0000000000..ad55461b33 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru @@ -0,0 +1,61 @@ +meta { + name: Export RDMP Data + type: http + seq: 19 +} + +get { + url: {{host}}/default/rdmp/export/record/download/csv?before=&after=&recType=rdmp + body: none + auth: none +} + +query { + before: + after: + recType: rdmp +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/export + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + // const parse = require('csv-parse/lib/sync'), + // parsedCSV = parse(responseBody, {relax_column_count: true}); + + // test("Correct CSV response", function () { + // // Check that we have at least 2 two (header + row) + // expect(parsedCSV).to.have.length.above(1); + + // }); + + // test("CSV contains Test record", function () { + // var found = false; + // const head = parsedCSV.shift(), + // title = head.indexOf('redboxOid'); + // parsedCSV.forEach(function(row) { + // if(row[title] == bru.getEnvVar('dmpOid')) { + // found = true; + // } + // }); + + // expect(found).to.eq(true); + + // }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru b/test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru new file mode 100644 index 0000000000..389e509456 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru @@ -0,0 +1,39 @@ +meta { + name: First Phase of attachment upload + type: http + seq: 21 +} + +post { + url: {{host}}/default/rdmp/record/{{dataRecordOid}}/attach + body: none + auth: none +} + +headers { + Upload-Length: 194397 + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Tus-Resumable: 1.0.0 + Cookie: {{cookie}} + Connection: keep-alive + Content-Length: 0 + Upload-Metadata: name U2NyZWVuIFNob3QgMjAxOC0xMS0yNiBhdCAyLjM0LjI2IHBtLnBuZw==,type aW1hZ2UvcG5n + Pragma: no-cache + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Accept: */* + Cache-Control: no-cache + Content-Type: application/x-www-form-urlencoded +} + +tests { + test("Status code is 201", function () { + expect(res.getStatus()).to.equal(201); + + let location = res.headers.location; + bru.setEnvVar("attachmentLocation", location ); + bru.setEnvVar("attachmentId", location.split("/")[8] ); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru new file mode 100644 index 0000000000..4da4031c88 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru @@ -0,0 +1,48 @@ +meta { + name: Generate API key for new researcher user + type: http + seq: 13 +} + +post { + url: {{host}}/default/rdmp/admin/users/genKey + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/admin/users + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { "userid": "{{researcherUserId}}"} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Check response status", function () { + var jsonData = res.getBody(); + expect(jsonData.status).to.eql(true); + }); + + test("Check for API Key", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('message'); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru new file mode 100644 index 0000000000..2b86f7189d --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru @@ -0,0 +1,30 @@ +meta { + name: Get Dashboard Type Consolidated + type: http + seq: 5 +} + +get { + url: {{host}}/default/rdmp/dashboard/type/consolidated + body: none + auth: none +} + +headers { + Content-Type: application/json + X-Source: jsclient + Accept: application/json, text/plain, */* + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has name property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("name"); + expect(jsonData).to.have.property("formatRules"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru new file mode 100644 index 0000000000..0411f8defc --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru @@ -0,0 +1,30 @@ +meta { + name: Get Dashboard Type Standard + type: http + seq: 3 +} + +get { + url: {{host}}/default/rdmp/dashboard/type/standard + body: none + auth: none +} + +headers { + Content-Type: application/json + X-Source: jsclient + Accept: application/json, text/plain, */* + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has name property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("name"); + expect(jsonData).to.have.property("formatRules"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru new file mode 100644 index 0000000000..8d7f74776f --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru @@ -0,0 +1,30 @@ +meta { + name: Get Dashboard Type Workspace + type: http + seq: 4 +} + +get { + url: {{host}}/default/rdmp/dashboard/type/workspace + body: none + auth: none +} + +headers { + Content-Type: application/json + X-Source: jsclient + Accept: application/json, text/plain, */* + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has name property", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("name"); + expect(jsonData).to.have.property("formatRules"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru new file mode 100644 index 0000000000..ba47b1dcd0 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru @@ -0,0 +1,40 @@ +meta { + name: Get DataPublication Workflow Steps + type: http + seq: 28 +} + +get { + url: {{host}}/default/rdmp/record/wfSteps/dataPublication + body: none + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/record/search?q=Record + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + + test("Response contains 5 steps", function () { + var jsonData = res.getBody(); + expect(jsonData.length).to.eql(5); + }); + + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru new file mode 100644 index 0000000000..7722d6df85 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru @@ -0,0 +1,40 @@ +meta { + name: Get DataRecord Type info + type: http + seq: 27 +} + +get { + url: {{host}}/default/rdmp/record/type/dataRecord + body: none + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/record/search?q=Record + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Response is correct package type", function () { + var jsonData = res.getBody(); + expect(jsonData.packageType).to.eql("dataRecord"); + }); + + + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru new file mode 100644 index 0000000000..18c2897d90 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru @@ -0,0 +1,39 @@ +meta { + name: Get all Record Types Info + type: http + seq: 26 +} + +get { + url: {{host}}/default/rdmp/record/type/ + body: none + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/record/search?q=Record + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Reponse is an array with more than one result", function () { + + }); + + + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru new file mode 100644 index 0000000000..b7d506cebe --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru @@ -0,0 +1,42 @@ +meta { + name: Get edit form config for RDMP + type: http + seq: 8 +} + +get { + url: {{host}}/default/rdmp/record/form/auto/{{dmpOid}}?edit=true + body: none + auth: none +} + +query { + edit: true +} + +headers { + Content-Type: application/json + X-Source: jsclient + Accept: application/json, text/plain, */* + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("RDMP form name is default-1.0-draft", function () { + var jsonData = res.getBody(); + + var numFound = jsonData.totalItems; + expect(jsonData.name).to.eql("default-1.0-draft"); + }); + + test("Fields array has values", function () { + var jsonData = res.getBody(); + + var numFound = jsonData.totalItems; + expect(jsonData.fields).to.be.an('array').that.is.not.empty + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru new file mode 100644 index 0000000000..06b79a716d --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru @@ -0,0 +1,51 @@ +meta { + name: Get list of users and roles - Check researcher user no longer has librarian role + type: http + seq: 18 +} + +get { + url: {{host}}/default/rdmp/admin/roles/get + body: none + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/admin/roles + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + + test("Check that researcher user has guest and researcher roles", function(){ + var researchUserRoles = []; + var jsonData = res.getBody(); + for(var i=0; i< jsonData.length; i++) { + var role = jsonData[i]; + for(var j=0; j< role.users.length; j++) { + if(role.users[j].id == bru.getEnvVar("researcherUserId")) { + researchUserRoles.push(role.name); + } + } + } + + expect(researchUserRoles).to.contain("Researcher"); + expect(researchUserRoles).to.contain("Guest"); + expect(researchUserRoles).to.not.contain("Librarians"); + expect(researchUserRoles).to.not.contain("Admin"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru new file mode 100644 index 0000000000..494adba2a2 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru @@ -0,0 +1,51 @@ +meta { + name: Get list of users and roles + type: http + seq: 16 +} + +get { + url: {{host}}/default/rdmp/admin/roles/get + body: none + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/admin/roles + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + + test("Check that researcher user has guest, researcher and librarian roles", function(){ + var researchUserRoles = []; + var jsonData = res.getBody(); + for(var i=0; i< jsonData.length; i++) { + var role = jsonData[i]; + for(var j=0; j< role.users.length; j++) { + if(role.users[j].id == bru.getEnvVar("researcherUserId")) { + researchUserRoles.push(role.name); + } + } + } + + expect(researchUserRoles).to.contain("Researcher"); + expect(researchUserRoles).to.contain("Guest"); + expect(researchUserRoles).to.contain("Librarians"); + expect(researchUserRoles).to.not.contain("Admin"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru new file mode 100644 index 0000000000..dd13104614 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru @@ -0,0 +1,54 @@ +meta { + name: Get users list and find new researcher user + type: http + seq: 12 +} + +get { + url: {{host}}/default/rdmp/admin/users/get + body: none + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: http://localhost:1500/default/rdmp/admin/users + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Check response is an array", function () { + var jsonData = res.getBody(); + expect(jsonData).to.be.an.instanceof(Array); + }); + + test("Check researcheruser is in the array", function () { + var jsonData = res.getBody(); + var found = false; + for(var i=0; i< jsonData.length; i++) { + if(jsonData[i].username.startsWith("researcheruser")) { + found = true; + bru.setEnvVar("researcherUserId", jsonData[i].id); + break; + } + } + expect(found).to.eq(true); + + }); + + + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru new file mode 100644 index 0000000000..75546fa514 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru @@ -0,0 +1,42 @@ +meta { + name: Get view form config for RDMP + type: http + seq: 7 +} + +get { + url: {{host}}/default/rdmp/record/form/auto/{{dmpOid}}?edit=false + body: none + auth: none +} + +query { + edit: false +} + +headers { + Content-Type: application/json + X-Source: jsclient + Accept: application/json, text/plain, */* + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("RDMP form name is default-1.0-draft", function () { + var jsonData = res.getBody(); + + var numFound = jsonData.totalItems; + expect(jsonData.name).to.eql("default-1.0-draft"); + }); + + test("Fields array has values", function () { + var jsonData = res.getBody(); + + var numFound = jsonData.totalItems; + expect(jsonData.fields).to.be.an('array').that.is.not.empty + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru b/test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru new file mode 100644 index 0000000000..d28922c373 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru @@ -0,0 +1,36 @@ +meta { + name: List Dashboard Types + type: http + seq: 2 +} + +get { + url: {{host}}/default/rdmp/dashboard/type + body: none + auth: none +} + +headers { + Content-Type: application/json + X-Source: jsclient + Accept: application/json, text/plain, */* + Cookie: {{cookie}} + X-Token: {{token}} + X-Token: {{dmpOid}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has forms in response", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("dashboardTypes"); + expect(jsonData.dashboardTypes.length).to.be.greaterThan(0) + }); + + if(res.getStatus() == 403) { + bru.setNextRequest(null); + } +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru new file mode 100644 index 0000000000..f1c79c831a --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru @@ -0,0 +1,48 @@ +meta { + name: Login via Internal authentication + type: http + seq: 1 +} + +post { + url: http://localhost:1500/user/login_local + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/user/login + Connection: keep-alive +} + +body:json { + { + "username": "admin", + "password": "rbadmin", + "branding": "default", + "portal": "rdmp" + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + bru.setVar("cookie",res.headers["set-cookie"] ); + }); + + test("Check that user returned is admin", function () { + var jsonData = res.getBody(); + expect(jsonData.user.username).to.eql("admin"); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru new file mode 100644 index 0000000000..a9f64c78ef --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru @@ -0,0 +1,31 @@ +meta { + name: Logout Admin User + type: http + seq: 34 +} + +get { + url: {{host}}/default/rdmp/user/logout + body: none + auth: none +} + +headers { + Connection: keep-alive + Pragma: no-cache + Cache-Control: no-cache + Upgrade-Insecure-Requests: 1 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 + Referer: {{host}}/default/rdmp/researcher/home + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru new file mode 100644 index 0000000000..3d81699d5f --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru @@ -0,0 +1,233 @@ +meta { + name: Migrate data publication to reviewing + type: http + seq: 30 +} + +put { + url: http://localhost:1500/default/rdmp/recordmeta/{{dataPublicationOid}}?targetStep=reviewing + body: json + auth: none +} + +query { + targetStep: reviewing +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/record/edit/49a33460c794498a56fa29ed08567cc4 + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "parameterRetriever": "", + "dataRecordGetter": "", + "": {}, + "dataRecord": { + "oid": "{{dataRecordOid}}", + "title": "A Data record" + }, + "title": "A Data record", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "foaf:fundedBy_foaf:Agent": [ + {} + ], + "foaf:fundedBy_vivo:Grant": [ + {} + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "startDate": "", + "endDate": "", + "timePeriod": "", + "geolocations": [ + "" + ], + "geospatial": {}, + "accessRightsToggle": "", + "dataLocations": [ + { + "type": "attachment", + "location": "b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "mimeType": "image/png", + "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", + "fileId": "d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "selected": true + } + ], + "dataLicensingAccess_manager": "Prof Paul Gleeson", + "dc:accessRights": "Open", + "accessRights_url": "", + "related_publications": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_websites": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_metadata": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_data": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_services": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "license_identifier": "", + "license_notes": "", + "license_other_url": "", + "license_statement": "Copyright ReDBox Research Data 2018", + "license_statement_url": "", + "citation_doi": "", + "requestIdentifier": [], + "citation_title": "A Data Record", + "creators": [ + { + "text_full_name": "Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "role": "Chief Investigator", + "username": "", + "orcid": "", + "family_name": "Zweinstein", + "given_name": "Alberto" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Data manager", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Contributors", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": null, + "email": null, + "role": "Supervisor", + "username": "", + "orcid": "", + "family_name": "", + "given_name": "" + } + ], + "citation_publisher": "ReDBox Research Data", + "citation_url": "", + "citation_publication_date": "", + "citation_generated": "Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}", + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "full_name_honorific": "", + "email": "notAReal@email.edu.au", + "given_name": "Prof", + "family_name": "Paul Gleeson", + "honorific": "", + "full_name_family_name_first": "Paul Gleeson, Prof", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_supervisor": { + "text_full_name": "", + "full_name_honorific": "", + "email": "", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor" + }, + "embargoByDate": "", + "embargoUntil": null, + "embargoNote": "", + "reviewerNote": "", + "ckanLocation": "" + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + }); + + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru new file mode 100644 index 0000000000..97487523b0 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru @@ -0,0 +1,53 @@ +meta { + name: Remove Librarian role from Researcher User + type: http + seq: 17 +} + +post { + url: {{host}}/default/rdmp/admin/roles/user + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/admin/roles + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "userid": "{{researcherUserId}}", + "roles": [ + "Researcher", + "Guest" + ] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Check response status", function () { + var jsonData = res.getBody(); + expect(jsonData.status).to.eql(true); + }); + + test("Check response message", function () { + var jsonData = res.getBody(); + expect(jsonData.message).to.eql("Save OK."); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru new file mode 100644 index 0000000000..93351c89be --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru @@ -0,0 +1,41 @@ +meta { + name: Report + type: http + seq: 32 +} + +get { + url: {{host}}/default/rdmp/admin/getReportResults?name=rdmpRecords + body: none + auth: none +} + +query { + name: rdmpRecords +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/record/search?q=Record + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + // test("Has items array", function () { + // var jsonData = pm.response.json(); + // pm.expect(jsonData).to.have.property("items"); + // }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru new file mode 100644 index 0000000000..aa1094a92e --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru @@ -0,0 +1,151 @@ +meta { + name: Save attachment on Data Record + type: http + seq: 23 +} + +put { + url: {{host}}/default/rdmp/recordmeta/{{dataRecordOid}} + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/record/edit/{{dataRecordOid}} + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "parameterRetriever": "", + "rdmpGetter": "", + "": {}, + "rdmp": { + "oid": "{{dmpOid}}", + "title": "Andrew's Postman test - Updated from form AJAX call" + }, + "aim_project_name": "Andrew's Postman test - Updated from form AJAX call", + "foaf:fundedBy_foaf:Agent": [ + "" + ], + "dc:coverage_vivo:DateTimeInterval_vivo:end": "", + "foaf:fundedBy_vivo:Grant": [ + "" + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "title": "A Data record", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator", + "orcid": null + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "full_name_honorific": "", + "email": "notAReal@email.edu.au", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "full_name_honorific": "", + "email": "notAReal@email.edu.au", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Contributors", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "contributor_supervisor": { + "text_full_name": "", + "full_name_honorific": "", + "email": "", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor", + "orcid": null + }, + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "redbox:retentionPeriod_dc:date": "1year", + "redbox:retentionPeriod_dc:date_skos:note": "", + "disposalDate": "", + "related_publications": [ + { + "related_url": "", + "related_title": "", + "related_notes": "" + } + ], + "dataLocations": [ + { + "type": "attachment", + "location": "{{dataRecordOid}}/attach/{{attachmentId}}", + "mimeType": "image/png", + "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", + "fileId": "{{attachmentId}}", + "uploadUrl": "http:{{attachmentLocation}}" + } + ], + "software_equipment": "" + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru new file mode 100644 index 0000000000..f2ef52333e --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru @@ -0,0 +1,42 @@ +meta { + name: Search Index + type: http + seq: 31 +} + +get { + url: {{host}}/default/rdmp/record/search/rdmp/?searchStr=Andrew&facetNames=grant_number_name,finalKeywords,workflow_stageLabel + body: none + auth: none +} + +query { + searchStr: Andrew + facetNames: grant_number_name,finalKeywords,workflow_stageLabel +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/record/search?q=Record + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has record array", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property("records"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru new file mode 100644 index 0000000000..837dd64434 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru @@ -0,0 +1,46 @@ +meta { + name: Second Phase of attachment upload + type: http + seq: 22 +} + +patch { + url: http:{{attachmentLocation}} + body: none + auth: none +} + +headers { + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Tus-Resumable: 1.0.0 + Cookie: {{cookie}} + Connection: keep-alive + Pragma: no-cache + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/offset+octet-stream + Accept: */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/record/edit/b869b4fae83a1f01082465d165d868a8 + Upload-Offset: 0 +} + +script:pre-request { + const fs = require('fs'); + const path = require('path'); + + const attachmentFilename = "attachment.png"; + const attachmentPath = path.join(bru.cwd(), attachmentFilename); + const attachment = fs.readFileSync(attachmentPath, "base64"); + const attachmentLength = attachment.length; + + req.setBody(attachment); +} + +tests { + test("Status code is 204", function () { + expect(res.getStatus()).to.equal(204); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru new file mode 100644 index 0000000000..fd3684ed38 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru @@ -0,0 +1,60 @@ +meta { + name: Try to create same researcher user + type: http + seq: 11 +} + +post { + url: {{host}}/default/rdmp/admin/users/newUser + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/admin/users + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "username": "{{researcherUsername}}", + "details": { + "name": "A dummy researcher", + "email": "{{researcherEmail}}", + "password": "`{{ researcherPassword }}", + "roles": [ + "Researcher", + "Guest" + ] + } + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Check response status", function () { + var jsonData = res.getBody(); + expect(jsonData.status).to.eql(false); + }); + + test("Check response message", function () { + var jsonData = res.getBody(); + expect(jsonData.message).to.eql("Username already exists"); + }); + + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru new file mode 100644 index 0000000000..12b4530c8c --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru @@ -0,0 +1,80 @@ +meta { + name: Update RDMP Metadata using AJAX form call + type: http + seq: 9 +} + +put { + url: {{host}}/default/rdmp/recordmeta/{{dmpOid}} + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: http://localhost:1500 + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: http://localhost:1500/default/rdmp/record/edit/{{dmpOid}} + Connection: keep-alive + Cookie: {{cookie}} +} + +body:json { + { + "title": "Andrew's Postman test - Updated from form AJAX call", + "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", + "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "vivo:Dataset_redbox:DataCollectionMethodology": "The data collection methodology", + "vivo:Dataset_dc_format": "xls", + "vivo:Dataset_dc:location_rdf:PlainLiteral": "eResearch Store network drive", + "vivo:Dataset_dc:source_dc:location_rdf:PlainLiteral": "shared university network drive (e.g. G, H, etc)", + "vivo:Dataset_dc:extent": "100GB - 2TB", + "redbox:retentionPeriod_dc:date": "1year", + "dc:rightsHolder_dc:name": "myUni", + "dc:accessRights": "permission from the data manager", + "authorization": [] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru new file mode 100644 index 0000000000..6fb9d7a311 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru @@ -0,0 +1,61 @@ +meta { + name: Update researcher user-s password + type: http + seq: 14 +} + +post { + url: {{host}}/default/rdmp/admin/users/update + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/admin/users + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "userid": "{{researcherUserId}}", + "details": { + "name": "A dummy researcher", + "email": "{{researcherEmail}}", + "password": "{{researcherPassword}}", + "roles": [ + "Researcher", + "Guest" + ] + } + } +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Check response status", function () { + var jsonData = res.getBody(); + expect(jsonData.status).to.eql(true); + }); + + test("Check response message", function () { + var jsonData = res.getBody(); + expect(jsonData.message).to.eql("User updated successfully"); + }); + + +} diff --git a/test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru b/test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru new file mode 100644 index 0000000000..62274b3ca0 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru @@ -0,0 +1,34 @@ +meta { + name: Get view form config for RDMP - Unauthorised + type: http + seq: 1 +} + +get { + url: {{host}}/default/rdmp/record/form/auto/{{dmpOid}}?edit=false + body: none + auth: none +} + +query { + edit: false +} + +headers { + Content-Type: application/json + X-Source: jsclient + Accept: application/json, text/plain, */* + Cookie: {{cookie}} +} + +tests { + test("Status code is 403", function () { + expect(res.getStatus()).to.equal(403); + }); + + test("Message is access denied", function () { + var jsonData = res.getBody(); + + expect(jsonData.message).to.eql("Access Denied"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru new file mode 100644 index 0000000000..dc34980ff7 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru @@ -0,0 +1,230 @@ +meta { + name: Create data publication + type: http + seq: 4 +} + +post { + url: {{host}}/default/rdmp/recordmeta/dataPublication + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/record/dataPublication/edit + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "parameterRetriever": "", + "dataRecordGetter": "", + "": {}, + "dataRecord": { + "oid": "{{dataRecordOid}}", + "title": "A Data record" + }, + "title": "A Data record", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "foaf:fundedBy_foaf:Agent": [ + {} + ], + "foaf:fundedBy_vivo:Grant": [ + {} + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "startDate": "", + "endDate": "", + "timePeriod": "", + "geolocations": [ + "" + ], + "geospatial": {}, + "accessRightsToggle": "", + "dataLocations": [ + { + "type": "attachment", + "location": "b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "mimeType": "image/png", + "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", + "fileId": "d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "selected": true + } + ], + "dataLicensingAccess_manager": "Prof Paul Gleeson", + "dc:accessRights": "Open", + "accessRights_url": "", + "related_publications": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_websites": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_metadata": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_data": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_services": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "license_identifier": "", + "license_notes": "", + "license_other_url": "", + "license_statement": "Copyright ReDBox Research Data 2018", + "license_statement_url": "", + "citation_doi": "", + "requestIdentifier": [], + "citation_title": "A Data Record", + "creators": [ + { + "text_full_name": "Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "role": "Chief Investigator", + "username": "", + "orcid": "", + "family_name": "Zweinstein", + "given_name": "Alberto" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Data manager", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Contributors", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": null, + "email": null, + "role": "Supervisor", + "username": "", + "orcid": "", + "family_name": "", + "given_name": "" + } + ], + "citation_publisher": "ReDBox Research Data", + "citation_url": "", + "citation_publication_date": "", + "citation_generated": "Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}", + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "full_name_honorific": "", + "email": "notAReal@email.edu.au", + "given_name": "Prof", + "family_name": "Paul Gleeson", + "honorific": "", + "full_name_family_name_first": "Paul Gleeson, Prof", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_supervisor": { + "text_full_name": "", + "full_name_honorific": "", + "email": "", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor" + }, + "embargoByDate": "", + "embargoUntil": null, + "embargoNote": "", + "reviewerNote": "", + "ckanLocation": "" + } +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + bru.setEnvVar("dataPublicationOid", jsonData.oid); + }); +} diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru new file mode 100644 index 0000000000..dd4992d1c6 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru @@ -0,0 +1,137 @@ +meta { + name: Create data record via form + type: http + seq: 3 +} + +post { + url: {{host}}/default/rdmp/recordmeta/dataRecord + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}{/default/rdmp/record/dataRecord/edit + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "parameterRetriever": "", + "rdmpGetter": "", + "": {}, + "rdmp": { + "oid": "{{dmpOid}}", + "title": "Andrew's Postman test - Updated from form AJAX call" + }, + "aim_project_name": "Andrew's Postman test - Updated from form AJAX call", + "foaf:fundedBy_foaf:Agent": [ + "" + ], + "dc:coverage_vivo:DateTimeInterval_vivo:end": "", + "foaf:fundedBy_vivo:Grant": [ + "" + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "title": "A Data record - researcher", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator", + "orcid": null + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "username": "", + "role": "Contributors", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "contributor_supervisor": { + "text_full_name": null, + "full_name_honorific": "", + "email": null, + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor", + "orcid": null + }, + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "redbox:retentionPeriod_dc:date": "1year", + "redbox:retentionPeriod_dc:date_skos:note": "", + "disposalDate": "", + "related_publications": [ + { + "related_url": "", + "related_title": "", + "related_notes": "" + } + ], + "dataLocations": [], + "software_equipment": "" + } +} + +tests { + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + bru.setEnvVar("dataRecordOid", jsonData.oid); + }); +} diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru new file mode 100644 index 0000000000..8e9d2c6301 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru @@ -0,0 +1,50 @@ +meta { + name: Login via Internal authentication using researcher data + type: http + seq: 2 +} + +post { + url: http://localhost:1500/user/login_local + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/user/login + Connection: keep-alive +} + +body:json { + { + "username": "{{researcherUsername}}", + "password": "{{researcherPassword}}", + "branding": "default", + "portal": "rdmp" + } +} + +tests { + bru.setEnvVar("cookie",res.getHeader("set-cookie") ); + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Check that we have logged in correctly.", function () { + var jsonData = res.getBody(); + var researcherUsername = bru.getEnvVar("researcherUsername"); + expect(jsonData.user.username).to.eql(researcherUsername); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru new file mode 100644 index 0000000000..b848f9809e --- /dev/null +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru @@ -0,0 +1,53 @@ +meta { + name: Login via Internal authentication using researcheruser with invalid password + type: http + seq: 1 +} + +post { + url: http://localhost:1500/user/login_local + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/user/login + Connection: keep-alive +} + +body:json { + { + "username": "{{researcherUsername}}", + "password": "notthepassword", + "branding": "default", + "portal": "rdmp" + } +} + +tests { + bru.setEnvVar("cookie",res.getHeader("set-cookie")); + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Message is incorrect username/password", function () { + var jsonData = res.getBody(); + expect(jsonData.message).to.eql("Incorrect username/password"); + }); + + test("User is false", function () { + var jsonData = res.getBody(); + expect(jsonData.user).to.eql(false); + }); +} diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru new file mode 100644 index 0000000000..5639ae8b27 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru @@ -0,0 +1,31 @@ +meta { + name: Logout Researcher User + type: http + seq: 7 +} + +get { + url: {{host}}/default/rdmp/user/logout + body: none + auth: none +} + +headers { + Connection: keep-alive + Pragma: no-cache + Cache-Control: no-cache + Upgrade-Insecure-Requests: 1 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 + Referer: {{host}}/default/rdmp/researcher/home + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Cookie: {{cookie}} +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + +} diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru new file mode 100644 index 0000000000..f501d39ac4 --- /dev/null +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru @@ -0,0 +1,233 @@ +meta { + name: Migrate data publication to reviewing + type: http + seq: 5 +} + +put { + url: http://localhost:1500/default/rdmp/recordmeta/{{dataPublicationOid}}?targetStep=reviewing + body: json + auth: none +} + +query { + targetStep: reviewing +} + +headers { + Pragma: no-cache + Origin: {{host}} + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: {{host}}/default/rdmp/record/edit/49a33460c794498a56fa29ed08567cc4 + Cookie: {{cookie}} + Connection: keep-alive +} + +body:json { + { + "parameterRetriever": "", + "dataRecordGetter": "", + "": {}, + "dataRecord": { + "oid": "{{dataRecordOid}}", + "title": "A Data record" + }, + "title": "A Data record", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "foaf:fundedBy_foaf:Agent": [ + {} + ], + "foaf:fundedBy_vivo:Grant": [ + {} + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "startDate": "", + "endDate": "", + "timePeriod": "", + "geolocations": [ + "" + ], + "geospatial": {}, + "accessRightsToggle": "", + "dataLocations": [ + { + "type": "attachment", + "location": "b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "mimeType": "image/png", + "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", + "fileId": "d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "selected": true + } + ], + "dataLicensingAccess_manager": "Prof Paul Gleeson", + "dc:accessRights": "Open", + "accessRights_url": "", + "related_publications": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_websites": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_metadata": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_data": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_services": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "license_identifier": "", + "license_notes": "", + "license_other_url": "", + "license_statement": "Copyright ReDBox Research Data 2018", + "license_statement_url": "", + "citation_doi": "", + "requestIdentifier": [], + "citation_title": "A Data Record", + "creators": [ + { + "text_full_name": "Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "role": "Chief Investigator", + "username": "", + "orcid": "", + "family_name": "Zweinstein", + "given_name": "Alberto" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Data manager", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Contributors", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": null, + "email": null, + "role": "Supervisor", + "username": "", + "orcid": "", + "family_name": "", + "given_name": "" + } + ], + "citation_publisher": "ReDBox Research Data", + "citation_url": "", + "citation_publication_date": "", + "citation_generated": "Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}", + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "full_name_honorific": "", + "email": "notAReal@email.edu.au", + "given_name": "Prof", + "family_name": "Paul Gleeson", + "honorific": "", + "full_name_family_name_first": "Paul Gleeson, Prof", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_supervisor": { + "text_full_name": "", + "full_name_honorific": "", + "email": "", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor" + }, + "embargoByDate": "", + "embargoUntil": null, + "embargoNote": "", + "reviewerNote": "", + "ckanLocation": "" + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Test oid exists", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('oid'); + }); + + +} diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru new file mode 100644 index 0000000000..cd29ef39ea --- /dev/null +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru @@ -0,0 +1,224 @@ +meta { + name: Update data publication after in review + type: http + seq: 6 +} + +put { + url: {{host}}/default/rdmp/recordmeta/{{dataPublicationOid}} + body: json + auth: none +} + +headers { + Pragma: no-cache + Origin: http://localhost:1500 + Accept-Encoding: gzip, deflate, br + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + X-Source: jsclient + Content-Type: application/json;charset=UTF-8 + Accept: application/json, text/plain, */* + Cache-Control: no-cache + Referer: http://localhost:1500/default/rdmp/record/edit/{{dmpOid}} + Connection: keep-alive + Cookie: {{cookie}} +} + +body:json { + { + "parameterRetriever": "", + "dataRecordGetter": "", + "": {}, + "dataRecord": { + "oid": "{{dataRecordOid}}", + "title": "A Data record" + }, + "title": "A Data record - changed", + "description": "Data record", + "datatype": "collection", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "foaf:fundedBy_foaf:Agent": [ + {} + ], + "foaf:fundedBy_vivo:Grant": [ + {} + ], + "dc:subject_anzsrc:for": [ + { + "name": "01 - MATHEMATICAL SCIENCES", + "label": "MATHEMATICAL SCIENCES", + "notation": "01" + } + ], + "dc:subject_anzsrc:seo": [], + "startDate": "", + "endDate": "", + "timePeriod": "", + "geolocations": [ + "" + ], + "geospatial": {}, + "accessRightsToggle": "", + "dataLocations": [ + { + "type": "attachment", + "location": "b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "mimeType": "image/png", + "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", + "fileId": "d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "selected": true + } + ], + "dataLicensingAccess_manager": "Prof Paul Gleeson", + "dc:accessRights": "Open", + "accessRights_url": "", + "related_publications": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_websites": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_metadata": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_data": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "related_services": [ + { + "related_title": "", + "related_url": "", + "related_notes": "" + } + ], + "license_identifier": "", + "license_notes": "", + "license_other_url": "", + "license_statement": "Copyright ReDBox Research Data 2018", + "license_statement_url": "", + "citation_doi": "", + "requestIdentifier": [], + "citation_title": "A Data Record", + "creators": [ + { + "text_full_name": "Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "role": "Chief Investigator", + "username": "", + "orcid": "", + "family_name": "Zweinstein", + "given_name": "Alberto" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Data manager", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "role": "Contributors", + "username": "", + "orcid": "http://orcid.org/0000-0000-0000-000", + "family_name": "Paul Gleeson", + "given_name": "Prof" + }, + { + "text_full_name": null, + "email": null, + "role": "Supervisor", + "username": "", + "orcid": "", + "family_name": "", + "given_name": "" + } + ], + "citation_publisher": "ReDBox Research Data", + "citation_url": "", + "citation_publication_date": "", + "citation_generated": "Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}", + "dataowner_name": "Alberto Zweinstein", + "dataowner_email": "alberto.zweinstein@example.edu.au", + "contributor_ci": { + "text_full_name": "Alberto Zweinstein", + "full_name_honorific": "Dr Alberto Zweinstein", + "email": "alberto.zweinstein@example.edu.au", + "given_name": "Alberto", + "family_name": "Zweinstein", + "honorific": "Dr", + "full_name_family_name_first": "Zweinstein, Alberto", + "username": "", + "role": "Chief Investigator" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "full_name_honorific": "", + "email": "notAReal@email.edu.au", + "given_name": "Prof", + "family_name": "Paul Gleeson", + "honorific": "", + "full_name_family_name_first": "Paul Gleeson, Prof", + "username": "", + "role": "Data manager", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_supervisor": { + "text_full_name": "", + "full_name_honorific": "", + "email": "", + "given_name": "", + "family_name": "", + "honorific": "", + "full_name_family_name_first": "", + "username": "", + "role": "Supervisor" + }, + "embargoByDate": "", + "embargoUntil": null, + "embargoNote": "", + "reviewerNote": "", + "ckanLocation": "" + } +} + +tests { + //Record is now in review so the researcher should no longer be able to edit the record + test("Status code is 403", function () { + expect(res.getStatus()).to.equal(403); + }); + +} diff --git a/test/bruno/4 - General/Get logo.bru b/test/bruno/4 - General/Get logo.bru new file mode 100644 index 0000000000..20f55eb734 --- /dev/null +++ b/test/bruno/4 - General/Get logo.bru @@ -0,0 +1,24 @@ +meta { + name: Get logo + type: http + seq: 2 +} + +get { + url: {{host}}/default/rdmp/images/logo + body: none + auth: none +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + + test("Has valid content and type", function () { + expect(res.getHeader("content-type")).to.equal("image/png") + const sizeInBytes = Buffer.byteLength(res.getBody(),"utf-8") + expect(sizeInBytes).to.be.greaterThan(0); + }); +} diff --git a/test/bruno/4 - General/Get stylesheet.bru b/test/bruno/4 - General/Get stylesheet.bru new file mode 100644 index 0000000000..0044b8b118 --- /dev/null +++ b/test/bruno/4 - General/Get stylesheet.bru @@ -0,0 +1,26 @@ +meta { + name: Get stylesheet + type: http + seq: 1 +} + +get { + url: {{host}}/default/rdmp/styles/style.min.css + body: none + auth: none +} + +script:pre-request { + setTimeout(function(){},30000) +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Has valid content", function () { + expect(res.getBody()).to.match(/@charset "UTF-8"/s) + }); + +} diff --git a/test/bruno/5 - Solr/Start indexing.bru b/test/bruno/5 - Solr/Start indexing.bru new file mode 100644 index 0000000000..2cdaaea41c --- /dev/null +++ b/test/bruno/5 - Solr/Start indexing.bru @@ -0,0 +1,35 @@ +meta { + name: Start indexing + type: http + seq: 1 +} + +post { + url: {{solrhost}}/solr/redbox/update/json?wt=json&add=[8d95849003df11ed8b078341db3bde98 (1738385794638282752)] + body: none + auth: none +} + +query { + wt: json + add: [8d95849003df11ed8b078341db3bde98 (1738385794638282752)] +} + +script:pre-request { + setTimeout(function(){},30000) +} + +tests { + test("Solr HTTP status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + // test("Solr reports no error", function () { + // pm.expect(pm.response.stream.toString()).to.include('"status":0') + // }); + + // test("Solr reports Query Time", function () { + // pm.expect(pm.response.stream.toString()).to.include('"QTime":') + // }); + +} diff --git a/test/bruno/attachment.png b/test/bruno/attachment.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d3098a1c492aeac1f970cb99d4f626c9e97473 GIT binary patch literal 30148 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�V`_`F@ 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 W0D|8m=Ic>K01Xu# Date: Wed, 22 May 2024 01:02:13 +0000 Subject: [PATCH 02/18] Added set cookie pre request scripts for the rest of the tests that require them --- ...searcher user from the user management page.bru | 9 ++++++++- .../Admin User Tests/Create data publication.bru | 10 +++++++++- .../Create data record via form.bru | 10 +++++++++- .../Create new researcher user.bru | 11 ++++++++++- .../Dashboard List RDMP Records.bru | 11 ++++++++++- .../Delete the created data record.bru | 12 +++++++++++- .../Admin User Tests/Download attachment.bru | 9 +++++++-- .../Admin User Tests/Export RDMP Data.bru | 11 ++++++++++- .../First Phase of attachment upload.bru | 11 ++++++++++- .../Generate API key for new researcher user.bru | 11 ++++++++++- .../Get Dashboard Type Consolidated.bru | 11 ++++++++++- .../Get Dashboard Type Standard.bru | 11 ++++++++++- .../Get Dashboard Type Workspace.bru | 11 ++++++++++- .../Get DataPublication Workflow Steps.bru | 11 ++++++++++- .../Admin User Tests/Get DataRecord Type info.bru | 11 ++++++++++- .../Admin User Tests/Get all Record Types Info.bru | 11 ++++++++++- .../Get edit form config for RDMP.bru | 11 ++++++++++- ...esearcher user no longer has librarian role.bru | 11 ++++++++++- .../Get list of users and roles.bru | 11 ++++++++++- ...Get users list and find new researcher user.bru | 11 ++++++++++- .../Get view form config for RDMP.bru | 14 ++++++++++++-- .../Admin User Tests/List Dashboard Types.bru | 11 ++++++++--- .../Login via Internal authentication.bru | 4 +++- .../Admin User Tests/Logout Admin User.bru | 11 ++++++++++- .../Migrate data publication to reviewing.bru | 11 ++++++++++- .../Remove Librarian role from Researcher User.bru | 11 ++++++++++- .../2 - AJAX calls/Admin User Tests/Report.bru | 11 ++++++++++- .../Save attachment on Data Record.bru | 11 ++++++++++- .../Admin User Tests/Search Index.bru | 11 ++++++++++- .../Second Phase of attachment upload.bru | 8 +++++++- .../Try to create same researcher user.bru | 11 ++++++++++- .../Update RDMP Metadata using AJAX form call.bru | 11 ++++++++++- .../Update researcher user-s password.bru | 11 ++++++++++- ...et view form config for RDMP - Unauthorised.bru | 1 - .../Create data publication.bru | 8 +++++++- .../Create data record via form.bru | 9 ++++++++- ...ternal authentication using researcher data.bru | 3 ++- ... using researcheruser with invalid password.bru | 1 - .../Logout Researcher User.bru | 7 +++++++ .../Migrate data publication to reviewing.bru | 7 +++++++ .../Update data publication after in review.bru | 9 ++++++++- 41 files changed, 353 insertions(+), 43 deletions(-) diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru index 31a7357f7b..10accb21a0 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru @@ -22,7 +22,6 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/admin/users - Cookie: {{cookie}} Connection: keep-alive } @@ -42,6 +41,14 @@ body:json { } } +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru index a3d412c418..9f84e01f8f 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru @@ -22,7 +22,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/record/dataPublication/edit - Cookie: {{cookie}} + Connection: keep-alive } @@ -216,6 +216,14 @@ body:json { } } +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru index acc60cb912..a78da99544 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru @@ -21,7 +21,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}{/default/rdmp/record/dataRecord/edit - Cookie: {{cookie}} + Connection: keep-alive } @@ -123,6 +123,14 @@ body:json { } } +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru index 17dd41ccbb..37064f510c 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru @@ -22,7 +22,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/admin/users - Cookie: {{cookie}} + Connection: keep-alive } @@ -41,6 +41,15 @@ body:json { } } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru index ba11fb54c1..88d1f6add2 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru @@ -22,7 +22,16 @@ headers { Content-Type: application/json X-Source: jsclient Accept: application/json, text/plain, */* - Cookie: {{cookie}} + +} + + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru index f2b2e4aaca..7134181d40 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru @@ -20,7 +20,17 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: http://localhost:1500/default/rdmp/record/edit/ee3a12b7a95dd42619ebe16ecd2461f9 - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + + diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru index e4b057f0ce..786b00fc3b 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru @@ -10,8 +10,13 @@ get { auth: none } -headers { - Cookie: {{cookie}} + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru index ad55461b33..37ad6b8ed0 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru @@ -26,11 +26,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/export - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru b/test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru index 389e509456..0f8fdd1315 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru @@ -17,7 +17,7 @@ headers { X-CSRF-Token: Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 Tus-Resumable: 1.0.0 - Cookie: {{cookie}} + Connection: keep-alive Content-Length: 0 Upload-Metadata: name U2NyZWVuIFNob3QgMjAxOC0xMS0yNiBhdCAyLjM0LjI2IHBtLnBuZw==,type aW1hZ2UvcG5n @@ -28,6 +28,15 @@ headers { Content-Type: application/x-www-form-urlencoded } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 201", function () { expect(res.getStatus()).to.equal(201); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru index 4da4031c88..3fcea604ee 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru @@ -22,7 +22,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/admin/users - Cookie: {{cookie}} + Connection: keep-alive } @@ -30,6 +30,15 @@ body:json { { "userid": "{{researcherUserId}}"} } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru index 2b86f7189d..f6443f37b3 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru @@ -14,7 +14,16 @@ headers { Content-Type: application/json X-Source: jsclient Accept: application/json, text/plain, */* - Cookie: {{cookie}} + +} + + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru index 0411f8defc..911cc1964b 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru @@ -14,7 +14,16 @@ headers { Content-Type: application/json X-Source: jsclient Accept: application/json, text/plain, */* - Cookie: {{cookie}} + +} + + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru index 8d7f74776f..4dfd260c10 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru @@ -14,7 +14,16 @@ headers { Content-Type: application/json X-Source: jsclient Accept: application/json, text/plain, */* - Cookie: {{cookie}} + +} + + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru index ba47b1dcd0..35a97f7ddb 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru @@ -20,11 +20,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru index 7722d6df85..b1ff82bb35 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru @@ -20,11 +20,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru index 18c2897d90..0160a94dd5 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru @@ -20,11 +20,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru index b7d506cebe..658f92b125 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru @@ -18,7 +18,16 @@ headers { Content-Type: application/json X-Source: jsclient Accept: application/json, text/plain, */* - Cookie: {{cookie}} + +} + + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru index 06b79a716d..51fdb388a2 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru @@ -20,11 +20,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/admin/roles - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru index 494adba2a2..18062c3438 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru @@ -20,11 +20,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/admin/roles - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru index dd13104614..a7a3fa3990 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru @@ -20,11 +20,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: http://localhost:1500/default/rdmp/admin/users - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru index 75546fa514..439fd5065a 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru @@ -18,7 +18,16 @@ headers { Content-Type: application/json X-Source: jsclient Accept: application/json, text/plain, */* - Cookie: {{cookie}} + +} + + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { @@ -28,7 +37,8 @@ tests { test("RDMP form name is default-1.0-draft", function () { var jsonData = res.getBody(); - + console.log(`jsonData:`) + console.log(jsonData) var numFound = jsonData.totalItems; expect(jsonData.name).to.eql("default-1.0-draft"); }); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru b/test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru index d28922c373..043d108103 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru @@ -14,9 +14,14 @@ headers { Content-Type: application/json X-Source: jsclient Accept: application/json, text/plain, */* - Cookie: {{cookie}} - X-Token: {{token}} - X-Token: {{dmpOid}} +} + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru index f1c79c831a..5849d2e9e4 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru @@ -37,7 +37,9 @@ body:json { tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); - bru.setVar("cookie",res.headers["set-cookie"] ); + let cookie = res.headers['set-cookie'] + console.log(`Cookie is ${cookie}`) + bru.setVar("cookie",cookie ); }); test("Check that user returned is admin", function () { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru index a9f64c78ef..a21ae06601 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru @@ -20,7 +20,16 @@ headers { Referer: {{host}}/default/rdmp/researcher/home Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 - Cookie: {{cookie}} + +} + + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru index 3d81699d5f..272277a1c4 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru @@ -25,7 +25,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/record/edit/49a33460c794498a56fa29ed08567cc4 - Cookie: {{cookie}} + Connection: keep-alive } @@ -219,6 +219,15 @@ body:json { } } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru index 97487523b0..943359b9b9 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru @@ -22,7 +22,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/admin/roles - Cookie: {{cookie}} + Connection: keep-alive } @@ -36,6 +36,15 @@ body:json { } } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru index 93351c89be..7c62849baa 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru @@ -24,11 +24,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru index aa1094a92e..a145185b12 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru @@ -22,7 +22,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/record/edit/{{dataRecordOid}} - Cookie: {{cookie}} + Connection: keep-alive } @@ -143,6 +143,15 @@ body:json { } } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru index f2ef52333e..dec0047429 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru @@ -25,11 +25,20 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - Cookie: {{cookie}} + X-Source: jsclient Cache-Control: no-cache } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru index 837dd64434..3556272a23 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru @@ -16,7 +16,7 @@ headers { X-CSRF-Token: Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 Tus-Resumable: 1.0.0 - Cookie: {{cookie}} + Connection: keep-alive Pragma: no-cache User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 @@ -37,6 +37,12 @@ script:pre-request { const attachmentLength = attachment.length; req.setBody(attachment); + + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } } tests { diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru index fd3684ed38..27ae029110 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru @@ -22,7 +22,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/admin/users - Cookie: {{cookie}} + Connection: keep-alive } @@ -41,6 +41,15 @@ body:json { } } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru index 12b4530c8c..f6440f09dc 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru @@ -22,7 +22,7 @@ headers { Cache-Control: no-cache Referer: http://localhost:1500/default/rdmp/record/edit/{{dmpOid}} Connection: keep-alive - Cookie: {{cookie}} + } body:json { @@ -72,6 +72,15 @@ body:json { } } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru index 6fb9d7a311..d6c4500d7b 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru @@ -22,7 +22,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/admin/users - Cookie: {{cookie}} + Connection: keep-alive } @@ -41,6 +41,15 @@ body:json { } } + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { test("Status code is 200", function () { diff --git a/test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru b/test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru index 62274b3ca0..14fae866c2 100644 --- a/test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru +++ b/test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru @@ -18,7 +18,6 @@ headers { Content-Type: application/json X-Source: jsclient Accept: application/json, text/plain, */* - Cookie: {{cookie}} } tests { diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru index dc34980ff7..e08fe90eb6 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru @@ -22,7 +22,6 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/record/dataPublication/edit - Cookie: {{cookie}} Connection: keep-alive } @@ -216,6 +215,13 @@ body:json { } } +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} tests { test("Status code is 200", function () { diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru index dd4992d1c6..0fdd4978f9 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru @@ -21,7 +21,7 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}{/default/rdmp/record/dataRecord/edit - Cookie: {{cookie}} + Connection: keep-alive } @@ -123,6 +123,13 @@ body:json { } } +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} tests { test("Status code is 200", function () { diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru index 8e9d2c6301..f0d8e06433 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru @@ -34,8 +34,9 @@ body:json { } } + tests { - bru.setEnvVar("cookie",res.getHeader("set-cookie") ); + bru.setVar("cookie",res.getHeader("set-cookie") ); test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru index b848f9809e..4f0271c099 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru @@ -35,7 +35,6 @@ body:json { } tests { - bru.setEnvVar("cookie",res.getHeader("set-cookie")); test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru index 5639ae8b27..05c1fa939a 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru @@ -23,6 +23,13 @@ headers { Cookie: {{cookie}} } +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru index f501d39ac4..a30b889eb8 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru @@ -219,6 +219,13 @@ body:json { } } +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} tests { test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru index cd29ef39ea..8872dd5148 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru @@ -22,7 +22,6 @@ headers { Cache-Control: no-cache Referer: http://localhost:1500/default/rdmp/record/edit/{{dmpOid}} Connection: keep-alive - Cookie: {{cookie}} } body:json { @@ -215,6 +214,14 @@ body:json { } } +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + tests { //Record is now in review so the researcher should no longer be able to edit the record test("Status code is 403", function () { From adfaf21f3c85fea1153bfab64bd05627ad350e5d Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Wed, 22 May 2024 01:41:42 +0000 Subject: [PATCH 03/18] Fixed List Attachments for Datarecord test --- .../List Attachments for Datarecord.bru | 21 ++++--------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru b/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru index 47439354d2..85543dad07 100644 --- a/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru +++ b/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru @@ -1,10 +1,10 @@ meta { name: List Attachments for Datarecord type: http - seq: 19 + seq: 20 } -put { +get { url: {{host}}/default/rdmp/api/records/datastreams/{{attDataRecordOid}} body: none auth: none @@ -16,26 +16,13 @@ headers { } tests { - //Replacement for lodash not being in bruno by default - function size(collection) { - if (collection == null) { - return 0; - } - if (Array.isArray(collection) || typeof collection === 'string') { - return collection.length; - } - if (typeof collection === 'object') { - return Object.keys(collection).length; - } - return 0; // return zero if none of the above conditions apply - } - + const _ = require('lodash') test("Status code is 200", function () { expect(res.getStatus()).to.equal(200); }); test("Has attachments", function () { var jsonData = res.getBody(); - expect(size(jsonData)).to.gt(0); + expect(_.size(jsonData)).to.gt(0); }); } From 5ac4196b053d007660d6a07e60963c7be74c98e7 Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Wed, 22 May 2024 05:32:07 +0000 Subject: [PATCH 04/18] Added OpenID Connect tests --- .../3 - OpenID Connect/Begin OIDC login.bru | 46 +++++ .../Keycloak login action.bru | 46 +++++ .../Keycloak login page.bru | 43 ++++ .../3 - OpenID Connect/Load login page.bru | 40 ++++ .../RedBox OIDC return login.bru | 44 ++++ .../RedBox OIDC return welcome page.bru | 47 +++++ test/bruno/package-lock.json | 193 ++++++++++++++++++ test/bruno/package.json | 5 + 8 files changed, 464 insertions(+) create mode 100644 test/bruno/3 - OpenID Connect/Begin OIDC login.bru create mode 100644 test/bruno/3 - OpenID Connect/Keycloak login action.bru create mode 100644 test/bruno/3 - OpenID Connect/Keycloak login page.bru create mode 100644 test/bruno/3 - OpenID Connect/Load login page.bru create mode 100644 test/bruno/3 - OpenID Connect/RedBox OIDC return login.bru create mode 100644 test/bruno/3 - OpenID Connect/RedBox OIDC return welcome page.bru create mode 100644 test/bruno/package-lock.json create mode 100644 test/bruno/package.json diff --git a/test/bruno/3 - OpenID Connect/Begin OIDC login.bru b/test/bruno/3 - OpenID Connect/Begin OIDC login.bru new file mode 100644 index 0000000000..6d12bfd37a --- /dev/null +++ b/test/bruno/3 - OpenID Connect/Begin OIDC login.bru @@ -0,0 +1,46 @@ +meta { + name: Begin OIDC login + type: http + seq: 2 +} + +get { + url: http://localhost:1500/user/begin_oidc + body: none + auth: none +} + +headers { + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Cache-Control: no-cache + Connection: keep-alive + Pragma: no-cache + Referer: http://localhost:1500/default/rdmp/user/login + Sec-Fetch-Dest: document + Sec-Fetch-Mode: navigate + Sec-Fetch-Site: same-origin + Sec-Fetch-User: ?1 + Upgrade-Insecure-Requests: 1 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36 + sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100" + sec-ch-ua-mobile: ?0 + sec-ch-ua-platform: "macOS" +} + +script:pre-request { + req.setMaxRedirects(0); + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + +tests { + test("Status code is 302", function () { + expect(res.getStatus()).to.equal(302); + bru.setVar("kc_redir_url", res.headers['location']); + console.log(bru.getVar("kc_redir_url")) + }); +} diff --git a/test/bruno/3 - OpenID Connect/Keycloak login action.bru b/test/bruno/3 - OpenID Connect/Keycloak login action.bru new file mode 100644 index 0000000000..3b98dd0d2b --- /dev/null +++ b/test/bruno/3 - OpenID Connect/Keycloak login action.bru @@ -0,0 +1,46 @@ +meta { + name: Keycloak login action + type: http + seq: 4 +} + +post { + url: {{kc_login_url}} + body: formUrlEncoded + auth: none +} + +headers { + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Cache-Control: no-cache + Connection: keep-alive + Content-Type: application/x-www-form-urlencoded + Origin: null + Pragma: no-cache + Upgrade-Insecure-Requests: 1 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36 +} + +body:form-urlencoded { + username: test-researcher + password: password + credentialId: +} + +script:pre-request { + req.setMaxRedirects(0); + const cookie = bru.getVar("kc_cookie"); + console.log(`Cookie is: ${cookie}`) + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + +tests { + test("Status code is 302", function () { + expect(res.getStatus()).to.equal(302); + bru.setVar("rb_login_url", res.headers['location']); + console.log(bru.getVar("rb_login_url")) + }); +} diff --git a/test/bruno/3 - OpenID Connect/Keycloak login page.bru b/test/bruno/3 - OpenID Connect/Keycloak login page.bru new file mode 100644 index 0000000000..424eb60b56 --- /dev/null +++ b/test/bruno/3 - OpenID Connect/Keycloak login page.bru @@ -0,0 +1,43 @@ +meta { + name: Keycloak login page + type: http + seq: 3 +} + +get { + url: {{kc_redir_url}} + body: none + auth: none +} + +headers { + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Cache-Control: no-cache + Connection: keep-alive + Pragma: no-cache + Referer: http://localhost:1500/default/rdmp/user/login + Sec-Fetch-Dest: document + Sec-Fetch-Mode: navigate + Sec-Fetch-Site: same-origin + Sec-Fetch-User: ?1 + Upgrade-Insecure-Requests: 1 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36 + sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100" + sec-ch-ua-mobile: ?0 + sec-ch-ua-platform: "macOS" +} + +script:post-response { + bru.setVar("kc_cookie",res.headers['set-cookie']); +} + +tests { + const cheerio = require('cheerio') + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + const $ = cheerio.load(res.getBody()); + + bru.setVar("kc_login_url", $("#kc-form-login").attr('action')); + }); +} diff --git a/test/bruno/3 - OpenID Connect/Load login page.bru b/test/bruno/3 - OpenID Connect/Load login page.bru new file mode 100644 index 0000000000..64316d3a60 --- /dev/null +++ b/test/bruno/3 - OpenID Connect/Load login page.bru @@ -0,0 +1,40 @@ +meta { + name: Load login page + type: http + seq: 1 +} + +get { + url: http://localhost:1500/default/rdmp/user/login + body: none + auth: none +} + +headers { + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Cache-Control: no-cache + Connection: keep-alive + Pragma: no-cache + Referer: http://localhost:1500/default/rdmp/user/login + Sec-Fetch-Dest: document + Sec-Fetch-Mode: navigate + Sec-Fetch-Site: same-origin + Sec-Fetch-User: ?1 + Upgrade-Insecure-Requests: 1 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36 + sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100" + sec-ch-ua-mobile: ?0 + sec-ch-ua-platform: "macOS" +} + +script:post-response { + bru.setVar("cookie",res.headers['set-cookie']); +} + +tests { + test("Status code is 200", function () { + // Just loading page to get a session cookie + expect(res.getStatus()).to.equal(200); + }); +} diff --git a/test/bruno/3 - OpenID Connect/RedBox OIDC return login.bru b/test/bruno/3 - OpenID Connect/RedBox OIDC return login.bru new file mode 100644 index 0000000000..b0490e533a --- /dev/null +++ b/test/bruno/3 - OpenID Connect/RedBox OIDC return login.bru @@ -0,0 +1,44 @@ +meta { + name: RedBox OIDC return login + type: http + seq: 5 +} + +get { + url: {{rb_login_url}} + body: none + auth: none +} + +headers { + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Cache-Control: no-cache + Connection: keep-alive + Pragma: no-cache + Sec-Fetch-Dest: document + Sec-Fetch-Mode: navigate + Sec-Fetch-Site: cross-site + Sec-Fetch-User: ?1 + Upgrade-Insecure-Requests: 1 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36 +} + +script:pre-request { + req.setMaxRedirects(0); + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + +tests { + + + test("Status code is 302", function () { + expect(res.getStatus()).to.equal(302); + bru.setVar("cookie", res.headers['set-cookie']) + }); + +} diff --git a/test/bruno/3 - OpenID Connect/RedBox OIDC return welcome page.bru b/test/bruno/3 - OpenID Connect/RedBox OIDC return welcome page.bru new file mode 100644 index 0000000000..afb7a319e9 --- /dev/null +++ b/test/bruno/3 - OpenID Connect/RedBox OIDC return welcome page.bru @@ -0,0 +1,47 @@ +meta { + name: RedBox OIDC return login + type: http + seq: 6 +} + +get { + url: {{host}}/default/rdmp/researcher/home + body: none + auth: none +} + +headers { + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + Cache-Control: no-cache + Connection: keep-alive + Pragma: no-cache + Sec-Fetch-Dest: document + Sec-Fetch-Mode: navigate + Sec-Fetch-Site: cross-site + Sec-Fetch-User: ?1 + Upgrade-Insecure-Requests: 1 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36 +} + +script:pre-request { + req.setMaxRedirects(0); + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + +tests { + + + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Welcome message in HTML", function () { + //Testing login worked by looking for welcome message on page + expect(res.getBody()).to.include("Test Researcher") + }); +} diff --git a/test/bruno/package-lock.json b/test/bruno/package-lock.json new file mode 100644 index 0000000000..4e14447a96 --- /dev/null +++ b/test/bruno/package-lock.json @@ -0,0 +1,193 @@ +{ + "name": "bruno", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "cheerio": "^1.0.0-rc.12" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + } + } +} diff --git a/test/bruno/package.json b/test/bruno/package.json new file mode 100644 index 0000000000..573f2cdc8d --- /dev/null +++ b/test/bruno/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "cheerio": "^1.0.0-rc.12" + } +} From 4503c34b2b08cb791522fc47522d0368be80e4fc Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Wed, 22 May 2024 07:13:53 +0000 Subject: [PATCH 05/18] Added docker compose to run bruno tests. Fixed up configuration to work with bruno method of running CLI tool --- config/env/integrationtest.js | 8 +- .../docker-compose.bruno.yml | 92 +++ .../keycloakdb/data/h2/keycloakdb.lock.db | 6 - .../keycloakdb/data/h2/keycloakdb.mv.db | Bin 1114112 -> 1114112 bytes .../keycloakdb/data/h2/keycloakdb.trace.db | 734 ++++++++++++++++++ .../Create Temporary Datapub.bru | 2 +- .../Create data publication.bru | 2 +- .../Delete the created data record.bru | 2 +- ...sers list and find new researcher user.bru | 2 +- .../Login via Internal authentication.bru | 2 +- .../Migrate data publication to reviewing.bru | 4 +- ...ate RDMP Metadata using AJAX form call.bru | 4 +- .../Create data publication.bru | 2 +- ...l authentication using researcher data.bru | 2 +- ...g researcheruser with invalid password.bru | 2 +- .../Migrate data publication to reviewing.bru | 4 +- ...pdate data publication after in review.bru | 6 +- .../3 - OpenID Connect/Begin OIDC login.bru | 4 +- .../Keycloak login page.bru | 2 +- .../3 - OpenID Connect/Load login page.bru | 4 +- test/bruno/4 - General/Get stylesheet.bru | 2 +- test/bruno/5 - Solr/Start indexing.bru | 8 +- test/bruno/environments/int-test.bru | 2 +- 23 files changed, 859 insertions(+), 37 deletions(-) create mode 100755 support/integration-testing/docker-compose.bruno.yml delete mode 100644 support/integration-testing/keycloakdb/data/h2/keycloakdb.lock.db diff --git a/config/env/integrationtest.js b/config/env/integrationtest.js index ab13617bce..bcd27421ac 100644 --- a/config/env/integrationtest.js +++ b/config/env/integrationtest.js @@ -29,7 +29,7 @@ module.exports = { log: { level: 'verbose' }, - appUrl:'http://localhost:1500', + appUrl:'http://redboxportal:1500', record:{ baseUrl: { redbox: "http://redbox:9000/redbox", @@ -67,7 +67,7 @@ module.exports = { secretOrKey: 'Y30wY4xv1*6I7yUX%6v*Tzce8OEbVO&@R4hVb%2@Gehtx^xgOqQ97Slv!ZOkfHHmox&x0zAt*0o&4^8$9oW8WTf&r@&d31EFbQZr', jsonWebTokenOptions: { issuer: 'https://rapid.test.aaf.edu.au', - audience: 'http://localhost:1500/default/rdmp/', + audience: 'http://redboxportal:1500/default/rdmp/', ignoreNotBefore: true } } @@ -95,8 +95,8 @@ module.exports = { client: { client_id: 'redbox', client_secret: 'w2snramgGaqehPiujV695iUfKmZAJ147', - redirect_uris: ['http://localhost:1500/user/login_oidc'], - post_logout_redirect_uris: ['http://localhost:1500/default/rdmp/user/logout'], + redirect_uris: ['http://redboxportal:1500/user/login_oidc'], + post_logout_redirect_uris: ['http://redboxportal:1500/default/rdmp/user/logout'], }, params: { scope: 'openid email profile', diff --git a/support/integration-testing/docker-compose.bruno.yml b/support/integration-testing/docker-compose.bruno.yml new file mode 100755 index 0000000000..6b4f07a56d --- /dev/null +++ b/support/integration-testing/docker-compose.bruno.yml @@ -0,0 +1,92 @@ +version: '3.1' +networks: + main: +services: + bruno: + image: ghcr.io/davidkarlsen/bruno-image:main + volumes: + - "../../test/bruno:/tests" + working_dir: /tests + depends_on: + redboxportal: + condition: service_healthy + networks: + main: + aliases: + - bruno + entrypoint: /bin/bash -c "cd /tests && bru run --env int-test --format junit --output /tests/results.xml --bail" + redboxportal: + image: qcifengineering/redbox-portal:develop + ports: + - "1500:1500" + # Debugging port + # - "9876:9876" + volumes: + - "../..:/opt/redbox-portal" + - "./.tmp/attachments:/attachments" + healthcheck: + test: ["CMD-SHELL", "curl http://localhost:1500"] + interval: 5s + timeout: 5s + retries: 10 + depends_on: + keycloak: + condition: service_healthy + expose: + - "1500" + environment: + - NODE_ENV=integrationtest + - PORT=1500 + - sails_redbox__apiKey=c8e844fc-8550-497f-b970-7900ec8741ca + - sails_record__baseUrl_redbox=http://redbox:9000/redbox + - sails_record__baseUrl_mint=http://203.101.226.160/mint + # - sails_log__level=verbose + - sails_auth__default__local__default__token=d077835a-696b-4728-85cf-3ffd57152b1e + - sails_security__csrf=false + networks: + main: + aliases: + - redboxportal + # add 'node --inspect=0.0.0.0:9876' to entrypoint for debugging + entrypoint: /bin/bash -c "cd /opt/redbox-portal && node app.js" + mongodb: + image: mvertes/alpine-mongo:latest + networks: + main: + aliases: + - mongodb + ports: + - "27017:27017" + solr: + image: solr:latest + expose: + - "8983" + ports: + - "8983:8983" + networks: + main: + aliases: + - solr + entrypoint: + - docker-entrypoint.sh + - solr-precreate + - redbox + keycloak: + image: quay.io/keycloak/keycloak:17.0.1 + expose: + - "8080" + ports: + - "8080:8080" + healthcheck: + test: ["CMD-SHELL", "curl http://localhost:8080"] + interval: 5s + timeout: 5s + retries: 10 + volumes: + - "./keycloakdb/data:/opt/keycloak/data" + networks: + main: + aliases: + - keycloak + command: + - start-dev diff --git a/support/integration-testing/keycloakdb/data/h2/keycloakdb.lock.db b/support/integration-testing/keycloakdb/data/h2/keycloakdb.lock.db deleted file mode 100644 index f4ab6edea0..0000000000 --- a/support/integration-testing/keycloakdb/data/h2/keycloakdb.lock.db +++ /dev/null @@ -1,6 +0,0 @@ -#FileLock -#Sat Apr 16 01:37:10 GMT 2022 -server=172.20.0.3\:43051 -hostName=9c0c1f8df594 -method=file -id=18030044e3507416a57390c7ce55cb38aa7836a1f26 diff --git a/support/integration-testing/keycloakdb/data/h2/keycloakdb.mv.db b/support/integration-testing/keycloakdb/data/h2/keycloakdb.mv.db index 7e353ae4fbcddfc77c30a121c25815e5607424b3..31b33e0e240a614ab70ee643d7d56ba86465ed74 100644 GIT binary patch delta 2024 zcmbtVO>7%Q6rNe{u03NXv6DdDv_gwYi`^{o?#6#LNJ%OpKoutCzyXR<|E!x3H#Uxw zrYcZF-G(Fwl5Wz0p4v*NAQfoZ2#X5{Aw&_V5X3D~1p-chL_k%ksDRnO##HSgbl0Qz z_RV|q#`C`KO{Ma1h5o9r%2XXyw#rrcst0&eM6qLL(z zs1xNxDk>IJd)3iIS}YX`Dc_J~fexDUmKUo>j$hwKO_Z7)dCSw%Gk3 z!T>O#e0XG&Y$kfkO}V=YIguGg&-FbsC027Q(WxXpmMPf-WA=B_jZ2FvAQA`~jA z*>qu|SSXcK`Gg#iq|n%?S_2t>4c-S}-P&JR{#vgRPT4!jz z)&8`6$@(D%Z)+P_eu`}oUNP4_VlD%wEC~R7i{H4w-#SQlst91x za<=LPXf>DI@2&8tmfGc-f!eR4Q3QrVcG&_D8>+aTqck=ec-hQ()XHf>1=5@>Y`O$u zRC58~xbClgJdcjS`{@Ta+iVzl->fO8zcHk_-hFFA1k(z-$d-vW9}xK5#B*|J%C?;6UPPYZ_5vjtBUzJy zrU+>h@MAnZRK7J=J9pmO3$?GJOFolck{Xs3TBV;h945Vgc)!&4#N8gZHK)X~3OU<} z|8WHTo5|e!-k*tZ8TqYgSq*0;?Zw0va=?T4SVkqR(wHATc+zp^o^NaKhA_|A{;{+y zk&k3NJC{0oOyC1`y`YZKVlJ#GhO!KJPPI!0idK+wo?f%OC_r zq)t*VMUwfzXSqig_}fe}JDk6-@UEKyZlXH59#q@usAO9l--Ec0;2ywSn>VE6;=GOI z9>6Z@NbUigq9d8gx1Tg5-$kW~WS&S@xHz(*nyM`xM-GO2$n_WCZCtmIYpOa9c8oJ% zjF%XzQ?H)q-2a|N)AO{d9L_}1Tb<&V53m))QV1B7ndVZcld-^|lhh{G#BMl7pu8=i zD_qqG?K#D(N(?T{S(X*qARJMyBz{&~ES7Cr-`vtFAs@@gTlIFD>L&3NaK20zuHq6v zg2u1m9e_u4@;cTUR%Go8U|BhtvQ}D3cFO*d=D)@p9B#^wrZ6p>=cOHzAAV|YMekgC zK{mFHQs3aSVD~*~cr}^q8Zv5SDPxT(8MY^$lBpT&6*KSKF(xP0S}7Wz!JoKTe%dSd z7KSqN>?~R><=F`{Xw;n14T{#Ae#2tSYqZ3~FXat_Y` z+@~iNa0Cc?V}%fPQv5W8_NMmCn!sdk32Wux514)`>z{o~s=gcaVC~nFzJ8dGAj<5= z>PWfUD2&N&l)2CFF&%m?ng{chbiSLuZHw;Z^_A%(yMdMQ7Y_Chy}kdiR_sex&YOW` zm_~fb$U)h$h&zDO=|x=N=KQ?r$kKPHDm>&hboLHb8D>Lu59moWc0?_!x#5joV59xd z)XIi?Xj|2NTuoMXor-7V3friW?mgULuDep;GW)WTk&Of4KDqA~w9UK6foq|T>*2bB z-zRKdmpTEfb*HgPb$M!%vDcOqrt$mBndeG4WO5KXX|j761SM diff --git a/support/integration-testing/keycloakdb/data/h2/keycloakdb.trace.db b/support/integration-testing/keycloakdb/data/h2/keycloakdb.trace.db index d29d9d224b..49de9b43ba 100644 --- a/support/integration-testing/keycloakdb/data/h2/keycloakdb.trace.db +++ b/support/integration-testing/keycloakdb/data/h2/keycloakdb.trace.db @@ -470,3 +470,737 @@ org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic c at java.base/java.lang.reflect.Method.invoke(Method.java:566) at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) +2024-05-22 04:03:02 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 04:09:59 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:32:34 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:34:07 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:36:15 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:37:52 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:38:51 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:40:15 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) + at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) + at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) + at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) + at picocli.CommandLine.executeUserObject(CommandLine.java:1939) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) + at picocli.CommandLine.execute(CommandLine.java:2078) + at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:84) + at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) +2024-05-22 06:42:35 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:44:55 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) + at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) + at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) + at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) + at picocli.CommandLine.executeUserObject(CommandLine.java:1939) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) + at picocli.CommandLine.execute(CommandLine.java:2078) + at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:84) + at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) +2024-05-22 06:48:29 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) + at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) + at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) + at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) + at picocli.CommandLine.executeUserObject(CommandLine.java:1939) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) + at picocli.CommandLine.execute(CommandLine.java:2078) + at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:84) + at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) +2024-05-22 06:52:18 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:55:44 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) + at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) + at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) + at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) + at picocli.CommandLine.executeUserObject(CommandLine.java:1939) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) + at picocli.CommandLine.execute(CommandLine.java:2078) + at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:84) + at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) +2024-05-22 06:58:49 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:58:49 jdbc[4]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 06:58:49 jdbc[5]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 07:00:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) + at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) + at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) + at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) + at picocli.CommandLine.executeUserObject(CommandLine.java:1939) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) + at picocli.CommandLine.execute(CommandLine.java:2078) + at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:84) + at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) +2024-05-22 07:06:02 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 07:08:19 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) + at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) + at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) + at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) + at picocli.CommandLine.executeUserObject(CommandLine.java:1939) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) + at picocli.CommandLine.execute(CommandLine.java:2078) + at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:84) + at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) + at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) +2024-05-22 07:11:46 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) diff --git a/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru b/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru index 70167396c1..8d9cc075d2 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru @@ -65,7 +65,7 @@ body:json { "mimeType": "image/png", "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", "fileId": "d3de61376e5bc93c814607ee604ebac5", - "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "{{host}}/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", "selected": true } ], diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru index 9f84e01f8f..be87aece70 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru @@ -80,7 +80,7 @@ body:json { "mimeType": "image/png", "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", "fileId": "d3de61376e5bc93c814607ee604ebac5", - "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "{{host}}/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", "selected": true } ], diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru index 7134181d40..13d26f8a0c 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru @@ -19,7 +19,7 @@ headers { Content-Type: application/json;charset=utf-8 Accept: application/json, text/plain, */* Connection: keep-alive - Referer: http://localhost:1500/default/rdmp/record/edit/ee3a12b7a95dd42619ebe16ecd2461f9 + Referer: {{host}}/default/rdmp/record/edit/ee3a12b7a95dd42619ebe16ecd2461f9 X-Source: jsclient Cache-Control: no-cache diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru index a7a3fa3990..1c1d208a85 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru @@ -19,7 +19,7 @@ headers { Content-Type: application/json;charset=utf-8 Accept: application/json, text/plain, */* Connection: keep-alive - Referer: http://localhost:1500/default/rdmp/admin/users + Referer: {{host}}/default/rdmp/admin/users X-Source: jsclient Cache-Control: no-cache diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru index 5849d2e9e4..acc7d5f1bf 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru @@ -5,7 +5,7 @@ meta { } post { - url: http://localhost:1500/user/login_local + url: {{host}}/user/login_local body: json auth: none } diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru index 272277a1c4..c38eef2a1e 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru @@ -5,7 +5,7 @@ meta { } put { - url: http://localhost:1500/default/rdmp/recordmeta/{{dataPublicationOid}}?targetStep=reviewing + url: {{host}}/default/rdmp/recordmeta/{{dataPublicationOid}}?targetStep=reviewing body: json auth: none } @@ -83,7 +83,7 @@ body:json { "mimeType": "image/png", "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", "fileId": "d3de61376e5bc93c814607ee604ebac5", - "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "{{host}}/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", "selected": true } ], diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru b/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru index f6440f09dc..caf4d6eee9 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru +++ b/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru @@ -12,7 +12,7 @@ put { headers { Pragma: no-cache - Origin: http://localhost:1500 + Origin: {{host}} Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 @@ -20,7 +20,7 @@ headers { Content-Type: application/json;charset=UTF-8 Accept: application/json, text/plain, */* Cache-Control: no-cache - Referer: http://localhost:1500/default/rdmp/record/edit/{{dmpOid}} + Referer: {{host}}/default/rdmp/record/edit/{{dmpOid}} Connection: keep-alive } diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru index e08fe90eb6..c3ea343659 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru @@ -79,7 +79,7 @@ body:json { "mimeType": "image/png", "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", "fileId": "d3de61376e5bc93c814607ee604ebac5", - "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "{{host}}/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", "selected": true } ], diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru index f0d8e06433..12deb65ad7 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru @@ -5,7 +5,7 @@ meta { } post { - url: http://localhost:1500/user/login_local + url: {{host}}/user/login_local body: json auth: none } diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru index 4f0271c099..54b71a221f 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru @@ -5,7 +5,7 @@ meta { } post { - url: http://localhost:1500/user/login_local + url: {{host}}/user/login_local body: json auth: none } diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru index a30b889eb8..7f0f74e675 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru @@ -5,7 +5,7 @@ meta { } put { - url: http://localhost:1500/default/rdmp/recordmeta/{{dataPublicationOid}}?targetStep=reviewing + url: {{host}}/default/rdmp/recordmeta/{{dataPublicationOid}}?targetStep=reviewing body: json auth: none } @@ -83,7 +83,7 @@ body:json { "mimeType": "image/png", "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", "fileId": "d3de61376e5bc93c814607ee604ebac5", - "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "{{host}}/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", "selected": true } ], diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru b/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru index 8872dd5148..59b493b5c2 100644 --- a/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru +++ b/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru @@ -12,7 +12,7 @@ put { headers { Pragma: no-cache - Origin: http://localhost:1500 + Origin: {{host}} Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 @@ -20,7 +20,7 @@ headers { Content-Type: application/json;charset=UTF-8 Accept: application/json, text/plain, */* Cache-Control: no-cache - Referer: http://localhost:1500/default/rdmp/record/edit/{{dmpOid}} + Referer: {{host}}/default/rdmp/record/edit/{{dmpOid}} Connection: keep-alive } @@ -78,7 +78,7 @@ body:json { "mimeType": "image/png", "name": "Screen Shot 2018-11-26 at 3.39.48 pm.png", "fileId": "d3de61376e5bc93c814607ee604ebac5", - "uploadUrl": "http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", + "uploadUrl": "{{host}}/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5", "selected": true } ], diff --git a/test/bruno/3 - OpenID Connect/Begin OIDC login.bru b/test/bruno/3 - OpenID Connect/Begin OIDC login.bru index 6d12bfd37a..67e2f5364c 100644 --- a/test/bruno/3 - OpenID Connect/Begin OIDC login.bru +++ b/test/bruno/3 - OpenID Connect/Begin OIDC login.bru @@ -5,7 +5,7 @@ meta { } get { - url: http://localhost:1500/user/begin_oidc + url: {{host}}/user/begin_oidc body: none auth: none } @@ -16,7 +16,7 @@ headers { Cache-Control: no-cache Connection: keep-alive Pragma: no-cache - Referer: http://localhost:1500/default/rdmp/user/login + Referer: {{host}}/default/rdmp/user/login Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: same-origin diff --git a/test/bruno/3 - OpenID Connect/Keycloak login page.bru b/test/bruno/3 - OpenID Connect/Keycloak login page.bru index 424eb60b56..a17d57047f 100644 --- a/test/bruno/3 - OpenID Connect/Keycloak login page.bru +++ b/test/bruno/3 - OpenID Connect/Keycloak login page.bru @@ -16,7 +16,7 @@ headers { Cache-Control: no-cache Connection: keep-alive Pragma: no-cache - Referer: http://localhost:1500/default/rdmp/user/login + Referer: {{host}}/default/rdmp/user/login Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: same-origin diff --git a/test/bruno/3 - OpenID Connect/Load login page.bru b/test/bruno/3 - OpenID Connect/Load login page.bru index 64316d3a60..51a0264dc1 100644 --- a/test/bruno/3 - OpenID Connect/Load login page.bru +++ b/test/bruno/3 - OpenID Connect/Load login page.bru @@ -5,7 +5,7 @@ meta { } get { - url: http://localhost:1500/default/rdmp/user/login + url: {{host}}/default/rdmp/user/login body: none auth: none } @@ -16,7 +16,7 @@ headers { Cache-Control: no-cache Connection: keep-alive Pragma: no-cache - Referer: http://localhost:1500/default/rdmp/user/login + Referer: {{host}}/default/rdmp/user/login Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: same-origin diff --git a/test/bruno/4 - General/Get stylesheet.bru b/test/bruno/4 - General/Get stylesheet.bru index 0044b8b118..0351b04245 100644 --- a/test/bruno/4 - General/Get stylesheet.bru +++ b/test/bruno/4 - General/Get stylesheet.bru @@ -11,7 +11,7 @@ get { } script:pre-request { - setTimeout(function(){},30000) + await new Promise((resolve) => setTimeout(() => resolve(), 30000)); } tests { diff --git a/test/bruno/5 - Solr/Start indexing.bru b/test/bruno/5 - Solr/Start indexing.bru index 2cdaaea41c..4ff7a67b1d 100644 --- a/test/bruno/5 - Solr/Start indexing.bru +++ b/test/bruno/5 - Solr/Start indexing.bru @@ -5,18 +5,20 @@ meta { } post { - url: {{solrhost}}/solr/redbox/update/json?wt=json&add=[8d95849003df11ed8b078341db3bde98 (1738385794638282752)] + url: {{solrhost}}/solr/redbox/update/json?wt=json&add={{dmpOid}} body: none auth: none } query { wt: json - add: [8d95849003df11ed8b078341db3bde98 (1738385794638282752)] + add: {{dmpOid}} } script:pre-request { - setTimeout(function(){},30000) + + await new Promise((resolve) => setTimeout(() => resolve(), 30000)); + } tests { diff --git a/test/bruno/environments/int-test.bru b/test/bruno/environments/int-test.bru index b5c830007d..e8cc7a90c1 100644 --- a/test/bruno/environments/int-test.bru +++ b/test/bruno/environments/int-test.bru @@ -1,5 +1,5 @@ vars { - host: http://localhost:1500 + host: http://redboxportal:1500 token: d077835a-696b-4728-85cf-3ffd57152b1e solrhost: http://solr:8983 } From 559b9d3df9d2c00097462bf43f4380e46232c421 Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Wed, 22 May 2024 07:22:00 +0000 Subject: [PATCH 06/18] Added config to run bruno tests on CircleCI --- .circleci/config.yml | 13 ++++---- package.json | 1 + .../docker-compose.bruno.yml | 2 +- .../keycloakdb/data/h2/keycloakdb.trace.db | 31 +++++++++++++++++++ test/bruno/package-lock.json | 2 +- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9d3a26a58c..f1095ac5ea 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -86,21 +86,22 @@ jobs: shasum -a 256 -c codecov.SHA256SUM chmod +x codecov - run: - name: Run Postman and Mocha tests with code coverage + name: Run Bruno and Mocha tests with code coverage command: | sudo mkdir -p .tmp/junit sudo chmod -R 777 . cd support/integration-testing sudo mkdir -p .tmp/attachments/staging sudo chmod -R 777 . - docker-compose -f docker-compose.newman.yml up --abort-on-container-exit --exit-code-from redboxportal + docker-compose -f docker-compose.bruno.yml up --abort-on-container-exit --exit-code-from redboxportal + cp ../../tests/bruno/results.xml .tmp/junit/bruno-results.xml docker-compose -f docker-compose.mocha.yml up --abort-on-container-exit --exit-code-from redboxportal - run: - name: Upload newman and mocha code coverage + name: Upload Bruno and mocha code coverage command: | - /tmp/.codecov-cli/codecov --verbose upload-process --fail-on-error --disable-search \ - --token "${CODECOV_TOKEN}" --name "job-${CIRCLE_BUILD_NUM}-${CIRCLE_BRANCH}" \ - --flag "backend-newman" --file "./coverage/newman/lcov.info" + # /tmp/.codecov-cli/codecov --verbose upload-process --fail-on-error --disable-search \ + # --token "${CODECOV_TOKEN}" --name "job-${CIRCLE_BUILD_NUM}-${CIRCLE_BRANCH}" \ + # --flag "backend-newman" --file "./coverage/newman/lcov.info" /tmp/.codecov-cli/codecov --verbose upload-process --fail-on-error --disable-search \ --token "${CODECOV_TOKEN}" --name "job-${CIRCLE_BUILD_NUM}-${CIRCLE_BRANCH}" \ --flag "backend-mocha" --file "./coverage/mocha/lcov.info" diff --git a/package.json b/package.json index 0c495bdc8e..d43f0e4475 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "start": "node app.js", "test:mocha": "docker compose -f ./support/integration-testing/docker-compose.mocha.yml up --abort-on-container-exit --exit-code-from redboxportal", "test:postman": "docker compose -f ./support/integration-testing/docker-compose.newman.yml up --abort-on-container-exit --exit-code-from redboxportal", + "test:bruno": "docker compose -f ./support/integration-testing/docker-compose.bruno.yml up --abort-on-container-exit --exit-code-from redboxportal", "test:angular": "./support/unit-testing/angular/testDevAngular.sh", "doc-ng2": "npm -g install @compodoc/compodoc && npm -g install ejs-cli aglio && compodoc -p angular/tsconfig.json -d support/docs/generated/ng2 -n \"ReDBox Portal - NG2 Apps\" --theme postmark --includes support/docs && ejs-cli views/default/default/apidocsapib.ejs -O '{\"portal\":\"rdmp\",\"branding\":\"default\",\"baseUrl\":\"https://demo.redboxresearchdata.com.au\"}' > apidocs.apib && aglio -i apidocs.apib -o rest-api.html && mv rest-api.html support/docs/generated/ng2/additional-documentation/", "compile:sails": "npm install && ./node_modules/.bin/tsc --project tsconfig.json", diff --git a/support/integration-testing/docker-compose.bruno.yml b/support/integration-testing/docker-compose.bruno.yml index 6b4f07a56d..ad8bc6bd39 100755 --- a/support/integration-testing/docker-compose.bruno.yml +++ b/support/integration-testing/docker-compose.bruno.yml @@ -14,7 +14,7 @@ services: main: aliases: - bruno - entrypoint: /bin/bash -c "cd /tests && bru run --env int-test --format junit --output /tests/results.xml --bail" + entrypoint: /bin/bash -c "cd /tests && npm install && bru run --env int-test --format junit --output /tests/results.xml --bail" redboxportal: image: qcifengineering/redbox-portal:develop ports: diff --git a/support/integration-testing/keycloakdb/data/h2/keycloakdb.trace.db b/support/integration-testing/keycloakdb/data/h2/keycloakdb.trace.db index 49de9b43ba..1c3d348971 100644 --- a/support/integration-testing/keycloakdb/data/h2/keycloakdb.trace.db +++ b/support/integration-testing/keycloakdb/data/h2/keycloakdb.trace.db @@ -1204,3 +1204,34 @@ org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic c at io.quarkus.runtime.Application.stop(Application.java:203) at io.quarkus.runtime.Application.stop(Application.java:155) at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) +2024-05-22 07:21:43 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) + at org.h2.message.DbException.get(DbException.java:179) + at org.h2.message.DbException.get(DbException.java:155) + at org.h2.message.DbException.get(DbException.java:144) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) + at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) + at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) + at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) + at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) + at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) + at io.agroal.pool.DataSource.close(DataSource.java:79) + at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) + at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) + at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) + at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) + at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) + at io.quarkus.arc.Arc.shutdown(Arc.java:52) + at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) + at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) + at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) + at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) + at io.quarkus.runtime.Application.stop(Application.java:203) + at io.quarkus.runtime.Application.stop(Application.java:155) + at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) diff --git a/test/bruno/package-lock.json b/test/bruno/package-lock.json index 4e14447a96..1fe831118a 100644 --- a/test/bruno/package-lock.json +++ b/test/bruno/package-lock.json @@ -1,5 +1,5 @@ { - "name": "bruno", + "name": "tests", "lockfileVersion": 3, "requires": true, "packages": { From 6411939f547007151b989a19ed14af50abf3eee4 Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Wed, 22 May 2024 07:38:01 +0000 Subject: [PATCH 07/18] Tidied up writing of test report --- .circleci/config.yml | 1 - support/integration-testing/docker-compose.bruno.yml | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f1095ac5ea..4b3c14aa55 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -94,7 +94,6 @@ jobs: sudo mkdir -p .tmp/attachments/staging sudo chmod -R 777 . docker-compose -f docker-compose.bruno.yml up --abort-on-container-exit --exit-code-from redboxportal - cp ../../tests/bruno/results.xml .tmp/junit/bruno-results.xml docker-compose -f docker-compose.mocha.yml up --abort-on-container-exit --exit-code-from redboxportal - run: name: Upload Bruno and mocha code coverage diff --git a/support/integration-testing/docker-compose.bruno.yml b/support/integration-testing/docker-compose.bruno.yml index ad8bc6bd39..0b810acc73 100755 --- a/support/integration-testing/docker-compose.bruno.yml +++ b/support/integration-testing/docker-compose.bruno.yml @@ -6,6 +6,7 @@ services: image: ghcr.io/davidkarlsen/bruno-image:main volumes: - "../../test/bruno:/tests" + - "./.tmp/junit:/junit" working_dir: /tests depends_on: redboxportal: @@ -14,7 +15,7 @@ services: main: aliases: - bruno - entrypoint: /bin/bash -c "cd /tests && npm install && bru run --env int-test --format junit --output /tests/results.xml --bail" + entrypoint: /bin/bash -c "cd /tests && npm install && bru run --env int-test --format junit --output /junit/bruno-results.xml --bail" redboxportal: image: qcifengineering/redbox-portal:develop ports: From bed4c97551489a4562a77f32951e75801ac3fee1 Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Wed, 22 May 2024 23:29:05 +0000 Subject: [PATCH 08/18] Removed Solr test as it should really be done as part of the Mocha tests --- test/bruno/5 - Solr/Start indexing.bru | 37 -------------------------- 1 file changed, 37 deletions(-) delete mode 100644 test/bruno/5 - Solr/Start indexing.bru diff --git a/test/bruno/5 - Solr/Start indexing.bru b/test/bruno/5 - Solr/Start indexing.bru deleted file mode 100644 index 4ff7a67b1d..0000000000 --- a/test/bruno/5 - Solr/Start indexing.bru +++ /dev/null @@ -1,37 +0,0 @@ -meta { - name: Start indexing - type: http - seq: 1 -} - -post { - url: {{solrhost}}/solr/redbox/update/json?wt=json&add={{dmpOid}} - body: none - auth: none -} - -query { - wt: json - add: {{dmpOid}} -} - -script:pre-request { - - await new Promise((resolve) => setTimeout(() => resolve(), 30000)); - -} - -tests { - test("Solr HTTP status code is 200", function () { - expect(res.getStatus()).to.equal(200); - }); - - // test("Solr reports no error", function () { - // pm.expect(pm.response.stream.toString()).to.include('"status":0') - // }); - - // test("Solr reports Query Time", function () { - // pm.expect(pm.response.stream.toString()).to.include('"QTime":') - // }); - -} From c41a3ae17ea8bd5df708b823cabe73f68aa02821 Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Thu, 23 May 2024 00:14:14 +0000 Subject: [PATCH 09/18] Added npm install command required to get mocha inside node_modules. --- support/integration-testing/docker-compose.mocha.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/support/integration-testing/docker-compose.mocha.yml b/support/integration-testing/docker-compose.mocha.yml index a086cfeb65..d0d063e610 100755 --- a/support/integration-testing/docker-compose.mocha.yml +++ b/support/integration-testing/docker-compose.mocha.yml @@ -38,6 +38,7 @@ services: entrypoint: >- /bin/bash -c "cd /opt/redbox-portal && npm i nyc -g && + npm i && nyc --no-clean --report-dir coverage/mocha --reporter=lcov --exclude-after-remap=false From 86d2d1b569b548115e929622533181d28393fe01 Mon Sep 17 00:00:00 2001 From: andrewbrazzatti Date: Thu, 23 May 2024 11:48:14 +0930 Subject: [PATCH 10/18] Added missing tests from current develop branch postman --- .../Add attachment to Datarecord.bru | 14 +++- .../Create Datarecord for Attachments.bru | 2 +- .../Create RDMP For Deletion.bru | 2 +- .../Create Temporary Datapub.bru | 2 +- .../Create record type Existing Locations.bru | 48 ++++++++++++ .../Delete Record Again.bru | 2 +- .../1 - Record Management/Delete Record.bru | 2 +- .../Destroy Deleted Record.bru | 2 +- .../Export RDMP Records.bru | 2 +- .../Get Attachment for Datarecord.bru | 29 +++++++ .../Get RDMP-s Metadata - Updated Test.bru | 2 +- ... RDMP-s Record Audit with Date filters.bru | 2 +- .../Get RDMP-s Record Audit.bru | 2 +- .../Give role edit permissions to RDMP.bru | 35 +++++++++ .../Give role view permissions to RDMP.bru | 35 +++++++++ .../Give user edit permissions to RDMP.bru | 5 +- ...view permissions to Existing Locations.bru | 35 +++++++++ .../List Attachments for Datarecord.bru | 4 +- .../List Deleted RDMPs.bru | 2 +- .../1 - Record Management/List RDMPs.bru | 2 +- .../Remove role edit permissions to RDMP.bru | 35 +++++++++ .../Remove role view permissions to RDMP.bru | 35 +++++++++ .../Remove user edit permissions to RDMP.bru | 35 +++++++++ ...view permissions to Existing Locations.bru | 35 +++++++++ .../Restore Deleted Record.bru | 2 +- ...ransition Workflow of Data publication.bru | 2 +- ...date RDMP Metadata that does not exist.bru | 75 +++++++++++++++++++ ...her user from the user management page.bru | 0 .../Create data publication.bru | 3 +- .../Create data record via form.bru | 0 .../Create new researcher user.bru | 0 .../Dashboard List RDMP Records.bru | 0 .../Delete the created data record.bru | 5 +- .../Download attachment.bru | 3 +- .../Export RDMP Data.bru | 0 .../First Phase of attachment upload.bru | 0 ...nerate API key for new researcher user.bru | 0 .../Get App Config Form - System Messages.bru | 57 ++++++++++++++ .../Get App Config View - System Messages.bru | 46 ++++++++++++ .../Get Dashboard Type Consolidated.bru | 0 .../Get Dashboard Type Standard.bru | 0 .../Get Dashboard Type Workspace.bru | 0 .../Get DataPublication Workflow Steps.bru | 4 +- .../Get DataRecord Type info.bru | 4 +- .../Get all Record Types Info.bru | 4 +- .../Get edit form config for RDMP.bru | 0 ...cher user no longer has librarian role.bru | 0 .../Get list of users and roles.bru | 0 ...sers list and find new researcher user.bru | 0 .../Get view form config for RDMP.bru | 0 .../List Dashboard Types.bru | 0 .../Login via Internal authentication.bru | 0 .../Logout Admin User.bru | 4 +- .../Migrate data publication to reviewing.bru | 4 +- ...ve Librarian role from Researcher User.bru | 0 .../Report.bru | 4 +- .../Save App Config - System Messages.bru | 65 ++++++++++++++++ .../Save attachment on Data Record.bru | 0 .../Search Index.bru | 4 +- .../Second Phase of attachment upload.bru | 0 .../Try to create same researcher user.bru | 0 ...ate RDMP Metadata using AJAX form call.bru | 0 .../Update researcher user-s password.bru | 0 ...ew form config for RDMP - Unauthorised.bru | 0 .../Create data publication.bru | 0 .../Create data record via form.bru | 0 ...l authentication using researcher data.bru | 0 ...g researcheruser with invalid password.bru | 0 .../Logout Researcher User.bru | 0 .../Migrate data publication to reviewing.bru | 0 ...pdate data publication after in review.bru | 0 test/bruno/environments/development.bru | 5 ++ 72 files changed, 611 insertions(+), 49 deletions(-) create mode 100644 test/bruno/1 - REST API/1 - Record Management/Create record type Existing Locations.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Get Attachment for Datarecord.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Give role edit permissions to RDMP.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Give role view permissions to RDMP.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Give user view permissions to Existing Locations.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Remove role edit permissions to RDMP.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Remove role view permissions to RDMP.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Remove user edit permissions to RDMP.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Remove user view permissions to Existing Locations.bru create mode 100644 test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Add librarian role to researcher user from the user management page.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Create data publication.bru (99%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Create data record via form.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Create new researcher user.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Dashboard List RDMP Records.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Delete the created data record.bru (98%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Download attachment.bru (96%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Export RDMP Data.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/First Phase of attachment upload.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Generate API key for new researcher user.bru (100%) create mode 100644 test/bruno/2 - AJAX calls/1 - Admin User Tests/Get App Config Form - System Messages.bru create mode 100644 test/bruno/2 - AJAX calls/1 - Admin User Tests/Get App Config View - System Messages.bru rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get Dashboard Type Consolidated.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get Dashboard Type Standard.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get Dashboard Type Workspace.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get DataPublication Workflow Steps.bru (98%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get DataRecord Type info.bru (98%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get all Record Types Info.bru (98%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get edit form config for RDMP.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get list of users and roles - Check researcher user no longer has librarian role.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get list of users and roles.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get users list and find new researcher user.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Get view form config for RDMP.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/List Dashboard Types.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Login via Internal authentication.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Logout Admin User.bru (98%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Migrate data publication to reviewing.bru (99%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Remove Librarian role from Researcher User.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Report.bru (98%) create mode 100644 test/bruno/2 - AJAX calls/1 - Admin User Tests/Save App Config - System Messages.bru rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Save attachment on Data Record.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Search Index.bru (98%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Second Phase of attachment upload.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Try to create same researcher user.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Update RDMP Metadata using AJAX form call.bru (100%) rename test/bruno/2 - AJAX calls/{Admin User Tests => 1 - Admin User Tests}/Update researcher user-s password.bru (100%) rename test/bruno/2 - AJAX calls/{Guest User Tests => 2 - Guest User Tests}/Get view form config for RDMP - Unauthorised.bru (100%) rename test/bruno/2 - AJAX calls/{Researcher User Tests => 3 - Researcher User Tests}/Create data publication.bru (100%) rename test/bruno/2 - AJAX calls/{Researcher User Tests => 3 - Researcher User Tests}/Create data record via form.bru (100%) rename test/bruno/2 - AJAX calls/{Researcher User Tests => 3 - Researcher User Tests}/Login via Internal authentication using researcher data.bru (100%) rename test/bruno/2 - AJAX calls/{Researcher User Tests => 3 - Researcher User Tests}/Login via Internal authentication using researcheruser with invalid password.bru (100%) rename test/bruno/2 - AJAX calls/{Researcher User Tests => 3 - Researcher User Tests}/Logout Researcher User.bru (100%) rename test/bruno/2 - AJAX calls/{Researcher User Tests => 3 - Researcher User Tests}/Migrate data publication to reviewing.bru (100%) rename test/bruno/2 - AJAX calls/{Researcher User Tests => 3 - Researcher User Tests}/Update data publication after in review.bru (100%) create mode 100644 test/bruno/environments/development.bru diff --git a/test/bruno/1 - REST API/1 - Record Management/Add attachment to Datarecord.bru b/test/bruno/1 - REST API/1 - Record Management/Add attachment to Datarecord.bru index 7620e53a32..41bda5cea4 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Add attachment to Datarecord.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Add attachment to Datarecord.bru @@ -1,7 +1,7 @@ meta { name: Add attachment to Datarecord type: http - seq: 18 + seq: 27 } post { @@ -16,10 +16,20 @@ headers { } body:multipart-form { - attachmentFields: undefined + attachmentFields: @file(attachment.png) ~dataLocations: } +assert { + res.body.message.fileIds.length: eq 1 +} + +script:post-response { + let jsonData = res.getBody(); + console.log(jsonData) + bru.setVar("attDataRecordStreamId", jsonData.message.fileIds[0].fileId) +} + tests { test("Status code is 200", function () { diff --git a/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru b/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru index 7edbc0deb5..dc0b43449f 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru @@ -1,7 +1,7 @@ meta { name: Create Datarecord for Attachments type: http - seq: 17 + seq: 26 } post { diff --git a/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru b/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru index 60eb216825..d52db1f2b0 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru @@ -1,7 +1,7 @@ meta { name: Create RDMP For Deletion type: http - seq: 11 + seq: 20 } post { diff --git a/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru b/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru index 8d9cc075d2..2f2f15ad36 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create Temporary Datapub.bru @@ -1,7 +1,7 @@ meta { name: Create Temporary Datapub type: http - seq: 20 + seq: 30 } post { diff --git a/test/bruno/1 - REST API/1 - Record Management/Create record type Existing Locations.bru b/test/bruno/1 - REST API/1 - Record Management/Create record type Existing Locations.bru new file mode 100644 index 0000000000..01516adc01 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Create record type Existing Locations.bru @@ -0,0 +1,48 @@ +meta { + name: Create record type Existing Locations + type: http + seq: 15 +} + +post { + url: {{host}}/default/rdmp/api/records/metadata/existing-locations + body: json + auth: none +} + +headers { + Authorization: Bearer {{token}} +} + +body:json { + { + "authorization": { + "edit": ["admin", "userExistingLocationsTest1"], + "view": ["admin", "userExistingLocationsTest1"], + "editPending": [], + "viewPending":["userExistingLocationsTest2"] + }, + "metadata": {"rdmpOid":"{{dmpOid}}"} + + } +} + +tests { + test("Status code is 201", function () { + + expect(res.getStatus()).to.equal(201); + + }); + + + + test("Test oid exists", function () { + + var jsonData = res.getBody(); + + expect(jsonData).to.have.property('workspaceOid'); + + bru.setVar("existingLocationsOid", jsonData.workspaceOid); + + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Delete Record Again.bru b/test/bruno/1 - REST API/1 - Record Management/Delete Record Again.bru index c9375be665..9da2887caf 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Delete Record Again.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Delete Record Again.bru @@ -1,7 +1,7 @@ meta { name: Delete Record Again type: http - seq: 15 + seq: 24 } delete { diff --git a/test/bruno/1 - REST API/1 - Record Management/Delete Record.bru b/test/bruno/1 - REST API/1 - Record Management/Delete Record.bru index 80b4f46880..f76cd19709 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Delete Record.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Delete Record.bru @@ -1,7 +1,7 @@ meta { name: Delete Record type: http - seq: 12 + seq: 21 } delete { diff --git a/test/bruno/1 - REST API/1 - Record Management/Destroy Deleted Record.bru b/test/bruno/1 - REST API/1 - Record Management/Destroy Deleted Record.bru index 7907cc909c..039f617dee 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Destroy Deleted Record.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Destroy Deleted Record.bru @@ -1,7 +1,7 @@ meta { name: Destroy Deleted Record type: http - seq: 16 + seq: 25 } delete { diff --git a/test/bruno/1 - REST API/1 - Record Management/Export RDMP Records.bru b/test/bruno/1 - REST API/1 - Record Management/Export RDMP Records.bru index 348e0dc247..2acc689942 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Export RDMP Records.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Export RDMP Records.bru @@ -1,7 +1,7 @@ meta { name: Export RDMP Records type: http - seq: 6 + seq: 7 } get { diff --git a/test/bruno/1 - REST API/1 - Record Management/Get Attachment for Datarecord.bru b/test/bruno/1 - REST API/1 - Record Management/Get Attachment for Datarecord.bru new file mode 100644 index 0000000000..36192fd53d --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Get Attachment for Datarecord.bru @@ -0,0 +1,29 @@ +meta { + name: Get Attachment for Datarecord + type: http + seq: 29 +} + +get { + url: {{host}}/default/rdmp/api/records/datastreams/{{attDataRecordOid}}/{{attDataRecordStreamId}} + body: none + auth: none +} + +headers { + Authorization: Bearer {{token}} +} + +tests { + const _ = require('lodash') + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Body has attachment content", function () { + let obj = res.getBody(); + // TODO: It's actually not 28398 bytes but I think bruno garbles it in res.getBody + expect(_.size(res.getBody())).to.eql(28398); + expect(res.headers['content-type']).to.eql('image/png'); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru index 62724af918..a5b0cef6be 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru @@ -1,7 +1,7 @@ meta { name: Get RDMP-s Metadata - Updated Test type: http - seq: 7 + seq: 8 } get { diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit with Date filters.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit with Date filters.bru index faa5a817c0..6ae3f6ce5f 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit with Date filters.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit with Date filters.bru @@ -1,7 +1,7 @@ meta { name: Get RDMP-s Record Audit with Date filters type: http - seq: 9 + seq: 10 } get { diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit.bru index 32a0b89d1b..5f63909f53 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Record Audit.bru @@ -1,7 +1,7 @@ meta { name: Get RDMP-s Record Audit type: http - seq: 8 + seq: 9 } get { diff --git a/test/bruno/1 - REST API/1 - Record Management/Give role edit permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Give role edit permissions to RDMP.bru new file mode 100644 index 0000000000..f158b45735 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Give role edit permissions to RDMP.bru @@ -0,0 +1,35 @@ +meta { + name: Give role edit permissions to RDMP + type: http + seq: 13 +} + +post { + url: {{host}}/default/rdmp/api/records/permissions/editRole/{{dmpOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "roles": ["Chief Investigator"] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Role edit permission added", function () { + var jsonData = res.getBody(); + //TODO: This is because of the save trigger + expect(true).to.eql(true); + expect(jsonData.editRoles).to.include("Chief Investigator"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Give role view permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Give role view permissions to RDMP.bru new file mode 100644 index 0000000000..e54fcbd4f9 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Give role view permissions to RDMP.bru @@ -0,0 +1,35 @@ +meta { + name: Give role view permissions to RDMP + type: http + seq: 11 +} + +post { + url: {{host}}/default/rdmp/api/records/permissions/viewRole/{{dmpOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "roles": ["Chief Investigator"] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Role view permission added", function () { + var jsonData = res.getBody(); + //TODO: This is because of the save trigger + expect(true).to.eql(true); + expect(jsonData.viewRoles).to.include("Chief Investigator"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Give user edit permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Give user edit permissions to RDMP.bru index 7d5714b644..bd15025c3e 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Give user edit permissions to RDMP.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Give user edit permissions to RDMP.bru @@ -1,11 +1,11 @@ meta { name: Give user edit permissions to RDMP type: http - seq: 10 + seq: 18 } post { - url: {{host}}/default/rdmp/api/records/permissions/edit/{{dmpOid}} + url: {{host}}/default/rdmp/api/records/permissions/edit/{{existingLocationsOid}} body: json auth: none } @@ -30,5 +30,6 @@ tests { var jsonData = res.getBody(); //TODO: This is because of the save trigger expect(true).to.eql(true); + expect(jsonData.edit).to.include("user"); }); } diff --git a/test/bruno/1 - REST API/1 - Record Management/Give user view permissions to Existing Locations.bru b/test/bruno/1 - REST API/1 - Record Management/Give user view permissions to Existing Locations.bru new file mode 100644 index 0000000000..bf0f97f9f3 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Give user view permissions to Existing Locations.bru @@ -0,0 +1,35 @@ +meta { + name: Give user view permissions to Existing Locations + type: http + seq: 16 +} + +post { + url: {{host}}/default/rdmp/api/records/permissions/view/{{existingLocationsOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "users": ["user"] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("User view permission added", function () { + var jsonData = res.getBody(); + //TODO: This is because of the save trigger + expect(true).to.eql(true); + expect(jsonData.view).to.include("user"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru b/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru index 85543dad07..966d8ef7d0 100644 --- a/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru +++ b/test/bruno/1 - REST API/1 - Record Management/List Attachments for Datarecord.bru @@ -1,7 +1,7 @@ meta { name: List Attachments for Datarecord type: http - seq: 20 + seq: 28 } get { @@ -23,6 +23,6 @@ tests { test("Has attachments", function () { var jsonData = res.getBody(); - expect(_.size(jsonData)).to.gt(0); + expect(_.size(jsonData.records)).to.gt(0); }); } diff --git a/test/bruno/1 - REST API/1 - Record Management/List Deleted RDMPs.bru b/test/bruno/1 - REST API/1 - Record Management/List Deleted RDMPs.bru index 9c79d72d90..2529e0c102 100644 --- a/test/bruno/1 - REST API/1 - Record Management/List Deleted RDMPs.bru +++ b/test/bruno/1 - REST API/1 - Record Management/List Deleted RDMPs.bru @@ -1,7 +1,7 @@ meta { name: List Deleted RDMPs type: http - seq: 13 + seq: 22 } get { diff --git a/test/bruno/1 - REST API/1 - Record Management/List RDMPs.bru b/test/bruno/1 - REST API/1 - Record Management/List RDMPs.bru index 227ac25ad3..91d0ff2dab 100644 --- a/test/bruno/1 - REST API/1 - Record Management/List RDMPs.bru +++ b/test/bruno/1 - REST API/1 - Record Management/List RDMPs.bru @@ -1,7 +1,7 @@ meta { name: List RDMPs type: http - seq: 5 + seq: 6 } get { diff --git a/test/bruno/1 - REST API/1 - Record Management/Remove role edit permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Remove role edit permissions to RDMP.bru new file mode 100644 index 0000000000..1b93de78b4 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Remove role edit permissions to RDMP.bru @@ -0,0 +1,35 @@ +meta { + name: Remove role edit permissions to RDMP + type: http + seq: 14 +} + +delete { + url: {{host}}/default/rdmp/api/records/permissions/editRole/{{dmpOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "roles": ["Chief Investigator"] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Role edit permission removed", function () { + var jsonData = res.getBody(); + //TODO: This is because of the save trigger + pm.expect(true).to.eql(true); + pm.expect(jsonData.editRoles).to.not.include("Chief Investigator"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Remove role view permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Remove role view permissions to RDMP.bru new file mode 100644 index 0000000000..d074a91a99 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Remove role view permissions to RDMP.bru @@ -0,0 +1,35 @@ +meta { + name: Remove role view permissions to RDMP + type: http + seq: 12 +} + +delete { + url: {{host}}/default/rdmp/api/records/permissions/viewRole/{{dmpOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "roles": ["Chief Investigator"] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("Role view permission removed", function () { + var jsonData = pm.response.json(); + //TODO: This is because of the save trigger + pm.expect(true).to.eql(true); + pm.expect(jsonData.viewRoles).to.not.include("Chief Investigator"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Remove user edit permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Remove user edit permissions to RDMP.bru new file mode 100644 index 0000000000..fda0dc6b73 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Remove user edit permissions to RDMP.bru @@ -0,0 +1,35 @@ +meta { + name: Remove user edit permissions to RDMP + type: http + seq: 19 +} + +delete { + url: {{host}}/default/rdmp/api/records/permissions/edit/{{existingLocationsOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "users": ["user"] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("User edit permission removed", function () { + var jsonData = res.getBody(); + //TODO: This is because of the save trigger + expect(true).to.eql(true); + expect(jsonData.edit).to.not.include("user"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Remove user view permissions to Existing Locations.bru b/test/bruno/1 - REST API/1 - Record Management/Remove user view permissions to Existing Locations.bru new file mode 100644 index 0000000000..13704b57c2 --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Remove user view permissions to Existing Locations.bru @@ -0,0 +1,35 @@ +meta { + name: Remove user view permissions to Existing Locations + type: http + seq: 17 +} + +delete { + url: {{host}}/default/rdmp/api/records/permissions/view/{{existingLocationsOid}} + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "users": ["user"] + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + test("User view permission removed", function () { + var jsonData = res.getBody(); + //TODO: This is because of the save trigger + expect(true).to.eql(true); + expect(jsonData.view).to.not.include("user"); + }); +} diff --git a/test/bruno/1 - REST API/1 - Record Management/Restore Deleted Record.bru b/test/bruno/1 - REST API/1 - Record Management/Restore Deleted Record.bru index a3b9df6d6a..88c119b6d2 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Restore Deleted Record.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Restore Deleted Record.bru @@ -1,7 +1,7 @@ meta { name: Restore Deleted Record type: http - seq: 14 + seq: 23 } put { diff --git a/test/bruno/1 - REST API/1 - Record Management/Transition Workflow of Data publication.bru b/test/bruno/1 - REST API/1 - Record Management/Transition Workflow of Data publication.bru index 0bcf4025f5..3b1d643889 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Transition Workflow of Data publication.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Transition Workflow of Data publication.bru @@ -1,7 +1,7 @@ meta { name: Transition Workflow of Data publication type: http - seq: 21 + seq: 31 } post { diff --git a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru new file mode 100644 index 0000000000..5ed4b71fef --- /dev/null +++ b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru @@ -0,0 +1,75 @@ +meta { + name: Update RDMP Metadata that does not exist + type: http + seq: 5 +} + +put { + url: {{host}}/default/rdmp/api/records/metadata/blah-blah-blah + body: json + auth: none +} + +headers { + Content-Type: application/json + Authorization: Bearer {{token}} +} + +body:json { + { + "title": "Andrew's Postman test - Updated", + "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", + "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", + "finalKeywords": [ + "270199", + "Golgi apparatus", + "endocytosis", + "membrane transport", + "protein trafficking", + "secretion", + "HIV-AIDS", + "bacterial pathogen", + "hormone secretion", + "immune development", + "lysosomal storage disorder" + ], + "contributor_ci": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributor_data_manager": { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + }, + "contributors": [ + { + "text_full_name": "Prof Paul Gleeson", + "email": "notAReal@email.edu.au", + "orcid": "http://orcid.org/0000-0000-0000-000" + } + ], + "vivo:Dataset_redbox:DataCollectionMethodology": "The data collection methodology", + "vivo:Dataset_dc_format": "xls", + "vivo:Dataset_dc:location_rdf:PlainLiteral": "eResearch Store network drive", + "vivo:Dataset_dc:source_dc:location_rdf:PlainLiteral": "shared university network drive (e.g. G, H, etc)", + "vivo:Dataset_dc:extent": "100GB - 2TB", + "redbox:retentionPeriod_dc:date": "1year", + "dc:rightsHolder_dc:name": "myUni", + "dc:accessRights": "permission from the data manager", + "authorization": [] + } +} + +tests { + test("Status code is 400", function () { + expect(res.getStatus()).to.equal(400); + }); + + test("Body has json with error", function () { + var jsonData = res.getBody(); + expect(jsonData).to.have.property('message'); + expect(jsonData.message).to.eql("Failed to update meta, cannot find existing record with oid: blah-blah-blah"); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Add librarian role to researcher user from the user management page.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Add librarian role to researcher user from the user management page.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Add librarian role to researcher user from the user management page.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data publication.bru similarity index 99% rename from test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data publication.bru index be87aece70..0d2b5a49c5 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Create data publication.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data publication.bru @@ -1,7 +1,7 @@ meta { name: Create data publication type: http - seq: 29 + seq: 28 } post { @@ -22,7 +22,6 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/record/dataPublication/edit - Connection: keep-alive } diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Create data record via form.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create new researcher user.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Create new researcher user.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Create new researcher user.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Dashboard List RDMP Records.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Dashboard List RDMP Records.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Dashboard List RDMP Records.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Delete the created data record.bru similarity index 98% rename from test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Delete the created data record.bru index 13d26f8a0c..a84341c3c2 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Delete the created data record.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Delete the created data record.bru @@ -1,7 +1,7 @@ meta { name: Delete the created data record type: http - seq: 33 + seq: 32 } delete { @@ -20,7 +20,6 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/edit/ee3a12b7a95dd42619ebe16ecd2461f9 - X-Source: jsclient Cache-Control: no-cache } @@ -32,5 +31,3 @@ script:pre-request { req.setHeader("Cookie", cookie) } } - - diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Download attachment.bru similarity index 96% rename from test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Download attachment.bru index 786b00fc3b..42a129fd8b 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Download attachment.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Download attachment.bru @@ -1,7 +1,7 @@ meta { name: Download attachment type: http - seq: 25 + seq: 24 } get { @@ -10,7 +10,6 @@ get { auth: none } - script:pre-request { const cookie = bru.getVar("cookie"); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Export RDMP Data.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Export RDMP Data.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Export RDMP Data.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/First Phase of attachment upload.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/First Phase of attachment upload.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/First Phase of attachment upload.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Generate API key for new researcher user.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Generate API key for new researcher user.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Generate API key for new researcher user.bru diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get App Config Form - System Messages.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get App Config Form - System Messages.bru new file mode 100644 index 0000000000..1dcfe55ff2 --- /dev/null +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get App Config Form - System Messages.bru @@ -0,0 +1,57 @@ +meta { + name: Get App Config Form - System Messages + type: http + seq: 33 +} + +get { + url: {{host}}/default/rdmp/appconfig/form/systemMessage + body: none + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/record/search?q=Record + X-Source: jsclient + Cache-Control: no-cache +} + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + + test("Response contains model attribute", function () { + var jsonData = res.getBody(); + expect(jsonData.model).is.not.null; + }); + + test("Response contains schema attribute", function () { + var jsonData = res.getBody(); + expect(jsonData.schema).is.not.null; + }); + + test("Response contains fieldOrder attribute", function () { + var jsonData = res.getBody(); + expect(jsonData.fieldOrder).is.not.null; + }); + + +} diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get App Config View - System Messages.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get App Config View - System Messages.bru new file mode 100644 index 0000000000..07cda99d24 --- /dev/null +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get App Config View - System Messages.bru @@ -0,0 +1,46 @@ +meta { + name: Get App Config View - System Messages + type: http + seq: 35 +} + +get { + url: {{host}}/default/rdmp/admin/appconfig/edit/systemMessage + body: none + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/record/search?q=Record + Cookie: {{cookie}} + X-Source: jsclient + Cache-Control: no-cache +} + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + + test("HTML returned correctly sets the configKey in the app-config tag", function () { + var responseBody = res.getBody(); + expect(responseBody).to.include(''); + }); +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get Dashboard Type Consolidated.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Consolidated.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get Dashboard Type Consolidated.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get Dashboard Type Standard.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Standard.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get Dashboard Type Standard.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get Dashboard Type Workspace.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get Dashboard Type Workspace.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get Dashboard Type Workspace.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get DataPublication Workflow Steps.bru similarity index 98% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get DataPublication Workflow Steps.bru index 35a97f7ddb..7605dbc435 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataPublication Workflow Steps.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get DataPublication Workflow Steps.bru @@ -1,7 +1,7 @@ meta { name: Get DataPublication Workflow Steps type: http - seq: 28 + seq: 27 } get { @@ -20,12 +20,10 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - X-Source: jsclient Cache-Control: no-cache } - script:pre-request { const cookie = bru.getVar("cookie"); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get DataRecord Type info.bru similarity index 98% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get DataRecord Type info.bru index b1ff82bb35..2bddfbb9f4 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get DataRecord Type info.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get DataRecord Type info.bru @@ -1,7 +1,7 @@ meta { name: Get DataRecord Type info type: http - seq: 27 + seq: 26 } get { @@ -20,12 +20,10 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - X-Source: jsclient Cache-Control: no-cache } - script:pre-request { const cookie = bru.getVar("cookie"); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get all Record Types Info.bru similarity index 98% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get all Record Types Info.bru index 0160a94dd5..5abc3adfda 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Get all Record Types Info.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get all Record Types Info.bru @@ -1,7 +1,7 @@ meta { name: Get all Record Types Info type: http - seq: 26 + seq: 25 } get { @@ -20,12 +20,10 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - X-Source: jsclient Cache-Control: no-cache } - script:pre-request { const cookie = bru.getVar("cookie"); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get edit form config for RDMP.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get edit form config for RDMP.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get edit form config for RDMP.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get list of users and roles - Check researcher user no longer has librarian role.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get list of users and roles.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get list of users and roles.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get list of users and roles.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get users list and find new researcher user.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get users list and find new researcher user.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get users list and find new researcher user.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Get view form config for RDMP.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Get view form config for RDMP.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Get view form config for RDMP.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/List Dashboard Types.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/List Dashboard Types.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/List Dashboard Types.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Login via Internal authentication.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Login via Internal authentication.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Login via Internal authentication.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Logout Admin User.bru similarity index 98% rename from test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Logout Admin User.bru index a21ae06601..1d4f336d95 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Logout Admin User.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Logout Admin User.bru @@ -1,7 +1,7 @@ meta { name: Logout Admin User type: http - seq: 34 + seq: 36 } get { @@ -20,10 +20,8 @@ headers { Referer: {{host}}/default/rdmp/researcher/home Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 - } - script:pre-request { const cookie = bru.getVar("cookie"); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Migrate data publication to reviewing.bru similarity index 99% rename from test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Migrate data publication to reviewing.bru index c38eef2a1e..b43e205a44 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Migrate data publication to reviewing.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Migrate data publication to reviewing.bru @@ -1,7 +1,7 @@ meta { name: Migrate data publication to reviewing type: http - seq: 30 + seq: 29 } put { @@ -25,7 +25,6 @@ headers { Accept: application/json, text/plain, */* Cache-Control: no-cache Referer: {{host}}/default/rdmp/record/edit/49a33460c794498a56fa29ed08567cc4 - Connection: keep-alive } @@ -219,7 +218,6 @@ body:json { } } - script:pre-request { const cookie = bru.getVar("cookie"); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Remove Librarian role from Researcher User.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Remove Librarian role from Researcher User.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Remove Librarian role from Researcher User.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Report.bru similarity index 98% rename from test/bruno/2 - AJAX calls/Admin User Tests/Report.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Report.bru index 7c62849baa..02e2a988b9 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Report.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Report.bru @@ -1,7 +1,7 @@ meta { name: Report type: http - seq: 32 + seq: 31 } get { @@ -24,12 +24,10 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - X-Source: jsclient Cache-Control: no-cache } - script:pre-request { const cookie = bru.getVar("cookie"); diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save App Config - System Messages.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save App Config - System Messages.bru new file mode 100644 index 0000000000..33ecbe3e15 --- /dev/null +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save App Config - System Messages.bru @@ -0,0 +1,65 @@ +meta { + name: Save App Config - System Messages + type: http + seq: 34 +} + +post { + url: {{host}}/default/rdmp/appconfig/form/systemMessage + body: json + auth: none +} + +headers { + Pragma: no-cache + Accept-Encoding: gzip, deflate, br + X-CSRF-Token: + Accept-Language: en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 + Content-Type: application/json;charset=utf-8 + Accept: application/json, text/plain, */* + Connection: keep-alive + Referer: {{host}}/default/rdmp/record/search?q=Record + X-Source: jsclient + Cache-Control: no-cache +} + +body:json { + { + "enabled": true, + "title": "The new title", + "message": "The new message" + } +} + +script:pre-request { + const cookie = bru.getVar("cookie"); + + if(cookie) { + req.setHeader("Cookie", cookie) + } +} + +tests { + test("Status code is 200", function () { + expect(res.getStatus()).to.equal(200); + }); + + + test("Enabled value in response is true", function () { + var jsonData = res.getBody(); + expect(jsonData.enabled).is.true; + }); + + test("title value in response is The new title", function () { + var jsonData = res.getBody(); + expect(jsonData.title).to.eq("The new title"); + }); + + test("message value in response is The new message", function () { + var jsonData = res.getBody(); + expect(jsonData.message).to.eq("The new message"); + }); + + +} diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Save attachment on Data Record.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Search Index.bru similarity index 98% rename from test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Search Index.bru index dec0047429..876d55ea5b 100644 --- a/test/bruno/2 - AJAX calls/Admin User Tests/Search Index.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Search Index.bru @@ -1,7 +1,7 @@ meta { name: Search Index type: http - seq: 31 + seq: 30 } get { @@ -25,12 +25,10 @@ headers { Accept: application/json, text/plain, */* Connection: keep-alive Referer: {{host}}/default/rdmp/record/search?q=Record - X-Source: jsclient Cache-Control: no-cache } - script:pre-request { const cookie = bru.getVar("cookie"); diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Second Phase of attachment upload.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Second Phase of attachment upload.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Second Phase of attachment upload.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Try to create same researcher user.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Try to create same researcher user.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Try to create same researcher user.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Update RDMP Metadata using AJAX form call.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru diff --git a/test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update researcher user-s password.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Admin User Tests/Update researcher user-s password.bru rename to test/bruno/2 - AJAX calls/1 - Admin User Tests/Update researcher user-s password.bru diff --git a/test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru b/test/bruno/2 - AJAX calls/2 - Guest User Tests/Get view form config for RDMP - Unauthorised.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Guest User Tests/Get view form config for RDMP - Unauthorised.bru rename to test/bruno/2 - AJAX calls/2 - Guest User Tests/Get view form config for RDMP - Unauthorised.bru diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data publication.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Researcher User Tests/Create data publication.bru rename to test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data publication.bru diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Researcher User Tests/Create data record via form.bru rename to test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Login via Internal authentication using researcher data.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcher data.bru rename to test/bruno/2 - AJAX calls/3 - Researcher User Tests/Login via Internal authentication using researcher data.bru diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru rename to test/bruno/2 - AJAX calls/3 - Researcher User Tests/Login via Internal authentication using researcheruser with invalid password.bru diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Logout Researcher User.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Researcher User Tests/Logout Researcher User.bru rename to test/bruno/2 - AJAX calls/3 - Researcher User Tests/Logout Researcher User.bru diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Migrate data publication to reviewing.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Researcher User Tests/Migrate data publication to reviewing.bru rename to test/bruno/2 - AJAX calls/3 - Researcher User Tests/Migrate data publication to reviewing.bru diff --git a/test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Update data publication after in review.bru similarity index 100% rename from test/bruno/2 - AJAX calls/Researcher User Tests/Update data publication after in review.bru rename to test/bruno/2 - AJAX calls/3 - Researcher User Tests/Update data publication after in review.bru diff --git a/test/bruno/environments/development.bru b/test/bruno/environments/development.bru new file mode 100644 index 0000000000..948133deb7 --- /dev/null +++ b/test/bruno/environments/development.bru @@ -0,0 +1,5 @@ +vars { + host: http://localhost:1500 + token: d077835a-696b-4728-85cf-3ffd57152b1e +} + From 98a2e15479f3fdccb8ef55b52021ba89cbac0b0f Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Thu, 23 May 2024 02:39:17 +0000 Subject: [PATCH 11/18] Ported final tests from postman to bruno --- .../docker-compose.bruno.yml | 2 +- .../docker-compose.newman.yml | 81 ------------------- .../Remove role edit permissions to RDMP.bru | 4 +- .../Remove role view permissions to RDMP.bru | 6 +- 4 files changed, 6 insertions(+), 87 deletions(-) delete mode 100755 support/integration-testing/docker-compose.newman.yml diff --git a/support/integration-testing/docker-compose.bruno.yml b/support/integration-testing/docker-compose.bruno.yml index 0b810acc73..8b893cc0da 100755 --- a/support/integration-testing/docker-compose.bruno.yml +++ b/support/integration-testing/docker-compose.bruno.yml @@ -51,7 +51,7 @@ services: # add 'node --inspect=0.0.0.0:9876' to entrypoint for debugging entrypoint: /bin/bash -c "cd /opt/redbox-portal && node app.js" mongodb: - image: mvertes/alpine-mongo:latest + image: mongo:latest networks: main: aliases: diff --git a/support/integration-testing/docker-compose.newman.yml b/support/integration-testing/docker-compose.newman.yml deleted file mode 100755 index c12ac03d0f..0000000000 --- a/support/integration-testing/docker-compose.newman.yml +++ /dev/null @@ -1,81 +0,0 @@ -version: '3.1' -networks: - main: -services: - redboxportal: - image: qcifengineering/redbox-portal:develop - ports: - - "1500:1500" - # Debugging port - # - "9876:9876" - volumes: - - "../../:/opt/redbox-portal" - - "./.tmp/attachments:/attachments" - depends_on: - keycloak: - condition: service_healthy - expose: - - "1500" - environment: - - NODE_ENV=integrationtest - - PORT=1500 - - sails_redbox__apiKey=c8e844fc-8550-497f-b970-7900ec8741ca - - sails_record__baseUrl_redbox=http://redbox:9000/redbox - - sails_record__baseUrl_mint=http://203.101.226.160/mint - # - sails_log__level=verbose - - sails_auth__default__local__default__token=d077835a-696b-4728-85cf-3ffd57152b1e - - sails_security__csrf=false - networks: - main: - aliases: - - rbportal - # add 'node --inspect=0.0.0.0:9876' to entrypoint for debugging - entrypoint: >- - /bin/bash -c "cd /opt/redbox-portal && - npm i nyc -g && - npm i newman --legacy-peer-deps && - nyc --no-clean - --report-dir coverage/newman --reporter=lcov - --exclude-after-remap=false - node test/postman/runNewmanTests.js" - mongodb: - image: mvertes/alpine-mongo:latest - networks: - main: - aliases: - - mongodb - ports: - - "27017:27017" - solr: - image: solr:latest - expose: - - "8983" - ports: - - "8983:8983" - networks: - main: - aliases: - - solr - entrypoint: - - docker-entrypoint.sh - - solr-precreate - - redbox - keycloak: - image: quay.io/keycloak/keycloak:17.0.1 - expose: - - "8080" - ports: - - "8080:8080" - healthcheck: - test: ["CMD-SHELL", "curl http://localhost:8080"] - interval: 5s - timeout: 5s - retries: 10 - volumes: - - "./keycloakdb/data:/opt/keycloak/data" - networks: - main: - aliases: - - keycloak - command: - - start-dev diff --git a/test/bruno/1 - REST API/1 - Record Management/Remove role edit permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Remove role edit permissions to RDMP.bru index 1b93de78b4..91a50c9b9a 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Remove role edit permissions to RDMP.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Remove role edit permissions to RDMP.bru @@ -29,7 +29,7 @@ tests { test("Role edit permission removed", function () { var jsonData = res.getBody(); //TODO: This is because of the save trigger - pm.expect(true).to.eql(true); - pm.expect(jsonData.editRoles).to.not.include("Chief Investigator"); + expect(true).to.eql(true); + expect(jsonData.editRoles).to.not.include("Chief Investigator"); }); } diff --git a/test/bruno/1 - REST API/1 - Record Management/Remove role view permissions to RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Remove role view permissions to RDMP.bru index d074a91a99..cf4f870247 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Remove role view permissions to RDMP.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Remove role view permissions to RDMP.bru @@ -27,9 +27,9 @@ tests { }); test("Role view permission removed", function () { - var jsonData = pm.response.json(); + var jsonData = res.getBody(); //TODO: This is because of the save trigger - pm.expect(true).to.eql(true); - pm.expect(jsonData.viewRoles).to.not.include("Chief Investigator"); + expect(true).to.eql(true); + expect(jsonData.viewRoles).to.not.include("Chief Investigator"); }); } From 94dbc7cd7c3b23e79a56af1e6f27bd3440479d61 Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Thu, 23 May 2024 02:45:51 +0000 Subject: [PATCH 12/18] Updated mocha tests to use latest mongo image --- .circleci/config.yml | 2 ++ support/integration-testing/docker-compose.mocha.yml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4b3c14aa55..2ff224b5f8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -94,7 +94,9 @@ jobs: sudo mkdir -p .tmp/attachments/staging sudo chmod -R 777 . docker-compose -f docker-compose.bruno.yml up --abort-on-container-exit --exit-code-from redboxportal + docker-compose -f docker-compose.bruno.yml down docker-compose -f docker-compose.mocha.yml up --abort-on-container-exit --exit-code-from redboxportal + docker-compose -f docker-compose.mocha.yml down - run: name: Upload Bruno and mocha code coverage command: | diff --git a/support/integration-testing/docker-compose.mocha.yml b/support/integration-testing/docker-compose.mocha.yml index d0d063e610..d9290e737f 100755 --- a/support/integration-testing/docker-compose.mocha.yml +++ b/support/integration-testing/docker-compose.mocha.yml @@ -44,7 +44,7 @@ services: --exclude-after-remap=false node ./node_modules/mocha/bin/mocha --exit test/bootstrap.test.js test/unit/**/*.test.js" mongodb: - image: mvertes/alpine-mongo:latest + image: mongo:latests networks: main: aliases: From 1415893760acb897eeb176640569bff1d181ab92 Mon Sep 17 00:00:00 2001 From: Andrew Brazzatti Date: Thu, 23 May 2024 02:49:55 +0000 Subject: [PATCH 13/18] Fixed mongodb docker label --- support/integration-testing/docker-compose.mocha.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/integration-testing/docker-compose.mocha.yml b/support/integration-testing/docker-compose.mocha.yml index d9290e737f..e99c0795a5 100755 --- a/support/integration-testing/docker-compose.mocha.yml +++ b/support/integration-testing/docker-compose.mocha.yml @@ -44,7 +44,7 @@ services: --exclude-after-remap=false node ./node_modules/mocha/bin/mocha --exit test/bootstrap.test.js test/unit/**/*.test.js" mongodb: - image: mongo:latests + image: mongo:latest networks: main: aliases: From cd619cdf66642a1edaf5ed1569acfe98446490d9 Mon Sep 17 00:00:00 2001 From: Mark Cottman-Fields Date: Mon, 27 May 2024 15:21:22 +1000 Subject: [PATCH 14/18] run bruno and remove postman Signed-off-by: Mark Cottman-Fields --- .circleci/config.yml | 8 +- package-lock.json | 2644 +++--- package.json | 6 +- support/development/prepareLocalDev.sh | 2 +- .../docker-compose.bruno.yml | 23 +- .../docker-compose.mocha.yml | 11 +- .../Create Datarecord for Attachments.bru | 4 +- .../Create RDMP For Deletion.bru | 2 +- .../1 - Record Management/Create RDMP.bru | 2 +- .../Get RDMP-s Metadata - Updated Test.bru | 2 +- .../Get RDMP-s Metadata.bru | 2 +- ...date RDMP Metadata that does not exist.bru | 2 +- .../Update RDMP Metadata.bru | 2 +- .../Create data record via form.bru | 4 +- .../Save attachment on Data Record.bru | 4 +- ...ate RDMP Metadata using AJAX form call.bru | 2 +- .../Create data record via form.bru | 4 +- test/postman/attachment.png | Bin 30148 -> 0 bytes test/postman/local.environment.json | 59 - test/postman/runNewmanTests.js | 54 - test/postman/test-collection.json | 7594 ----------------- 21 files changed, 1708 insertions(+), 8723 deletions(-) delete mode 100644 test/postman/attachment.png delete mode 100644 test/postman/local.environment.json delete mode 100644 test/postman/runNewmanTests.js delete mode 100644 test/postman/test-collection.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 2ff224b5f8..b0b9c7a592 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -89,6 +89,8 @@ jobs: name: Run Bruno and Mocha tests with code coverage command: | sudo mkdir -p .tmp/junit + sudo mkdir -p .tmp/junit/backend-bruno + sudo mkdir -p .tmp/junit/backend-mocha sudo chmod -R 777 . cd support/integration-testing sudo mkdir -p .tmp/attachments/staging @@ -100,9 +102,9 @@ jobs: - run: name: Upload Bruno and mocha code coverage command: | - # /tmp/.codecov-cli/codecov --verbose upload-process --fail-on-error --disable-search \ - # --token "${CODECOV_TOKEN}" --name "job-${CIRCLE_BUILD_NUM}-${CIRCLE_BRANCH}" \ - # --flag "backend-newman" --file "./coverage/newman/lcov.info" + /tmp/.codecov-cli/codecov --verbose upload-process --fail-on-error --disable-search \ + --token "${CODECOV_TOKEN}" --name "job-${CIRCLE_BUILD_NUM}-${CIRCLE_BRANCH}" \ + --flag "backend-bruno" --file "./coverage/bruno/lcov.info" /tmp/.codecov-cli/codecov --verbose upload-process --fail-on-error --disable-search \ --token "${CODECOV_TOKEN}" --name "job-${CIRCLE_BUILD_NUM}-${CIRCLE_BRANCH}" \ --flag "backend-mocha" --file "./coverage/mocha/lcov.info" diff --git a/package-lock.json b/package-lock.json index 2fa238b304..7de36a05e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,521 +94,1762 @@ "istanbul": "^0.4.5", "mocha": "^10.4.0", "mocha-junit-reporter": "^2.2.1", - "newman": "^6.1.2", "supertest": "^7.0.0", "uglify-es": "^3.3.10" } }, - "node_modules/@babel/runtime": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", - "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "optional": true, + "peer": true, "dependencies": { - "regenerator-runtime": "^0.14.0" + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true, + "peer": true + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true, + "peer": true + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true, + "peer": true + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true, + "peer": true + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true, + "peer": true + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.525.0.tgz", + "integrity": "sha512-LxI9rfn6Vy/EX6I7as14PAKqAhUwVQviaMV/xCLQIubgdVj1xfexVURdiSk7GQshpcwtrs+GQWV21yP+3AX/7A==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/core": "3.525.0", + "@aws-sdk/credential-provider-node": "3.525.0", + "@aws-sdk/middleware-host-header": "3.523.0", + "@aws-sdk/middleware-logger": "3.523.0", + "@aws-sdk/middleware-recursion-detection": "3.523.0", + "@aws-sdk/middleware-user-agent": "3.525.0", + "@aws-sdk/region-config-resolver": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@aws-sdk/util-user-agent-browser": "3.523.0", + "@aws-sdk/util-user-agent-node": "3.525.0", + "@smithy/config-resolver": "^2.1.4", + "@smithy/core": "^1.3.5", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/hash-node": "^2.1.3", + "@smithy/invalid-dependency": "^2.1.3", + "@smithy/middleware-content-length": "^2.1.3", + "@smithy/middleware-endpoint": "^2.4.4", + "@smithy/middleware-retry": "^2.1.4", + "@smithy/middleware-serde": "^2.1.3", + "@smithy/middleware-stack": "^2.1.3", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/url-parser": "^2.1.3", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.4", + "@smithy/util-defaults-mode-node": "^2.2.3", + "@smithy/util-endpoints": "^1.1.4", + "@smithy/util-middleware": "^2.1.3", + "@smithy/util-retry": "^2.1.3", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, + "node_modules/@aws-sdk/client-sso": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz", + "integrity": "sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==", "optional": true, + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.525.0", + "@aws-sdk/middleware-host-header": "3.523.0", + "@aws-sdk/middleware-logger": "3.523.0", + "@aws-sdk/middleware-recursion-detection": "3.523.0", + "@aws-sdk/middleware-user-agent": "3.525.0", + "@aws-sdk/region-config-resolver": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@aws-sdk/util-user-agent-browser": "3.523.0", + "@aws-sdk/util-user-agent-node": "3.525.0", + "@smithy/config-resolver": "^2.1.4", + "@smithy/core": "^1.3.5", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/hash-node": "^2.1.3", + "@smithy/invalid-dependency": "^2.1.3", + "@smithy/middleware-content-length": "^2.1.3", + "@smithy/middleware-endpoint": "^2.4.4", + "@smithy/middleware-retry": "^2.1.4", + "@smithy/middleware-serde": "^2.1.3", + "@smithy/middleware-stack": "^2.1.3", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/url-parser": "^2.1.3", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.4", + "@smithy/util-defaults-mode-node": "^2.2.3", + "@smithy/util-endpoints": "^1.1.4", + "@smithy/util-middleware": "^2.1.3", + "@smithy/util-retry": "^2.1.3", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=0.1.90" + "node": ">=14.0.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz", + "integrity": "sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==", + "optional": true, + "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/core": "3.525.0", + "@aws-sdk/middleware-host-header": "3.523.0", + "@aws-sdk/middleware-logger": "3.523.0", + "@aws-sdk/middleware-recursion-detection": "3.523.0", + "@aws-sdk/middleware-user-agent": "3.525.0", + "@aws-sdk/region-config-resolver": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@aws-sdk/util-user-agent-browser": "3.523.0", + "@aws-sdk/util-user-agent-node": "3.525.0", + "@smithy/config-resolver": "^2.1.4", + "@smithy/core": "^1.3.5", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/hash-node": "^2.1.3", + "@smithy/invalid-dependency": "^2.1.3", + "@smithy/middleware-content-length": "^2.1.3", + "@smithy/middleware-endpoint": "^2.4.4", + "@smithy/middleware-retry": "^2.1.4", + "@smithy/middleware-serde": "^2.1.3", + "@smithy/middleware-stack": "^2.1.3", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/url-parser": "^2.1.3", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.4", + "@smithy/util-defaults-mode-node": "^2.2.3", + "@smithy/util-endpoints": "^1.1.4", + "@smithy/util-middleware": "^2.1.3", + "@smithy/util-retry": "^2.1.3", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": "^3.525.0" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@aws-sdk/client-sts": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz", + "integrity": "sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==", + "optional": true, + "peer": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.525.0", + "@aws-sdk/middleware-host-header": "3.523.0", + "@aws-sdk/middleware-logger": "3.523.0", + "@aws-sdk/middleware-recursion-detection": "3.523.0", + "@aws-sdk/middleware-user-agent": "3.525.0", + "@aws-sdk/region-config-resolver": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@aws-sdk/util-user-agent-browser": "3.523.0", + "@aws-sdk/util-user-agent-node": "3.525.0", + "@smithy/config-resolver": "^2.1.4", + "@smithy/core": "^1.3.5", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/hash-node": "^2.1.3", + "@smithy/invalid-dependency": "^2.1.3", + "@smithy/middleware-content-length": "^2.1.3", + "@smithy/middleware-endpoint": "^2.4.4", + "@smithy/middleware-retry": "^2.1.4", + "@smithy/middleware-serde": "^2.1.3", + "@smithy/middleware-stack": "^2.1.3", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/url-parser": "^2.1.3", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.4", + "@smithy/util-defaults-mode-node": "^2.2.3", + "@smithy/util-endpoints": "^1.1.4", + "@smithy/util-middleware": "^2.1.3", + "@smithy/util-retry": "^2.1.3", + "@smithy/util-utf8": "^2.1.1", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": "^3.525.0" } }, - "node_modules/@faker-js/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==", - "dev": true + "node_modules/@aws-sdk/core": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.525.0.tgz", + "integrity": "sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/core": "^1.3.5", + "@smithy/protocol-http": "^3.2.1", + "@smithy/signature-v4": "^2.1.3", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.525.0.tgz", + "integrity": "sha512-0djjCN/zN6QFQt1xU64VBOSRP4wJckU6U7FjLPrGpL6w03hF0dUmVUXjhQZe5WKNPCicVc2S3BYPohl/PzCx1w==", + "optional": true, + "peer": true, "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" + "@aws-sdk/client-cognito-identity": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" } }, - "node_modules/@google-cloud/projectify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", - "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.523.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz", + "integrity": "sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" } }, - "node_modules/@google-cloud/promisify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", - "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz", + "integrity": "sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/property-provider": "^2.1.3", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/util-stream": "^2.1.3", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=12" + "node": ">=14.0.0" } }, - "node_modules/@google-cloud/storage": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.12.0.tgz", - "integrity": "sha512-78nNAY7iiZ4O/BouWMWTD/oSF2YtYgYB3GZirn0To6eBOugjXVoK+GXgUXOl+HlqbAOyHxAVXOlsj3snfbQ1dw==", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz", + "integrity": "sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==", + "optional": true, + "peer": true, "dependencies": { - "@google-cloud/paginator": "^3.0.7", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "abort-controller": "^3.0.0", - "async-retry": "^1.3.3", - "compressible": "^2.0.12", - "duplexify": "^4.0.0", - "ent": "^2.2.0", - "extend": "^3.0.2", - "fast-xml-parser": "^4.2.2", - "gaxios": "^5.0.0", - "google-auth-library": "^8.0.1", - "mime": "^3.0.0", - "mime-types": "^2.0.8", - "p-limit": "^3.0.1", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0", - "uuid": "^8.0.0" + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/credential-provider-env": "3.523.0", + "@aws-sdk/credential-provider-process": "3.523.0", + "@aws-sdk/credential-provider-sso": "3.525.0", + "@aws-sdk/credential-provider-web-identity": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/credential-provider-imds": "^2.2.3", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" } }, - "node_modules/@google-cloud/storage/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz", + "integrity": "sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.523.0", + "@aws-sdk/credential-provider-http": "3.525.0", + "@aws-sdk/credential-provider-ini": "3.525.0", + "@aws-sdk/credential-provider-process": "3.523.0", + "@aws-sdk/credential-provider-sso": "3.525.0", + "@aws-sdk/credential-provider-web-identity": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/credential-provider-imds": "^2.2.3", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" } }, - "node_modules/@google-cloud/storage/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.523.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz", + "integrity": "sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz", + "integrity": "sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==", + "optional": true, + "peer": true, "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@aws-sdk/client-sso": "3.525.0", + "@aws-sdk/token-providers": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz", + "integrity": "sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=12" + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.525.0.tgz", + "integrity": "sha512-zj439Ok1s44nahIJKpBM4jhAxnSw20flXQpMD2aeGdvUuKm2xmzZP0lX5z9a+XQWFtNh251ZcSt2p+RwtLKtiw==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.525.0", + "@aws-sdk/client-sso": "3.525.0", + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/credential-provider-cognito-identity": "3.525.0", + "@aws-sdk/credential-provider-env": "3.523.0", + "@aws-sdk/credential-provider-http": "3.525.0", + "@aws-sdk/credential-provider-ini": "3.525.0", + "@aws-sdk/credential-provider-node": "3.525.0", + "@aws-sdk/credential-provider-process": "3.523.0", + "@aws-sdk/credential-provider-sso": "3.525.0", + "@aws-sdk/credential-provider-web-identity": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/credential-provider-imds": "^2.2.3", + "@smithy/property-provider": "^2.1.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.523.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz", + "integrity": "sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/protocol-http": "^3.2.1", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=12" + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.523.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz", + "integrity": "sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.523.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz", + "integrity": "sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/protocol-http": "^3.2.1", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz", + "integrity": "sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@smithy/protocol-http": "^3.2.1", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz", + "integrity": "sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/types": "^2.10.1", + "@smithy/util-config-provider": "^2.2.1", + "@smithy/util-middleware": "^2.1.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz", + "integrity": "sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.523.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.523.0.tgz", + "integrity": "sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz", + "integrity": "sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/types": "^2.10.1", + "@smithy/util-endpoints": "^1.1.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.523.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz", + "integrity": "sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/types": "^2.10.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.525.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz", + "integrity": "sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", + "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", + "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", + "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/storage": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.12.0.tgz", + "integrity": "sha512-78nNAY7iiZ4O/BouWMWTD/oSF2YtYgYB3GZirn0To6eBOugjXVoK+GXgUXOl+HlqbAOyHxAVXOlsj3snfbQ1dw==", + "dependencies": { + "@google-cloud/paginator": "^3.0.7", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "compressible": "^2.0.12", + "duplexify": "^4.0.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "fast-xml-parser": "^4.2.2", + "gaxios": "^5.0.0", + "google-auth-library": "^8.0.1", + "mime": "^3.0.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "retry-request": "^5.0.0", + "teeny-request": "^8.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/storage/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@google-cloud/storage/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.3.tgz", + "integrity": "sha512-SyCxhJfmK6MoLNV5SbDpNdUy9SDv5H7y9/9rl3KpnwgTHWuNNMc87zWqbcIZXNWY+aUjxLGLEcvHoLagG4tWCg==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@researchdatabox/raido-openapi-generated-node": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@researchdatabox/raido-openapi-generated-node/-/raido-openapi-generated-node-0.0.2.tgz", + "integrity": "sha512-Q9h0PYZZBWSELCkBSwGqG//ynOUSAYEwieFM5lfi27A2k1C86ayHoDThbRq7XqGmSbaE+EhmX3lxdiAhkkPNig==" + }, + "node_modules/@researchdatabox/redbox-core-types": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@researchdatabox/redbox-core-types/-/redbox-core-types-1.4.3.tgz", + "integrity": "sha512-Krxi2jxUUH+pl/XmZ5ze7Ko22S5ZLjX0cMLWNsyymavw1/gsXxdaJUgtXUQyFpEMmDlOrDYLn08/1v7Ojctauw==", + "dependencies": { + "@tsconfig/node18": "^18.2.0" + } + }, + "node_modules/@researchdatabox/sails-hook-redbox-storage-mongo": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@researchdatabox/sails-hook-redbox-storage-mongo/-/sails-hook-redbox-storage-mongo-1.4.5.tgz", + "integrity": "sha512-h5Yb40tkk+LozECSIMgQ5vPDD0zeQ8+aoemKv/ALdqj9QNFzet9JekEw8KbubD+/3Xd3NpA4kTM2Zpyah0+lnA==", + "dependencies": { + "json2csv": "^5.0.3", + "lodash": "^4.17.21", + "uuid": "8.3.0" + } + }, + "node_modules/@researchdatabox/sails-hook-redbox-storage-mongo/node_modules/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@researchdatabox/sails-ng-common": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@researchdatabox/sails-ng-common/-/sails-ng-common-0.1.0.tgz", + "integrity": "sha512-276ZEkjYAmjtzJI8F7MLl5tKKVBjEC8MorHfryJja1kWk/KYS5N6n6+22BEOq6FaOnqYzqeLcUbfHLfwuhBkCA==" + }, + "node_modules/@sailshq/binary-search-tree": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@sailshq/binary-search-tree/-/binary-search-tree-0.2.7.tgz", + "integrity": "sha512-4q7A4I0cYzRRrPUA/mZYFQ3My26RAyWQ10IfdgHaBC6M1ZNCUpQnT7vRMZd5KgnlUBl8MSlP4JUbL5heeSHMBw==", + "dependencies": { + "underscore": "1.13.1" + } + }, + "node_modules/@sailshq/lodash": { + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.6.tgz", + "integrity": "sha512-gp2pRE/kyh3DbrQ7MaI65xNcjrToZHRa52XJsNB8kZ0Aj0fcDNQPw8entkcuaaPYzCPxXau4rpOXaw/rl0c/ZQ==" + }, + "node_modules/@sailshq/nedb": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@sailshq/nedb/-/nedb-1.8.2.tgz", + "integrity": "sha512-qCViMLdh5WWIWEP9ARiSZTjQ1fSEwXsd6eYkD04WIrOt6uHRVF9k5bGnDQPKvTdlCVBTzxUZhPb7VC3+BKw21g==", + "dependencies": { + "@sailshq/binary-search-tree": "0.2.7", + "async": "0.2.10", + "localforage": "1.3.0", + "mkdirp": "0.5.6", + "underscore": "1.13.1" + } + }, + "node_modules/@sailshq/nedb/node_modules/async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", + "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", + "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "optional": true, + "peer": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "optional": true, + "peer": true, "dependencies": { - "ansi-regex": "^6.0.1" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=14.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "optional": true, + "peer": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=14.0.0" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "optional": true, + "peer": true, "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "optional": true, + "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "optional": true, + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=14.0.0" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "optional": true, + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=14.0.0" } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "optional": true, + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "optional": true, + "peer": true, "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@smithy/types": "^2.12.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@smithy/signature-v4": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", + "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "optional": true, + "peer": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "optional": true, + "peer": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.3.tgz", - "integrity": "sha512-SyCxhJfmK6MoLNV5SbDpNdUy9SDv5H7y9/9rl3KpnwgTHWuNNMc87zWqbcIZXNWY+aUjxLGLEcvHoLagG4tWCg==", + "node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "optional": true, + "peer": true, "dependencies": { - "sparse-bitfield": "^3.0.3" + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "optional": true, + "peer": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=14.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" + "node_modules/@smithy/util-body-length-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@smithy/util-body-length-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", + "optional": true, + "peer": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=14.0.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "optional": true, + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=14" + "node": ">=14.0.0" } }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "node_modules/@smithy/util-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "optional": true, "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@postman/form-data": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@postman/form-data/-/form-data-3.1.1.tgz", - "integrity": "sha512-vjh8Q2a8S6UCm/KKs31XFJqEEgmbjBmpPNVV2eVav6905wyFAwaUOBGA1NPBI4ERH9MMZc6w0umFgM6WbEPMdg==", - "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 6" + "node": ">=14.0.0" } }, - "node_modules/@postman/tough-cookie": { - "version": "4.1.3-postman.1", - "resolved": "https://registry.npmjs.org/@postman/tough-cookie/-/tough-cookie-4.1.3-postman.1.tgz", - "integrity": "sha512-txpgUqZOnWYnUHZpHjkfb0IwVH4qJmyq77pPnJLlfhMtdCLMFTEeQHlzQiK906aaNCe4NEB5fGJHo9uzGbFMeA==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", + "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", + "optional": true, + "peer": true, "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">= 10.0.0" } }, - "node_modules/@postman/tunnel-agent": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@postman/tunnel-agent/-/tunnel-agent-0.6.3.tgz", - "integrity": "sha512-k57fzmAZ2PJGxfOA4SGR05ejorHbVAa/84Hxh/2nAztjNXc4ZjOm9NUIk6/Z6LCrBvJZqjRZbN8e/nROVUPVdg==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", + "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", + "optional": true, + "peer": true, "dependencies": { - "safe-buffer": "^5.0.1" + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "*" + "node": ">= 10.0.0" } }, - "node_modules/@researchdatabox/raido-openapi-generated-node": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@researchdatabox/raido-openapi-generated-node/-/raido-openapi-generated-node-0.0.2.tgz", - "integrity": "sha512-Q9h0PYZZBWSELCkBSwGqG//ynOUSAYEwieFM5lfi27A2k1C86ayHoDThbRq7XqGmSbaE+EhmX3lxdiAhkkPNig==" - }, - "node_modules/@researchdatabox/redbox-core-types": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@researchdatabox/redbox-core-types/-/redbox-core-types-1.4.3.tgz", - "integrity": "sha512-Krxi2jxUUH+pl/XmZ5ze7Ko22S5ZLjX0cMLWNsyymavw1/gsXxdaJUgtXUQyFpEMmDlOrDYLn08/1v7Ojctauw==", + "node_modules/@smithy/util-endpoints": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "optional": true, + "peer": true, "dependencies": { - "@tsconfig/node18": "^18.2.0" + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@researchdatabox/sails-hook-redbox-storage-mongo": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@researchdatabox/sails-hook-redbox-storage-mongo/-/sails-hook-redbox-storage-mongo-1.4.5.tgz", - "integrity": "sha512-h5Yb40tkk+LozECSIMgQ5vPDD0zeQ8+aoemKv/ALdqj9QNFzet9JekEw8KbubD+/3Xd3NpA4kTM2Zpyah0+lnA==", + "node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "optional": true, + "peer": true, "dependencies": { - "json2csv": "^5.0.3", - "lodash": "^4.17.21", - "uuid": "8.3.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@researchdatabox/sails-hook-redbox-storage-mongo/node_modules/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@researchdatabox/sails-ng-common": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@researchdatabox/sails-ng-common/-/sails-ng-common-0.1.0.tgz", - "integrity": "sha512-276ZEkjYAmjtzJI8F7MLl5tKKVBjEC8MorHfryJja1kWk/KYS5N6n6+22BEOq6FaOnqYzqeLcUbfHLfwuhBkCA==" - }, - "node_modules/@sailshq/binary-search-tree": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@sailshq/binary-search-tree/-/binary-search-tree-0.2.7.tgz", - "integrity": "sha512-4q7A4I0cYzRRrPUA/mZYFQ3My26RAyWQ10IfdgHaBC6M1ZNCUpQnT7vRMZd5KgnlUBl8MSlP4JUbL5heeSHMBw==", + "node_modules/@smithy/util-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "optional": true, + "peer": true, "dependencies": { - "underscore": "1.13.1" + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@sailshq/lodash": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.6.tgz", - "integrity": "sha512-gp2pRE/kyh3DbrQ7MaI65xNcjrToZHRa52XJsNB8kZ0Aj0fcDNQPw8entkcuaaPYzCPxXau4rpOXaw/rl0c/ZQ==" - }, - "node_modules/@sailshq/nedb": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@sailshq/nedb/-/nedb-1.8.2.tgz", - "integrity": "sha512-qCViMLdh5WWIWEP9ARiSZTjQ1fSEwXsd6eYkD04WIrOt6uHRVF9k5bGnDQPKvTdlCVBTzxUZhPb7VC3+BKw21g==", + "node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "optional": true, + "peer": true, "dependencies": { - "@sailshq/binary-search-tree": "0.2.7", - "async": "0.2.10", - "localforage": "1.3.0", - "mkdirp": "0.5.6", - "underscore": "1.13.1" + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@sailshq/nedb/node_modules/async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", - "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", + "node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=18" + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=14.0.0" } }, "node_modules/@socket.io/component-emitter": { @@ -1476,6 +2717,13 @@ "node": ">=0.10.0" } }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "optional": true, + "peer": true + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -1495,15 +2743,6 @@ "node": ">=8" } }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "dependencies": { - "base64-js": "^1.1.2" - } - }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -1722,12 +2961,6 @@ "node": ">=0.10.0" } }, - "node_modules/chardet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.0.0.tgz", - "integrity": "sha512-xVgPpulCooDjY6zH4m9YW3jbkaBe3FKIAvF5sj5t7aBNsVl2ljIE+xwJ4iNgiDZHFQvNIpjdKdVOQvvk5ZfxbQ==", - "dev": true - }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -1737,15 +2970,6 @@ "node": "*" } }, - "node_modules/charset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", - "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/check-disk-space": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/check-disk-space/-/check-disk-space-3.4.0.tgz", @@ -1808,33 +3032,6 @@ "node": ">=8" } }, - "node_modules/cli-progress": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", - "dev": true, - "dependencies": { - "string-width": "^4.2.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2567,12 +3764,6 @@ "node": ">= 0.6" } }, - "node_modules/csv-parse": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", - "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", - "dev": true - }, "node_modules/csv-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz", @@ -2719,16 +3910,6 @@ "node": ">= 0.8" } }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", @@ -3695,15 +4876,6 @@ "pend": "~1.2.0" } }, - "node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -3723,15 +4895,6 @@ "node": ">=10" } }, - "node_modules/filesize": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.0.tgz", - "integrity": "sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==", - "dev": true, - "engines": { - "node": ">= 10.4.0" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3795,12 +4958,6 @@ "node": ">=18" } }, - "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, "node_modules/flaverr": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/flaverr/-/flaverr-1.10.0.tgz", @@ -4448,12 +5605,6 @@ "node": ">= 6" } }, - "node_modules/http-reasons": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", - "integrity": "sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==", - "dev": true - }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4476,46 +5627,6 @@ "hnp": "0.0.1" } }, - "node_modules/httpntlm": { - "version": "1.8.13", - "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.8.13.tgz", - "integrity": "sha512-2F2FDPiWT4rewPzNMg3uPhNkP3NExENlUGADRUDPQvuftuUTGW98nLZtGemCIW3G40VhWZYgkIDcQFAwZ3mf2Q==", - "dev": true, - "funding": [ - { - "type": "paypal", - "url": "https://www.paypal.com/donate/?hosted_button_id=2CKNJLZJBW8ZC" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/samdecrock" - } - ], - "dependencies": { - "des.js": "^1.0.1", - "httpreq": ">=0.4.22", - "js-md4": "^0.3.2", - "underscore": "~1.12.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/httpntlm/node_modules/underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", - "dev": true - }, - "node_modules/httpreq": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-1.1.1.tgz", - "integrity": "sha512-uhSZLPPD2VXXOSN8Cni3kIsoFHaU2pT/nySEU/fHr/ePbqHYr0jeiQRmUKLEirC09SFPsdMoA7LU7UXMd/w0Kw==", - "dev": true, - "engines": { - "node": ">= 6.15.1" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -4597,7 +5708,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "devOptional": true, + "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -4677,6 +5788,34 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "optional": true, + "peer": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "optional": true, + "peer": true + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "optional": true, + "peer": true + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -5105,32 +6244,11 @@ "node": ">= 0.6.0" } }, - "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, - "node_modules/js-md4": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", - "dev": true - }, - "node_modules/js-sha512": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.9.0.tgz", - "integrity": "sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==", - "dev": true - }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -5416,15 +6534,6 @@ "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/liquid-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz", - "integrity": "sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -5854,15 +6963,6 @@ "node": ">= 0.6" } }, - "node_modules/mime-format": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz", - "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==", - "dev": true, - "dependencies": { - "charset": "^1.0.0" - } - }, "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", @@ -6378,96 +7478,13 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/newman": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/newman/-/newman-6.1.2.tgz", - "integrity": "sha512-VyaXFguIYM7QUWXHQlHtkj3axzZQFHgj9OYkhbKpq4iphKAJckHFstltacSBtgpeiGp5SKk9FBdCYVbJXcLvnQ==", - "dev": true, - "dependencies": { - "@postman/tough-cookie": "4.1.3-postman.1", - "async": "3.2.5", - "chardet": "2.0.0", - "cli-progress": "3.12.0", - "cli-table3": "0.6.3", - "colors": "1.4.0", - "commander": "11.1.0", - "csv-parse": "4.16.3", - "filesize": "10.1.0", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mkdirp": "3.0.1", - "postman-collection": "4.4.0", - "postman-collection-transformer": "4.1.8", - "postman-request": "2.88.1-postman.33", - "postman-runtime": "7.37.1", - "pretty-ms": "7.0.1", - "semver": "7.6.0", - "serialised-error": "1.1.3", - "word-wrap": "1.2.5", - "xmlbuilder": "15.1.1" - }, - "bin": { - "newman": "bin/newman.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/newman/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/newman/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/newman/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/newman/node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "engines": { - "node": ">=8.0" - } + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/node-cache": { "version": "5.1.2", @@ -6526,12 +7543,6 @@ "node": ">= 6.13.0" } }, - "node_modules/node-oauth1": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-oauth1/-/node-oauth1-1.3.0.tgz", - "integrity": "sha512-0yggixNfrA1KcBwvh/Hy2xAS1Wfs9dcg6TdFf2zN7gilcAigMdrtZ4ybrBSXBgLvGDw9V1p2MRnGBMq7XjTWLg==", - "dev": true - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -6618,15 +7629,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -6783,15 +7785,6 @@ "flaverr": "^1.5.1" } }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -7494,256 +8487,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/postman-collection": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.4.0.tgz", - "integrity": "sha512-2BGDFcUwlK08CqZFUlIC8kwRJueVzPjZnnokWPtJCd9f2J06HBQpGL7t2P1Ud1NEsK9NHq9wdipUhWLOPj5s/Q==", - "dev": true, - "dependencies": { - "@faker-js/faker": "5.5.3", - "file-type": "3.9.0", - "http-reasons": "0.1.0", - "iconv-lite": "0.6.3", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mime-format": "2.0.1", - "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.5.4", - "uuid": "8.3.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-collection-transformer": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-4.1.8.tgz", - "integrity": "sha512-smJ6X7Z7kbg6hp7JZPFixrSN3J3WkQed7DrWCC5tF7IxOMpFLqhtTtGssY8nD1inP8+mJf+N72Pf2ttUAHgBKw==", - "dev": true, - "dependencies": { - "commander": "8.3.0", - "inherits": "2.0.4", - "lodash": "4.17.21", - "semver": "7.5.4", - "strip-json-comments": "3.1.1" - }, - "bin": { - "postman-collection-transformer": "bin/transform-collection.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-collection-transformer/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/postman-collection-transformer/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-collection-transformer/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postman-collection/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-collection/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/postman-request": { - "version": "2.88.1-postman.33", - "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.33.tgz", - "integrity": "sha512-uL9sCML4gPH6Z4hreDWbeinKU0p0Ke261nU7OvII95NU22HN6Dk7T/SaVPaj6T4TsQqGKIFw6/woLZnH7ugFNA==", - "dev": true, - "dependencies": { - "@postman/form-data": "~3.1.1", - "@postman/tough-cookie": "~4.1.3-postman.1", - "@postman/tunnel-agent": "^0.6.3", - "aws-sign2": "~0.7.0", - "aws4": "^1.12.0", - "brotli": "^1.3.3", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "har-validator": "~5.1.3", - "http-signature": "~1.3.1", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "^2.1.35", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.3", - "safe-buffer": "^5.1.2", - "stream-length": "^1.0.2", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postman-request/node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/postman-request/node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/postman-request/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/postman-runtime": { - "version": "7.37.1", - "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.37.1.tgz", - "integrity": "sha512-yqKN/p6Ba8+yq9iZsxJLkMPko3lKvs3hixkiPy5O7bapFQWgX6jWhny4W2O8BzE5T8KzE8s1HAgT2gi7e2Y5Jg==", - "dev": true, - "dependencies": { - "@postman/tough-cookie": "4.1.3-postman.1", - "async": "3.2.5", - "aws4": "1.12.0", - "handlebars": "4.7.8", - "httpntlm": "1.8.13", - "jose": "4.14.4", - "js-sha512": "0.9.0", - "lodash": "4.17.21", - "mime-types": "2.1.35", - "node-forge": "1.3.1", - "node-oauth1": "1.3.0", - "performance-now": "2.1.0", - "postman-collection": "4.4.0", - "postman-request": "2.88.1-postman.33", - "postman-sandbox": "4.6.0", - "postman-url-encoder": "3.0.5", - "serialised-error": "1.1.3", - "strip-json-comments": "3.1.1", - "uuid": "8.3.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/postman-runtime/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postman-runtime/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/postman-sandbox": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-4.6.0.tgz", - "integrity": "sha512-+tCUEhiFAV6saqMEetRzLmSWt4/9kgVagtnrVgyqVgIGdPBIaq1p3aay54bOzYW7/QjIIz0xPF3YkJA8Olt3LQ==", - "dev": true, - "dependencies": { - "lodash": "4.17.21", - "postman-collection": "4.4.0", - "teleport-javascript": "1.0.0", - "uvm": "2.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-url-encoder": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", - "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -7753,21 +8496,6 @@ "node": ">= 0.8.0" } }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "dev": true, - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -7859,12 +8587,6 @@ "node": ">=0.4.x" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -8177,12 +8899,6 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, "node_modules/resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -9105,26 +9821,6 @@ "node": ">=0.6" } }, - "node_modules/serialised-error": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/serialised-error/-/serialised-error-1.1.3.tgz", - "integrity": "sha512-vybp3GItaR1ZtO2nxZZo8eOo7fnVaNtP3XE2vJKgzkKR2bagCkdJ1EpYYhEMd3qu/80DwQk9KjsNSxE3fXWq0g==", - "dev": true, - "dependencies": { - "object-hash": "^1.1.2", - "stack-trace": "0.0.9", - "uuid": "^3.0.0" - } - }, - "node_modules/serialised-error/node_modules/stack-trace": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -9468,6 +10164,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "peer": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/socket.io": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", @@ -9505,6 +10212,21 @@ "node": ">=10.0.0" } }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "optional": true, + "peer": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/solr-client": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/solr-client/-/solr-client-0.9.0.tgz", @@ -9626,21 +10348,6 @@ "stubs": "^3.0.0" } }, - "node_modules/stream-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-length/-/stream-length-1.0.2.tgz", - "integrity": "sha512-aI+qKFiwoDV4rsXiS7WRoCt+v2RX1nUj17+KJC5r2gfh5xoSJIfP6Y3Do/HtvesFcTSWthIuJ3l1cvKQY/+nZg==", - "dev": true, - "dependencies": { - "bluebird": "^2.6.2" - } - }, - "node_modules/stream-length/node_modules/bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==", - "dev": true - }, "node_modules/stream-shift": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.2.tgz", @@ -9952,12 +10659,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/teleport-javascript": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/teleport-javascript/-/teleport-javascript-1.0.0.tgz", - "integrity": "sha512-j1llvWVFyEn/6XIFDfX5LAU43DXe0GCt3NfXDwJ8XpRRMkS+i50SAkonAONBy+vxwPFBd50MFU8a2uj8R/ccLg==", - "dev": true - }, "node_modules/terser": { "version": "5.26.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", @@ -10415,15 +11116,6 @@ "node": ">=8" } }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -10478,16 +11170,6 @@ "querystring": "0.2.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url-pattern": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/url-pattern/-/url-pattern-1.0.3.tgz", @@ -10535,18 +11217,6 @@ "uuid": "bin/uuid" } }, - "node_modules/uvm": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/uvm/-/uvm-2.1.1.tgz", - "integrity": "sha512-BZ5w8adTpNNr+zczOBRpaX/hH8UPKAf7fmCnidrcsqt3bn8KT9bDIfuS7hgRU9RXgiN01su2pwysBONY6w8W5w==", - "dev": true, - "dependencies": { - "flatted": "3.2.6" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", diff --git a/package.json b/package.json index d43f0e4475..62cc6ae767 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "systemjs": "6.15.1", "ts-node": "^10.9.2", "tus-node-server": "^0.9.0", -"typescript": "5.4", + "typescript": "5.4", "typescript-json-schema": "^0.63.0", "typescript-require": "~0.3.0", "url-pattern": "^1.0.3", @@ -83,8 +83,7 @@ "debug": "node debug app.js", "start": "node app.js", "test:mocha": "docker compose -f ./support/integration-testing/docker-compose.mocha.yml up --abort-on-container-exit --exit-code-from redboxportal", - "test:postman": "docker compose -f ./support/integration-testing/docker-compose.newman.yml up --abort-on-container-exit --exit-code-from redboxportal", - "test:bruno": "docker compose -f ./support/integration-testing/docker-compose.bruno.yml up --abort-on-container-exit --exit-code-from redboxportal", + "test:bruno": "docker compose -f ./support/integration-testing/docker-compose.bruno.yml up --abort-on-container-exit --exit-code-from bruno", "test:angular": "./support/unit-testing/angular/testDevAngular.sh", "doc-ng2": "npm -g install @compodoc/compodoc && npm -g install ejs-cli aglio && compodoc -p angular/tsconfig.json -d support/docs/generated/ng2 -n \"ReDBox Portal - NG2 Apps\" --theme postmark --includes support/docs && ejs-cli views/default/default/apidocsapib.ejs -O '{\"portal\":\"rdmp\",\"branding\":\"default\",\"baseUrl\":\"https://demo.redboxresearchdata.com.au\"}' > apidocs.apib && aglio -i apidocs.apib -o rest-api.html && mv rest-api.html support/docs/generated/ng2/additional-documentation/", "compile:sails": "npm install && ./node_modules/.bin/tsc --project tsconfig.json", @@ -113,7 +112,6 @@ "istanbul": "^0.4.5", "mocha": "^10.4.0", "mocha-junit-reporter": "^2.2.1", - "newman": "^6.1.2", "supertest": "^7.0.0", "uglify-es": "^3.3.10" }, diff --git a/support/development/prepareLocalDev.sh b/support/development/prepareLocalDev.sh index 36747ab2a8..1572f02d16 100644 --- a/support/development/prepareLocalDev.sh +++ b/support/development/prepareLocalDev.sh @@ -10,7 +10,7 @@ function show_step(){ show_step 'Prepare local development - remove existing data and create directories' # remove existing code coverage, temp, and dev data -sudo find . -name '.nyc_output' -type d -prune -not -path "*/node_modules/*" -exec rm -r '{}' '+' +sudo find . -name '.nyc_*' -type d -prune -not -path "*/node_modules/*" -exec rm -r '{}' '+' sudo find . -name 'coverage' -type d -prune -not -path "*/node_modules/*" -exec rm -r '{}' '+' sudo find . -name '.tmp' -type d -prune -not -path "*/node_modules/*" -exec rm -r '{}' '+' sudo rm -r support/development/.dev || true diff --git a/support/integration-testing/docker-compose.bruno.yml b/support/integration-testing/docker-compose.bruno.yml index 8b893cc0da..b288d4d83d 100755 --- a/support/integration-testing/docker-compose.bruno.yml +++ b/support/integration-testing/docker-compose.bruno.yml @@ -3,7 +3,7 @@ networks: main: services: bruno: - image: ghcr.io/davidkarlsen/bruno-image:main + image: node:20.13.1-buster volumes: - "../../test/bruno:/tests" - "./.tmp/junit:/junit" @@ -15,7 +15,15 @@ services: main: aliases: - bruno - entrypoint: /bin/bash -c "cd /tests && npm install && bru run --env int-test --format junit --output /junit/bruno-results.xml --bail" + entrypoint: >- + /bin/bash -c "cd /tests && + npm install -g @usebruno/cli && + npm install && + bru run + --env int-test + --format junit + --output /junit/backend-bruno/backend-bruno.xml + --bail" redboxportal: image: qcifengineering/redbox-portal:develop ports: @@ -49,7 +57,16 @@ services: aliases: - redboxportal # add 'node --inspect=0.0.0.0:9876' to entrypoint for debugging - entrypoint: /bin/bash -c "cd /opt/redbox-portal && node app.js" + entrypoint: >- + /bin/bash -c "cd /opt/redbox-portal && + npm install -g nyc && + npm install && + nyc + --no-clean + --report-dir coverage/bruno + --reporter=lcov + --exclude-after-remap=false + node app.js" mongodb: image: mongo:latest networks: diff --git a/support/integration-testing/docker-compose.mocha.yml b/support/integration-testing/docker-compose.mocha.yml index e99c0795a5..5565bd34f7 100755 --- a/support/integration-testing/docker-compose.mocha.yml +++ b/support/integration-testing/docker-compose.mocha.yml @@ -39,10 +39,15 @@ services: /bin/bash -c "cd /opt/redbox-portal && npm i nyc -g && npm i && - nyc --no-clean - --report-dir coverage/mocha --reporter=lcov + nyc + --no-clean + --report-dir coverage/mocha + --reporter=lcov --exclude-after-remap=false - node ./node_modules/mocha/bin/mocha --exit test/bootstrap.test.js test/unit/**/*.test.js" + node + ./node_modules/mocha/bin/mocha + --exit test/bootstrap.test.js + test/unit/**/*.test.js" mongodb: image: mongo:latest networks: diff --git a/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru b/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru index dc0b43449f..80ad8e662a 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru @@ -22,9 +22,9 @@ body:json { "": {}, "rdmp": { "oid": "{{dmpOid}}", - "title": "Andrew's Postman test - Updated from form AJAX call" + "title": "Updated from form AJAX call" }, - "aim_project_name": "Andrew's Postman test - Updated from form AJAX call", + "aim_project_name": "Updated from form AJAX call", "foaf:fundedBy_foaf:Agent": [ "" ], diff --git a/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru b/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru index d52db1f2b0..db1a6caf05 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru @@ -17,7 +17,7 @@ headers { body:json { { - "title": "Andrew's Postman test", + "title": "Create RDMP to test deleting", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru index 1b42a68fa5..b882455f67 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru @@ -17,7 +17,7 @@ headers { body:json { { - "title": "Andrew's Postman test", + "title": "Create RDMP", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru index a5b0cef6be..459f9819e9 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru @@ -22,6 +22,6 @@ tests { test("Title is correct", function () { var jsonData = res.getBody(); - expect(jsonData.title).to.eql("Andrew's Postman test - Updated"); + expect(jsonData.title).to.eql("Updated RDMP title"); }); } diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru index eebd8481d9..61cfb3f0f0 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru @@ -22,6 +22,6 @@ tests { test("Title is correct", function () { var jsonData = res.getBody(); - expect(jsonData.title).to.eql("Andrew's Postman test"); + expect(jsonData.title).to.eql("RDMP title"); }); } diff --git a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru index 5ed4b71fef..65cccbf389 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru @@ -17,7 +17,7 @@ headers { body:json { { - "title": "Andrew's Postman test - Updated", + "title": "UPdate RDMP metadata that does not exist", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru index ee07b444e9..19daab60ce 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru @@ -17,7 +17,7 @@ headers { body:json { { - "title": "Andrew's Postman test - Updated", + "title": "Update RDMP metadata", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru index a78da99544..f5d4adbf2f 100644 --- a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru @@ -32,9 +32,9 @@ body:json { "": {}, "rdmp": { "oid": "{{dmpOid}}", - "title": "Andrew's Postman test - Updated from form AJAX call" + "title": "Updated from form AJAX call" }, - "aim_project_name": "Andrew's Postman test - Updated from form AJAX call", + "aim_project_name": "Updated from form AJAX call", "foaf:fundedBy_foaf:Agent": [ "" ], diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru index a145185b12..cbf8935fa4 100644 --- a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru @@ -33,9 +33,9 @@ body:json { "": {}, "rdmp": { "oid": "{{dmpOid}}", - "title": "Andrew's Postman test - Updated from form AJAX call" + "title": "Updated from form AJAX call" }, - "aim_project_name": "Andrew's Postman test - Updated from form AJAX call", + "aim_project_name": "Updated from form AJAX call", "foaf:fundedBy_foaf:Agent": [ "" ], diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru index caf4d6eee9..c6b926ca25 100644 --- a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru @@ -27,7 +27,7 @@ headers { body:json { { - "title": "Andrew's Postman test - Updated from form AJAX call", + "title": "Updated from form AJAX call", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru index 0fdd4978f9..3fa4f42a68 100644 --- a/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru +++ b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru @@ -32,9 +32,9 @@ body:json { "": {}, "rdmp": { "oid": "{{dmpOid}}", - "title": "Andrew's Postman test - Updated from form AJAX call" + "title": "Updated from form AJAX call" }, - "aim_project_name": "Andrew's Postman test - Updated from form AJAX call", + "aim_project_name": "Updated from form AJAX call", "foaf:fundedBy_foaf:Agent": [ "" ], diff --git a/test/postman/attachment.png b/test/postman/attachment.png deleted file mode 100644 index e1d3098a1c492aeac1f970cb99d4f626c9e97473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30148 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�V`_`F@ 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 W0D|8m=Ic>K01Xu#');", - "});" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "GET", - "header": [ - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "X-CSRF-Token", - "value": "" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "Content-Type", - "value": "application/json;charset=utf-8" - }, - { - "key": "Accept", - "value": "application/json, text/plain, */*" - }, - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Referer", - "value": "{{host}}/default/rdmp/record/search?q=Record" - }, - { - "key": "Cookie", - "value": "{{cookie}}" - }, - { - "key": "X-Source", - "value": "jsclient" - }, - { - "key": "Cache-Control", - "value": "no-cache" - } - ], - "url": { - "raw": "{{host}}/default/rdmp/admin/appconfig/edit/systemMessage", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "admin", - "appconfig", - "edit", - "systemMessage" - ] - } - }, - "response": [] - }, - { - "name": "Logout Admin User", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [ - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Upgrade-Insecure-Requests", - "value": "1" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "Accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" - }, - { - "key": "Referer", - "value": "{{host}}/default/rdmp/researcher/home" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "Cookie", - "value": "{{cookie}}" - } - ], - "url": { - "raw": "{{host}}/default/rdmp/user/logout", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "user", - "logout" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Guest User Tests", - "item": [ - { - "name": "Get view form config for RDMP - Unauthorised", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 403\", function () {", - " pm.response.to.have.status(403);", - "});", - "", - "pm.test(\"Message is access denied\", function () {", - " var jsonData = pm.response.json();", - " ", - " pm.expect(jsonData.message).to.eql(\"Access Denied\");", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - }, - { - "key": "X-Source", - "value": "jsclient", - "type": "text" - }, - { - "key": "Accept", - "value": "application/json, text/plain, */*", - "type": "text" - }, - { - "key": "Cookie", - "value": "{{cookie}}", - "type": "text" - } - ], - "url": { - "raw": "{{host}}/default/rdmp/record/form/auto/{{dmpOid}}?edit=false", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "record", - "form", - "auto", - "{{dmpOid}}" - ], - "query": [ - { - "key": "edit", - "value": "false" - } - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Researcher User Tests", - "item": [ - { - "name": "Login via Internal authentication using researcheruser with invalid password", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "postman.setGlobalVariable(\"cookie\",postman.getResponseHeader(\"set-cookie\") );", - "", - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "pm.test(\"Message is incorrect username/password\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData.message).to.eql(\"Incorrect username/password\");", - "});", - "", - "pm.test(\"User is false\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData.user).to.eql(false);", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Origin", - "value": "{{host}}" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "X-CSRF-Token", - "value": "" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "X-Source", - "value": "jsclient" - }, - { - "key": "Content-Type", - "value": "application/json;charset=UTF-8" - }, - { - "key": "Accept", - "value": "application/json, text/plain, */*" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "{{host}}/default/rdmp/user/login" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"username\": \"{{researcherUsername}}\",\n \"password\": \"notthepassword\",\n \"branding\": \"default\",\n \"portal\": \"rdmp\"\n}" - }, - "url": { - "raw": "http://localhost:1500/user/login_local", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "1500", - "path": [ - "user", - "login_local" - ] - } - }, - "response": [] - }, - { - "name": "Login via Internal authentication using researcher data", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "postman.setGlobalVariable(\"cookie\",postman.getResponseHeader(\"set-cookie\") );", - "", - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "pm.test(\"Check that we have logged in correctly.\", function () {", - " var jsonData = pm.response.json();", - " var researcherUsername = pm.environment.get(\"researcherUsername\");", - " pm.expect(jsonData.user.username).to.eql(researcherUsername);", - "});", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Origin", - "value": "{{host}}" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "X-CSRF-Token", - "value": "" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "X-Source", - "value": "jsclient" - }, - { - "key": "Content-Type", - "value": "application/json;charset=UTF-8" - }, - { - "key": "Accept", - "value": "application/json, text/plain, */*" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "{{host}}/default/rdmp/user/login" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"username\": \"{{researcherUsername}}\",\n \"password\": \"{{researcherPassword}}\",\n \"branding\": \"default\",\n \"portal\": \"rdmp\"\n}" - }, - "url": { - "raw": "http://localhost:1500/user/login_local", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "1500", - "path": [ - "user", - "login_local" - ] - } - }, - "response": [] - }, - { - "name": "Create data record via form", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "", - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "pm.test(\"Test oid exists\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData).to.have.property('oid');", - " postman.setEnvironmentVariable(\"dataRecordOid\", jsonData.oid);", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Origin", - "value": "{{host}}" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "X-Source", - "value": "jsclient" - }, - { - "key": "Content-Type", - "value": "application/json;charset=UTF-8" - }, - { - "key": "Accept", - "value": "application/json, text/plain, */*" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "{{host}}{/default/rdmp/record/dataRecord/edit" - }, - { - "key": "Cookie", - "value": "{{cookie}}" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"parameterRetriever\": \"\",\n \"rdmpGetter\": \"\",\n \"\": {},\n \"rdmp\": {\n \"oid\": \"{{dmpOid}}\",\n \"title\": \"Andrew's Postman test - Updated from form AJAX call\"\n },\n \"aim_project_name\": \"Andrew's Postman test - Updated from form AJAX call\",\n \"foaf:fundedBy_foaf:Agent\": [\n \"\"\n ],\n \"dc:coverage_vivo:DateTimeInterval_vivo:end\": \"\",\n \"foaf:fundedBy_vivo:Grant\": [\n \"\"\n ],\n \"dc:subject_anzsrc:for\": [\n {\n \"name\": \"01 - MATHEMATICAL SCIENCES\",\n \"label\": \"MATHEMATICAL SCIENCES\",\n \"notation\": \"01\"\n }\n ],\n \"dc:subject_anzsrc:seo\": [],\n \"title\": \"A Data record - researcher\",\n \"description\": \"Data record\",\n \"datatype\": \"collection\",\n \"finalKeywords\": [\n \"270199\",\n \"Golgi apparatus\",\n \"endocytosis\",\n \"membrane transport\",\n \"protein trafficking\",\n \"secretion\",\n \"HIV-AIDS\",\n \"bacterial pathogen\",\n \"hormone secretion\",\n \"immune development\",\n \"lysosomal storage disorder\"\n ],\n \"contributor_ci\": {\n \"text_full_name\": \"Alberto Zweinstein\",\n \"full_name_honorific\": \"Dr Alberto Zweinstein\",\n \"email\": \"alberto.zweinstein@example.edu.au\",\n \"given_name\": \"Alberto\",\n \"family_name\": \"Zweinstein\",\n \"honorific\": \"Dr\",\n \"full_name_family_name_first\": \"Zweinstein, Alberto\",\n \"username\": \"\",\n \"role\": \"Chief Investigator\",\n \"orcid\": null\n },\n \"contributor_data_manager\": {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"email\": \"notAReal@email.edu.au\",\n \"username\": \"\",\n \"role\": \"Data manager\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\"\n },\n \"contributors\": [\n {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"email\": \"notAReal@email.edu.au\",\n \"username\": \"\",\n \"role\": \"Contributors\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\"\n }\n ],\n \"contributor_supervisor\": {\n \"text_full_name\": null,\n \"full_name_honorific\": \"\",\n \"email\": null,\n \"given_name\": \"\",\n \"family_name\": \"\",\n \"honorific\": \"\",\n \"full_name_family_name_first\": \"\",\n \"username\": \"\",\n \"role\": \"Supervisor\",\n \"orcid\": null\n },\n \"dataowner_name\": \"Alberto Zweinstein\",\n \"dataowner_email\": \"alberto.zweinstein@example.edu.au\",\n \"redbox:retentionPeriod_dc:date\": \"1year\",\n \"redbox:retentionPeriod_dc:date_skos:note\": \"\",\n \"disposalDate\": \"\",\n \"related_publications\": [\n {\n \"related_url\": \"\",\n \"related_title\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"dataLocations\": [],\n \"software_equipment\": \"\"\n}" - }, - "url": { - "raw": "{{host}}/default/rdmp/recordmeta/dataRecord", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "recordmeta", - "dataRecord" - ] - } - }, - "response": [] - }, - { - "name": "Create data publication", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "", - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "pm.test(\"Test oid exists\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData).to.have.property('oid');", - " postman.setEnvironmentVariable(\"dataPublicationOid\", jsonData.oid);", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Origin", - "value": "{{host}}" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "X-CSRF-Token", - "value": "" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "X-Source", - "value": "jsclient" - }, - { - "key": "Content-Type", - "value": "application/json;charset=UTF-8" - }, - { - "key": "Accept", - "value": "application/json, text/plain, */*" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "{{host}}/default/rdmp/record/dataPublication/edit" - }, - { - "key": "Cookie", - "value": "{{cookie}}" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"parameterRetriever\": \"\",\n \"dataRecordGetter\": \"\",\n \"\": {},\n \"dataRecord\": {\n \"oid\": \"{{dataRecordOid}}\",\n \"title\": \"A Data record\"\n },\n \"title\": \"A Data record\",\n \"description\": \"Data record\",\n \"datatype\": \"collection\",\n \"finalKeywords\": [\n \"270199\",\n \"Golgi apparatus\",\n \"endocytosis\",\n \"membrane transport\",\n \"protein trafficking\",\n \"secretion\",\n \"HIV-AIDS\",\n \"bacterial pathogen\",\n \"hormone secretion\",\n \"immune development\",\n \"lysosomal storage disorder\"\n ],\n \"foaf:fundedBy_foaf:Agent\": [\n {}\n ],\n \"foaf:fundedBy_vivo:Grant\": [\n {}\n ],\n \"dc:subject_anzsrc:for\": [\n {\n \"name\": \"01 - MATHEMATICAL SCIENCES\",\n \"label\": \"MATHEMATICAL SCIENCES\",\n \"notation\": \"01\"\n }\n ],\n \"dc:subject_anzsrc:seo\": [],\n \"startDate\": \"\",\n \"endDate\": \"\",\n \"timePeriod\": \"\",\n \"geolocations\": [\n \"\"\n ],\n \"geospatial\": {},\n \"accessRightsToggle\": \"\",\n \"dataLocations\": [\n {\n \"type\": \"attachment\",\n \"location\": \"b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5\",\n \"mimeType\": \"image/png\",\n \"name\": \"Screen Shot 2018-11-26 at 3.39.48 pm.png\",\n \"fileId\": \"d3de61376e5bc93c814607ee604ebac5\",\n \"uploadUrl\": \"http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5\",\n \"selected\": true\n }\n ],\n \"dataLicensingAccess_manager\": \"Prof Paul Gleeson\",\n \"dc:accessRights\": \"Open\",\n \"accessRights_url\": \"\",\n \"related_publications\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_websites\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_metadata\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_data\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_services\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"license_identifier\": \"\",\n \"license_notes\": \"\",\n \"license_other_url\": \"\",\n \"license_statement\": \"Copyright ReDBox Research Data 2018\",\n \"license_statement_url\": \"\",\n \"citation_doi\": \"\",\n \"requestIdentifier\": [],\n \"citation_title\": \"A Data Record\",\n \"creators\": [\n {\n \"text_full_name\": \"Alberto Zweinstein\",\n \"email\": \"alberto.zweinstein@example.edu.au\",\n \"role\": \"Chief Investigator\",\n \"username\": \"\",\n \"orcid\": \"\",\n \"family_name\": \"Zweinstein\",\n \"given_name\": \"Alberto\"\n },\n {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"email\": \"notAReal@email.edu.au\",\n \"role\": \"Data manager\",\n \"username\": \"\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\",\n \"family_name\": \"Paul Gleeson\",\n \"given_name\": \"Prof\"\n },\n {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"email\": \"notAReal@email.edu.au\",\n \"role\": \"Contributors\",\n \"username\": \"\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\",\n \"family_name\": \"Paul Gleeson\",\n \"given_name\": \"Prof\"\n },\n {\n \"text_full_name\": null,\n \"email\": null,\n \"role\": \"Supervisor\",\n \"username\": \"\",\n \"orcid\": \"\",\n \"family_name\": \"\",\n \"given_name\": \"\"\n }\n ],\n \"citation_publisher\": \"ReDBox Research Data\",\n \"citation_url\": \"\",\n \"citation_publication_date\": \"\",\n \"citation_generated\": \"Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}\",\n \"dataowner_name\": \"Alberto Zweinstein\",\n \"dataowner_email\": \"alberto.zweinstein@example.edu.au\",\n \"contributor_ci\": {\n \"text_full_name\": \"Alberto Zweinstein\",\n \"full_name_honorific\": \"Dr Alberto Zweinstein\",\n \"email\": \"alberto.zweinstein@example.edu.au\",\n \"given_name\": \"Alberto\",\n \"family_name\": \"Zweinstein\",\n \"honorific\": \"Dr\",\n \"full_name_family_name_first\": \"Zweinstein, Alberto\",\n \"username\": \"\",\n \"role\": \"Chief Investigator\"\n },\n \"contributor_data_manager\": {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"full_name_honorific\": \"\",\n \"email\": \"notAReal@email.edu.au\",\n \"given_name\": \"Prof\",\n \"family_name\": \"Paul Gleeson\",\n \"honorific\": \"\",\n \"full_name_family_name_first\": \"Paul Gleeson, Prof\",\n \"username\": \"\",\n \"role\": \"Data manager\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\"\n },\n \"contributor_supervisor\": {\n \"text_full_name\": \"\",\n \"full_name_honorific\": \"\",\n \"email\": \"\",\n \"given_name\": \"\",\n \"family_name\": \"\",\n \"honorific\": \"\",\n \"full_name_family_name_first\": \"\",\n \"username\": \"\",\n \"role\": \"Supervisor\"\n },\n \"embargoByDate\": \"\",\n \"embargoUntil\": null,\n \"embargoNote\": \"\",\n \"reviewerNote\": \"\",\n \"ckanLocation\": \"\"\n}" - }, - "url": { - "raw": "{{host}}/default/rdmp/recordmeta/dataPublication", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "recordmeta", - "dataPublication" - ] - } - }, - "response": [] - }, - { - "name": "Migrate data publication to reviewing", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "pm.test(\"Test oid exists\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData).to.have.property('oid');", - "});", - "", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "PUT", - "header": [ - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Origin", - "value": "{{host}}" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "X-Source", - "value": "jsclient" - }, - { - "key": "Content-Type", - "value": "application/json;charset=UTF-8" - }, - { - "key": "Accept", - "value": "application/json, text/plain, */*" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "{{host}}/default/rdmp/record/edit/49a33460c794498a56fa29ed08567cc4" - }, - { - "key": "Cookie", - "value": "{{cookie}}" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"parameterRetriever\": \"\",\n \"dataRecordGetter\": \"\",\n \"\": {},\n \"dataRecord\": {\n \"oid\": \"{{dataRecordOid}}\",\n \"title\": \"A Data record\"\n },\n \"title\": \"A Data record\",\n \"description\": \"Data record\",\n \"datatype\": \"collection\",\n \"finalKeywords\": [\n \"270199\",\n \"Golgi apparatus\",\n \"endocytosis\",\n \"membrane transport\",\n \"protein trafficking\",\n \"secretion\",\n \"HIV-AIDS\",\n \"bacterial pathogen\",\n \"hormone secretion\",\n \"immune development\",\n \"lysosomal storage disorder\"\n ],\n \"foaf:fundedBy_foaf:Agent\": [\n {}\n ],\n \"foaf:fundedBy_vivo:Grant\": [\n {}\n ],\n \"dc:subject_anzsrc:for\": [\n {\n \"name\": \"01 - MATHEMATICAL SCIENCES\",\n \"label\": \"MATHEMATICAL SCIENCES\",\n \"notation\": \"01\"\n }\n ],\n \"dc:subject_anzsrc:seo\": [],\n \"startDate\": \"\",\n \"endDate\": \"\",\n \"timePeriod\": \"\",\n \"geolocations\": [\n \"\"\n ],\n \"geospatial\": {},\n \"accessRightsToggle\": \"\",\n \"dataLocations\": [\n {\n \"type\": \"attachment\",\n \"location\": \"b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5\",\n \"mimeType\": \"image/png\",\n \"name\": \"Screen Shot 2018-11-26 at 3.39.48 pm.png\",\n \"fileId\": \"d3de61376e5bc93c814607ee604ebac5\",\n \"uploadUrl\": \"http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5\",\n \"selected\": true\n }\n ],\n \"dataLicensingAccess_manager\": \"Prof Paul Gleeson\",\n \"dc:accessRights\": \"Open\",\n \"accessRights_url\": \"\",\n \"related_publications\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_websites\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_metadata\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_data\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_services\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"license_identifier\": \"\",\n \"license_notes\": \"\",\n \"license_other_url\": \"\",\n \"license_statement\": \"Copyright ReDBox Research Data 2018\",\n \"license_statement_url\": \"\",\n \"citation_doi\": \"\",\n \"requestIdentifier\": [],\n \"citation_title\": \"A Data Record\",\n \"creators\": [\n {\n \"text_full_name\": \"Alberto Zweinstein\",\n \"email\": \"alberto.zweinstein@example.edu.au\",\n \"role\": \"Chief Investigator\",\n \"username\": \"\",\n \"orcid\": \"\",\n \"family_name\": \"Zweinstein\",\n \"given_name\": \"Alberto\"\n },\n {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"email\": \"notAReal@email.edu.au\",\n \"role\": \"Data manager\",\n \"username\": \"\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\",\n \"family_name\": \"Paul Gleeson\",\n \"given_name\": \"Prof\"\n },\n {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"email\": \"notAReal@email.edu.au\",\n \"role\": \"Contributors\",\n \"username\": \"\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\",\n \"family_name\": \"Paul Gleeson\",\n \"given_name\": \"Prof\"\n },\n {\n \"text_full_name\": null,\n \"email\": null,\n \"role\": \"Supervisor\",\n \"username\": \"\",\n \"orcid\": \"\",\n \"family_name\": \"\",\n \"given_name\": \"\"\n }\n ],\n \"citation_publisher\": \"ReDBox Research Data\",\n \"citation_url\": \"\",\n \"citation_publication_date\": \"\",\n \"citation_generated\": \"Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}\",\n \"dataowner_name\": \"Alberto Zweinstein\",\n \"dataowner_email\": \"alberto.zweinstein@example.edu.au\",\n \"contributor_ci\": {\n \"text_full_name\": \"Alberto Zweinstein\",\n \"full_name_honorific\": \"Dr Alberto Zweinstein\",\n \"email\": \"alberto.zweinstein@example.edu.au\",\n \"given_name\": \"Alberto\",\n \"family_name\": \"Zweinstein\",\n \"honorific\": \"Dr\",\n \"full_name_family_name_first\": \"Zweinstein, Alberto\",\n \"username\": \"\",\n \"role\": \"Chief Investigator\"\n },\n \"contributor_data_manager\": {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"full_name_honorific\": \"\",\n \"email\": \"notAReal@email.edu.au\",\n \"given_name\": \"Prof\",\n \"family_name\": \"Paul Gleeson\",\n \"honorific\": \"\",\n \"full_name_family_name_first\": \"Paul Gleeson, Prof\",\n \"username\": \"\",\n \"role\": \"Data manager\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\"\n },\n \"contributor_supervisor\": {\n \"text_full_name\": \"\",\n \"full_name_honorific\": \"\",\n \"email\": \"\",\n \"given_name\": \"\",\n \"family_name\": \"\",\n \"honorific\": \"\",\n \"full_name_family_name_first\": \"\",\n \"username\": \"\",\n \"role\": \"Supervisor\"\n },\n \"embargoByDate\": \"\",\n \"embargoUntil\": null,\n \"embargoNote\": \"\",\n \"reviewerNote\": \"\",\n \"ckanLocation\": \"\"\n}" - }, - "url": { - "raw": "http://localhost:1500/default/rdmp/recordmeta/{{dataPublicationOid}}?targetStep=reviewing", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "1500", - "path": [ - "default", - "rdmp", - "recordmeta", - "{{dataPublicationOid}}" - ], - "query": [ - { - "key": "targetStep", - "value": "reviewing" - } - ] - } - }, - "response": [] - }, - { - "name": "Update data publication after in review", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "//Record is now in review so the researcher should no longer be able to edit the record", - "pm.test(\"Status code is 403\", function () {", - " pm.response.to.have.status(403);", - "});", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "PUT", - "header": [ - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Origin", - "value": "http://localhost:1500" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "X-Source", - "value": "jsclient" - }, - { - "key": "Content-Type", - "value": "application/json;charset=UTF-8" - }, - { - "key": "Accept", - "value": "application/json, text/plain, */*" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "http://localhost:1500/default/rdmp/record/edit/{{dmpOid}}" - }, - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Cookie", - "value": "{{cookie}}", - "type": "text" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"parameterRetriever\": \"\",\n \"dataRecordGetter\": \"\",\n \"\": {},\n \"dataRecord\": {\n \"oid\": \"{{dataRecordOid}}\",\n \"title\": \"A Data record\"\n },\n \"title\": \"A Data record - changed\",\n \"description\": \"Data record\",\n \"datatype\": \"collection\",\n \"finalKeywords\": [\n \"270199\",\n \"Golgi apparatus\",\n \"endocytosis\",\n \"membrane transport\",\n \"protein trafficking\",\n \"secretion\",\n \"HIV-AIDS\",\n \"bacterial pathogen\",\n \"hormone secretion\",\n \"immune development\",\n \"lysosomal storage disorder\"\n ],\n \"foaf:fundedBy_foaf:Agent\": [\n {}\n ],\n \"foaf:fundedBy_vivo:Grant\": [\n {}\n ],\n \"dc:subject_anzsrc:for\": [\n {\n \"name\": \"01 - MATHEMATICAL SCIENCES\",\n \"label\": \"MATHEMATICAL SCIENCES\",\n \"notation\": \"01\"\n }\n ],\n \"dc:subject_anzsrc:seo\": [],\n \"startDate\": \"\",\n \"endDate\": \"\",\n \"timePeriod\": \"\",\n \"geolocations\": [\n \"\"\n ],\n \"geospatial\": {},\n \"accessRightsToggle\": \"\",\n \"dataLocations\": [\n {\n \"type\": \"attachment\",\n \"location\": \"b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5\",\n \"mimeType\": \"image/png\",\n \"name\": \"Screen Shot 2018-11-26 at 3.39.48 pm.png\",\n \"fileId\": \"d3de61376e5bc93c814607ee604ebac5\",\n \"uploadUrl\": \"http://localhost:1500/default/rdmp/record/b869b4fae83a1f01082465d165d868a8/attach/d3de61376e5bc93c814607ee604ebac5\",\n \"selected\": true\n }\n ],\n \"dataLicensingAccess_manager\": \"Prof Paul Gleeson\",\n \"dc:accessRights\": \"Open\",\n \"accessRights_url\": \"\",\n \"related_publications\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_websites\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_metadata\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_data\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"related_services\": [\n {\n \"related_title\": \"\",\n \"related_url\": \"\",\n \"related_notes\": \"\"\n }\n ],\n \"license_identifier\": \"\",\n \"license_notes\": \"\",\n \"license_other_url\": \"\",\n \"license_statement\": \"Copyright ReDBox Research Data 2018\",\n \"license_statement_url\": \"\",\n \"citation_doi\": \"\",\n \"requestIdentifier\": [],\n \"citation_title\": \"A Data Record\",\n \"creators\": [\n {\n \"text_full_name\": \"Alberto Zweinstein\",\n \"email\": \"alberto.zweinstein@example.edu.au\",\n \"role\": \"Chief Investigator\",\n \"username\": \"\",\n \"orcid\": \"\",\n \"family_name\": \"Zweinstein\",\n \"given_name\": \"Alberto\"\n },\n {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"email\": \"notAReal@email.edu.au\",\n \"role\": \"Data manager\",\n \"username\": \"\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\",\n \"family_name\": \"Paul Gleeson\",\n \"given_name\": \"Prof\"\n },\n {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"email\": \"notAReal@email.edu.au\",\n \"role\": \"Contributors\",\n \"username\": \"\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\",\n \"family_name\": \"Paul Gleeson\",\n \"given_name\": \"Prof\"\n },\n {\n \"text_full_name\": null,\n \"email\": null,\n \"role\": \"Supervisor\",\n \"username\": \"\",\n \"orcid\": \"\",\n \"family_name\": \"\",\n \"given_name\": \"\"\n }\n ],\n \"citation_publisher\": \"ReDBox Research Data\",\n \"citation_url\": \"\",\n \"citation_publication_date\": \"\",\n \"citation_generated\": \"Zweinstein, Alberto; Paul Gleeson, Prof; Paul Gleeson, Prof (Invalid date): A Data Record. ReDBox Research Data. {ID_WILL_BE_HERE}\",\n \"dataowner_name\": \"Alberto Zweinstein\",\n \"dataowner_email\": \"alberto.zweinstein@example.edu.au\",\n \"contributor_ci\": {\n \"text_full_name\": \"Alberto Zweinstein\",\n \"full_name_honorific\": \"Dr Alberto Zweinstein\",\n \"email\": \"alberto.zweinstein@example.edu.au\",\n \"given_name\": \"Alberto\",\n \"family_name\": \"Zweinstein\",\n \"honorific\": \"Dr\",\n \"full_name_family_name_first\": \"Zweinstein, Alberto\",\n \"username\": \"\",\n \"role\": \"Chief Investigator\"\n },\n \"contributor_data_manager\": {\n \"text_full_name\": \"Prof Paul Gleeson\",\n \"full_name_honorific\": \"\",\n \"email\": \"notAReal@email.edu.au\",\n \"given_name\": \"Prof\",\n \"family_name\": \"Paul Gleeson\",\n \"honorific\": \"\",\n \"full_name_family_name_first\": \"Paul Gleeson, Prof\",\n \"username\": \"\",\n \"role\": \"Data manager\",\n \"orcid\": \"http://orcid.org/0000-0000-0000-000\"\n },\n \"contributor_supervisor\": {\n \"text_full_name\": \"\",\n \"full_name_honorific\": \"\",\n \"email\": \"\",\n \"given_name\": \"\",\n \"family_name\": \"\",\n \"honorific\": \"\",\n \"full_name_family_name_first\": \"\",\n \"username\": \"\",\n \"role\": \"Supervisor\"\n },\n \"embargoByDate\": \"\",\n \"embargoUntil\": null,\n \"embargoNote\": \"\",\n \"reviewerNote\": \"\",\n \"ckanLocation\": \"\"\n}" - }, - "url": { - "raw": "{{host}}/default/rdmp/recordmeta/{{dataPublicationOid}}", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "recordmeta", - "{{dataPublicationOid}}" - ] - } - }, - "response": [] - }, - { - "name": "Logout Researcher User", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [ - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Upgrade-Insecure-Requests", - "value": "1" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" - }, - { - "key": "Accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" - }, - { - "key": "Referer", - "value": "{{host}}/default/rdmp/researcher/home" - }, - { - "key": "Accept-Encoding", - "value": "gzip, deflate, br" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "Cookie", - "value": "{{cookie}}" - } - ], - "url": { - "raw": "{{host}}/default/rdmp/user/logout", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "user", - "logout" - ] - } - }, - "response": [] - } - ] - } - ] - }, - { - "name": "OpenID Connect", - "item": [ - { - "name": "Load login page", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " // Just loading page to get a session cookiw", - " pm.response.to.have.status(200);", - "});" - ], - "type": "text/javascript" - } - } - ], - "protocolProfileBehavior": { - "disabledSystemHeaders": { - "user-agent": true - }, - "followRedirects": true - }, - "request": { - "method": "GET", - "header": [ - { - "key": "Accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "http://localhost:1500/default/rdmp/user/login" - }, - { - "key": "Sec-Fetch-Dest", - "value": "document" - }, - { - "key": "Sec-Fetch-Mode", - "value": "navigate" - }, - { - "key": "Sec-Fetch-Site", - "value": "same-origin" - }, - { - "key": "Sec-Fetch-User", - "value": "?1" - }, - { - "key": "Upgrade-Insecure-Requests", - "value": "1" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36" - }, - { - "key": "sec-ch-ua", - "value": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"" - }, - { - "key": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "key": "sec-ch-ua-platform", - "value": "\"macOS\"" - } - ], - "url": { - "raw": "http://localhost:1500/default/rdmp/user/login", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "1500", - "path": [ - "default", - "rdmp", - "user", - "login" - ] - } - }, - "response": [] - }, - { - "name": "Begin OIDC login", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 302\", function () {", - " pm.response.to.have.status(302);", - " postman.setEnvironmentVariable(\"kc_redir_url\", pm.response.headers.get('Location'));", - "});" - ], - "type": "text/javascript" - } - } - ], - "protocolProfileBehavior": { - "disabledSystemHeaders": { - "user-agent": true - }, - "followRedirects": false - }, - "request": { - "method": "GET", - "header": [ - { - "key": "Accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "http://localhost:1500/default/rdmp/user/login" - }, - { - "key": "Sec-Fetch-Dest", - "value": "document" - }, - { - "key": "Sec-Fetch-Mode", - "value": "navigate" - }, - { - "key": "Sec-Fetch-Site", - "value": "same-origin" - }, - { - "key": "Sec-Fetch-User", - "value": "?1" - }, - { - "key": "Upgrade-Insecure-Requests", - "value": "1" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36" - }, - { - "key": "sec-ch-ua", - "value": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"" - }, - { - "key": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "key": "sec-ch-ua-platform", - "value": "\"macOS\"" - } - ], - "url": { - "raw": "http://localhost:1500/user/begin_oidc", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "1500", - "path": [ - "user", - "begin_oidc" - ] - } - }, - "response": [] - }, - { - "name": "Keycloak login page", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - " const $ = cheerio.load(pm.response.text());", - "", - " postman.setEnvironmentVariable(\"kc_login_url\", $(\"#kc-form-login\").attr('action'));", - "});" - ], - "type": "text/javascript" - } - } - ], - "protocolProfileBehavior": { - "disabledSystemHeaders": { - "user-agent": true - }, - "followRedirects": false - }, - "request": { - "method": "GET", - "header": [ - { - "key": "Accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Referer", - "value": "http://localhost:1500/default/rdmp/user/login" - }, - { - "key": "Sec-Fetch-Dest", - "value": "document" - }, - { - "key": "Sec-Fetch-Mode", - "value": "navigate" - }, - { - "key": "Sec-Fetch-Site", - "value": "same-origin" - }, - { - "key": "Sec-Fetch-User", - "value": "?1" - }, - { - "key": "Upgrade-Insecure-Requests", - "value": "1" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36" - }, - { - "key": "sec-ch-ua", - "value": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"" - }, - { - "key": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "key": "sec-ch-ua-platform", - "value": "\"macOS\"" - } - ], - "url": { - "raw": "{{kc_redir_url}}", - "host": [ - "{{kc_redir_url}}" - ] - } - }, - "response": [] - }, - { - "name": "Keycloak login action", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 302\", function () {", - " pm.response.to.have.status(302);", - " postman.setEnvironmentVariable(\"rb_login_url\", pm.response.headers.get('Location'));", - "});" - ], - "type": "text/javascript" - } - } - ], - "protocolProfileBehavior": { - "followRedirects": false - }, - "request": { - "method": "POST", - "header": [ - { - "key": "Accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - }, - { - "key": "Origin", - "value": "null" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Upgrade-Insecure-Requests", - "value": "1" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "username", - "value": "test-researcher", - "type": "text" - }, - { - "key": "password", - "value": "password", - "type": "text" - }, - { - "key": "credentialId", - "value": "", - "type": "text" - } - ] - }, - "url": { - "raw": "{{kc_login_url}}", - "host": [ - "{{kc_login_url}}" - ] - } - }, - "response": [] - }, - { - "name": "RedBox OIDC return login", - "event": [ - { - "listen": "prerequest", - "script": { - "exec": [ - "" - ], - "type": "text/javascript" - } - }, - { - "listen": "test", - "script": { - "exec": [ - "", - "", - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "pm.test(\"Welcome message in HTML\", function () {", - " //Testing login worked by looking for welcome message on page", - " pm.expect(pm.response.text()).to.include(\"Test Researcher\")", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [ - { - "key": "Accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" - }, - { - "key": "Accept-Language", - "value": "en-US,en;q=0.9,en-AU;q=0.8,it;q=0.7" - }, - { - "key": "Cache-Control", - "value": "no-cache" - }, - { - "key": "Connection", - "value": "keep-alive" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Sec-Fetch-Dest", - "value": "document" - }, - { - "key": "Sec-Fetch-Mode", - "value": "navigate" - }, - { - "key": "Sec-Fetch-Site", - "value": "cross-site" - }, - { - "key": "Sec-Fetch-User", - "value": "?1" - }, - { - "key": "Upgrade-Insecure-Requests", - "value": "1" - }, - { - "key": "User-Agent", - "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36" - } - ], - "url": { - "raw": "{{rb_login_url}}", - "host": [ - "{{rb_login_url}}" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "General", - "item": [ - { - "name": "Get stylesheet", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "pm.test(\"Has valid content\", function () {", - " pm.expect(pm.response.stream.toString()).to.match(/^.*@charset \"UTF-8\"/)", - "});", - "" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "setTimeout(function(){},30000)" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{host}}/default/rdmp/styles/style.min.css", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "styles", - "style.min.css" - ] - } - }, - "response": [] - }, - { - "name": "Get logo", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "", - "pm.test(\"Has valid content and type\", function () {", - " pm.response.to.have.header(\"Content-Type\", \"image/png\")", - " pm.expect(pm.response.size().body).to.be.greaterThan(0);", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{host}}/default/rdmp/images/logo", - "host": [ - "{{host}}" - ], - "path": [ - "default", - "rdmp", - "images", - "logo" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Solr", - "item": [ - { - "name": "Start indexing", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Solr HTTP status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "pm.test(\"Solr reports no error\", function () {", - " pm.expect(pm.response.stream.toString()).to.include('\"status\":0')", - "});", - "", - "pm.test(\"Solr reports Query Time\", function () {", - " pm.expect(pm.response.stream.toString()).to.include('\"QTime\":')", - "});", - "" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "setTimeout(function(){},30000)" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "url": { - "raw": "{{solrhost}}/solr/redbox/update/json?wt=json&add=[8d95849003df11ed8b078341db3bde98 (1738385794638282752)]", - "host": [ - "{{solrhost}}" - ], - "path": [ - "solr", - "redbox", - "update", - "json" - ], - "query": [ - { - "key": "wt", - "value": "json" - }, - { - "key": "add", - "value": "[8d95849003df11ed8b078341db3bde98 (1738385794638282752)]" - } - ] - } - }, - "response": [] - } - ] - } - ] -} \ No newline at end of file From bebc4c720bd9d9ee2f8d9818e79f353c3299aa95 Mon Sep 17 00:00:00 2001 From: Mark Cottman-Fields Date: Mon, 27 May 2024 15:41:44 +1000 Subject: [PATCH 15/18] run bruno and remove postman Signed-off-by: Mark Cottman-Fields --- .../Create Datarecord for Attachments.bru | 4 ++-- .../1 - Record Management/Create RDMP For Deletion.bru | 2 +- test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru | 2 +- .../Get RDMP-s Metadata - Updated Test.bru | 2 +- .../1 - Record Management/Get RDMP-s Metadata.bru | 2 +- .../Update RDMP Metadata that does not exist.bru | 2 +- .../1 - Record Management/Update RDMP Metadata.bru | 2 +- .../1 - Admin User Tests/Create data record via form.bru | 4 ++-- .../1 - Admin User Tests/Save attachment on Data Record.bru | 4 ++-- .../Update RDMP Metadata using AJAX form call.bru | 2 +- .../3 - Researcher User Tests/Create data record via form.bru | 4 ++-- 11 files changed, 15 insertions(+), 15 deletions(-) diff --git a/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru b/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru index 80ad8e662a..95258f0a40 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create Datarecord for Attachments.bru @@ -22,9 +22,9 @@ body:json { "": {}, "rdmp": { "oid": "{{dmpOid}}", - "title": "Updated from form AJAX call" + "title": "Andrew's integration test - Updated from form AJAX call" }, - "aim_project_name": "Updated from form AJAX call", + "aim_project_name": "Andrew's integration test - Updated from form AJAX call", "foaf:fundedBy_foaf:Agent": [ "" ], diff --git a/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru b/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru index db1a6caf05..26d36b042a 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create RDMP For Deletion.bru @@ -17,7 +17,7 @@ headers { body:json { { - "title": "Create RDMP to test deleting", + "title": "Andrew's integration test", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru b/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru index b882455f67..65fb310def 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Create RDMP.bru @@ -17,7 +17,7 @@ headers { body:json { { - "title": "Create RDMP", + "title": "Andrew's integration test", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru index 459f9819e9..5d6da5c75c 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata - Updated Test.bru @@ -22,6 +22,6 @@ tests { test("Title is correct", function () { var jsonData = res.getBody(); - expect(jsonData.title).to.eql("Updated RDMP title"); + expect(jsonData.title).to.eql("Andrew's integration test - Updated"); }); } diff --git a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru index 61cfb3f0f0..017cb7b548 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Get RDMP-s Metadata.bru @@ -22,6 +22,6 @@ tests { test("Title is correct", function () { var jsonData = res.getBody(); - expect(jsonData.title).to.eql("RDMP title"); + expect(jsonData.title).to.eql("Andrew's integration test"); }); } diff --git a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru index 65cccbf389..b78f270553 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata that does not exist.bru @@ -17,7 +17,7 @@ headers { body:json { { - "title": "UPdate RDMP metadata that does not exist", + "title": "Andrew's integration test - Updated", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru index 19daab60ce..b2c0b4b605 100644 --- a/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru +++ b/test/bruno/1 - REST API/1 - Record Management/Update RDMP Metadata.bru @@ -17,7 +17,7 @@ headers { body:json { { - "title": "Update RDMP metadata", + "title": "Andrew's integration test - Updated", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru index f5d4adbf2f..916f615729 100644 --- a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Create data record via form.bru @@ -32,9 +32,9 @@ body:json { "": {}, "rdmp": { "oid": "{{dmpOid}}", - "title": "Updated from form AJAX call" + "title": "Andrew's integration test - Updated from form AJAX call" }, - "aim_project_name": "Updated from form AJAX call", + "aim_project_name": "Andrew's integration test - Updated from form AJAX call", "foaf:fundedBy_foaf:Agent": [ "" ], diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru index cbf8935fa4..ed9dc4380e 100644 --- a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Save attachment on Data Record.bru @@ -33,9 +33,9 @@ body:json { "": {}, "rdmp": { "oid": "{{dmpOid}}", - "title": "Updated from form AJAX call" + "title": "Andrew's integration test - Updated from form AJAX call" }, - "aim_project_name": "Updated from form AJAX call", + "aim_project_name": "Andrew's integration test - Updated from form AJAX call", "foaf:fundedBy_foaf:Agent": [ "" ], diff --git a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru index c6b926ca25..14c8841e02 100644 --- a/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru +++ b/test/bruno/2 - AJAX calls/1 - Admin User Tests/Update RDMP Metadata using AJAX form call.bru @@ -27,7 +27,7 @@ headers { body:json { { - "title": "Updated from form AJAX call", + "title": "Andrew's integration test - Updated from form AJAX call", "dc:identifier": "http://purl.org/au-research/grants/nhmrc/566728", "description": "Movement of molecules within cells by a process known as membrane transport is critical for normal cell function and also exploited by bacteria to promote infection. The pathway that connects the import pathway to the export pathway is essential for the function of a large number of proteins, however this connecting pathway is poorly characterised. This study will define the machinery of this trafficking pathway, which will provide the ability to modulate biological processes and cytotoxicity.", "finalKeywords": [ diff --git a/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru index 3fa4f42a68..74fbcd9973 100644 --- a/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru +++ b/test/bruno/2 - AJAX calls/3 - Researcher User Tests/Create data record via form.bru @@ -32,9 +32,9 @@ body:json { "": {}, "rdmp": { "oid": "{{dmpOid}}", - "title": "Updated from form AJAX call" + "title": "Andrew's integration test - Updated from form AJAX call" }, - "aim_project_name": "Updated from form AJAX call", + "aim_project_name": "Andrew's integration test - Updated from form AJAX call", "foaf:fundedBy_foaf:Agent": [ "" ], From 00f09794583f9764af253302eb1d3d92f0c2029c Mon Sep 17 00:00:00 2001 From: Mark Cottman-Fields Date: Mon, 27 May 2024 15:44:48 +1000 Subject: [PATCH 16/18] ensure junit output dirs are available Signed-off-by: Mark Cottman-Fields --- support/development/prepareLocalDev.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/support/development/prepareLocalDev.sh b/support/development/prepareLocalDev.sh index 1572f02d16..9aa88daff6 100644 --- a/support/development/prepareLocalDev.sh +++ b/support/development/prepareLocalDev.sh @@ -21,6 +21,8 @@ mkdir -p support/integration-testing/.tmp/attachments/staging sudo chmod -R 777 support/integration-testing mkdir -p .tmp/junit +mkdir -p .tmp/junit/backend-bruno +mkdir -p .tmp/junit/backend-mocha sudo chmod -R 777 .tmp mkdir -p support/development/.dev From aada9a218387d27d5bfce88923635a6557a77303 Mon Sep 17 00:00:00 2001 From: Mark Cottman-Fields Date: Mon, 27 May 2024 15:55:12 +1000 Subject: [PATCH 17/18] reuse npm run instead of duplicate docker compose command Signed-off-by: Mark Cottman-Fields --- .circleci/config.yml | 10 +++++----- package.json | 3 +++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b0b9c7a592..0a1f4d8ec1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -78,7 +78,7 @@ jobs: command: | mkdir -p /tmp/.codecov-cli cd /tmp/.codecov-cli - curl https://keybase.io/codecovsecurity/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import # One-time step + curl https://keybase.io/codecovsecurity/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import curl -Os https://cli.codecov.io/latest/linux/codecov curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM.sig @@ -95,10 +95,10 @@ jobs: cd support/integration-testing sudo mkdir -p .tmp/attachments/staging sudo chmod -R 777 . - docker-compose -f docker-compose.bruno.yml up --abort-on-container-exit --exit-code-from redboxportal - docker-compose -f docker-compose.bruno.yml down - docker-compose -f docker-compose.mocha.yml up --abort-on-container-exit --exit-code-from redboxportal - docker-compose -f docker-compose.mocha.yml down + npm run test:bruno + npm run test:bruno:clean + npm run test:mocha + npm run test:mocha:clean - run: name: Upload Bruno and mocha code coverage command: | diff --git a/package.json b/package.json index 62cc6ae767..24ca49229d 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,9 @@ "debug": "node debug app.js", "start": "node app.js", "test:mocha": "docker compose -f ./support/integration-testing/docker-compose.mocha.yml up --abort-on-container-exit --exit-code-from redboxportal", + "test:mocha:clean": "docker compose -f ./support/integration-testing/docker-compose.mocha.yml down", "test:bruno": "docker compose -f ./support/integration-testing/docker-compose.bruno.yml up --abort-on-container-exit --exit-code-from bruno", + "test:bruno:clean": "docker compose -f ./support/integration-testing/docker-compose.bruno.yml down", "test:angular": "./support/unit-testing/angular/testDevAngular.sh", "doc-ng2": "npm -g install @compodoc/compodoc && npm -g install ejs-cli aglio && compodoc -p angular/tsconfig.json -d support/docs/generated/ng2 -n \"ReDBox Portal - NG2 Apps\" --theme postmark --includes support/docs && ejs-cli views/default/default/apidocsapib.ejs -O '{\"portal\":\"rdmp\",\"branding\":\"default\",\"baseUrl\":\"https://demo.redboxresearchdata.com.au\"}' > apidocs.apib && aglio -i apidocs.apib -o rest-api.html && mv rest-api.html support/docs/generated/ng2/additional-documentation/", "compile:sails": "npm install && ./node_modules/.bin/tsc --project tsconfig.json", @@ -91,6 +93,7 @@ "compile:ng-legacy": "./support/development/compileDevAngularLegacy.sh", "compile:ng": "npm run compile:ng-apps && npm run compile:ng-legacy", "dev:run": "docker compose -f ./support/development/docker-compose.yml up", + "dev:run:clean": "docker compose -f ./support/development/docker-compose.yml down", "dev:all": "npm run compile:sails && npm run compile:ng && npm run dev:run", "webpack": "NODE_ENV=docker WEBPACK_CSS_MINI=true node support/build/wrapper-webpack.js", "dev:prepare": "./support/development/prepareLocalDev.sh" From d7e84cad07f3961a3e21a4236214e08a7c296cf9 Mon Sep 17 00:00:00 2001 From: Mark Cottman-Fields Date: Mon, 27 May 2024 16:32:54 +1000 Subject: [PATCH 18/18] make .tmp folders consistently created in top-level dir Signed-off-by: Mark Cottman-Fields --- .circleci/config.yml | 4 +--- support/development/prepareLocalDev.sh | 4 +--- support/integration-testing/docker-compose.bruno.yml | 10 +++++----- support/integration-testing/docker-compose.mocha.yml | 2 +- support/integration-testing/docker-compose.yml | 2 +- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0a1f4d8ec1..70cb81bd0a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -88,13 +88,11 @@ jobs: - run: name: Run Bruno and Mocha tests with code coverage command: | - sudo mkdir -p .tmp/junit sudo mkdir -p .tmp/junit/backend-bruno sudo mkdir -p .tmp/junit/backend-mocha - sudo chmod -R 777 . - cd support/integration-testing sudo mkdir -p .tmp/attachments/staging sudo chmod -R 777 . + cd support/integration-testing npm run test:bruno npm run test:bruno:clean npm run test:mocha diff --git a/support/development/prepareLocalDev.sh b/support/development/prepareLocalDev.sh index 9aa88daff6..14fafe1273 100644 --- a/support/development/prepareLocalDev.sh +++ b/support/development/prepareLocalDev.sh @@ -17,12 +17,10 @@ sudo rm -r support/development/.dev || true sudo rm -r support/development/devdata || true # ensure folders are created so that local dev can access them -mkdir -p support/integration-testing/.tmp/attachments/staging sudo chmod -R 777 support/integration-testing - -mkdir -p .tmp/junit mkdir -p .tmp/junit/backend-bruno mkdir -p .tmp/junit/backend-mocha +mkdir -p .tmp/attachments/staging sudo chmod -R 777 .tmp mkdir -p support/development/.dev diff --git a/support/integration-testing/docker-compose.bruno.yml b/support/integration-testing/docker-compose.bruno.yml index b288d4d83d..08af40c7e4 100755 --- a/support/integration-testing/docker-compose.bruno.yml +++ b/support/integration-testing/docker-compose.bruno.yml @@ -5,8 +5,8 @@ services: bruno: image: node:20.13.1-buster volumes: - - "../../test/bruno:/tests" - - "./.tmp/junit:/junit" + - "../..:/opt/redbox-portal" + - "../../.tmp/attachments:/attachments" working_dir: /tests depends_on: redboxportal: @@ -16,13 +16,13 @@ services: aliases: - bruno entrypoint: >- - /bin/bash -c "cd /tests && + /bin/bash -c "cd /opt/redbox-portal/test/bruno && npm install -g @usebruno/cli && npm install && bru run --env int-test --format junit - --output /junit/backend-bruno/backend-bruno.xml + --output /opt/redbox-portal/.tmp/junit/backend-bruno/backend-bruno.xml --bail" redboxportal: image: qcifengineering/redbox-portal:develop @@ -32,7 +32,7 @@ services: # - "9876:9876" volumes: - "../..:/opt/redbox-portal" - - "./.tmp/attachments:/attachments" + - "../../.tmp/attachments:/attachments" healthcheck: test: ["CMD-SHELL", "curl http://localhost:1500"] interval: 5s diff --git a/support/integration-testing/docker-compose.mocha.yml b/support/integration-testing/docker-compose.mocha.yml index 5565bd34f7..0c567a556c 100755 --- a/support/integration-testing/docker-compose.mocha.yml +++ b/support/integration-testing/docker-compose.mocha.yml @@ -10,7 +10,7 @@ services: # - "9876:9876" volumes: - "../../:/opt/redbox-portal" - - "./.tmp/attachments:/attachments" + - "../../.tmp/attachments:/attachments" expose: - "1500" environment: diff --git a/support/integration-testing/docker-compose.yml b/support/integration-testing/docker-compose.yml index 9ea75b0f8b..e7212a6094 100644 --- a/support/integration-testing/docker-compose.yml +++ b/support/integration-testing/docker-compose.yml @@ -8,7 +8,7 @@ services: - "1500:1500" volumes: - "../../:/opt/redbox-portal" - - "./.tmp/attachments:/attachments" + - "../../.tmp/attachments:/attachments" expose: - "1500" environment: