diff --git a/cypress/integration/persistent-identifiers.spec.js b/cypress/integration/persistent-identifiers.spec.js --- a/cypress/integration/persistent-identifiers.spec.js +++ b/cypress/integration/persistent-identifiers.spec.js @@ -21,7 +21,7 @@ before(function() { origin = this.origin[1]; url = `${this.Urls.browse_origin_content()}?origin_url=${origin.url}&path=${origin.content[0].path}`; - url = `${url}&release=${origin.release}#L${firstSelLine}-L${lastSelLine}`; + url = `${url}&release=${origin.release.name}#L${firstSelLine}-L${lastSelLine}`; originBadgeUrl = this.Urls.swh_badge('origin', origin.url); originBrowseUrl = `${this.Urls.browse_origin()}?origin_url=${origin.url}`; cy.visit(url).window().then(win => { diff --git a/cypress/integration/vault.spec.js b/cypress/integration/vault.spec.js --- a/cypress/integration/vault.spec.js +++ b/cypress/integration/vault.spec.js @@ -79,6 +79,10 @@ this.vaultRevisionUrl = this.Urls.api_1_vault_cook_revision_gitfast(this.revision); this.vaultFetchRevisionUrl = this.Urls.api_1_vault_fetch_revision_gitfast(this.revision); + const release = this.origin[1].release; + this.releaseUrl = this.Urls.browse_release(release.id) + `?origin_url=${this.origin[1].url}`; + this.vaultReleaseDirectoryUrl = this.Urls.api_1_vault_cook_directory(release.directory); + vaultItems[0] = { 'object_type': 'revision', 'object_id': this.revision, @@ -364,6 +368,47 @@ }); }); + it('should create a directory cooking task from the release view', function() { + + // Browse a directory + cy.visit(this.releaseUrl); + + // Stub responses when requesting the vault API to simulate + // a task has been created + cy.route({ + method: 'GET', + url: this.vaultReleaseDirectoryUrl, + response: {'exception': 'NotFoundExc'} + }).as('checkVaultCookingTask'); + + cy.route({ + method: 'POST', + url: this.vaultReleaseDirectoryUrl, + response: this.genVaultDirCookingResponse('new') + }).as('createVaultCookingTask'); + + cy.contains('button', 'Download') + .click(); + + cy.route({ + method: 'GET', + url: this.vaultReleaseDirectoryUrl, + response: this.genVaultDirCookingResponse('new') + }).as('checkVaultCookingTask'); + + // Create a vault cooking task through the GUI + cy.get('.modal-dialog') + .contains('button:visible', 'Ok') + .click(); + + cy.wait('@createVaultCookingTask'); + + // Check success alert is displayed + cy.get('.alert-success') + .should('be.visible') + .should('contain', 'Archive cooking request successfully submitted.'); + }); + it('should offer to recook an archive if no more available to download', function() { updateVaultItemList(this.Urls.browse_vault(), vaultItems); diff --git a/cypress/support/index.js b/cypress/support/index.js --- a/cypress/support/index.js +++ b/cypress/support/index.js @@ -80,7 +80,11 @@ }], directory: [], revisions: ['1c480a4573d2a003fc2630c21c2b25829de49972'], - release: 'v2.6.0' + release: { + name: 'v2.6.0', + id: '6877028d6e5412780517d0bfa81f07f6c51abb41', + directory: '5b61d50ef35ca9a4618a3572bde947b8cccf71ad' + } }]; const getMetadataForOrigin = async originUrl => { diff --git a/swh/web/browse/utils.py b/swh/web/browse/utils.py --- a/swh/web/browse/utils.py +++ b/swh/web/browse/utils.py @@ -319,7 +319,9 @@ """ query_params = _snapshot_context_query_params(snapshot_context) + # remove query parameters not needed for a revision view query_params.pop("revision", None) + query_params.pop("release", None) return reverse( "browse-revision", url_args={"sha1_git": revision_id}, query_params=query_params diff --git a/swh/web/browse/views/release.py b/swh/web/browse/views/release.py --- a/swh/web/browse/views/release.py +++ b/swh/web/browse/views/release.py @@ -51,7 +51,11 @@ if origin_url: try: snapshot_context = get_snapshot_context( - snapshot_id, origin_url, timestamp, visit_id + snapshot_id, + origin_url, + timestamp, + visit_id, + release_name=release["name"], ) except NotFoundExc as e: raw_rel_url = reverse("browse-release", url_args={"sha1_git": sha1_git}) @@ -70,7 +74,9 @@ raise e origin_info = snapshot_context["origin_info"] elif snapshot_id: - snapshot_context = get_snapshot_context(snapshot_id) + snapshot_context = get_snapshot_context( + snapshot_id, release_name=release["name"] + ) snapshot_id = snapshot_context.get("snapshot_id", None) @@ -95,6 +101,8 @@ if release["message"]: release_note_lines = release["message"].split("\n") + swh_objects = [SWHObjectInfo(object_type=RELEASE, object_id=sha1_git)] + vault_cooking = None rev_directory = None @@ -115,6 +123,12 @@ "revision_context": True, "revision_id": release["target"], } + swh_objects.append( + SWHObjectInfo(object_type=REVISION, object_id=release["target"]) + ) + swh_objects.append( + SWHObjectInfo(object_type=DIRECTORY, object_id=rev_directory) + ) except Exception as exc: sentry_sdk.capture_exception(exc) elif release["target_type"] == DIRECTORY: @@ -133,6 +147,9 @@ "revision_context": False, "revision_id": None, } + swh_objects.append( + SWHObjectInfo(object_type=DIRECTORY, object_id=release["target"]) + ) except Exception as exc: sentry_sdk.capture_exception(exc) elif release["target_type"] == CONTENT: @@ -142,6 +159,9 @@ link_text=None, link_attrs=None, ) + swh_objects.append( + SWHObjectInfo(object_type=CONTENT, object_id=release["target"]) + ) elif release["target_type"] == RELEASE: target_link = gen_release_link( release["target"], @@ -178,8 +198,6 @@ release["directory_link"] = directory_link release["target_link"] = target_link - swh_objects = [SWHObjectInfo(object_type=RELEASE, object_id=sha1_git)] - if snapshot_context: snapshot_id = snapshot_context["snapshot_id"] diff --git a/swh/web/tests/browse/views/test_release.py b/swh/web/tests/browse/views/test_release.py --- a/swh/web/tests/browse/views/test_release.py +++ b/swh/web/tests/browse/views/test_release.py @@ -9,6 +9,7 @@ from django.utils.html import escape +from swh.model.identifiers import DIRECTORY, RELEASE, REVISION, SNAPSHOT from swh.web.common.identifiers import gen_swhid from swh.web.common.utils import format_utc_iso_date, reverse from swh.web.tests.django_asserts import assert_contains @@ -106,7 +107,7 @@ assert_contains(resp, target_type) assert_contains(resp, '%s' % (escape(target_url), target)) - swh_rel_id = gen_swhid("release", release_id) + swh_rel_id = gen_swhid(RELEASE, release_id) swh_rel_id_url = reverse("browse-swhid", url_args={"swhid": swh_rel_id}) assert_contains(resp, swh_rel_id) assert_contains(resp, swh_rel_id_url) @@ -117,11 +118,15 @@ ) assert_contains(resp, f'href="{browse_origin_url}"') elif snapshot_id: - swh_snp_id = gen_swhid("snapshot", snapshot_id) + swh_snp_id = gen_swhid(SNAPSHOT, snapshot_id) swh_snp_id_url = reverse("browse-swhid", url_args={"swhid": swh_snp_id}) assert_contains(resp, f'href="{swh_snp_id_url}"') if release_data["target_type"] == "revision": + rev = archive_data.revision_get(release_data["target"]) + rev_dir = rev["directory"] + rev_metadata = {} + dir_metadata = {} if origin_url: directory_url = reverse( "browse-origin-directory", @@ -131,15 +136,31 @@ "snapshot": snapshot_id, }, ) + rev_metadata["origin"] = dir_metadata["origin"] = origin_url + snapshot = archive_data.snapshot_get_latest(origin_url) + rev_metadata["visit"] = dir_metadata["visit"] = gen_swhid( + SNAPSHOT, snapshot["id"] + ) + dir_metadata["anchor"] = gen_swhid(RELEASE, release_id) + elif snapshot_id: directory_url = reverse( "browse-snapshot-directory", url_args={"snapshot_id": snapshot_id}, query_params={"release": release_data["name"],}, ) - else: - rev = archive_data.revision_get(release_data["target"]) - directory_url = reverse( - "browse-directory", url_args={"sha1_git": rev["directory"]} + rev_metadata["visit"] = dir_metadata["visit"] = gen_swhid( + SNAPSHOT, snapshot_id ) + dir_metadata["anchor"] = gen_swhid(RELEASE, release_id) + else: + directory_url = reverse("browse-directory", url_args={"sha1_git": rev_dir}) assert_contains(resp, escape(directory_url)) + + swh_rev_id = gen_swhid(REVISION, rev["id"], metadata=rev_metadata) + swh_rev_id_url = reverse("browse-swhid", url_args={"swhid": swh_rev_id}) + assert_contains(resp, swh_rev_id_url) + + swh_dir_id = gen_swhid(DIRECTORY, rev_dir, metadata=dir_metadata) + swh_dir_id_url = reverse("browse-swhid", url_args={"swhid": swh_dir_id}) + assert_contains(resp, swh_dir_id_url)