Page MenuHomeSoftware Heritage

D7431.id26915.diff
No OneTemporary

D7431.id26915.diff

diff --git a/assets/src/bundles/add_forge/create-request.js b/assets/src/bundles/add_forge/create-request.js
--- a/assets/src/bundles/add_forge/create-request.js
+++ b/assets/src/bundles/add_forge/create-request.js
@@ -7,9 +7,17 @@
import {handleFetchError, removeUrlFragment, csrfPost,
getHumanReadableDate} from 'utils/functions';
+import userRequestsFilterCheckboxFn from 'utils/requests-filter-checkbox.ejs';
+import {swhSpinnerSrc} from 'utils/constants';
let requestBrowseTable;
+const addForgeCheckboxId = 'swh-add-forge-user-filter';
+const userRequestsFilterCheckbox = userRequestsFilterCheckboxFn({
+ 'inputId': addForgeCheckboxId,
+ 'checked': true // by default, display only user requests
+});
+
export function onCreateRequestPageLoad() {
$(document).ready(() => {
$('#requestCreateForm').submit(async function(event) {
@@ -56,6 +64,7 @@
});
$('#swh-add-forge-requests-list-tab').on('shown.bs.tab', () => {
+ requestBrowseTable.draw();
window.location.hash = '#browse-requests';
});
@@ -93,13 +102,32 @@
.DataTable({
serverSide: true,
processing: true,
+ language: {
+ processing: `<img src="${swhSpinnerSrc}"></img>`
+ },
retrieve: true,
searching: true,
info: false,
- dom: '<<"d-flex justify-content-between align-items-center"f' +
- '<"#list-exclude">l>rt<"bottom"ip>>',
+ // Layout configuration, see [1] for more details
+ // [1] https://datatables.net/reference/option/dom
+ dom: '<"row"<"col-sm-3"l><"col-sm-6 text-left user-requests-filter"><"col-sm-3"f>>' +
+ '<"row"<"col-sm-12"tr>>' +
+ '<"row"<"col-sm-5"i><"col-sm-7"p>>',
ajax: {
- 'url': Urls.add_forge_request_list_datatables()
+ 'url': Urls.add_forge_request_list_datatables(),
+ data: (d) => {
+ if (swh.webapp.isUserLoggedIn() && $(`#${addForgeCheckboxId}`).prop('checked')) {
+ d.user_requests_only = '1';
+ }
+ }
+ },
+ fnInitComplete: function() {
+ if (swh.webapp.isUserLoggedIn()) {
+ $('div.user-requests-filter').html(userRequestsFilterCheckbox);
+ $(`#${addForgeCheckboxId}`).on('change', () => {
+ requestBrowseTable.draw();
+ });
+ }
},
columns: [
{
@@ -124,5 +152,4 @@
}
]
});
- requestBrowseTable.draw();
}
diff --git a/cypress/integration/add-forge-now-request-create.spec.js b/cypress/integration/add-forge-now-request-create.spec.js
--- a/cypress/integration/add-forge-now-request-create.spec.js
+++ b/cypress/integration/add-forge-now-request-create.spec.js
@@ -7,13 +7,85 @@
function populateForm(type, url, contact, email, consent, comment) {
cy.get('#swh-input-forge-type').select(type);
- cy.get('#swh-input-forge-url').type(url);
- cy.get('#swh-input-forge-contact-name').type(contact);
- cy.get('#swh-input-forge-contact-email').type(email);
- cy.get('#swh-input-forge-comment').type(comment);
+ cy.get('#swh-input-forge-url').clear().type(url);
+ cy.get('#swh-input-forge-contact-name').clear().type(contact);
+ cy.get('#swh-input-forge-contact-email').clear().type(email);
+ if (comment) {
+ cy.get('#swh-input-forge-comment').clear().type(comment);
+ }
cy.get('#swh-input-consent-check').click({force: consent === 'on'});
}
+describe('Browse requests list tests', function() {
+ beforeEach(function() {
+ this.addForgeNowUrl = this.Urls.forge_add();
+ this.listAddForgeRequestsUrl = this.Urls.add_forge_request_list_datatables();
+ });
+
+ it('should not show user requests filter checkbox for anonymous users', function() {
+ cy.visit(this.addForgeNowUrl);
+ cy.get('#swh-add-forge-requests-list-tab').click();
+ cy.get('#swh-add-forge-user-filter').should('not.exist');
+ });
+
+ it('should show user requests filter checkbox for authenticated users', function() {
+ cy.userLogin();
+ cy.visit(this.addForgeNowUrl);
+ cy.get('#swh-add-forge-requests-list-tab').click();
+ cy.get('#swh-add-forge-user-filter').should('exist').should('be.checked');
+ });
+
+ it('should only display user requests when filter is activated', function() {
+ // Clean up previous state
+ cy.task('db:add_forge_now:delete');
+ // 'user2' logs in and create requests
+ cy.user2Login();
+ cy.visit(this.addForgeNowUrl);
+
+ // create requests for the user 'user'
+ populateForm('gitlab', 'gitlab.org', 'admin', 'admin@example.org', 'on', '');
+ cy.get('#requestCreateForm').submit();
+
+ // user requests filter checkbox should be in the DOM
+ cy.get('#swh-add-forge-requests-list-tab').click();
+ cy.get('#swh-add-forge-user-filter').should('exist').should('be.checked');
+
+ // check unfiltered user requests
+ cy.get('tbody tr').then(rows => {
+ expect(rows.length).to.eq(1);
+ });
+
+ // user1 logout
+ cy.contains('a', 'logout').click();
+
+ // user logs in
+ cy.userLogin();
+ cy.visit(this.addForgeNowUrl);
+
+ populateForm('gitea', 'gitea.org', 'admin', 'admin@example.org', 'on', '');
+ cy.get('#requestCreateForm').submit();
+ populateForm('cgit', 'cgit.org', 'admin', 'admin@example.org', 'on', '');
+ cy.get('#requestCreateForm').submit();
+
+ // user requests filter checkbox should be in the DOM
+ cy.get('#swh-add-forge-requests-list-tab').click();
+ cy.get('#swh-add-forge-user-filter').should('exist').should('be.checked');
+
+ // check unfiltered user requests
+ cy.get('tbody tr').then(rows => {
+ expect(rows.length).to.eq(2);
+ });
+
+ cy.get('#swh-add-forge-user-filter')
+ .uncheck({force: true});
+
+ // Users now sees everything
+ cy.get('tbody tr').then(rows => {
+ expect(rows.length).to.eq(2 + 1);
+ });
+ });
+});
+
describe('Test add-forge-request creation', function() {
beforeEach(function() {
this.addForgeNowUrl = this.Urls.forge_add();
diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js
--- a/cypress/plugins/index.js
+++ b/cypress/plugins/index.js
@@ -146,6 +146,14 @@
});
db.close();
return true;
+ },
+ 'db:add_forge_now:delete': () => {
+ const db = getDatabase();
+ db.serialize(function() {
+ db.run('DELETE FROM add_forge_now_request');
+ });
+ db.close();
+ return true;
}
});
return config;
diff --git a/cypress/support/index.js b/cypress/support/index.js
--- a/cypress/support/index.js
+++ b/cypress/support/index.js
@@ -52,6 +52,10 @@
return loginUser('user', 'user');
});
+Cypress.Commands.add('user2Login', () => {
+ return loginUser('user2', 'user2');
+});
+
Cypress.Commands.add('ambassadorLogin', () => {
return loginUser('ambassador', 'ambassador');
});
diff --git a/swh/web/tests/create_test_users.py b/swh/web/tests/create_test_users.py
--- a/swh/web/tests/create_test_users.py
+++ b/swh/web/tests/create_test_users.py
@@ -10,8 +10,8 @@
from swh.web.auth.utils import (
ADD_FORGE_MODERATOR_PERMISSION,
ADMIN_LIST_DEPOSIT_PERMISSION,
- SWH_AMBASSADOR_PERMISSION,
MAILMAP_ADMIN_PERMISSION,
+ SWH_AMBASSADOR_PERMISSION,
)
from swh.web.tests.utils import create_django_permission
@@ -20,6 +20,7 @@
users: Dict[str, Tuple[str, str, List[str]]] = {
"user": ("user", "user@example.org", []),
+ "user2": ("user2", "user2@example.org", []),
"ambassador": (
"ambassador",
"ambassador@example.org",

File Metadata

Mime Type
text/plain
Expires
Dec 20 2024, 2:51 AM (11 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3233882

Event Timeline