Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7343075
D1880.id6412.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
D1880.id6412.diff
View Options
diff --git a/cypress/integration/origin-save.spec.js b/cypress/integration/origin-save.spec.js
new file mode 100644
--- /dev/null
+++ b/cypress/integration/origin-save.spec.js
@@ -0,0 +1,128 @@
+/**
+ * Copyright (C) 2019 The Software Heritage developers
+ * See the AUTHORS file at the top-level directory of this distribution
+ * License: GNU Affero General Public License version 3, or any later version
+ * See top-level LICENSE file for more information
+ */
+
+let url;
+let origin;
+
+const saveCodeMsg = {
+ 'success': 'The "save code now" request has been accepted and will be processed as soon as possible.',
+ 'warning': 'The "save code now" request has been put in pending state and may be accepted for processing after manual review.',
+ 'rejected': 'The "save code now" request has been rejected because the provided origin url is blacklisted.',
+ 'rateLimit': 'The rate limit for "save code now" requests has been reached. Please try again later.',
+ 'unknownErr': 'An unexpected error happened when submitting the "save code now request'
+};
+
+function makeOriginSaveRequest(originType, originUrl) {
+ cy.get('#swh-input-origin-type')
+ .select(originType)
+ .get('#swh-input-origin-url')
+ .type(originUrl)
+ .get('#swh-save-origin-form')
+ .submit();
+}
+
+function checkAlertVisible(alertType, msg) {
+ cy.get('#swh-origin-save-request-status')
+ .should('be.visible')
+ .find(`.alert-${alertType}`)
+ .should('be.visible')
+ .and('contain', msg);
+}
+
+// Stub requests to save an origin
+function stubSaveRequest(requestUrl, objectType, status, originUrl, taskStatus, responseStatus = 200) {
+ cy.route({
+ method: 'POST',
+ status: responseStatus,
+ url: requestUrl,
+ response: genOriginSaveResponse(objectType, status, originUrl, Date().toString(), taskStatus)
+ }).as('saveRequest');
+}
+
+// Mocks API response : /save/(:object_type)/(:origin_url)
+// object_type : {'git', 'hg', 'svn'}
+function genOriginSaveResponse(objectType, saveRequestStatus, originUrl, saveRequestDate, saveTaskStatus) {
+ return {
+ 'origin_type': objectType,
+ 'save_request_status': saveRequestStatus,
+ 'origin_url': originUrl,
+ 'id': 1,
+ 'save_request_date': saveRequestDate,
+ 'save_task_status': saveTaskStatus,
+ 'visit_date': null
+ };
+};
+
+describe('Origin Save Tests', function() {
+ before(function() {
+ url = this.Urls.origin_save();
+ origin = this.origin[0];
+ this.originSaveUrl = this.Urls.origin_save_request(origin.type, origin.url);
+ });
+
+ beforeEach(function() {
+ cy.visit(url);
+ cy.server();
+ });
+
+ it('should display accepted message when accepted', function() {
+ stubSaveRequest(this.originSaveUrl, origin.type, 'accepted',
+ origin.url, 'not yet scheduled');
+
+ makeOriginSaveRequest(origin.type, origin.url);
+
+ cy.wait('@saveRequest').then(() => {
+ checkAlertVisible('success', saveCodeMsg['success']);
+ });
+ });
+
+ it('should display warning message when pending', function() {
+ stubSaveRequest(this.originSaveUrl, origin.type, 'pending',
+ origin.url, 'not created');
+
+ makeOriginSaveRequest(origin.type, origin.url);
+
+ cy.wait('@saveRequest').then(() => {
+ checkAlertVisible('warning', saveCodeMsg['warning']);
+ });
+ });
+
+ it('should show error when origin is rejected (status: 403)', function() {
+ stubSaveRequest(this.originSaveUrl, origin.type, 'rejected',
+ origin.url, 'not created', 403);
+
+ makeOriginSaveRequest(origin.type, origin.url);
+
+ cy.wait('@saveRequest').then(() => {
+ checkAlertVisible('danger', saveCodeMsg['rejected']);
+ });
+ });
+
+ it('should show error when rate limited (status: 429)', function() {
+ stubSaveRequest(this.originSaveUrl, origin.type,
+ 'Request was throttled. Expected available in 60 seconds.',
+ origin.url, 'not created', 429);
+
+ makeOriginSaveRequest(origin.type, origin.url);
+
+ cy.wait('@saveRequest').then(() => {
+ checkAlertVisible('danger', saveCodeMsg['rateLimit']);
+ });
+ });
+
+ it('should show error when unknown error occurs (status other than 200, 403, 429)', function() {
+ stubSaveRequest(this.originSaveUrl, origin.type, 'Error',
+ origin.url, 'not created', 406);
+
+ makeOriginSaveRequest(origin.type, origin.url);
+
+ cy.wait('@saveRequest').then(() => {
+ checkAlertVisible('danger', saveCodeMsg['unknownErr']);
+ });
+ });
+
+});
diff --git a/cypress/support/index.js b/cypress/support/index.js
--- a/cypress/support/index.js
+++ b/cypress/support/index.js
@@ -16,6 +16,7 @@
before(function() {
this.unarchivedRepo = {
url: 'https://github.com/SoftwareHeritage/swh-web',
+ type: 'git',
revision: '7bf1b2f489f16253527807baead7957ca9e8adde',
snapshot: 'd9829223095de4bb529790de8ba4e4813e38672d',
rootDirectory: '7d887d96c0047a77e2e8c4ee9bb1528463677663',
@@ -26,6 +27,7 @@
this.origin = [{
url: 'https://github.com/memononen/libtess2',
+ type: 'git',
content: [{
path: 'Source/tess.h'
}, {
@@ -39,6 +41,7 @@
invalidSubDir: 'Source1'
}, {
url: 'https://github.com/wcoder/highlightjs-line-numbers.js',
+ type: 'git',
content: [],
directory: [],
revisions: ['1c480a4573d2a003fc2630c21c2b25829de49972']
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mar 17 2025, 7:09 PM (7 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3215116
Attached To
D1880: cypress: origin-save tests
Event Timeline
Log In to Comment