+Cypress.Commands.add(
+ "collectionReplaceFiles", (token, uuid, data) => {
+ return cy.updateResource(token, 'collections', uuid, {
+ collection: {
+ preserve_version: true,
+ },
+ replace_files: JSON.stringify(data)
+ })
+ }
+)
+
+Cypress.Commands.add(
+ "getContainer", (token, uuid) => {
+ return cy.getResource(token, 'containers', uuid)
+ }
+)
+
+Cypress.Commands.add(
+ "updateContainer", (token, uuid, data) => {
+ return cy.updateResource(token, 'containers', uuid, {
+ container: JSON.stringify(data)
+ })
+ }
+)
+
+Cypress.Commands.add(
+ "getContainerRequest", (token, uuid) => {
+ return cy.getResource(token, 'container_requests', uuid)
+ }
+)
+
+Cypress.Commands.add(
+ 'createContainerRequest', (token, data) => {
+ return cy.createResource(token, 'container_requests', {
+ container_request: JSON.stringify(data),
+ ensure_unique_name: true
+ })
+ }
+)
+
+Cypress.Commands.add(
+ "updateContainerRequest", (token, uuid, data) => {
+ return cy.updateResource(token, 'container_requests', uuid, {
+ container_request: JSON.stringify(data)
+ })
+ }
+)
+
+/**
+ * Requires an admin token for log_uuid modification to succeed
+ */
+Cypress.Commands.add(
+ "appendLog", (token, crUuid, fileName, lines = []) => (
+ cy.getContainerRequest(token, crUuid).then((containerRequest) => {
+ if (containerRequest.log_uuid) {
+ cy.listContainerRequestLogs(token, crUuid).then((logFiles) => {
+ const filePath = `${containerRequest.log_uuid}/${containerLogFolderPrefix}${containerRequest.container_uuid}/${fileName}`;
+ if (logFiles.find((file) => (file.name === fileName))) {
+ // File exists, fetch and append
+ return cy.doWebDAVRequest(
+ "GET",
+ `c=${filePath}`,
+ null,
+ null,
+ token
+ )
+ .then(({ body: contents }) => cy.doWebDAVRequest(
+ "PUT",
+ `c=${filePath}`,
+ contents.split("\n").concat(lines).join("\n"),
+ null,
+ token
+ ));
+ } else {
+ // File not exists, put new file
+ cy.doWebDAVRequest(
+ "PUT",
+ `c=${filePath}`,
+ lines.join("\n"),
+ null,
+ token
+ )
+ }
+ });
+ } else {
+ // Create log collection
+ return cy.createCollection(token, {
+ name: `Test log collection ${Math.floor(Math.random() * 999999)}`,
+ owner_uuid: containerRequest.owner_uuid,
+ manifest_text: ""
+ }).then((collection) => {
+ // Update CR log_uuid to fake log collection
+ cy.updateContainerRequest(token, containerRequest.uuid, {
+ log_uuid: collection.uuid,
+ }).then(() => (
+ // Create empty directory for container uuid
+ cy.collectionReplaceFiles(token, collection.uuid, {
+ [`/${containerLogFolderPrefix}${containerRequest.container_uuid}`]: "d41d8cd98f00b204e9800998ecf8427e+0"
+ }).then(() => (
+ // Put new log file with contents into fake log collection
+ cy.doWebDAVRequest(
+ 'PUT',
+ `c=${collection.uuid}/${containerLogFolderPrefix}${containerRequest.container_uuid}/${fileName}`,
+ lines.join('\n'),
+ null,
+ token
+ )
+ ))
+ ));
+ });
+ }
+ })
+ )
+)
+
+Cypress.Commands.add(
+ "listContainerRequestLogs", (token, crUuid) => (
+ cy.getContainerRequest(token, crUuid).then((containerRequest) => (
+ cy.doWebDAVRequest('PROPFIND', `c=${containerRequest.log_uuid}/${containerLogFolderPrefix}${containerRequest.container_uuid}`, null, null, token)
+ .then(({body: data}) => {
+ return extractFilesData(new DOMParser().parseFromString(data, "text/xml"));
+ })
+ ))
+ )
+);
+