Changeset View
Changeset View
Standalone View
Standalone View
cypress/integration/origin-save.spec.js
/** | /** | ||||
* Copyright (C) 2019-2021 The Software Heritage developers | * Copyright (C) 2019-2021 The Software Heritage developers | ||||
* See the AUTHORS file at the top-level directory of this distribution | * See the AUTHORS file at the top-level directory of this distribution | ||||
* License: GNU Affero General Public License version 3, or any later version | * License: GNU Affero General Public License version 3, or any later version | ||||
* See top-level LICENSE file for more information | * See top-level LICENSE file for more information | ||||
*/ | */ | ||||
let url; | let url; | ||||
let origin; | let origin; | ||||
const $ = Cypress.$; | const $ = Cypress.$; | ||||
const saveCodeMsg = { | const saveCodeMsg = { | ||||
'success': 'The "save code now" request has been accepted and will be processed as soon as possible.', | '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.', | '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.', | '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.', | 'rateLimit': 'The rate limit for "save code now" requests has been reached. Please try again later.', | ||||
'not-found': 'The provided url does not exist', | |||||
'unknownError': 'An unexpected error happened when submitting the "save code now request', | 'unknownError': 'An unexpected error happened when submitting the "save code now request', | ||||
'csrfError': 'CSRF Failed: Referrer checking failed - no Referrer.' | 'csrfError': 'CSRF Failed: Referrer checking failed - no Referrer.' | ||||
}; | }; | ||||
function makeOriginSaveRequest(originType, originUrl) { | function makeOriginSaveRequest(originType, originUrl) { | ||||
cy.get('#swh-input-origin-url') | cy.get('#swh-input-origin-url') | ||||
.type(originUrl) | .type(originUrl) | ||||
.get('#swh-input-visit-type') | .get('#swh-input-visit-type') | ||||
Show All 13 Lines | |||||
// Stub requests to save an origin | // Stub requests to save an origin | ||||
function stubSaveRequest({ | function stubSaveRequest({ | ||||
requestUrl, | requestUrl, | ||||
visitType = 'git', | visitType = 'git', | ||||
saveRequestStatus, | saveRequestStatus, | ||||
originUrl, | originUrl, | ||||
saveTaskStatus, | saveTaskStatus, | ||||
responseStatus = 200, | responseStatus = 200, | ||||
// For error code with the error message in the 'reason' key response | |||||
errorMessage = '', | errorMessage = '', | ||||
saveRequestDate = new Date(), | saveRequestDate = new Date(), | ||||
visitDate = new Date(), | visitDate = new Date(), | ||||
visitStatus = null | visitStatus = null | ||||
} = {}) { | } = {}) { | ||||
let response; | let response; | ||||
if (responseStatus !== 200 && errorMessage) { | if (responseStatus !== 200 && errorMessage) { | ||||
response = { | response = { | ||||
'detail': errorMessage | 'reason': errorMessage | ||||
}; | }; | ||||
} else { | } else { | ||||
response = genOriginSaveResponse({visitType: visitType, | response = genOriginSaveResponse({visitType: visitType, | ||||
saveRequestStatus: saveRequestStatus, | saveRequestStatus: saveRequestStatus, | ||||
originUrl: originUrl, | originUrl: originUrl, | ||||
saveRequestDate: saveRequestDate, | saveRequestDate: saveRequestDate, | ||||
saveTaskStatus: saveTaskStatus, | saveTaskStatus: saveTaskStatus, | ||||
visitDate: visitDate, | visitDate: visitDate, | ||||
visitStatus: visitStatus | visitStatus: visitStatus | ||||
}); | }); | ||||
} | } | ||||
cy.intercept('POST', requestUrl, {body: response, statusCode: responseStatus}) | cy.intercept('POST', requestUrl, {body: response, statusCode: responseStatus}) | ||||
.as('saveRequest'); | .as('saveRequest'); | ||||
} | } | ||||
// Mocks API response : /save/(:visit_type)/(:origin_url) | // Mocks API response : /save/(:visit_type)/(:origin_url) | ||||
// visit_type : {'git', 'hg', 'svn'} | // visit_type : {'git', 'hg', 'svn', ...} | ||||
function genOriginSaveResponse({ | function genOriginSaveResponse({ | ||||
visitType = 'git', | visitType = 'git', | ||||
saveRequestStatus, | saveRequestStatus, | ||||
originUrl, | originUrl, | ||||
saveRequestDate = new Date(), | saveRequestDate = new Date(), | ||||
saveTaskStatus, | saveTaskStatus, | ||||
visitDate = new Date(), | visitDate = new Date(), | ||||
visitStatus | visitStatus | ||||
▲ Show 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | it('should display warning message when pending', function() { | ||||
makeOriginSaveRequest(origin.type, origin.url); | makeOriginSaveRequest(origin.type, origin.url); | ||||
cy.wait('@saveRequest').then(() => { | cy.wait('@saveRequest').then(() => { | ||||
checkAlertVisible('warning', saveCodeMsg['warning']); | checkAlertVisible('warning', saveCodeMsg['warning']); | ||||
}); | }); | ||||
}); | }); | ||||
it('should show error when the origin does not exist (status: 400)', function() { | |||||
stubSaveRequest({requestUrl: this.originSaveUrl, | |||||
originUrl: origin.url, | |||||
responseStatus: 400, | |||||
errorMessage: saveCodeMsg['not-found']}); | |||||
makeOriginSaveRequest(origin.type, origin.url); | |||||
cy.wait('@saveRequest').then(() => { | |||||
checkAlertVisible('danger', saveCodeMsg['not-found']); | |||||
}); | |||||
}); | |||||
it('should show error when csrf validation failed (status: 403)', function() { | it('should show error when csrf validation failed (status: 403)', function() { | ||||
stubSaveRequest({requestUrl: this.originSaveUrl, | stubSaveRequest({requestUrl: this.originSaveUrl, | ||||
saveRequestStatus: 'rejected', | saveRequestStatus: 'rejected', | ||||
originUrl: origin.url, | originUrl: origin.url, | ||||
saveTaskStatus: 'not created', | saveTaskStatus: 'not created', | ||||
responseStatus: 403, | responseStatus: 403, | ||||
errorMessage: saveCodeMsg['csrfError']}); | errorMessage: saveCodeMsg['csrfError']}); | ||||
▲ Show 20 Lines • Show All 195 Lines • Show Last 20 Lines |