first commit
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
/**
|
||||
* @file cypress/tests/functional/WebFeed.cy.js
|
||||
*
|
||||
* Copyright (c) 2014-2023 Simon Fraser University
|
||||
* Copyright (c) 2000-2023 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
*/
|
||||
|
||||
describe('Web Feed plugin tests', () => {
|
||||
const feedSize = 2;
|
||||
it('The side bar and the feeds are displayed properly', () => {
|
||||
cy.login('admin', 'admin', 'publicknowledge');
|
||||
|
||||
cy.get('.app__nav a').contains('Website').click();
|
||||
cy.get('button[id="plugins-button"]').click();
|
||||
|
||||
// Access the settings and setup some options
|
||||
cy.get('a[id^="component-grid-settings-plugins-settingsplugingrid-category-generic-row-webfeedplugin-settings-button-"]', {timeout: 20_000}).as('settings');
|
||||
cy.waitJQuery();
|
||||
cy.get('@settings').click({force: true});
|
||||
cy.get('#displayPage-all').check();
|
||||
// OJS has an extra option to switch between displaying the latest articles/issue
|
||||
if (Cypress.env('defaultGenre') === 'Article Text') {
|
||||
cy.get('#displayItems-recent').check();
|
||||
}
|
||||
cy.get('input[id^="recentItems"]').clear().type(feedSize, {delay: 0});
|
||||
cy.get('#includeIdentifiers').check();
|
||||
cy.get('form[id="webFeedSettingsForm"] button[id^="submitFormButton"]').click();
|
||||
cy.waitJQuery();
|
||||
|
||||
// Enable the wed feed plugin's sidebar
|
||||
cy.reload();
|
||||
cy.get('.app__nav a').contains('Website').click();
|
||||
cy.get('button[id="appearance-button"]').click();
|
||||
|
||||
cy.get('#appearance-setup-button').click();
|
||||
cy.contains('Web Feed Plugin').click();
|
||||
cy.contains('Web Feed Plugin').parents('form').find('button:contains("Save")').click();
|
||||
|
||||
// Visit homepage
|
||||
cy.wait(2000);
|
||||
|
||||
cy.visit('/');
|
||||
const feeds = {
|
||||
'atom': {mimeType: 'application/atom+xml'},
|
||||
'rss': {mimeType: 'application/rdf+xml'},
|
||||
'rss2': {mimeType: 'application/rss+xml'}
|
||||
};
|
||||
for (const feed in feeds) {
|
||||
// Find the web feeds at the side bar
|
||||
cy.get('.block_web_feed').find(`a[href$="WebFeedGatewayPlugin/${feed}"]`).then(link => feeds[feed].url = link.attr('href'));
|
||||
|
||||
// Find the linked feeds at the homepage
|
||||
cy.get(`link[href$="WebFeedGatewayPlugin/${feed}"][type="${feeds[feed].mimeType}"]`);
|
||||
}
|
||||
// The validation depends on querying the API, which needs an ID, but it might not be possible to extract IDs from the feed due to custom URLs
|
||||
cy.then(() => {
|
||||
validateAtom(feeds.atom);
|
||||
validateRss(feeds.rss);
|
||||
validateRss2(feeds.rss2);
|
||||
});
|
||||
});
|
||||
|
||||
function validateAtom(feed) {
|
||||
cy.request(feed.url).then(response => {
|
||||
expect(response.headers['content-type']).to.contain(feed.mimeType);
|
||||
const $xml = cy.$$(Cypress.$.parseXML(response.body));
|
||||
const $entries = $xml.find('entry');
|
||||
expect($entries.length).to.equal(feedSize);
|
||||
$entries.each((index, entry) => {
|
||||
const $entry = cy.$$(entry);
|
||||
const id = $entry.find('id').text().match(/\/(\d+)\/?$/)?.[1];
|
||||
if (!id) {
|
||||
return;
|
||||
}
|
||||
getSubmission(id).then(response => {
|
||||
const publication = response.body.publications.pop();
|
||||
expect($entry.find('title').text()).to.contain(publication.title.en);
|
||||
$entry.find('author name').each((index, name) => expect(publication.authorsString).to.contain(cy.$$(name).text()));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function validateRss(feed) {
|
||||
cy.request(feed.url).then(response => {
|
||||
expect(response.headers['content-type']).to.contain(feed.mimeType);
|
||||
const $xml = cy.$$(Cypress.$.parseXML(response.body));
|
||||
const $entries = $xml.find('item');
|
||||
expect($entries.length).to.equal(feedSize);
|
||||
$entries.each((index, entry) => {
|
||||
const $entry = cy.$$(entry);
|
||||
const id = $entry.find('link').text().match(/\/(\d+)\/?$/)?.[1];
|
||||
if (!id) {
|
||||
return;
|
||||
}
|
||||
getSubmission(id).then(response => {
|
||||
const publication = response.body.publications.pop();
|
||||
expect($entry.find('title').text()).to.contain(publication.title.en);
|
||||
$entry.find('dc:creator').each((index, name) => expect(publication.authorsString).to.contain(cy.$$(name).text()));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function validateRss2(feed) {
|
||||
cy.request(feed.url).then(response => {
|
||||
expect(response.headers['content-type']).to.contain(feed.mimeType);
|
||||
const $xml = cy.$$(Cypress.$.parseXML(response.body));
|
||||
const $entries = $xml.find('item');
|
||||
expect($entries.length).to.equal(feedSize);
|
||||
$entries.each((index, entry) => {
|
||||
const $entry = cy.$$(entry);
|
||||
const id = $entry.find('link').text().match(/\/(\d+)\/?$/)?.[1];
|
||||
if (!id) {
|
||||
return;
|
||||
}
|
||||
getSubmission(id).then(response => {
|
||||
const publication = response.body.publications.pop();
|
||||
expect($entry.find('title').text()).to.contain(publication.title.en);
|
||||
$entry.find('dc:creator').each((index, name) => expect(publication.authorsString).to.contain(cy.$$(name).text()));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getSubmission(id) {
|
||||
return cy.request(`index.php/publicknowledge/api/v1/submissions/${id}`);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user