From 43d46f3a735def6d888e77b34815028086ffda12 Mon Sep 17 00:00:00 2001 From: Douglas Cerna Date: Tue, 2 Jan 2024 17:47:13 -0600 Subject: [PATCH] Show task details in v2beta jobs API endpoint This adds a `detailed` parameter to the `api/v2beta/jobs` API endpoint. When the parameter is sent in the request the endpoint will return all the task properties returned by the `api/v2beta/task` endpoint. --- src/dashboard/src/components/api/urls.py | 8 +- src/dashboard/src/components/api/views.py | 14 +- src/dashboard/tests/fixtures/files.json | 74 - src/dashboard/tests/fixtures/jobs-failed.json | 36 - .../tests/fixtures/jobs-processing.json | 682 -------- .../tests/fixtures/jobs-rejected.json | 36 - .../jobs-sip-complete-clean-up-last.json | 1413 ----------------- .../tests/fixtures/jobs-transfer-backlog.json | 87 - .../fixtures/jobs-transfer-complete.json | 104 -- .../tests/fixtures/jobs-user-input.json | 19 - .../tests/fixtures/jobs-various.json | 274 ---- src/dashboard/tests/fixtures/units.json | 77 - src/dashboard/tests/test_api.py | 1362 +++++++++------- 13 files changed, 840 insertions(+), 3346 deletions(-) delete mode 100644 src/dashboard/tests/fixtures/files.json delete mode 100644 src/dashboard/tests/fixtures/jobs-failed.json delete mode 100644 src/dashboard/tests/fixtures/jobs-processing.json delete mode 100644 src/dashboard/tests/fixtures/jobs-rejected.json delete mode 100644 src/dashboard/tests/fixtures/jobs-sip-complete-clean-up-last.json delete mode 100644 src/dashboard/tests/fixtures/jobs-transfer-backlog.json delete mode 100644 src/dashboard/tests/fixtures/jobs-transfer-complete.json delete mode 100644 src/dashboard/tests/fixtures/jobs-user-input.json delete mode 100644 src/dashboard/tests/fixtures/jobs-various.json delete mode 100644 src/dashboard/tests/fixtures/units.json diff --git a/src/dashboard/src/components/api/urls.py b/src/dashboard/src/components/api/urls.py index e66c65da13..f5b5c953d1 100644 --- a/src/dashboard/src/components/api/urls.py +++ b/src/dashboard/src/components/api/urls.py @@ -47,6 +47,7 @@ r"ingest/status/(?P" + settings.UUID_REGEX + ")", views.status, {"unit_type": "unitSIP"}, + name="ingest_status", ), re_path( r"ingest/waiting", views.waiting_for_user_input, name="waiting_for_user_input" @@ -56,8 +57,13 @@ + settings.UUID_REGEX + ")/delete/", views.mark_hidden, + name="mark_hidden", + ), + re_path( + r"^(?Ptransfer|ingest)/delete/", + views.mark_completed_hidden, + name="mark_completed_hidden", ), - re_path(r"^(?Ptransfer|ingest)/delete/", views.mark_completed_hidden), re_path( r"^ingest/reingest/approve", views.reingest_approve, name="reingest_approve" ), diff --git a/src/dashboard/src/components/api/views.py b/src/dashboard/src/components/api/views.py index acee7b930b..4bc90e9b3a 100644 --- a/src/dashboard/src/components/api/views.py +++ b/src/dashboard/src/components/api/views.py @@ -242,7 +242,6 @@ def get_unit_status(unit_uuid, unit_type): def status(request, unit_uuid, unit_type): # Example: http://127.0.0.1/api/transfer/status/?username=mike&api_key= response = {} - error = None # Get info about unit if unit_type == "unitTransfer": @@ -283,12 +282,6 @@ def status(request, unit_uuid, unit_type): return _error_response(msg, status_code=400) response.update(status_info) - if error is not None: - response["message"] = error - response["error"] = True - return django.http.HttpResponseServerError( # 500 - json.dumps(response), content_type="application/json" - ) response["message"] = f"Fetched status for {unit_uuid} successfully." return helpers.json_response(response) @@ -934,10 +927,15 @@ def unit_jobs(request, unit_uuid): name = remove_prefix(name, "Job:") jobs = jobs.filter(jobtype=name.strip()) + detailed_output = "detailed" in request.GET + for job in jobs.prefetch_related("task_set"): job_link_uuid = job.microservicechainlink link_uuid = str(job_link_uuid) if job_link_uuid is not None else None - tasks = [format_task(task) for task in job.task_set.all()] + tasks = [ + format_task(task, detailed_output=detailed_output) + for task in job.task_set.all() + ] result.append( { "uuid": str(job.jobuuid), diff --git a/src/dashboard/tests/fixtures/files.json b/src/dashboard/tests/fixtures/files.json deleted file mode 100644 index bc2af6a67f..0000000000 --- a/src/dashboard/tests/fixtures/files.json +++ /dev/null @@ -1,74 +0,0 @@ -[ -{ - "pk": "590bd882-7521-498c-8f89-0958218f779d", - "model": "main.file", - "fields": { - "filegrpuuid": "", - "sip": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "originallocation": "JVNJUERpcmVjdG9yeSVvYmplY3RzL3N1Ym1pc3Npb25Eb2N1bWVudGF0aW9uL3RyYW5zZmVyLW5vLW1ldGFkYXRhLTQ2MjYwODA3LWVjZTEtNGEwZS1iNzBhLTk4MTRjNzAxMTQ2Yi9NRVRTLnhtbA==", - "transfer": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "filegrpuse": "submissionDocumentation", - "removedtime": null, - "label": "", - "checksum": "51132e5ce1b5d2c2c363f05495f447ea924ab29c2cda2c11037b5fca2119e45a", - "enteredsystem": "2015-06-24T17:22:09Z", - "modificationtime": "2015-06-24T17:22:09Z", - "currentlocation": "JVNJUERpcmVjdG9yeSVvYmplY3RzL3N1Ym1pc3Npb25Eb2N1bWVudGF0aW9uL3RyYW5zZmVyLW5vLW1ldGFkYXRhLTQ2MjYwODA3LWVjZTEtNGEwZS1iNzBhLTk4MTRjNzAxMTQ2Yi9NRVRTLnhtbA==", - "size": 12222 - } -}, -{ - "pk": "8140ebe5-295c-490b-a34a-83955b7c844e", - "model": "main.file", - "fields": { - "filegrpuuid": "", - "sip": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "originallocation": "JVNJUERpcmVjdG9yeSVvYmplY3RzL2V2ZWx5bl9zX3Bob3RvLTYzODNiNzMxLTk5ZTAtNDMyZC1hOTExLWEwZDJkZmQxY2U3Ni50aWY=", - "transfer": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "filegrpuse": "preservation", - "removedtime": null, - "label": "", - "checksum": "d82448f154b9185bc777ecb0a3602760eb76ba85dd3098f073b2c91a03f571e9", - "enteredsystem": "2015-06-24T17:22:09Z", - "modificationtime": "2015-06-24T17:22:09Z", - "currentlocation": "JVNJUERpcmVjdG9yeSVvYmplY3RzL2V2ZWx5bl9zX3Bob3RvLTYzODNiNzMxLTk5ZTAtNDMyZC1hOTExLWEwZDJkZmQxY2U3Ni50aWY=", - "size": 1446772 - } -}, -{ - "pk": "ae8d4290-fe52-4954-b72a-0f591bee2e2f", - "model": "main.file", - "fields": { - "filegrpuuid": "", - "sip": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "originallocation": "JVNJUERpcmVjdG9yeSVvYmplY3RzL2V2ZWx5bidzIHBob3RvLmpwZw==", - "transfer": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "filegrpuse": "original", - "removedtime": null, - "label": "", - "checksum": "d2bed92b73c7090bb30a0b30016882e7069c437488e1513e9deaacbe29d38d92", - "enteredsystem": "2015-06-24T17:22:09Z", - "modificationtime": "2015-06-24T17:22:09Z", - "currentlocation": "JVNJUERpcmVjdG9yeSVvYmplY3RzL2V2ZWx5bl9zX3Bob3RvLmpwZw==", - "size": 158131 - } -}, -{ - "pk": "66370f14-2f64-4750-9d50-547614be40e8", - "model": "main.file", - "fields": { - "filegrpuuid": "", - "sip": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "originallocation": "JVNJUERpcmVjdG9yeSVtZXRhZGF0YS9tZXRhZGF0YS5jc3Y=", - "transfer": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "filegrpuse": "metadata", - "removedtime": null, - "label": "", - "checksum": "e8121d8a660e2992872f0b67923d2d08dde9a1ba72dfd58e5a31e68fbac3633c", - "enteredsystem": "2015-06-24T17:32:09Z", - "modificationtime": "2015-06-24T17:32:09Z", - "currentlocation": "JVNJUERpcmVjdG9yeSVvYmplY3RzL21ldGFkYXRhL21ldGFkYXRhLmNzdg==", - "size": 154 - } -} -] diff --git a/src/dashboard/tests/fixtures/jobs-failed.json b/src/dashboard/tests/fixtures/jobs-failed.json deleted file mode 100644 index 85c51c0a3b..0000000000 --- a/src/dashboard/tests/fixtures/jobs-failed.json +++ /dev/null @@ -1,36 +0,0 @@ -[ - { - "fields": { - "microservicegroup": "Failed transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-05T00:10:53Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.1840100000", - "jobtype": "Email fail report" - }, - "model": "main.job", - "pk": "a25f789e-57ae-4190-9188-7a22bc0ef1c4" - }, - { - "fields": { - "microservicegroup": "Failed transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-05T00:10:54Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.3763290000", - "jobtype": "Move to the failed directory" - }, - "model": "main.job", - "pk": "7d9ba893-08f1-4678-9fe9-294fdc729c55" - } -] diff --git a/src/dashboard/tests/fixtures/jobs-processing.json b/src/dashboard/tests/fixtures/jobs-processing.json deleted file mode 100644 index 4ccf9622ee..0000000000 --- a/src/dashboard/tests/fixtures/jobs-processing.json +++ /dev/null @@ -1,682 +0,0 @@ -[ - { - "fields": { - "microservicegroup": "Approve transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:17Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/activeTransfers/standardTransfer/test/", - "hidden": false, - "createdtimedec": "0.4155370000", - "jobtype": "Approve standard transfer" - }, - "model": "main.job", - "pk": "6bf94518-3106-453e-abc4-4c719cb7a8da" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:38Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/activeTransfers/standardTransfer/test/", - "hidden": false, - "createdtimedec": "0.8058570000", - "jobtype": "Set file permissions" - }, - "model": "main.job", - "pk": "615d5563-9044-4493-a806-e571051817fd" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:38Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/activeTransfers/standardTransfer/test/", - "hidden": false, - "createdtimedec": "0.8716200000", - "jobtype": "Move to processing directory" - }, - "model": "main.job", - "pk": "9faf185a-3068-4ade-ae51-9938a6840806" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:39Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.6059340000", - "jobtype": "Remove hidden files and directories" - }, - "model": "main.job", - "pk": "1abdb2a7-c511-42a3-b1fd-3e3cadbfd317" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:39Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.2887440000", - "jobtype": "Set transfer type: Standard" - }, - "model": "main.job", - "pk": "5c4d776c-1d45-4233-b09c-3ede6ef19db4" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:39Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.6515340000", - "jobtype": "Remove unneeded files" - }, - "model": "main.job", - "pk": "81ff6cf8-cb42-45ca-b8fe-654b1f89eceb" - }, - { - "fields": { - "microservicegroup": "Include default Transfer processingMCP.xml", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:40Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.8457930000", - "jobtype": "Include default Transfer processingMCP.xml" - }, - "model": "main.job", - "pk": "1dfbe839-9c19-4f1e-8318-98fc4cf72517" - }, - { - "fields": { - "microservicegroup": "Rename with transfer UUID", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:40Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.5093860000", - "jobtype": "Rename with transfer UUID" - }, - "model": "main.job", - "pk": "2191efa6-0748-4a06-9911-696cade81914" - }, - { - "fields": { - "microservicegroup": "Assign file UUIDs and checksums", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:40Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.9046090000", - "jobtype": "Set file permissions" - }, - "model": "main.job", - "pk": "3d5e75d5-73dc-4ab2-8420-fc0d55dab722" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:40Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.4806200000", - "jobtype": "Verify mets_structmap.xml compliance" - }, - "model": "main.job", - "pk": "3ef1a59e-5f47-4937-ab13-0351e31b867d" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:40Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.3975920000", - "jobtype": "Verify transfer compliance" - }, - "model": "main.job", - "pk": "a01813ce-ec09-4b66-a50f-cbdaf71d5f78" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:40Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.1517180000", - "jobtype": "Attempt restructure for compliance" - }, - "model": "main.job", - "pk": "cd8cb1f4-20c7-42bb-90a1-2d803148e2a9" - }, - { - "fields": { - "microservicegroup": "Reformat metadata files", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:41Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.7053210000", - "jobtype": "Process transfer JSON metadata" - }, - "model": "main.job", - "pk": "53825202-5c61-4518-af8a-d34dd990c9d2" - }, - { - "fields": { - "microservicegroup": "Assign file UUIDs and checksums", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:41Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.3362880000", - "jobtype": "Assign checksums and file sizes to objects" - }, - "model": "main.job", - "pk": "6da52038-d3c9-4072-8802-b44277fc1a60" - }, - { - "fields": { - "microservicegroup": "Generate METS.xml document", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:41Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.7862900000", - "jobtype": "Generate METS.xml document" - }, - "model": "main.job", - "pk": "98910778-19ab-4d3f-9016-052502444af3" - }, - { - "fields": { - "microservicegroup": "Assign file UUIDs and checksums", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:41Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.1868000000", - "jobtype": "Assign file UUIDs to objects" - }, - "model": "main.job", - "pk": "9d4fc8c6-94dc-40ae-807c-a09841e041a4" - }, - { - "fields": { - "microservicegroup": "Verify transfer checksums", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:41Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.7571490000", - "jobtype": "Verify metadata directory checksums" - }, - "model": "main.job", - "pk": "d1e01430-17dd-4aaa-bad9-761cad6d801c" - }, - { - "fields": { - "microservicegroup": "Scan for viruses", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:42Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.8022160000", - "jobtype": "Scan for viruses" - }, - "model": "main.job", - "pk": "559bb0d7-7ab7-4959-a687-b2c9a319f0c4" - }, - { - "fields": { - "microservicegroup": "Generate transfer structure report", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:43Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.5095610000", - "jobtype": "Move to generate transfer tree" - }, - "model": "main.job", - "pk": "10af6eb8-7d9c-463c-8065-71bbe4ed39fd" - }, - { - "fields": { - "microservicegroup": "Change transfer filenames", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:44Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.8298590000", - "jobtype": "Change object and directory filenames" - }, - "model": "main.job", - "pk": "8c66a191-3d5d-4f60-9179-7200f4f04000" - }, - { - "fields": { - "microservicegroup": "Generate transfer structure report", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:44Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.7965480000", - "jobtype": "Generate transfer structure report" - }, - "model": "main.job", - "pk": "9b8b0638-42b0-4c4e-8049-44c82a087da3" - }, - { - "fields": { - "microservicegroup": "Generate transfer structure report", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:44Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/createTree/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4898710000", - "jobtype": "Move to processing directory" - }, - "model": "main.job", - "pk": "bfb72604-ebd5-443b-9e58-2cbf964fb0f5" - }, - { - "fields": { - "microservicegroup": "Identify file format", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:45Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4615070000", - "jobtype": "Move to select file ID tool" - }, - "model": "main.job", - "pk": "539126ec-0cd3-4fd5-82ab-071a54104a54" - }, - { - "fields": { - "microservicegroup": "Change transfer filenames", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:45Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.1601980000", - "jobtype": "Change filename of transfer" - }, - "model": "main.job", - "pk": "9483fb19-42b6-4997-a285-50ec51040475" - }, - { - "fields": { - "microservicegroup": "Identify file format", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:46Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolTransfer/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4190500000", - "jobtype": "Select file format identification command" - }, - "model": "main.job", - "pk": "166a5bab-b26c-4193-be01-b484697fbff5" - }, - { - "fields": { - "microservicegroup": "Identify file format", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:46Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolTransfer/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4387120000", - "jobtype": "Identify file format" - }, - "model": "main.job", - "pk": "2583f129-fb13-4505-a0ac-969c6cd26cb8" - }, - { - "fields": { - "microservicegroup": "Extract packages", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:46Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolTransfer/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.9587440000", - "jobtype": "Move to extract packages" - }, - "model": "main.job", - "pk": "2e358bb9-0cb6-47e6-b7d3-5ce35d09ed5f" - }, - { - "fields": { - "microservicegroup": "Identify file format", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:46Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolTransfer/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4334650000", - "jobtype": "Determine which files to identify" - }, - "model": "main.job", - "pk": "c40a7c98-62af-44bd-b0eb-772b8a7a22a4" - }, - { - "fields": { - "microservicegroup": "Extract packages", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:47Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/extractPackagesChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4336080000", - "jobtype": "Determine if transfer contains packages" - }, - "model": "main.job", - "pk": "1292f7ea-2082-48ae-8cd7-b6917701b881" - }, - { - "fields": { - "microservicegroup": "Update METS.xml document", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:47Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/extractPackagesChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.7387820000", - "jobtype": "Add processed structMap to METS.xml document" - }, - "model": "main.job", - "pk": "e6afed55-0515-4eab-9f13-b94b29b0a9f7" - }, - { - "fields": { - "microservicegroup": "Characterize and extract metadata", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:48Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/extractPackagesChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.1534420000", - "jobtype": "Characterize and extract metadata" - }, - "model": "main.job", - "pk": "d3188c35-ef00-4908-96d1-34cb4c0bf5bb" - }, - { - "fields": { - "microservicegroup": "Validation", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:53Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/extractPackagesChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.3611920000", - "jobtype": "Validate formats" - }, - "model": "main.job", - "pk": "8b91b8a5-2427-46ff-8b79-284de4915ae0" - }, - { - "fields": { - "microservicegroup": "Characterize and extract metadata", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:53Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/extractPackagesChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.7601000000", - "jobtype": "Load labels from metadata/file_labels.csv" - }, - "model": "main.job", - "pk": "938c9e6b-a8f9-4b15-80a0-6b608e6b42b0" - }, - { - "fields": { - "microservicegroup": "Examine contents", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:55Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/extractPackagesChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.3745480000", - "jobtype": "Move to examine contents" - }, - "model": "main.job", - "pk": "ff51be12-98bc-4e9d-9417-6602bbf77245" - }, - { - "fields": { - "microservicegroup": "Examine contents", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:56Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/examineContentsChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.5187020000", - "jobtype": "Check for specialized processing" - }, - "model": "main.job", - "pk": "c722e558-a6d4-4f08-a386-ef25b4f37d22" - }, - { - "fields": { - "microservicegroup": "Complete transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:56Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/examineContentsChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.5258070000", - "jobtype": "Create transfer metadata XML" - }, - "model": "main.job", - "pk": "e40aebf5-214c-46b5-9892-1ee4c20982c1" - }, - { - "fields": { - "microservicegroup": "Complete transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:56Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/examineContentsChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.8767640000", - "jobtype": "Move to SIP creation directory for completed transfers" - }, - "model": "main.job", - "pk": "e4d55e9e-9061-4939-9d43-b05fef6f2fbe" - }, - { - "fields": { - "microservicegroup": "Examine contents", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:56Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/examineContentsChoice/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4876810000", - "jobtype": "Examine contents?" - }, - "model": "main.job", - "pk": "ee3b39f6-2d57-431d-bdd6-6d38f50de371" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:57Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4846150000", - "jobtype": "Load options to create SIPs" - }, - "model": "main.job", - "pk": "3ed5ec03-ee7d-4ddc-bdfc-3b1e07170c2b" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 3, - "subjobof": "", - "createdtime": "2016-10-04T22:50:57Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4440550000", - "jobtype": "Check transfer directory for objects" - }, - "model": "main.job", - "pk": "7bd82bc3-0694-4182-8f72-48fb13f0e8e8" - } -] diff --git a/src/dashboard/tests/fixtures/jobs-rejected.json b/src/dashboard/tests/fixtures/jobs-rejected.json deleted file mode 100644 index 7ab5df2752..0000000000 --- a/src/dashboard/tests/fixtures/jobs-rejected.json +++ /dev/null @@ -1,36 +0,0 @@ -[ - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:48:17Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.8561500000", - "jobtype": "Create SIP(s)" - }, - "model": "main.job", - "pk": "59ace00b-4830-4314-a7d9-38fdbef64896" - }, - { - "fields": { - "microservicegroup": "Reject transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:48:27Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.1582580000", - "jobtype": "Move to the rejected directory" - }, - "model": "main.job", - "pk": "b7902aae-ec5f-4290-a3d7-c47f844e8774" - } -] diff --git a/src/dashboard/tests/fixtures/jobs-sip-complete-clean-up-last.json b/src/dashboard/tests/fixtures/jobs-sip-complete-clean-up-last.json deleted file mode 100644 index 10d0268ba1..0000000000 --- a/src/dashboard/tests/fixtures/jobs-sip-complete-clean-up-last.json +++ /dev/null @@ -1,1413 +0,0 @@ -[ - { - "fields": { - "microservicegroup": "Verify SIP compliance", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:56Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/system/autoProcessSIP/test/", - "hidden": false, - "createdtimedec": "0.4254590000", - "jobtype": "Move to processing directory" - }, - "model": "main.job", - "pk": "40554613-5bd1-4d51-87ac-9f15b4a59c6c" - }, - { - "fields": { - "microservicegroup": "Verify SIP compliance", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:56Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.7398420000", - "jobtype": "Verify SIP compliance" - }, - "model": "main.job", - "pk": "85942c06-b028-429c-bb67-2b17537ceb65" - }, - { - "fields": { - "microservicegroup": "Rename SIP directory with SIP UUID", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:56Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.8845960000", - "jobtype": "Rename SIP directory with SIP UUID" - }, - "model": "main.job", - "pk": "86249e4d-7d23-4b76-b105-4c63293a96be" - }, - { - "fields": { - "microservicegroup": "Rename SIP directory with SIP UUID", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:56Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.8116700000", - "jobtype": "Check if SIP is from Maildir Transfer" - }, - "model": "main.job", - "pk": "adeb24bd-c1ec-48f0-b961-0312014fb5f5" - }, - { - "fields": { - "microservicegroup": "Verify SIP compliance", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:56Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/system/autoProcessSIP/test/", - "hidden": false, - "createdtimedec": "0.3372020000", - "jobtype": "Set file permissions" - }, - "model": "main.job", - "pk": "b9b23554-1fc4-496f-b8a6-8f6d5dd5b15a" - }, - { - "fields": { - "microservicegroup": "Verify transfer compliance", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:56Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test/", - "hidden": false, - "createdtimedec": "0.7839960000", - "jobtype": "Verify mets_structmap.xml compliance" - }, - "model": "main.job", - "pk": "bc296d61-b8b3-44cb-80cb-fd48e9836eac" - }, - { - "fields": { - "microservicegroup": "Change SIP filenames", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:57Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9721070000", - "jobtype": "Load Dublin Core metadata from disk" - }, - "model": "main.job", - "pk": "02b12c64-74bb-46ce-ab55-4e9de7494e39" - }, - { - "fields": { - "microservicegroup": "Change SIP filenames", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:57Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.5839220000", - "jobtype": "Set file permissions" - }, - "model": "main.job", - "pk": "66115eff-931a-48e6-916b-60649586085c" - }, - { - "fields": { - "microservicegroup": "Remove cache files", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:57Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2731300000", - "jobtype": "Remove cache files" - }, - "model": "main.job", - "pk": "bedc5bec-bc01-4736-afa9-eeb78c39afbf" - }, - { - "fields": { - "microservicegroup": "Include default SIP processingMCP.xml", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:57Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2204110000", - "jobtype": "Include default SIP processingMCP.xml" - }, - "model": "main.job", - "pk": "c967f32e-90f2-4952-92c2-b281ab278f71" - }, - { - "fields": { - "microservicegroup": "Change SIP filenames", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:57Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6769300000", - "jobtype": "Change SIP filename" - }, - "model": "main.job", - "pk": "ef9498c1-418d-4c28-9b73-30c38f0c3476" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:58Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2809660000", - "jobtype": "Identify manually normalized files" - }, - "model": "main.job", - "pk": "00f244db-6890-46a2-bb08-fa0f673dca02" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:58Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9485720000", - "jobtype": "Grant normalization options for no pre-existing DIP" - }, - "model": "main.job", - "pk": "6d8d3e67-9a95-4c65-a9ce-bb3fece6b11f" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:58Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9244260000", - "jobtype": "Set remove preservation and access normalized files to renormalize link." - }, - "model": "main.job", - "pk": "78223479-e4fe-4a4b-b765-7c83ac117dd1" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:58Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9709600000", - "jobtype": "Move to select file ID tool" - }, - "model": "main.job", - "pk": "94cd4dd0-a547-4bee-999c-6b5b256b218c" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:58Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3109450000", - "jobtype": "Check for Service directory" - }, - "model": "main.job", - "pk": "bc7d9217-732f-4f59-89c6-150a4559d8fd" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:58Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6265520000", - "jobtype": "Check for Access directory" - }, - "model": "main.job", - "pk": "de2cfc4d-c9f9-4ac8-8e08-22ec21bec63d" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:59Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolIngest/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6288920000", - "jobtype": "Normalize" - }, - "model": "main.job", - "pk": "160c875c-2f9c-4753-8edc-ae9f26c6ce3c" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:59Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolIngest/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2992880000", - "jobtype": "Select pre-normalize file format identification command" - }, - "model": "main.job", - "pk": "1a607cab-0ef7-420e-8235-123862e1eee4" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:59Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolIngest/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6229210000", - "jobtype": "Resume after normalization file identification tool selected." - }, - "model": "main.job", - "pk": "9a2ae052-dce3-43d8-ab48-e94dab8f1cc6" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:59Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolIngest/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3102850000", - "jobtype": "Identify file format" - }, - "model": "main.job", - "pk": "bc54f710-527d-44ba-81bc-298e9fdf4f44" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:33Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/selectFormatIDToolIngest/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.7844440000", - "jobtype": "Move to processing directory" - }, - "model": "main.job", - "pk": "104994f9-d19f-46d2-a29c-504eed790c18" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:34Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.1301330000", - "jobtype": "Create thumbnails directory" - }, - "model": "main.job", - "pk": "21ae4db2-291e-4dfb-8521-714bba3abbbe" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:34Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.1651430000", - "jobtype": "Normalize for thumbnails" - }, - "model": "main.job", - "pk": "9313747d-9fba-4004-a2b1-24642dff9be7" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:35Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2927860000", - "jobtype": "Normalize for preservation" - }, - "model": "main.job", - "pk": "1a418733-14c6-475e-8ba4-4c3da1d0c6e7" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:35Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9806470000", - "jobtype": "Set file permissions" - }, - "model": "main.job", - "pk": "c1cb2b23-f559-4b3b-bcee-0b1738c4fe7d" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:36Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.4360160000", - "jobtype": "Normalization report" - }, - "model": "main.job", - "pk": "6b57312a-2f53-49fa-8ae2-912b797a76b2" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:36Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9409570000", - "jobtype": "Move to approve normalization directory" - }, - "model": "main.job", - "pk": "7adbdbc8-4dcf-4a92-b572-00a383f1558c" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:36Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.1560990000", - "jobtype": "Remove files without linking information (failed normalization artifacts etc.)" - }, - "model": "main.job", - "pk": "c8f1df62-87c9-4568-96c4-9a3975126de2" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:38Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/approveNormalization/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.7764100000", - "jobtype": "Move to processing directory" - }, - "model": "main.job", - "pk": "2a177a92-d84c-4865-9d66-a9d0b0395843" - }, - { - "fields": { - "microservicegroup": "Process manually normalized files", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:38Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.4940630000", - "jobtype": "Check for manual normalized files" - }, - "model": "main.job", - "pk": "791af1b1-721c-44f8-896a-0db29b788693" - }, - { - "fields": { - "microservicegroup": "Add final metadata", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:38Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.5252800000", - "jobtype": "Move to metadata reminder" - }, - "model": "main.job", - "pk": "e2e7a23a-ffd4-4ee5-8130-f6587478f1d4" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:38Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.4169400000", - "jobtype": "Set file permissions" - }, - "model": "main.job", - "pk": "e9921e00-ffaf-4ea3-8c6f-f6579bab9d2d" - }, - { - "fields": { - "microservicegroup": "Normalize", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:38Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/approveNormalization/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.4256900000", - "jobtype": "Approve normalization" - }, - "model": "main.job", - "pk": "ee19af5c-1681-43a2-826b-5f24726e0ebd" - }, - { - "fields": { - "microservicegroup": "Add final metadata", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:39Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3326300000", - "jobtype": "Reminder: add metadata if desired" - }, - "model": "main.job", - "pk": "09137a8b-b194-4110-a102-dc3975785310" - }, - { - "fields": { - "microservicegroup": "Transcribe SIP contents", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:39Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.1813980000", - "jobtype": "Transcribe" - }, - "model": "main.job", - "pk": "0d65e0e9-ff63-490a-8186-4a8ccc420640" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:39Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6143940000", - "jobtype": "Copy transfer submission documentation" - }, - "model": "main.job", - "pk": "51616819-1a1c-45e3-a026-ba2cc52c00a7" - }, - { - "fields": { - "microservicegroup": "Add final metadata", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:39Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6723500000", - "jobtype": "Set file permissions" - }, - "model": "main.job", - "pk": "52e24a73-a06c-4c6d-9320-744c54bd7b3a" - }, - { - "fields": { - "microservicegroup": "Transcribe SIP contents", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:39Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.1687770000", - "jobtype": "Transcribe SIP contents" - }, - "model": "main.job", - "pk": "d8970119-aa44-4735-8ee1-c7a10b58863f" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:39Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9643760000", - "jobtype": "Move submission documentation into objects directory" - }, - "model": "main.job", - "pk": "e4e31c6c-e73e-4254-b670-644a0cc8d416" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:39Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9145590000", - "jobtype": "Check for submission documentation" - }, - "model": "main.job", - "pk": "ef1d2cea-1887-48cb-b7b7-ab2fc8836c9b" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:40Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3356390000", - "jobtype": "Assign checksums and file sizes to submissionDocumentation" - }, - "model": "main.job", - "pk": "4cfa3b32-7fac-419b-8431-094329fd7aaf" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:40Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.1389600000", - "jobtype": "Assign file UUIDs to submission documentation" - }, - "model": "main.job", - "pk": "535400a0-0716-4e55-83dc-9faa1112ba7c" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:40Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9827810000", - "jobtype": "Scan for viruses in submission documentation" - }, - "model": "main.job", - "pk": "73fecbc6-390d-4f52-8772-14af736e0d70" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:40Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6613570000", - "jobtype": "Change file and directory names in submission documentation" - }, - "model": "main.job", - "pk": "c8a0b535-6020-4db3-87b7-317b6bc3e11e" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:41Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3232770000", - "jobtype": "Select file format identification command" - }, - "model": "main.job", - "pk": "cf49edb4-9ac5-4e76-b291-a913a1f21c09" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:41Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3349100000", - "jobtype": "Identify file format" - }, - "model": "main.job", - "pk": "e99ed349-8f19-41c6-a89b-7cc69e936bbd" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:41Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.7937940000", - "jobtype": "Characterize and extract metadata on submission documentation" - }, - "model": "main.job", - "pk": "f1b39ec0-4d44-43f7-afee-09bf0a8178a5" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:44Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9302990000", - "jobtype": "Copy transfers metadata and logs" - }, - "model": "main.job", - "pk": "4f01a1d4-2f95-42b4-b664-988075747245" - }, - { - "fields": { - "microservicegroup": "Process submission documentation", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:44Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.8445500000", - "jobtype": "Remove files without linking information (failed normalization artifacts etc.)" - }, - "model": "main.job", - "pk": "b1b4a2b8-f453-4c61-8dc4-58d3b33dcb9b" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:45Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.7355400000", - "jobtype": "Assign file UUIDs to metadata" - }, - "model": "main.job", - "pk": "133f5d84-031f-4fee-8dd6-ad16a07d979f" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:45Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6214690000", - "jobtype": "Move metadata to objects directory" - }, - "model": "main.job", - "pk": "4ed7cb76-73c6-478a-b0e6-aa86ee9330ed" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:45Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.5688830000", - "jobtype": "Process JSON metadata" - }, - "model": "main.job", - "pk": "ddcb9a1a-e97a-4103-a599-943f765f5827" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:46Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3955900000", - "jobtype": "Change file and directory names in metadata" - }, - "model": "main.job", - "pk": "2cea6ae1-6d77-4783-9356-5b323f7353cc" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:46Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.4354600000", - "jobtype": "Assign checksums and file sizes to metadata " - }, - "model": "main.job", - "pk": "54a374bd-24bf-4b81-85c1-f381335bed36" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:46Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6809020000", - "jobtype": "Scan for viruses in metadata" - }, - "model": "main.job", - "pk": "ff09e8be-857e-4fc6-bb8d-3eea0aaa6617" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:47Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.1273600000", - "jobtype": "Identify file format of metadata files" - }, - "model": "main.job", - "pk": "a112499c-4a28-4353-a467-263d9a44eaa9" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:47Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.4731440000", - "jobtype": "Characterize and extract metadata on metadata files" - }, - "model": "main.job", - "pk": "c6bbdd5a-4631-4f30-a50e-32b9ee859370" - }, - { - "fields": { - "microservicegroup": "Verify checksums", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:48Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3812910000", - "jobtype": "Verify checksums generated on ingest" - }, - "model": "main.job", - "pk": "07ac6065-f99f-4ffb-abd9-918e082e1c1d" - }, - { - "fields": { - "microservicegroup": "Process metadata directory", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:48Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9896800000", - "jobtype": "Remove empty manual normalization directories" - }, - "model": "main.job", - "pk": "b174745a-2a31-46bb-90d4-831a716800d5" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:49Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.9121750000", - "jobtype": "Prepare AIP" - }, - "model": "main.job", - "pk": "69d7482d-9341-402e-9026-f9eb34dacf92" - }, - { - "fields": { - "microservicegroup": "Generate AIP METS", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:49Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2085550000", - "jobtype": "Generate METS.xml document" - }, - "model": "main.job", - "pk": "b7332819-9801-4ede-bd0e-fa8c369f1e3c" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:49Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6852380000", - "jobtype": "Check if DIP should be generated" - }, - "model": "main.job", - "pk": "ce6ea740-20ab-4d6b-b7b6-2daf8e10efdc" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:49Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.7148690000", - "jobtype": "Set file permissions" - }, - "model": "main.job", - "pk": "f22cc800-566a-42bb-8605-11bce3ad06a0" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:50Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/metadataReminder/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.8267920000", - "jobtype": "Move to compressionAIPDecisions directory" - }, - "model": "main.job", - "pk": "260bf6fe-6c26-45d1-8448-43b450448d9c" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:52Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.4031700000", - "jobtype": "Select compression algorithm" - }, - "model": "main.job", - "pk": "63249f92-0e96-4811-9ff1-7209ec88d7b9" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:52Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.5285000000", - "jobtype": "Select compression level" - }, - "model": "main.job", - "pk": "6709f4a8-fa07-4b27-9ba9-6f68b43fd3f7" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:52Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6275900000", - "jobtype": "Compress AIP" - }, - "model": "main.job", - "pk": "6cbc7e06-d992-4c5f-8aa1-3d3021ec9c6c" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:54Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.7604130000", - "jobtype": "Create AIP Pointer File" - }, - "model": "main.job", - "pk": "bdabea26-5f13-4190-8e23-19bea31451c4" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:54Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.5572260000", - "jobtype": "Copy submission documentation" - }, - "model": "main.job", - "pk": "d43c8cd6-ab9e-46af-ac27-127260b24147" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:55Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2347570000", - "jobtype": "Set bag file permissions" - }, - "model": "main.job", - "pk": "1d7a180c-1c9f-4598-b27c-26012811964f" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:55Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.3707780000", - "jobtype": "Move to the store AIP approval directory" - }, - "model": "main.job", - "pk": "83813dd2-5805-46cc-b134-8ba3360e2ffb" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:55Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2989980000", - "jobtype": "Removed bagged files" - }, - "model": "main.job", - "pk": "a0f028dd-6b9d-4365-a7ec-2a237e7fc224" - }, - { - "fields": { - "microservicegroup": "Prepare AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:55Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/workFlowDecisions/compressionAIPDecisions/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2664410000", - "jobtype": "Check if AIP is a file or directory" - }, - "model": "main.job", - "pk": "c230dff2-16ce-418c-8d28-6671580eecc3" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:17:56Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/storeAIP/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.5513000000", - "jobtype": "Store AIP" - }, - "model": "main.job", - "pk": "6148627c-1607-43ae-b9de-3eba70f48cc0" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:18:10Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/storeAIP/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6377300000", - "jobtype": "Retrieve AIP Storage Locations" - }, - "model": "main.job", - "pk": "795d967e-3aaf-41e0-b4bb-7327eacf0b96" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:18:10Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/storeAIP/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.7662470000", - "jobtype": "Store AIP location" - }, - "model": "main.job", - "pk": "cf59ef57-fb9e-4904-a305-09517eb4c43f" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:18:37Z", - "unittype": "unitSIP", - "directory": "%sharedPath%watchedDirectories/storeAIP/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.8078550000", - "jobtype": "Move to processing directory" - }, - "model": "main.job", - "pk": "4f91f6bf-e19a-467d-a5ab-f9932fbab502" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:18:38Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2112580000", - "jobtype": "Verify AIP" - }, - "model": "main.job", - "pk": "af18a688-9a37-4d41-b792-046258a5b40b" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:18:41Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.6074080000", - "jobtype": "Store the AIP" - }, - "model": "main.job", - "pk": "0c1e9d06-c5dd-4f08-8978-7b112f3c9e4d" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:18:43Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.5373670000", - "jobtype": "Index AIP" - }, - "model": "main.job", - "pk": "cffc99be-06a8-4179-ae07-e3ec45b659c8" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:18:47Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.2700590000", - "jobtype": "Clean up after storing AIP" - }, - "model": "main.job", - "pk": "c3e2f1de-5cd2-4543-89de-e49a75a54dc4" - }, - { - "fields": { - "microservicegroup": "Store AIP", - "sipuuid": "4060ee97-9c3f-4822-afaf-ebdf838284c3", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:18:46Z", - "unittype": "unitSIP", - "directory": "%sharedPath%currentlyProcessing/test-4060ee97-9c3f-4822-afaf-ebdf838284c3/", - "hidden": false, - "createdtimedec": "0.8202620000", - "jobtype": "Remove the processing directory" - }, - "model": "main.job", - "pk": "299c727c-e72b-4070-ae0a-a78a5aa0cfd3" - } -] diff --git a/src/dashboard/tests/fixtures/jobs-transfer-backlog.json b/src/dashboard/tests/fixtures/jobs-transfer-backlog.json deleted file mode 100644 index 7e7a2e18da..0000000000 --- a/src/dashboard/tests/fixtures/jobs-transfer-backlog.json +++ /dev/null @@ -1,87 +0,0 @@ -[ - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:39:49Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.3093370000", - "jobtype": "Check transfer directory for objects" - }, - "model": "main.job", - "pk": "d2f99030-26b9-4746-b100-856779624934" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:39:49Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.7631970000", - "jobtype": "Create SIP(s)" - }, - "model": "main.job", - "pk": "c763fa11-0e36-4b93-a8c8-6f008b74a96a" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:40:11Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.5184330000", - "jobtype": "Index transfer contents" - }, - "model": "main.job", - "pk": "624581dc-ec01-4195-9da3-db0ab0ad1cc3" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:40:12Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.2427270000", - "jobtype": "Move transfer to backlog" - }, - "model": "main.job", - "pk": "a39d74e4-c42e-404b-8c29-dde873ca48ad" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:40:14Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.3749170000", - "jobtype": "Create placement in backlog PREMIS events" - }, - "model": "main.job", - "pk": "bac0675d-44fe-4047-9713-f9ba9fe46eff" - } -] diff --git a/src/dashboard/tests/fixtures/jobs-transfer-complete.json b/src/dashboard/tests/fixtures/jobs-transfer-complete.json deleted file mode 100644 index 7f20aa9e9a..0000000000 --- a/src/dashboard/tests/fixtures/jobs-transfer-complete.json +++ /dev/null @@ -1,104 +0,0 @@ -[ - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:57Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4440550000", - "jobtype": "Check transfer directory for objects" - }, - "model": "main.job", - "pk": "7bd82bc3-0694-4182-8f72-48fb13f0e8e8" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:57Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4903070000", - "jobtype": "Create SIP(s)" - }, - "model": "main.job", - "pk": "b9390fbf-8c00-434c-ab4b-eb501ed2f490" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:55Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.1605070000", - "jobtype": "Move to processing directory" - }, - "model": "main.job", - "pk": "c395c111-2671-4b15-9c31-fe1694acb9a2" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:55Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4931960000", - "jobtype": "Serialize Dublin Core metadata to disk" - }, - "model": "main.job", - "pk": "5572058f-8a3d-4806-9c88-a633e5f33fe4" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:55Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.8095790000", - "jobtype": "Create SIP from transfer objects" - }, - "model": "main.job", - "pk": "d51f6915-ae7f-4c23-8a02-fcec49941168" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:56Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.1215710000", - "jobtype": "Move to SIP creation directory for completed transfers" - }, - "model": "main.job", - "pk": "e7775bc2-613f-4fb7-abba-738dfa799c99" - } -] diff --git a/src/dashboard/tests/fixtures/jobs-user-input.json b/src/dashboard/tests/fixtures/jobs-user-input.json deleted file mode 100644 index 6b63ad3536..0000000000 --- a/src/dashboard/tests/fixtures/jobs-user-input.json +++ /dev/null @@ -1,19 +0,0 @@ -[ - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", - "microservicechainlink": null, - "currentstep": 1, - "subjobof": "", - "createdtime": "2016-10-04T22:50:57Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e/", - "hidden": false, - "createdtimedec": "0.4903070000", - "jobtype": "Create SIP(s)" - }, - "model": "main.job", - "pk": "b9390fbf-8c00-434c-ab4b-eb501ed2f490" - } -] diff --git a/src/dashboard/tests/fixtures/jobs-various.json b/src/dashboard/tests/fixtures/jobs-various.json deleted file mode 100644 index 846cdf859e..0000000000 --- a/src/dashboard/tests/fixtures/jobs-various.json +++ /dev/null @@ -1,274 +0,0 @@ -[ - { - "fields": { - "microservicegroup": "Failed transfer", - "sipuuid": "b949773d-7cf7-4c1e-aea5-ccbf65b70ccd", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-05T00:10:53Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-b949773d-7cf7-4c1e-aea5-ccbf65b70ccd/", - "hidden": false, - "createdtimedec": "0.1840100000", - "jobtype": "Email fail report" - }, - "model": "main.job", - "pk": "a25f789e-57ae-4190-9188-7a22bc0ef1c4" - }, - { - "fields": { - "microservicegroup": "Failed transfer", - "sipuuid": "b949773d-7cf7-4c1e-aea5-ccbf65b70ccd", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-05T00:10:54Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-b949773d-7cf7-4c1e-aea5-ccbf65b70ccd/", - "hidden": false, - "createdtimedec": "0.3763290000", - "jobtype": "Move to the failed directory" - }, - "model": "main.job", - "pk": "7d9ba893-08f1-4678-9fe9-294fdc729c55" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "85216028-1150-4321-abb3-31ea570a341b", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:57Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-85216028-1150-4321-abb3-31ea570a341b/", - "hidden": false, - "createdtimedec": "0.4440550000", - "jobtype": "Check transfer directory for objects" - }, - "model": "main.job", - "pk": "7bd82bc3-0694-4182-8f72-48fb13f0e8e8" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "85216028-1150-4321-abb3-31ea570a341b", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T22:50:57Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-85216028-1150-4321-abb3-31ea570a341b/", - "hidden": false, - "createdtimedec": "0.4903070000", - "jobtype": "Create SIP(s)" - }, - "model": "main.job", - "pk": "b9390fbf-8c00-434c-ab4b-eb501ed2f490" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "85216028-1150-4321-abb3-31ea570a341b", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:55Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-85216028-1150-4321-abb3-31ea570a341b/", - "hidden": false, - "createdtimedec": "0.1605070000", - "jobtype": "Move to processing directory" - }, - "model": "main.job", - "pk": "c395c111-2671-4b15-9c31-fe1694acb9a2" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "85216028-1150-4321-abb3-31ea570a341b", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:55Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-85216028-1150-4321-abb3-31ea570a341b/", - "hidden": false, - "createdtimedec": "0.4931960000", - "jobtype": "Serialize Dublin Core metadata to disk" - }, - "model": "main.job", - "pk": "5572058f-8a3d-4806-9c88-a633e5f33fe4" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "85216028-1150-4321-abb3-31ea570a341b", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:55Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-85216028-1150-4321-abb3-31ea570a341b/", - "hidden": false, - "createdtimedec": "0.8095790000", - "jobtype": "Create SIP from transfer objects" - }, - "model": "main.job", - "pk": "d51f6915-ae7f-4c23-8a02-fcec49941168" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "85216028-1150-4321-abb3-31ea570a341b", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:05:56Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%currentlyProcessing/test-85216028-1150-4321-abb3-31ea570a341b/", - "hidden": false, - "createdtimedec": "0.1215710000", - "jobtype": "Move to SIP creation directory for completed transfers" - }, - "model": "main.job", - "pk": "e7775bc2-613f-4fb7-abba-738dfa799c99" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "c9cce131-7bd9-41c8-82ab-483190961ae2", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:48:17Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-c9cce131-7bd9-41c8-82ab-483190961ae2/", - "hidden": false, - "createdtimedec": "0.8561500000", - "jobtype": "Create SIP(s)" - }, - "model": "main.job", - "pk": "59ace00b-4830-4314-a7d9-38fdbef64896" - }, - { - "fields": { - "microservicegroup": "Reject transfer", - "sipuuid": "c9cce131-7bd9-41c8-82ab-483190961ae2", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:48:27Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-c9cce131-7bd9-41c8-82ab-483190961ae2/", - "hidden": false, - "createdtimedec": "0.1582580000", - "jobtype": "Move to the rejected directory" - }, - "model": "main.job", - "pk": "b7902aae-ec5f-4290-a3d7-c47f844e8774" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "37a07d96-6fc0-4002-b269-471a58783805", - "microservicechainlink": null, - "currentstep": 1, - "subjobof": "", - "createdtime": "2016-10-04T22:50:57Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-37a07d96-6fc0-4002-b269-471a58783805/", - "hidden": false, - "createdtimedec": "0.4903070000", - "jobtype": "Create SIP(s)" - }, - "model": "main.job", - "pk": "b9390fbf-8c00-434c-ab4b-eb501ed2f490" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "5d0ab97f-a45b-4e0f-9cb6-90ee3a404549", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:39:49Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-5d0ab97f-a45b-4e0f-9cb6-90ee3a404549/", - "hidden": false, - "createdtimedec": "0.3093370000", - "jobtype": "Check transfer directory for objects" - }, - "model": "main.job", - "pk": "d2f99030-26b9-4746-b100-856779624934" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "5d0ab97f-a45b-4e0f-9cb6-90ee3a404549", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:39:49Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-5d0ab97f-a45b-4e0f-9cb6-90ee3a404549/", - "hidden": false, - "createdtimedec": "0.7631970000", - "jobtype": "Create SIP(s)" - }, - "model": "main.job", - "pk": "c763fa11-0e36-4b93-a8c8-6f008b74a96a" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "5d0ab97f-a45b-4e0f-9cb6-90ee3a404549", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:40:11Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-5d0ab97f-a45b-4e0f-9cb6-90ee3a404549/", - "hidden": false, - "createdtimedec": "0.5184330000", - "jobtype": "Index transfer contents" - }, - "model": "main.job", - "pk": "624581dc-ec01-4195-9da3-db0ab0ad1cc3" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "5d0ab97f-a45b-4e0f-9cb6-90ee3a404549", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:40:12Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-5d0ab97f-a45b-4e0f-9cb6-90ee3a404549/", - "hidden": false, - "createdtimedec": "0.2427270000", - "jobtype": "Move transfer to backlog" - }, - "model": "main.job", - "pk": "a39d74e4-c42e-404b-8c29-dde873ca48ad" - }, - { - "fields": { - "microservicegroup": "Create SIP from Transfer", - "sipuuid": "5d0ab97f-a45b-4e0f-9cb6-90ee3a404549", - "microservicechainlink": null, - "currentstep": 2, - "subjobof": "", - "createdtime": "2016-10-04T23:40:14Z", - "unittype": "unitTransfer", - "directory": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-5d0ab97f-a45b-4e0f-9cb6-90ee3a404549/", - "hidden": false, - "createdtimedec": "0.3749170000", - "jobtype": "Create placement in backlog PREMIS events" - }, - "model": "main.job", - "pk": "bac0675d-44fe-4047-9713-f9ba9fe46eff" - } -] diff --git a/src/dashboard/tests/fixtures/units.json b/src/dashboard/tests/fixtures/units.json deleted file mode 100644 index d3a4f4e879..0000000000 --- a/src/dashboard/tests/fixtures/units.json +++ /dev/null @@ -1,77 +0,0 @@ -[ -{ - "fields": { - "accessionid": "", - "description": "", - "transfermetadatasetrow": null, - "notes": "", - "typeoftransfer": "", - "hidden": false, - "type": "Standard", - "currentlocation": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-b949773d-7cf7-4c1e-aea5-ccbf65b70ccd/", - "sourceofacquisition": "" - }, - "model": "main.transfer", - "pk": "b949773d-7cf7-4c1e-aea5-ccbf65b70ccd" -}, -{ - "fields": { - "accessionid": "", - "description": "", - "transfermetadatasetrow": null, - "notes": "", - "typeoftransfer": "", - "hidden": false, - "type": "Standard", - "currentlocation": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-85216028-1150-4321-abb3-31ea570a341b/", - "sourceofacquisition": "" - }, - "model": "main.transfer", - "pk": "85216028-1150-4321-abb3-31ea570a341b" -}, -{ - "fields": { - "accessionid": "", - "description": "", - "transfermetadatasetrow": null, - "notes": "", - "typeoftransfer": "", - "hidden": false, - "type": "Standard", - "currentlocation": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-c9cce131-7bd9-41c8-82ab-483190961ae2/", - "sourceofacquisition": "" - }, - "model": "main.transfer", - "pk": "c9cce131-7bd9-41c8-82ab-483190961ae2" -}, -{ - "fields": { - "accessionid": "", - "description": "", - "transfermetadatasetrow": null, - "notes": "", - "typeoftransfer": "", - "hidden": false, - "type": "Standard", - "currentlocation": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-37a07d96-6fc0-4002-b269-471a58783805/", - "sourceofacquisition": "" - }, - "model": "main.transfer", - "pk": "37a07d96-6fc0-4002-b269-471a58783805" -}, -{ - "fields": { - "accessionid": "", - "description": "", - "transfermetadatasetrow": null, - "notes": "", - "typeoftransfer": "", - "hidden": false, - "type": "Standard", - "currentlocation": "%sharedPath%watchedDirectories/SIPCreation/completedTransfers/test-5d0ab97f-a45b-4e0f-9cb6-90ee3a404549/", - "sourceofacquisition": "" - }, - "model": "main.transfer", - "pk": "5d0ab97f-a45b-4e0f-9cb6-90ee3a404549" -} -] diff --git a/src/dashboard/tests/test_api.py b/src/dashboard/tests/test_api.py index 7211276881..74a4ef5d58 100644 --- a/src/dashboard/tests/test_api.py +++ b/src/dashboard/tests/test_api.py @@ -1,7 +1,5 @@ import datetime import json -import os -import tempfile import uuid import archivematicaFunctions @@ -10,16 +8,16 @@ from components import helpers from components.api import views from django.core.management import call_command -from django.test import TestCase -from django.test.client import Client from django.urls import reverse from django.utils.timezone import make_aware from lxml import etree from main.models import DashboardSetting from main.models import DublinCore +from main.models import File from main.models import Job from main.models import LevelOfDescription from main.models import MetadataAppliesToType +from main.models import PACKAGE_STATUS_COMPLETED_SUCCESSFULLY from main.models import RightsStatement from main.models import SIP from main.models import SIPArrange @@ -32,565 +30,822 @@ def load_fixture(fixtures): call_command("loaddata", *fixtures, **{"verbosity": 0}) -def e2e(fn): - """Use this decorator when your test uses the HTTP client.""" +@pytest.fixture +def dashboard_uuid(db): + helpers.set_setting("dashboard_uuid", str(uuid.uuid4())) - def _wrapper(self, *args): - load_fixture(["test_user"]) - self.client = Client() - self.client.login(username="test", password="test") - helpers.set_setting("dashboard_uuid", "test-uuid") - return fn(self, *args) - return _wrapper +@pytest.fixture +def transfer(db): + return Transfer.objects.create() -class TestAPI(TestCase): - """Test API endpoints.""" +@pytest.fixture +def sip(db): + return SIP.objects.create() - fixtures = ["transfer", "sip"] - def _test_api_error(self, response, message=None, status_code=None): - payload = json.loads(response.content.decode("utf8")) - assert payload["error"] is True - if message is not None: - assert payload["message"] == message - else: - assert "message" in payload - if status_code is not None: - assert response.status_code == status_code +@pytest.fixture +def files(db, transfer, sip): + return [File.objects.create(transfer=transfer, sip=sip)] - def test_get_unit_status_processing(self): - """It should return PROCESSING.""" - # Setup fixtures - load_fixture(["jobs-processing"]) - # Test - status = views.get_unit_status( - "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", "unitTransfer" - ) - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True - ) - # Verify - assert len(status) == 2 - assert "microservice" in status - assert status["status"] == "PROCESSING" - assert len(completed) == 0 - - def test_get_unit_status_user_input(self): - """It should return USER_INPUT.""" - # Setup fixtures - load_fixture(["jobs-processing", "jobs-user-input"]) - # Test - status = views.get_unit_status( - "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", "unitTransfer" - ) - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True - ) - # Verify - assert len(status) == 2 - assert "microservice" in status - assert status["status"] == "USER_INPUT" - assert len(completed) == 0 - - def test_get_unit_status_failed(self): - """It should return FAILED.""" - # Setup fixtures - load_fixture(["jobs-processing", "jobs-failed"]) - # Test - status = views.get_unit_status( - "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", "unitTransfer" - ) - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True - ) - # Verify - assert len(status) == 2 - assert "microservice" in status - assert status["status"] == "FAILED" - assert len(completed) == 1 - - def test_get_unit_status_rejected(self): - """It should return REJECTED.""" - # Setup fixtures - load_fixture(["jobs-processing", "jobs-rejected"]) - # Test - status = views.get_unit_status( - "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", "unitTransfer" - ) - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True - ) - # Verify - assert len(status) == 2 - assert "microservice" in status - assert status["status"] == "REJECTED" - assert len(completed) == 0 - - def test_get_unit_status_completed_transfer(self): - """It should return COMPLETE and the new SIP UUID.""" - # Setup fixtures - load_fixture(["jobs-processing", "jobs-transfer-complete", "files"]) - # Test - status = views.get_unit_status( - "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", "unitTransfer" - ) - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True - ) - # Verify - assert len(status) == 3 - assert "microservice" in status - assert status["status"] == "COMPLETE" - assert status["sip_uuid"] == "4060ee97-9c3f-4822-afaf-ebdf838284c3" - assert len(completed) == 1 - - def test_get_unit_status_backlog(self): - """It should return COMPLETE and in BACKLOG.""" - # Setup fixtures - load_fixture(["jobs-processing", "jobs-transfer-backlog"]) - # Test - status = views.get_unit_status( - "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e", "unitTransfer" - ) - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True - ) - # Verify - assert len(status) == 3 - assert "microservice" in status - assert status["status"] == "COMPLETE" - assert status["sip_uuid"] == "BACKLOG" - assert len(completed) == 1 - - def test_get_unit_status_completed_sip(self): - """It should return COMPLETE.""" - # Setup fixtures - load_fixture( - ["jobs-processing", "jobs-transfer-complete", "jobs-sip-complete", "files"] - ) - # Test - status = views.get_unit_status( - "4060ee97-9c3f-4822-afaf-ebdf838284c3", "unitSIP" - ) - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True - ) - # Verify - assert len(status) == 2 - assert "microservice" in status - assert status["status"] == "COMPLETE" - assert len(completed) == 1 - - def test_get_unit_status_completed_sip_issue_262_workaround(self): - """Test get unit status for a completed SIP when the job with the latest - created time is not the last in the microservice chain - (i.e, job with jobtype 'Remove the processing directory' is not the one with - latest created time) - It should return COMPLETE.""" - # Setup fixtures - load_fixture( - [ - "jobs-processing", - "jobs-transfer-complete", - "jobs-sip-complete-clean-up-last", - "files", - ] - ) - # Test - status = views.get_unit_status( - "4060ee97-9c3f-4822-afaf-ebdf838284c3", "unitSIP" - ) - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True + +@pytest.fixture +def jobs_processing(db, transfer): + return [ + Job.objects.create( + jobuuid="ee3b39f6-2d57-431d-bdd6-6d38f50de371", + microservicegroup="Examine contents", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T22:50:56Z", + unittype="unitTransfer", + jobtype="Examine contents?", + ), + Job.objects.create( + jobuuid="3ed5ec03-ee7d-4ddc-bdfc-3b1e07170c2b", + microservicegroup="Create SIP from Transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T22:50:57Z", + unittype="unitTransfer", + jobtype="Load options to create SIPs", + ), + Job.objects.create( + jobuuid="7bd82bc3-0694-4182-8f72-48fb13f0e8e8", + microservicegroup="Create SIP from Transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_EXECUTING_COMMANDS, + createdtime="2016-10-04T22:50:57Z", + unittype="unitTransfer", + jobtype="Check transfer directory for objects", + ), + ] + + +@pytest.fixture +def jobs_user_input(db, transfer): + return [ + Job.objects.create( + jobuuid="b9390fbf-8c00-434c-ab4b-eb501ed2f490", + microservicegroup="Create SIP from Transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_AWAITING_DECISION, + createdtime="2016-10-04T22:50:57Z", + unittype="unitTransfer", + jobtype="Create SIP(s)", ) - # Verify - assert len(status) == 2 - assert "microservice" in status - assert status["status"] == "COMPLETE" - assert len(completed) == 1 - - @e2e - def test_status(self): - load_fixture(["jobs-transfer-complete", "files"]) - resp = self.client.get( - reverse( - "api:transfer_status", args=["3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e"] - ), + ] + + +@pytest.fixture +def jobs_failed(db, transfer): + return [ + Job.objects.create( + jobuuid="7d9ba893-08f1-4678-9fe9-294fdc729c55", + microservicegroup="Failed transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-05T00:10:54Z", + unittype="unitTransfer", + jobtype="Move to the failed directory", ) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert payload["status"] == "COMPLETE" - assert payload["type"] == "transfer" - assert payload["uuid"] == "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e" - - @e2e - def test_status_with_bogus_unit(self): - """It should return a 400 error as the status cannot be determined.""" - bogus_transfer_id = "1642cbe0-b72d-432d-8fc9-94dad3a0e9dd" - Transfer.objects.create(uuid=bogus_transfer_id) - resp = self.client.get(reverse("api:transfer_status", args=[bogus_transfer_id])) - self._test_api_error( - resp, - status_code=400, - message=( - "Unable to determine the status of the unit {}".format( - bogus_transfer_id - ) - ), + ] + + +@pytest.fixture +def jobs_rejected(db, transfer): + return [ + Job.objects.create( + jobuuid="b7902aae-ec5f-4290-a3d7-c47f844e8774", + microservicegroup="Reject transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T23:48:27Z", + unittype="unitTransfer", + jobtype="Move to the rejected directory", ) + ] - def test_completed_units(self): - load_fixture(["jobs-transfer-complete", "files"]) - completed = views._completed_units() - assert completed == ["3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e"] - - def test_completed_units_with_bogus_unit(self): - """Bogus units should be excluded and handled gracefully.""" - load_fixture(["jobs-transfer-complete", "files"]) - Transfer.objects.create(uuid="1642cbe0-b72d-432d-8fc9-94dad3a0e9dd") - try: - completed = views._completed_units() - except Exception as err: - self.fail("views._completed_units raised unexpected exception", err) - assert completed == ["3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e"] - - @e2e - def test_completed_transfers(self): - load_fixture(["jobs-transfer-complete", "files"]) - resp = self.client.get(reverse("api:completed_transfers")) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert payload == { - "message": "Fetched completed transfers successfully.", - "results": ["3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e"], - } - @e2e - def test_completed_transfers_with_bogus_transfer(self): - """Bogus transfers should be excluded and handled gracefully.""" - load_fixture(["jobs-transfer-complete", "files"]) - Transfer.objects.create(uuid="1642cbe0-b72d-432d-8fc9-94dad3a0e9dd") - resp = self.client.get(reverse("api:completed_transfers")) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert payload == { - "message": "Fetched completed transfers successfully.", - "results": ["3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e"], - } +@pytest.fixture +def jobs_transfer_complete(db, transfer): + return [ + Job.objects.create( + jobuuid="d51f6915-ae7f-4c23-8a02-fcec49941168", + microservicegroup="Create SIP from Transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T23:05:55Z", + unittype="unitTransfer", + jobtype="Create SIP from transfer objects", + ), + Job.objects.create( + jobuuid="e7775bc2-613f-4fb7-abba-738dfa799c99", + microservicegroup="Create SIP from Transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T23:05:56Z", + unittype="unitTransfer", + jobtype="Move to SIP creation directory for completed transfers", + ), + ] - @e2e - def test_completed_ingests(self): - load_fixture(["jobs-sip-complete"]) - resp = self.client.get(reverse("api:completed_ingests")) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert payload == { - "message": "Fetched completed ingests successfully.", - "results": ["4060ee97-9c3f-4822-afaf-ebdf838284c3"], - } - @e2e - def test_completed_ingests_with_bogus_sip(self): - """Bogus ingests should be excluded and handled gracefully.""" - load_fixture(["jobs-sip-complete"]) - SIP.objects.create(uuid="de702ef5-dfac-430d-93f4-f0453b18ad2f") - resp = self.client.get(reverse("api:completed_ingests")) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert payload == { - "message": "Fetched completed ingests successfully.", - "results": ["4060ee97-9c3f-4822-afaf-ebdf838284c3"], - } +@pytest.fixture +def jobs_transfer_backlog(db, transfer): + return [ + Job.objects.create( + jobuuid="a39d74e4-c42e-404b-8c29-dde873ca48ad", + microservicegroup="Create SIP from Transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T23:40:12Z", + unittype="unitTransfer", + jobtype="Move transfer to backlog", + ), + Job.objects.create( + jobuuid="bac0675d-44fe-4047-9713-f9ba9fe46eff", + microservicegroup="Create SIP from Transfer", + sipuuid=transfer.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T23:40:14Z", + unittype="unitTransfer", + jobtype="Create placement in backlog PREMIS events", + ), + ] - @e2e - def test_unit_jobs_with_bogus_unit_uuid(self): - bogus_unit_uuid = "00000000-dfac-430d-93f4-f0453b18ad2f" - resp = self.client.get(reverse("api:v2beta_jobs", args=[bogus_unit_uuid])) - self._test_api_error( - resp, - status_code=400, - message=(f"No jobs found for unit: {bogus_unit_uuid}"), + +@pytest.fixture +def jobs_sip_complete(db, sip): + return [ + Job.objects.create( + jobuuid="299c727c-e72b-4070-ae0a-a78a5aa0cfd3", + microservicegroup="Store AIP", + sipuuid=sip.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T23:18:46Z", + unittype="unitSIP", + jobtype="Remove the processing directory", ) + ] + - @e2e - def test_unit_jobs(self): - load_fixture(["jobs-transfer-backlog"]) - sip_uuid = "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e" - # fixtures don't have any tasks - Task.objects.create( - taskuuid="12345678-1234-1234-1234-123456789012", - job=Job.objects.get(jobuuid="d2f99030-26b9-4746-b100-856779624934"), - createdtime=make_aware(datetime.datetime(2019, 6, 18, 0, 0)), - starttime=make_aware(datetime.datetime(2019, 6, 18, 0, 0)), - endtime=make_aware(datetime.datetime(2019, 6, 18, 0, 10)), - exitcode=0, +@pytest.fixture +def jobs_sip_complete_cleanup_last(db, sip): + return [ + Job.objects.create( + jobuuid="c3e2f1de-5cd2-4543-89de-e49a75a54dc4", + microservicegroup="Store AIP", + sipuuid=sip.uuid, + currentstep=Job.STATUS_COMPLETED_SUCCESSFULLY, + createdtime="2016-10-04T23:18:47Z", + unittype="unitSIP", + jobtype="Clean up after storing AIP", ) - resp = self.client.get(reverse("api:v2beta_jobs", args=[sip_uuid])) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - # payload contains a mapping for each job - assert len(payload) == 5 - expected_job_uuids = [ - "624581dc-ec01-4195-9da3-db0ab0ad1cc3", - "a39d74e4-c42e-404b-8c29-dde873ca48ad", - "bac0675d-44fe-4047-9713-f9ba9fe46eff", - "c763fa11-0e36-4b93-a8c8-6f008b74a96a", - "d2f99030-26b9-4746-b100-856779624934", - ] - # sort the payload results by job uuid - sorted_payload = sorted(payload, key=lambda job: job["uuid"]) - assert [job["uuid"] for job in sorted_payload] == expected_job_uuids - # each payload mapping has information about the job and its tasks - job = sorted_payload[4] - assert job["uuid"] == "d2f99030-26b9-4746-b100-856779624934" - assert job["name"] == "Check transfer directory for objects" - assert job["status"] == "COMPLETE" - assert job["microservice"] == "Create SIP from Transfer" - assert job["link_uuid"] is None - assert job["tasks"] == [ - {"uuid": "12345678-1234-1234-1234-123456789012", "exit_code": 0} - ] - - @e2e - def test_unit_jobs_searching_for_microservice(self): - load_fixture(["jobs-rejected"]) - sip_uuid = "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e" - resp = self.client.get( - reverse("api:v2beta_jobs", args=[sip_uuid]), - {"microservice": "Reject transfer"}, + ] + + +@pytest.mark.django_db +def test_get_unit_status_processing(jobs_processing, transfer): + """It should return PROCESSING.""" + status = views.get_unit_status(transfer.uuid, "unitTransfer") + assert len(status) == 2 + assert "microservice" in status + assert status["status"] == "PROCESSING" + + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) + assert len(completed) == 0 + + +@pytest.mark.django_db +def test_get_unit_status_user_input(jobs_processing, jobs_user_input, transfer): + """It should return USER_INPUT.""" + status = views.get_unit_status(transfer.uuid, "unitTransfer") + assert len(status) == 2 + assert "microservice" in status + assert status["status"] == "USER_INPUT" + + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) + assert len(completed) == 0 + + +@pytest.mark.django_db +def test_get_unit_status_failed(jobs_processing, jobs_failed, transfer): + """It should return FAILED.""" + status = views.get_unit_status(transfer.uuid, "unitTransfer") + assert len(status) == 2 + assert "microservice" in status + assert status["status"] == "FAILED" + + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) + assert len(completed) == 1 + + +@pytest.mark.django_db +def test_get_unit_status_rejected(jobs_processing, jobs_rejected, transfer): + """It should return REJECTED.""" + status = views.get_unit_status(transfer.uuid, "unitTransfer") + assert len(status) == 2 + assert "microservice" in status + assert status["status"] == "REJECTED" + + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) + assert len(completed) == 0 + + +@pytest.mark.django_db +def test_get_unit_status_completed_transfer( + jobs_processing, jobs_transfer_complete, transfer, sip, files +): + """It should return COMPLETE and the new SIP UUID.""" + status = views.get_unit_status(transfer.uuid, "unitTransfer") + assert len(status) == 3 + assert "microservice" in status + assert status["status"] == "COMPLETE" + assert status["sip_uuid"] == str(sip.uuid) + + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) + assert len(completed) == 1 + + +@pytest.mark.django_db +def test_get_unit_status_backlog(jobs_processing, jobs_transfer_backlog, transfer): + """It should return COMPLETE and in BACKLOG.""" + status = views.get_unit_status(transfer.uuid, "unitTransfer") + assert len(status) == 3 + assert "microservice" in status + assert status["status"] == "COMPLETE" + assert status["sip_uuid"] == "BACKLOG" + + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) + assert len(completed) == 1 + + +@pytest.mark.django_db +def test_get_unit_status_completed_sip( + transfer, sip, jobs_processing, jobs_transfer_complete, jobs_sip_complete, files +): + """It should return COMPLETE.""" + status = views.get_unit_status(sip.uuid, "unitSIP") + assert len(status) == 2 + assert "microservice" in status + assert status["status"] == "COMPLETE" + + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) + assert len(completed) == 1 + + +@pytest.mark.django_db +def test_get_unit_status_completed_sip_issue_262_workaround( + transfer, + sip, + jobs_processing, + jobs_transfer_complete, + jobs_sip_complete, + jobs_sip_complete_cleanup_last, + files, +): + """Test get unit status for a completed SIP when the job with the latest + created time is not the last in the microservice chain + (i.e, job with jobtype 'Remove the processing directory' is not the one with + latest created time) + It should return COMPLETE.""" + status = views.get_unit_status(sip.uuid, "unitSIP") + assert len(status) == 2 + assert "microservice" in status + assert status["status"] == "COMPLETE" + + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) + assert len(completed) == 1 + + +@pytest.mark.django_db +def test_status( + admin_client, dashboard_uuid, transfer, sip, jobs_transfer_complete, files +): + resp = admin_client.get( + reverse("api:transfer_status", args=[transfer.uuid]), + ) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert payload["status"] == "COMPLETE" + assert payload["type"] == "transfer" + assert payload["uuid"] == str(transfer.uuid) + + +@pytest.mark.django_db +def test_status_transfer_not_found(admin_client, dashboard_uuid): + transfer_uuid = uuid.uuid4() + resp = admin_client.get( + reverse("api:transfer_status", args=[transfer_uuid]), + ) + + assert resp.status_code == 400 + payload = json.loads(resp.content.decode("utf8")) + assert payload == { + "message": f"Cannot fetch unitTransfer with UUID {transfer_uuid}", + "error": True, + "type": "transfer", + } + + +@pytest.mark.django_db +def test_status_ingest_not_found(admin_client, dashboard_uuid): + ingest_uuid = uuid.uuid4() + resp = admin_client.get( + reverse("api:ingest_status", args=[ingest_uuid]), + ) + + assert resp.status_code == 400 + payload = json.loads(resp.content.decode("utf8")) + assert payload == { + "message": f"Cannot fetch unitSIP with UUID {ingest_uuid}", + "error": True, + "type": "SIP", + } + + +@pytest.mark.django_db +def test_status_with_bogus_unit(admin_client, dashboard_uuid): + """It should return a 400 error as the status cannot be determined.""" + bogus_transfer_id = "1642cbe0-b72d-432d-8fc9-94dad3a0e9dd" + Transfer.objects.create(uuid=bogus_transfer_id) + resp = admin_client.get(reverse("api:transfer_status", args=[bogus_transfer_id])) + assert resp.status_code == 400 + payload = json.loads(resp.content.decode("utf8")) + assert payload["error"] is True + assert ( + payload["message"] + == f"Unable to determine the status of the unit {bogus_transfer_id}" + ) + + +@pytest.mark.django_db +def test_completed_units(transfer, sip, jobs_transfer_complete, files): + completed = views._completed_units() + assert completed == [str(transfer.uuid)] + + +@pytest.mark.django_db +def test_completed_units_with_bogus_unit(transfer, sip, jobs_transfer_complete, files): + """Bogus units should be excluded and handled gracefully.""" + Transfer.objects.create(uuid="1642cbe0-b72d-432d-8fc9-94dad3a0e9dd") + completed = views._completed_units() + assert completed == [str(transfer.uuid)] + + +@pytest.mark.django_db +def test_completed_transfers( + admin_client, dashboard_uuid, transfer, sip, jobs_transfer_complete, files +): + resp = admin_client.get(reverse("api:completed_transfers")) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert payload == { + "message": "Fetched completed transfers successfully.", + "results": [str(transfer.uuid)], + } + + +@pytest.mark.django_db +def test_completed_transfers_with_bogus_transfer( + admin_client, dashboard_uuid, transfer, sip, jobs_transfer_complete, files +): + """Bogus transfers should be excluded and handled gracefully.""" + Transfer.objects.create(uuid="1642cbe0-b72d-432d-8fc9-94dad3a0e9dd") + resp = admin_client.get(reverse("api:completed_transfers")) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert payload == { + "message": "Fetched completed transfers successfully.", + "results": [str(transfer.uuid)], + } + + +@pytest.mark.django_db +def test_completed_ingests(admin_client, dashboard_uuid, sip, jobs_sip_complete): + resp = admin_client.get(reverse("api:completed_ingests")) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert payload == { + "message": "Fetched completed ingests successfully.", + "results": [str(sip.uuid)], + } + + +@pytest.mark.django_db +def test_completed_ingests_with_bogus_sip( + admin_client, dashboard_uuid, sip, jobs_sip_complete +): + """Bogus ingests should be excluded and handled gracefully.""" + SIP.objects.create(uuid="de702ef5-dfac-430d-93f4-f0453b18ad2f") + resp = admin_client.get(reverse("api:completed_ingests")) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert payload == { + "message": "Fetched completed ingests successfully.", + "results": [str(sip.uuid)], + } + + +@pytest.mark.django_db +def test_unit_jobs_with_bogus_unit_uuid(admin_client, dashboard_uuid): + bogus_unit_uuid = "00000000-dfac-430d-93f4-f0453b18ad2f" + resp = admin_client.get(reverse("api:v2beta_jobs", args=[bogus_unit_uuid])) + assert resp.status_code == 400 + payload = json.loads(resp.content.decode("utf8")) + assert payload["error"] is True + assert payload["message"] == f"No jobs found for unit: {bogus_unit_uuid}" + + +@pytest.mark.django_db +def test_unit_jobs(admin_client, dashboard_uuid, transfer, jobs_transfer_backlog): + # Add a task to an existing job + task_uuid = uuid.uuid4() + job_index = 1 + Task.objects.create( + taskuuid=task_uuid, + job=jobs_transfer_backlog[job_index], + createdtime=make_aware(datetime.datetime(2019, 6, 18, 0, 0)), + starttime=make_aware(datetime.datetime(2019, 6, 18, 0, 0)), + endtime=make_aware(datetime.datetime(2019, 6, 18, 0, 10)), + exitcode=0, + ) + # each payload mapping has information about the job and its tasks + expected = [] + for job in jobs_transfer_backlog: + expected.append( + { + "uuid": str(job.jobuuid), + "name": job.jobtype, + "status": "COMPLETE", + "microservice": job.microservicegroup, + "link_uuid": str(job.microservicechainlink), + "tasks": [ + {"uuid": str(task.taskuuid), "exit_code": task.exitcode} + for task in job.task_set.all() + ], + } ) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert len(payload) == 1 - job = payload[0] - assert job["uuid"] == "b7902aae-ec5f-4290-a3d7-c47f844e8774" - assert job["name"] == "Move to the rejected directory" - assert job["status"] == "COMPLETE" - assert job["microservice"] == "Reject transfer" - assert job["link_uuid"] is None - assert job["tasks"] == [] - # Test that microservice search also works with a "Microservice:" prefix - resp = self.client.get( - reverse("api:v2beta_jobs", args=[sip_uuid]), - {"microservice": "Microservice: Reject transfer"}, + + resp = admin_client.get(reverse("api:v2beta_jobs", args=[transfer.uuid])) + assert resp.status_code == 200 + + # payload contains a mapping for each job + payload = json.loads(resp.content.decode("utf8")) + assert len(payload) == len(jobs_transfer_backlog) + assert payload == expected + # check the task added before is associated to the expected job + assert payload[job_index]["tasks"] == [{"uuid": str(task_uuid), "exit_code": 0}] + + +@pytest.mark.django_db +def test_unit_jobs_searching_for_microservice( + admin_client, dashboard_uuid, transfer, jobs_rejected +): + resp = admin_client.get( + reverse("api:v2beta_jobs", args=[transfer.uuid]), + {"microservice": "Reject transfer"}, + ) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert len(payload) == 1 + job = payload[0] + stored_job = jobs_rejected[0] + assert job["uuid"] == str(stored_job.jobuuid) + assert job["name"] == stored_job.jobtype + assert job["status"] == "COMPLETE" + assert job["microservice"] == stored_job.microservicegroup + assert job["link_uuid"] == str(stored_job.microservicechainlink) + assert job["tasks"] == [ + {"uuid": str(task.taskuuid), "exit_code": task.exitcode} + for task in stored_job.task_set.all() + ] + + +@pytest.mark.django_db +def test_unit_jobs_searching_for_microservice_with_prefix( + admin_client, dashboard_uuid, transfer, jobs_rejected +): + # Test that microservice search also works with a "Microservice:" prefix + resp = admin_client.get( + reverse("api:v2beta_jobs", args=[transfer.uuid]), + {"microservice": "Microservice: Reject transfer"}, + ) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert len(payload) == 1 + job = payload[0] + assert job["uuid"] == jobs_rejected[0].jobuuid + + +@pytest.mark.django_db +def test_unit_jobs_searching_for_chain_link( + admin_client, dashboard_uuid, transfer, jobs_rejected +): + stored_job = jobs_rejected[0] + resp = admin_client.get( + reverse("api:v2beta_jobs", args=[transfer.uuid]), + {"link_uuid": stored_job.microservicechainlink}, + ) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert len(payload) == 1 + job = payload[0] + assert job["uuid"] == str(stored_job.jobuuid) + assert job["name"] == stored_job.jobtype + assert job["status"] == "COMPLETE" + assert job["microservice"] == stored_job.microservicegroup + assert job["link_uuid"] == str(stored_job.microservicechainlink) + assert job["tasks"] == [ + {"uuid": str(task.taskuuid), "exit_code": task.exitcode} + for task in stored_job.task_set.all() + ] + + +@pytest.mark.django_db +def test_unit_jobs_searching_for_name( + admin_client, dashboard_uuid, transfer, jobs_rejected +): + resp = admin_client.get( + reverse("api:v2beta_jobs", args=[transfer.uuid]), + {"name": "Move to the rejected directory"}, + ) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert len(payload) == 1 + job = payload[0] + stored_job = jobs_rejected[0] + assert job["uuid"] == str(stored_job.jobuuid) + assert job["name"] == stored_job.jobtype + assert job["status"] == "COMPLETE" + assert job["microservice"] == stored_job.microservicegroup + assert job["link_uuid"] == str(stored_job.microservicechainlink) + assert job["tasks"] == [ + {"uuid": str(task.taskuuid), "exit_code": task.exitcode} + for task in stored_job.task_set.all() + ] + + +@pytest.mark.django_db +def test_unit_jobs_searching_for_name_with_prefix( + admin_client, dashboard_uuid, transfer, jobs_rejected +): + # Test that name search also works with a "Job:" prefix + resp = admin_client.get( + reverse("api:v2beta_jobs", args=[transfer.uuid]), + {"name": "Job: Move to the rejected directory"}, + ) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + assert len(payload) == 1 + job = payload[0] + assert job["uuid"] == jobs_rejected[0].jobuuid + + +@pytest.mark.django_db +def test_unit_jobs_with_detailed_task_output( + admin_client, dashboard_uuid, transfer, jobs_rejected +): + # Add a task to an existing job + task_uuid = uuid.uuid4() + Task.objects.create( + taskuuid=task_uuid, + job=jobs_rejected[0], + createdtime=make_aware(datetime.datetime(2019, 6, 18, 0, 0)), + starttime=make_aware(datetime.datetime(2019, 6, 18, 0, 0)), + endtime=make_aware(datetime.datetime(2019, 6, 18, 0, 10)), + exitcode=0, + ) + expected = [] + for job in jobs_rejected: + expected.append( + { + "uuid": str(job.jobuuid), + "name": job.jobtype, + "status": "COMPLETE", + "microservice": job.microservicegroup, + "link_uuid": str(job.microservicechainlink), + "tasks": [ + { + "uuid": str(task.taskuuid), + "exit_code": task.exitcode, + "file_uuid": task.fileuuid, + "file_name": task.filename, + "time_created": task.createdtime.strftime("%Y-%m-%dT%H:%M:%S"), + "time_started": task.starttime.strftime("%Y-%m-%dT%H:%M:%S"), + "time_ended": task.endtime.strftime("%Y-%m-%dT%H:%M:%S"), + "duration": helpers.task_duration_in_seconds(task), + } + for task in job.task_set.all() + ], + } ) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert len(payload) == 1 - job = payload[0] - assert job["uuid"] == "b7902aae-ec5f-4290-a3d7-c47f844e8774" - - @e2e - def test_unit_jobs_searching_for_chain_link(self): - load_fixture(["jobs-rejected"]) - # add chain links to the fixture jobs - job = Job.objects.get(jobuuid="59ace00b-4830-4314-a7d9-38fdbef64896") - job.microservicechainlink = "0b8f1929-5beb-4998-a2d5-40e4873fa887" + + resp = admin_client.get( + reverse("api:v2beta_jobs", args=[transfer.uuid]), {"detailed": "true"} + ) + assert resp.status_code == 200 + + payload = json.loads(resp.content.decode("utf8")) + assert payload == expected + + +@pytest.mark.django_db +def test_task_with_bogus_task_uuid(admin_client, dashboard_uuid): + bogus_task_uuid = "00000000-dfac-430d-93f4-f0453b18ad2f" + resp = admin_client.get(reverse("api:v2beta_task", args=[bogus_task_uuid])) + assert resp.status_code == 400 + payload = json.loads(resp.content.decode("utf8")) + assert payload["error"] is True + assert payload["message"] == f"Task with UUID {bogus_task_uuid} does not exist" + + +@pytest.mark.django_db +def test_task(admin_client, dashboard_uuid, jobs_transfer_backlog): + stored_job = jobs_transfer_backlog[1] + # fixtures don't have any tasks + task_uuid = uuid.uuid4() + Task.objects.create( + taskuuid=task_uuid, + job=stored_job, + createdtime=make_aware(datetime.datetime(2019, 6, 18, 0, 0, 0)), + starttime=make_aware(datetime.datetime(2019, 6, 18, 0, 0, 0)), + endtime=make_aware(datetime.datetime(2019, 6, 18, 0, 0, 5)), + exitcode=0, + ) + resp = admin_client.get(reverse("api:v2beta_task", args=[task_uuid])) + assert resp.status_code == 200 + payload = json.loads(resp.content.decode("utf8")) + # payload is a mapping of task attributes + assert payload["uuid"] == str(task_uuid) + assert payload["exit_code"] == 0 + assert payload["file_uuid"] is None + assert payload["file_name"] == "" + assert payload["time_created"] == "2019-06-18T00:00:00" + assert payload["time_started"] == "2019-06-18T00:00:00" + assert payload["time_ended"] == "2019-06-18T00:00:05" + assert payload["duration"] == 5 + + +@pytest.mark.django_db +def test_get_levels_of_description(admin_client, dashboard_uuid): + LevelOfDescription.objects.create(name="Item", sortorder=2) + LevelOfDescription.objects.create(name="Collection", sortorder=0) + LevelOfDescription.objects.create(name="Fonds", sortorder=1) + expected = ["Collection", "Fonds", "Item"] + + resp = admin_client.get(reverse("api:get_levels_of_description")) + payload = json.loads(resp.content.decode("utf8")) + + result = [] + for level_of_description in payload: + name = next(iter(level_of_description.values())) + result.append(name) + + assert result == expected + + +@pytest.fixture +def shared_dir(tmp_path, settings): + shared_dir = tmp_path / "shared_dir" + shared_dir.mkdir() + + (shared_dir / "sharedMicroServiceTasksConfigs" / "processingMCPConfigs").mkdir( + parents=True + ) + + settings.SHARED_DIRECTORY = shared_dir.as_posix() + install_builtin_config("default") + install_builtin_config("automated") + + return shared_dir + + +def test_list_processing_configs(admin_client, dashboard_uuid, shared_dir): + expected_names = sorted(["default", "automated"]) + response = admin_client.get(reverse("api:processing_configuration_list")) + assert response.status_code == 200 + payload = json.loads(response.content.decode("utf8")) + shared_dir = payload["processing_configurations"] + assert len(shared_dir) == 2 + assert all( + actual == expected for actual, expected in zip(shared_dir, expected_names) + ) + + +def test_get_existing_processing_config(admin_client, dashboard_uuid, shared_dir): + response = admin_client.get( + reverse("api:processing_configuration", args=["default"]), + HTTP_ACCEPT="xml", + ) + assert response.status_code == 200 + assert etree.fromstring(response.content).xpath(".//preconfiguredChoice") + + +def test_delete_and_regenerate(admin_client, dashboard_uuid, shared_dir): + processing_configs = ( + shared_dir / "sharedMicroServiceTasksConfigs" / "processingMCPConfigs" + ) + + response = admin_client.delete( + reverse("api:processing_configuration", args=["default"]) + ) + assert response.status_code == 200 + assert not (processing_configs / "defaultProcessingMCP.xml").exists() + + response = admin_client.get( + reverse("api:processing_configuration", args=["default"]), + HTTP_ACCEPT="xml", + ) + assert response.status_code == 200 + assert etree.fromstring(response.content).xpath(".//preconfiguredChoice") + assert (processing_configs / "defaultProcessingMCP.xml").exists() + + +def test_404_for_non_existent_config(admin_client, dashboard_uuid, shared_dir): + response = admin_client.get( + reverse("api:processing_configuration", args=["nonexistent"]), + HTTP_ACCEPT="xml", + ) + assert response.status_code == 404 + + +def test_404_for_delete_non_existent_config(admin_client, dashboard_uuid, shared_dir): + response = admin_client.delete( + reverse("api:processing_configuration", args=["nonexistent"]) + ) + assert response.status_code == 404 + + +@pytest.mark.django_db +def test_get_unit_status_multiple( + jobs_failed, + jobs_transfer_complete, + jobs_rejected, + jobs_user_input, + jobs_transfer_backlog, +): + """When the database contains 5 units of the following types: + 1. a failed transfer + 2. a completed transfer + 3. a rejected transfer + 4. a transfer awaiting user input + 5. a transfer in backlog + then ``completed_units_efficient`` should return 3: the failed, + the completed, and the in-backlog transfer. + """ + failed_transfer = Transfer.objects.create() + for job in jobs_failed: + job.sipuuid = failed_transfer.uuid job.save() - job = Job.objects.get(jobuuid="b7902aae-ec5f-4290-a3d7-c47f844e8774") - job.microservicechainlink = "2208efc0-ba99-4b36-bb8d-99330fcc25da" + + complete_transfer = Transfer.objects.create() + for job in jobs_transfer_complete: + job.sipuuid = complete_transfer.uuid job.save() - sip_uuid = "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e" - resp = self.client.get( - reverse("api:v2beta_jobs", args=[sip_uuid]), - {"link_uuid": "0b8f1929-5beb-4998-a2d5-40e4873fa887"}, - ) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert len(payload) == 1 - job = payload[0] - assert job["uuid"] == "59ace00b-4830-4314-a7d9-38fdbef64896" - assert job["name"] == "Create SIP(s)" - assert job["status"] == "COMPLETE" - assert job["microservice"] == "Create SIP from Transfer" - assert job["link_uuid"] == "0b8f1929-5beb-4998-a2d5-40e4873fa887" - assert job["tasks"] == [] - - @e2e - def test_unit_jobs_searching_for_name(self): - load_fixture(["jobs-rejected"]) - sip_uuid = "3e1e56ed-923b-4b53-84fe-c5c1c0b0cf8e" - resp = self.client.get( - reverse("api:v2beta_jobs", args=[sip_uuid]), - {"name": "Move to the rejected directory"}, - ) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert len(payload) == 1 - job = payload[0] - assert job["uuid"] == "b7902aae-ec5f-4290-a3d7-c47f844e8774" - assert job["name"] == "Move to the rejected directory" - assert job["status"] == "COMPLETE" - assert job["microservice"] == "Reject transfer" - assert job["link_uuid"] is None - assert job["tasks"] == [] - # Test that name search also works with a "Job:" prefix - resp = self.client.get( - reverse("api:v2beta_jobs", args=[sip_uuid]), - {"name": "Job: Move to the rejected directory"}, - ) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - assert len(payload) == 1 - job = payload[0] - assert job["uuid"] == "b7902aae-ec5f-4290-a3d7-c47f844e8774" - - @e2e - def test_task_with_bogus_task_uuid(self): - bogus_task_uuid = "00000000-dfac-430d-93f4-f0453b18ad2f" - resp = self.client.get(reverse("api:v2beta_task", args=[bogus_task_uuid])) - self._test_api_error( - resp, - status_code=400, - message=(f"Task with UUID {bogus_task_uuid} does not exist"), - ) - @e2e - def test_task(self): - load_fixture(["jobs-transfer-backlog"]) - # fixtures don't have any tasks - Task.objects.create( - taskuuid="12345678-1234-1234-1234-123456789012", - job=Job.objects.get(jobuuid="d2f99030-26b9-4746-b100-856779624934"), - createdtime=make_aware(datetime.datetime(2019, 6, 18, 0, 0, 0)), - starttime=make_aware(datetime.datetime(2019, 6, 18, 0, 0, 0)), - endtime=make_aware(datetime.datetime(2019, 6, 18, 0, 0, 5)), - exitcode=0, - ) - resp = self.client.get( - reverse("api:v2beta_task", args=["12345678-1234-1234-1234-123456789012"]) - ) - assert resp.status_code == 200 - payload = json.loads(resp.content.decode("utf8")) - # payload is a mapping of task attributes - assert payload["uuid"] == "12345678-1234-1234-1234-123456789012" - assert payload["exit_code"] == 0 - assert payload["file_uuid"] is None - assert payload["file_name"] == "" - assert payload["time_created"] == "2019-06-18T00:00:00" - assert payload["time_started"] == "2019-06-18T00:00:00" - assert payload["time_ended"] == "2019-06-18T00:00:05" - assert payload["duration"] == 5 - - @e2e - def test_get_levels_of_description(self): - LevelOfDescription.objects.create(name="Item", sortorder=2) - LevelOfDescription.objects.create(name="Collection", sortorder=0) - LevelOfDescription.objects.create(name="Fonds", sortorder=1) - expected = ["Collection", "Fonds", "Item"] - - resp = self.client.get(reverse("api:get_levels_of_description")) - payload = json.loads(resp.content.decode("utf8")) - - result = [] - for level_of_description in payload: - name = next(iter(level_of_description.values())) - result.append(name) - - assert result == expected - - -class TestProcessingConfigurationAPI(TestCase): - fixtures = ["test_user"] - - def setUp(self): - self.client = Client() - self.client.login(username="test", password="test") - helpers.set_setting("dashboard_uuid", "test-uuid") - self.populate_shared_dir() - - def populate_shared_dir(self): - self.shared_dir = tempfile.gettempdir() - self.config_path = os.path.join( - self.shared_dir, - "sharedMicroServiceTasksConfigs/processingMCPConfigs/", - ) - if not os.path.exists(self.config_path): - os.makedirs(self.config_path) - with self.settings(SHARED_DIRECTORY=self.shared_dir): - install_builtin_config("default") - install_builtin_config("automated") - - def test_list_processing_configs(self): - with self.settings(SHARED_DIRECTORY=self.shared_dir): - response = self.client.get(reverse("api:processing_configuration_list")) - assert response.status_code == 200 - payload = json.loads(response.content.decode("utf8")) - processing_configs = payload["processing_configurations"] - assert len(processing_configs) == 2 - expected_names = sorted(["default", "automated"]) - assert all( - actual == expected - for actual, expected in zip(processing_configs, expected_names) - ) + rejected_transfer = Transfer.objects.create() + for job in jobs_rejected: + job.sipuuid = rejected_transfer.uuid + job.save() - def test_get_existing_processing_config(self): - with self.settings(SHARED_DIRECTORY=self.shared_dir): - response = self.client.get( - reverse("api:processing_configuration", args=["default"]), - HTTP_ACCEPT="xml", - ) - assert response.status_code == 200 - assert etree.fromstring(response.content).xpath(".//preconfiguredChoice") + awaiting_transfer = Transfer.objects.create() + for job in jobs_user_input: + job.sipuuid = awaiting_transfer.uuid + job.save() - def test_delete_and_regenerate(self): - with self.settings(SHARED_DIRECTORY=self.shared_dir): - response = self.client.delete( - reverse("api:processing_configuration", args=["default"]) - ) - assert response.status_code == 200 - assert not os.path.exists( - os.path.join(self.config_path, "defaultProcessingMCP.xml") - ) + backlog_transfer = Transfer.objects.create() + for job in jobs_transfer_backlog: + job.sipuuid = backlog_transfer.uuid + job.save() - response = self.client.get( - reverse("api:processing_configuration", args=["default"]), - HTTP_ACCEPT="xml", - ) - assert response.status_code == 200 - assert etree.fromstring(response.content).xpath(".//preconfiguredChoice") - assert os.path.exists( - os.path.join(self.config_path, "defaultProcessingMCP.xml") - ) + expected_uuids = [ + str(t.uuid) for t in [failed_transfer, complete_transfer, backlog_transfer] + ] - def test_404_for_non_existent_config(self): - response = self.client.get( - reverse("api:processing_configuration", args=["nonexistent"]), - HTTP_ACCEPT="xml", - ) - assert response.status_code == 404 + completed = helpers.completed_units_efficient( + unit_type="transfer", include_failed=True + ) - def test_404_for_delete_non_existent_config(self): - response = self.client.delete( - reverse("api:processing_configuration", args=["nonexistent"]) - ) - assert response.status_code == 404 - - -class TestAPI2(TestCase): - """Test API endpoints.""" - - fixtures = ["units", "jobs-various"] - - def test_get_unit_status_multiple(self): - """When the database contains 5 units of the following types: - 1. a failed transfer b949773d-7cf7-4c1e-aea5-ccbf65b70ccd - 2. a completed transfer 85216028-1150-4321-abb3-31ea570a341b - 3. a rejected transfer c9cce131-7bd9-41c8-82ab-483190961ae2 - 4. a transfer awaiting user input 37a07d96-6fc0-4002-b269-471a58783805 - 5. a transfer in backlog 5d0ab97f-a45b-4e0f-9cb6-90ee3a404549 - then ``completed_units_efficient`` should return 3: the failed, - the completed, and the in-backlog transfer. - """ - completed = helpers.completed_units_efficient( - unit_type="transfer", include_failed=True - ) - assert len(completed) == 3 - assert "85216028-1150-4321-abb3-31ea570a341b" in completed - assert "5d0ab97f-a45b-4e0f-9cb6-90ee3a404549" in completed - assert "b949773d-7cf7-4c1e-aea5-ccbf65b70ccd" in completed + assert set(completed) == set(expected_uuids) @pytest.mark.django_db @@ -1168,3 +1423,40 @@ def test_fetch_levels_of_description_from_atom_communication_failure( "success": False, "error": "Unable to fetch levels of description from AtoM!", } + + +@pytest.mark.django_db +def test_mark_hidden(admin_client, dashboard_uuid, transfer): + # This endpoint considers the status attribute instead of jobs. + transfer.status = PACKAGE_STATUS_COMPLETED_SUCCESSFULLY + transfer.save() + + assert not transfer.hidden + + response = admin_client.delete( + reverse( + "api:mark_hidden", + kwargs={"unit_type": "transfer", "unit_uuid": transfer.uuid}, + ) + ) + assert response.status_code == 200 + + payload = json.loads(response.content.decode("utf8")) + assert payload == {"removed": True} + assert Transfer.objects.get(pk=transfer.uuid).hidden + + +@pytest.mark.django_db +def test_mark_completed_hidden( + admin_client, dashboard_uuid, transfer, jobs_transfer_complete +): + assert not transfer.hidden + + response = admin_client.delete( + reverse("api:mark_completed_hidden", kwargs={"unit_type": "transfer"}) + ) + assert response.status_code == 200 + + payload = json.loads(response.content.decode("utf8")) + assert payload == {"removed": [str(transfer.uuid)]} + assert Transfer.objects.get(pk=transfer.uuid).hidden