Eugene, OR
Account created on 20 July 2010, almost 14 years ago
#

Merge Requests

More

Recent comments

🇺🇸United States dmundra Eugene, OR

Hey @mgifford, I am not seeing an conflicts so no need to re-roll I think till we get traction on this.

🇺🇸United States dmundra Eugene, OR

Added the two games.

🇺🇸United States dmundra Eugene, OR

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

🇺🇸United States dmundra Eugene, OR

dmundra created an issue.

🇺🇸United States dmundra Eugene, OR

@jastraat would the patch benefit from a update hook to clear the cache?

🇺🇸United States dmundra Eugene, OR

Thanks @aaron.ferris looks good to me.

🇺🇸United States dmundra Eugene, OR

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
🇺🇸United States dmundra Eugene, OR

dmundra created an issue.

🇺🇸United States dmundra Eugene, OR

@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.

🇺🇸United States dmundra Eugene, OR

@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.

🇺🇸United States dmundra Eugene, OR

@mkolar can you create a new release for the Drupal 10 version and publish it?

🇺🇸United States dmundra Eugene, OR

Thanks @Balu Ertl, could you create a new release for the Drupal 10 version so folks can use that instead of dev branch?

🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

Thanks @RoSk0. Ya 2.1.x is blocker because of PHP 8 right now but we will work on that next.

🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

Agreed. We might need to escape some of them.

🇺🇸United States dmundra Eugene, OR

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
🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

dmundra made their first commit to this issue’s fork.

🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

@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.

🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

Attaching an updated patch with a comment addition.

🇺🇸United States dmundra Eugene, OR

Attaching patch.

🇺🇸United States dmundra Eugene, OR

@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.

🇺🇸United States dmundra Eugene, OR

Ah we missed the opportunity. Thanks for the update.

🇺🇸United States dmundra Eugene, OR

Awesome. Thank you @drumm!

🇺🇸United States dmundra Eugene, OR

Thanks @trailerparkopera for creating the issue. Yes, we are using the Drupal 7 module and would be happy to maintain/support it.

🇺🇸United States dmundra Eugene, OR

I attached screenshots from January 8th and 9th that shows the revision being updated both days for the 3 organizations I am looking at.

🇺🇸United States dmundra Eugene, OR

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?

🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

Updated Nightwatch links. Added accessibility test example and linking related content.

🇺🇸United States dmundra Eugene, OR

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"
  }
}
🇺🇸United States dmundra Eugene, OR

I think a release should probably happen when there is a new release of https://www.drupal.org/project/web_page_archive .

🇺🇸United States dmundra Eugene, OR

Thanks @viren18febS, merged the patch into 2.x-dev.

🇺🇸United States dmundra Eugene, OR

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 .

🇺🇸United States dmundra Eugene, OR

Thanks @dineshkumarbollu for testing. I applied the patch and pushed up a new release.

🇺🇸United States dmundra Eugene, OR

Since we didn't get any update, I am closing this issue.

🇺🇸United States dmundra Eugene, OR

@SocialNicheGuru thank you for creating the issue. If you can, please submit a patch/merge request to update this module to Drupal 10.

🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

Sorry I have not been able to work on this. Unassigning for now.

🇺🇸United States dmundra Eugene, OR

Release 2.0.1 of this module that will support Drupal 10.

🇺🇸United States dmundra Eugene, OR

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.

🇺🇸United States dmundra Eugene, OR

Updated screenshots in description.

🇺🇸United States dmundra Eugene, OR

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?

🇺🇸United States dmundra Eugene, OR

@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

🇺🇸United States dmundra Eugene, OR

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';

Production build 0.69.0 2024