+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"));