Hey @mgifford, I am not seeing an conflicts so no need to re-roll I think till we get traction on this.
Thank you!
Added the two games.
Looks like the fix was already added https://git.drupalcode.org/project/unsubscribe/-/commit/8efbdd6d45d6c3ff... but it didn't make it to the dev release for some reason.
Also the array flip problem was fixed in https://www.drupal.org/project/unsubscribe/issues/2387217 →
@jastraat would the patch benefit from a update hook to clear the cache?
Thanks @aaron.ferris looks good to me.
Yup and I believe you need to move the requirements in composer.json from 'require-dev' to 'require' https://git.drupalcode.org/project/vertex_ai_search/-/blob/1.0.x/compose.... E.g. https://git.drupalcode.org/project/geofield/-/blob/8.x-1.x/composer.json...
dmundra → created an issue.
Thanks @neclimdul. The tests looks great. Looks like there is one minor code quality issue preventing the pipeline from running. I ran it locally though and the test is passing!
dmundra@drupal-core-web:/var/www/html/web/core$ yarn test:nightwatch --test tests/Drupal/Nightwatch/Tests/a11yTestPager.js
Corepack is about to download https://repo.yarnpkg.com/4.1.1/packages/yarnpkg-cli/bin/yarn.js.
Do you want to continue? [Y/n] y
[Tests/A11y Test Pager] Test Suite
────────────────────────────────────────────────────────────────────
ℹ Connected to chromedriver on port 9515 (2116ms).
Using: chrome (74.0.3729.157) on LINUX.
ℹ Loaded url http://web in 1844ms
ℹ Loaded url http://web/user/reset/1/1714426166/CkrAHSO_GVGNGP73wkkbB25lBkkiWpTlwMX_UER82qc/login
in 1197ms
ℹ Loaded url http://web/admin/modules in 1376ms
✔ Element <form.system-modules [name="modules[pager_test][enable]"]> was visible after 564 milliseconds.
✔ Element <#system-modules-confirm-form> was present after 551 milliseconds.
✔ Element <form.system-modules [name="modules[pager_test][enable]"]:disabled> was present after 25 milliseconds.
ℹ Loaded url http://web/user/logout/confirm in 487ms
Running pager ellipsis is accessible:
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
ℹ Loaded url http://web/pager-test/ellipsis in 279ms
✔ Testing if element <.pager__item--ellipsis> is visible (38ms)
✔ Passed [ok]: aXe rule: aria-allowed-attr (2 elements checked)
✔ Passed [ok]: aXe rule: aria-allowed-role (1 elements checked)
✔ Passed [ok]: aXe rule: aria-conditional-attr (2 elements checked)
✔ Passed [ok]: aXe rule: aria-deprecated-role (1 elements checked)
✔ Passed [ok]: aXe rule: aria-prohibited-attr (2 elements checked)
✔ Passed [ok]: aXe rule: aria-required-attr (1 elements checked)
✔ Passed [ok]: aXe rule: aria-roles (1 elements checked)
✔ Passed [ok]: aXe rule: aria-valid-attr-value (2 elements checked)
✔ Passed [ok]: aXe rule: aria-valid-attr (2 elements checked)
✔ Passed [ok]: aXe rule: color-contrast (2 elements checked)
✔ Passed [ok]: aXe rule: duplicate-id-aria (1 elements checked)
✔ Passed [ok]: aXe rule: empty-heading (1 elements checked)
✔ Passed [ok]: aXe rule: landmark-unique (1 elements checked)
✔ Passed [ok]: aXe rule: link-name (3 elements checked)
✔ Passed [ok]: aXe rule: list (1 elements checked)
✔ Passed [ok]: aXe rule: listitem (5 elements checked)
✨ PASSED. 17 assertions. (686ms)
Wrote HTML report file to: /var/www/html/web/core/reports/nightwatch/nightwatch-html-report/index.html
@neclimdul
On the last point, I think I understand I could test the pager block and that makes sense and seems like the right approach. I'm not sure that fully addresses my concern though. The ellipse could be failing but the test pass if the environment doesn't have enough content or configuration changed in a way as so the ellipse isn't rendered. Should it target the ellipse directly?
Ah, yes targeting the ellipse directly makes sense for the test as the test should fail if no ellipse is shown.
There might be a way to include the pager test module in the nightwatch test https://git.drupalcode.org/project/drupal/-/tree/11.x/core/modules/syste... and/or build of other pager tests https://git.drupalcode.org/project/drupal/-/blob/11.x/core/modules/views... or https://git.drupalcode.org/project/drupal/-/blob/11.x/core/tests/Drupal/...
@neclimdul, I think for this pager example it would be better to create a new test file (e.g. filename a11yTestPager.js or something) that scaffolds enough content (say 5 items) and modifies the view to display 1 item at a time so you get a pager, or something like that.
* How is the site is setup? What's available to test against?
The install profile 'nightwatch_a11y_testing' is used to setup the nightwatch a11y tests in the pipeline and provides some structure to test against.
* How to affect things so that there is a URL that has enough pages to trigger the pager overflow? My guess is the site is probably empty or minimally populated so most urls with a pager won't have overflow in the pager.
Nightwatch tests have access to create nodes and users like others tests including calling setup scripts. Here is an example https://git.drupalcode.org/project/drupal/-/blob/10.2.5/core/tests/Drupa... that calls https://git.drupalcode.org/project/drupal/-/blob/10.2.5/core/tests/Drupa...
* Can you somehow assert the element is on the page so the accessibility test is doing something? If we're mocking a bunch of content and then just have a url in the test file, it would be very easy to regress to the point of not testing this anymore without knowing it by removing(optimizing) content.
Yes in a sense. Instead of testing the entire page you can just test the pager block (which I would recommend for a new test file). In this https://git.drupalcode.org/project/drupal/-/blob/10.2.5/core/tests/Drupa... example checks only the 'body' for accessibility issues.
@mkolar can you create a new release for the Drupal 10 version and publish it?
Thanks @Balu Ertl, could you create a new release for the Drupal 10 version so folks can use that instead of dev branch?
dmundra → created an issue.
Appears tests are failing because token module needs to be added to the modules variable https://git.drupalcode.org/project/vertex_ai_search/-/blob/1.0.x/tests/s...
Created MR https://git.drupalcode.org/project/vertex_ai_search/-/merge_requests/2 with the changes and here is the pipeline https://git.drupalcode.org/issue/vertex_ai_search-3441337/-/pipelines/14...
dmundra → created an issue.
I figured out the composer issue. The drush requirements were tripping those up so I cleared those as I believe those strict requirements are not needed.
Here is the results https://git.drupalcode.org/issue/hybrid_login-3437929/-/pipelines/143018 and check out the recommendations by phpcs/phpstan/cspell.
Thanks @RoSk0. Ya 2.1.x is blocker because of PHP 8 right now but we will work on that next.
Here is the pull request for the SimpleSAMLphp module https://github.com/drupalauth/simplesamlphp-module-drupalauth/pull/97 to make it work with SimpleSAMLphp 2.0.x.
I haven't test with 2.1 to 2.2 but this so far is working with 2.0.10.
Patch includes the patch from the related issue https://www.drupal.org/project/drupalauth4ssp/issues/3028665 →
Added the .gitlab-ci.yml file https://git.drupalcode.org/project/hybrid_login/-/merge_requests/2 and you can see the pipeline results https://git.drupalcode.org/issue/hybrid_login-3437929/-/pipelines/136599.
Looks like there is a dependency issue with composer for some reason.
Agreed. We might need to escape some of them.
Added the .gitlab-ci.yml file here https://git.drupalcode.org/project/codit_batch_operations/-/merge_reques... and you can see the pipeline run here https://git.drupalcode.org/issue/codit_batch_operations-3436881/-/pipeli....
Got some cleanup to do, eep.
Ran successfully with gitpod and using minimal profile. Output snippet:
[success] Installation complete.
real 0m2.120s
user 0m0.093s
sys 0m0.098s
The following module(s) will be enabled: admin_toolbar_tools, devel, admin_toolbar, toolbar, breakpoint
// Do you want to continue?: yes.
[success] Successfully enabled: admin_toolbar_tools, devel, admin_toolbar, toolbar, breakpoint
The following module(s) will be enabled: codit_batch_operations, views, options
// Do you want to continue?: yes.
[success] Successfully enabled: codit_batch_operations, views, options
MR with the changes https://git.drupalcode.org/project/codit_batch_operations/-/merge_reques.... I will test it out with gitpod to see if the module installs on the 'minimal' profile now.
Thanks @swirt. Made the changes including adding the edge case. QA steps:
1. Pull down changes.
2. Run drush codit-batch-operations:run TestDo10Things
3. Navigate to 'Reports' -> 'Recent log messages'.
4. Confirm you see 'BatchOpLog' under the 'Operations' column.
5. Click 'BatchOpLog' and confirm it takes you to the log page for that batch operation.
6. Run drush codit-batch-operations:run TestDo10ThingsWithError
.
7. Repeat steps 3 to 5.
8. Run drush codit-batch-operations:run TestDo10ThingsWithError --allow-skip
.
9. Repeat steps 3 to 5.
@swirt MR https://git.drupalcode.org/project/codit_batch_operations/-/merge_reques... is ready for you review. QA steps:
1. Pull down changes.
2. Run drush codit-batch-operations:run TestDo10Things
3. Navigate to 'Reports' -> 'Recent log messages'.
4. Confirm you see 'BatchOpLog' under the 'Operations' column.
5. Click 'BatchOpLog' and confirm it takes you to the log page for that batch operation.
6. Run drush codit-batch-operations:run TestDo10ThingsWithError.
7. Repeat steps 3 to 5.
Looks like there is a moderate security issue https://github.com/ckeditor/ckeditor4/security/advisories/GHSA-fq6h-4g8v... so it would be good to have the module updated to support the latest LTS version. I will try to test the merge request.
Attaching an updated patch with a comment addition.
Attaching patch.
@camilledavis testing your changes on a Mac using Chrome and VoiceOver the changes work as described in the testing steps.
I also add the related issue that was mentioned in comment #35 and #38.
Ah we missed the opportunity. Thanks for the update.
Awesome. Thank you @drumm!
Thanks @trailerparkopera for creating the issue. Yes, we are using the Drupal 7 module and would be happy to maintain/support it.
I attached screenshots from January 8th and 9th that shows the revision being updated both days for the 3 organizations I am looking at.
Thanks @apaderno. This might happening for few or all organizations. Few examples:
*
https://www.drupal.org/node/1646370/revisions →
*
https://www.drupal.org/node/1121122/revisions →
dmundra → created an issue.
So how often should we review this list of URLs?
Good question. We should keep adding to it ideally till we have most of the URLs already there. Then review it as needed or at least annually.
Probably that should be a new issue. Should we close this one?
Is the current page sufficient or do we still want to add that sub-page?
I updated the page https://www.drupal.org/docs/develop/automated-testing/javascript-testing... → with Nightwatch accessibility links and a code example.
Here is the new page text:
Drupal core starting from version 10.1.x has accessibility tests that use the Nightwatch axe-core integration.
Summary of the tests which are located in core/tests/Drupal/Nightwatch/Tests/
:
- The accessibility tests use a custom install profile
nightwatch_a11y_testing
-
These pages are tested for anonymous users using the default theme (
a11yTestDefault.js
):- Home page: /
- Login: /user/login
- Search: /search/node
-
These pages are tested for authenticated admin user using the admin theme (
a11yTestAdmin.js
):- User Edit: /user/1/edit
- Create Article: /node/1/edit
- Create Page: /node/add/page?destination=/admin/content
- Content Page: /admin/content
- Structure Page: /admin/structure
- Add content type: /admin/structure/types/add
- Add vocabulary: /admin/structure/taxonomy/add
- Structure | Block: /admin/structure/block
The accessibility tests are run with all Nigthwatch tests. The Nightwatch tests are run in the GitLab CI (e.g. on merge requests to core) Nightwatch stage of the pipeline. A recent example can be seen here https://git.drupalcode.org/project/drupal/-/pipelines/69140 and in particulate the stage https://git.drupalcode.org/project/drupal/-/jobs/542914.
Updated Nightwatch links. Added accessibility test example and linking related content.
Thank you @drumm.
Below is an example where I tried to convert the latest security advisory https://www.drupal.org/sa-contrib-2023-055 → to the OSV format. I made some assumptions like the summary, description, affected values, references, and database specific. For severity and package I think there would need to be a PR submitted to add Drupal specific security risk and package manager to OSV schema (see https://ossf.github.io/osv-schema/#severity-field).
Another example is an analyst took the https://www.drupal.org/sa-core-2023-006 → entered in NIST and added it to the GitHub security advisory database here https://github.com/github/advisory-database/blob/main/advisories/github-.... That uses the same OSV format.
{
"schema_version": "1.4.0",
"id": "DRUPAL-SA-CONTRIB-2023-055",
"modified": "2023-12-20T17:53:15Z",
"published": "2023-12-20T17:02:51Z",
"summary": "Cross Site Scripting in drupal/dvf",
"details": "This module allows you to turn various data sources (Eg CSV or JSON file) into interactive visualisation. The DVF module provides a field (storage, widget & formatter) that can be added to any entity.\nThis module uses two third-party JS libraries having from low to medium vulnerabilities. One of the vulnerabilities is a Cross Site Scripting vulnerability that may affect Drupal sites as a Persistent Cross Site Scripting vulnerability (i.e. not reflected). This release updates the libraries.\nThe issue is mitigated by the fact an attacker needs the permission to create or edit content that is displayed using the Data Visualization Framework.\nSolution:\nInstall the latest version:\nIf you use the Data Visualisation Framework for Drupal module (DVF for short), upgrade to dvf 2.0.2",
"severity": [
],
"affected": [
{
"package": {
"ecosystem": "Drupal",
"name": "drupal/dvf",
"purl": "https://packages.drupal.org/8"
},
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.0.2"
}
]
}
]
}
],
"references": [
{
"type": "ADVISORY",
"url": "https://www.drupal.org/sa-contrib-2023-055"
},
{
"type": "PACKAGE",
"url": "https://www.drupal.org/project/dvf"
},
{
"type": "WEB",
"url": "https://www.drupal.org/project/dvf/releases/2.0.2"
}
],
"database_specific": {
"sa_id": [
"SA-CONTRIB-2023-055"
],
"severity": "MODERATE"
}
}
I think a release should probably happen when there is a new release of https://www.drupal.org/project/web_page_archive → .
dmundra → created an issue.
Thanks @viren18febS, merged the patch into 2.x-dev.
Thanks @viren18febS. I am going to mark this one as duplicate and merge your changes from https://www.drupal.org/project/accessibility_scanner/issues/3406773 🐛 Drupal 10 version? Needs review .
Thanks @dineshkumarbollu for testing. I applied the patch and pushed up a new release.
Since we didn't get any update, I am closing this issue.
@SocialNicheGuru thank you for creating the issue. If you can, please submit a patch/merge request to update this module to Drupal 10.
I am changing the classes to final following https://www.drupal.org/docs/develop/development-tools/phpstan/handling-u... → but I am not sure if anyone is extending the classes so will leave this open for folks to review and chime in on if they are extending the class.
Thank you @drumm.
Merged.
Sorry I have not been able to work on this. Unassigning for now.
dmundra → created an issue.
Release 2.0.1 of this module that will support Drupal 10.
Thank you @xjm. I open and closed the fork branch that had to no MR. This one https://git.drupalcode.org/project/drupal/-/merge_requests/33 I do not have the option to close it, but it can be closed.
Updated screenshots in description.
Thanks @lauriii. Great changes!
Fixed a bug in the patch.
dmundra → created an issue.
Attaching patch.
I created a related issue https://www.drupal.org/project/views_bulk_operations/issues/3388986 🐛 Missing labels for checkboxes and selecting operation Active that tackles the missing labels. Maybe that should include the unique ID solution from here?
@alex-bukach I believe you addition does work but no label is automatically added to the checkbox. I am actually solving a different problem which is that the lack of the label is an accessibility issue. So I think we should combine your solution with
Here is a basic view that could be used to test the issue. In the view we add the date filter twice (one to filter on post date and another for the updated date).
I tested the patch and it fixes the issue for me.
$view = new view();
$view->name = 'date_filter_test';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'Date filter test';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'Date filter test';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'none';
$handler->display->display_options['style_plugin'] = 'table';
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
/* Field: Content: Post date */
$handler->display->display_options['fields']['created']['id'] = 'created';
$handler->display->display_options['fields']['created']['table'] = 'node';
$handler->display->display_options['fields']['created']['field'] = 'created';
$handler->display->display_options['fields']['created']['date_format'] = 'long';
$handler->display->display_options['fields']['created']['second_date_format'] = 'long';
/* Field: Content: Updated date */
$handler->display->display_options['fields']['changed']['id'] = 'changed';
$handler->display->display_options['fields']['changed']['table'] = 'node';
$handler->display->display_options['fields']['changed']['field'] = 'changed';
$handler->display->display_options['fields']['changed']['date_format'] = 'long';
$handler->display->display_options['fields']['changed']['second_date_format'] = 'long';
/* Sort criterion: Content: Title */
$handler->display->display_options['sorts']['title']['id'] = 'title';
$handler->display->display_options['sorts']['title']['table'] = 'node';
$handler->display->display_options['sorts']['title']['field'] = 'title';
$handler->display->display_options['sorts']['title']['order'] = 'DESC';
/* Filter criterion: Content: Published status */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter criterion: Content: Type */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
'page' => 'page',
);
/* Filter criterion: Date: Date (node) */
$handler->display->display_options['filters']['date_filter']['id'] = 'date_filter';
$handler->display->display_options['filters']['date_filter']['table'] = 'node';
$handler->display->display_options['filters']['date_filter']['field'] = 'date_filter';
$handler->display->display_options['filters']['date_filter']['operator'] = 'between';
$handler->display->display_options['filters']['date_filter']['exposed'] = TRUE;
$handler->display->display_options['filters']['date_filter']['expose']['operator_id'] = 'date_filter_op';
$handler->display->display_options['filters']['date_filter']['expose']['label'] = 'Filter by post date';
$handler->display->display_options['filters']['date_filter']['expose']['use_operator'] = TRUE;
$handler->display->display_options['filters']['date_filter']['expose']['operator'] = 'date_filter_op';
$handler->display->display_options['filters']['date_filter']['expose']['identifier'] = 'date_filter';
$handler->display->display_options['filters']['date_filter']['expose']['remember_roles'] = array(
2 => '2',
);
$handler->display->display_options['filters']['date_filter']['date_fields'] = array(
'node.created' => 'node.created',
);
/* Filter criterion: Date: Date (node) */
$handler->display->display_options['filters']['date_filter_1']['id'] = 'date_filter_1';
$handler->display->display_options['filters']['date_filter_1']['table'] = 'node';
$handler->display->display_options['filters']['date_filter_1']['field'] = 'date_filter';
$handler->display->display_options['filters']['date_filter_1']['operator'] = 'between';
$handler->display->display_options['filters']['date_filter_1']['exposed'] = TRUE;
$handler->display->display_options['filters']['date_filter_1']['expose']['operator_id'] = 'date_filter_1_op';
$handler->display->display_options['filters']['date_filter_1']['expose']['label'] = 'Filter by updated date';
$handler->display->display_options['filters']['date_filter_1']['expose']['use_operator'] = TRUE;
$handler->display->display_options['filters']['date_filter_1']['expose']['operator'] = 'date_filter_1_op';
$handler->display->display_options['filters']['date_filter_1']['expose']['identifier'] = 'date_filter_1';
$handler->display->display_options['filters']['date_filter_1']['expose']['remember_roles'] = array(
2 => '2',
);
$handler->display->display_options['filters']['date_filter_1']['date_fields'] = array(
'node.changed' => 'node.changed',
);
/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page');
$handler->display->display_options['path'] = 'date-filter-test';