Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests/events/*.php - Allow optional runtime enforcement #28723

Merged
merged 6 commits into from
Dec 21, 2023

Conversation

totten
Copy link
Member

@totten totten commented Dec 19, 2023

Overview

The folder tests/events/ (created by #21615) allows one to declare (and enforce) the signature for a hook. However, it only supports enforcement within unit-tests. This PR (optionally) expands enforcement to runtime.

Before

  • The event-checks run as part of the headless tests.
  • The event-checks rely (lightly) on some PHPUnit functionality (eg Assert).

After

  • The event-checks run as part of the headless tests.
  • If you enable the extension event_check, then event-checks are also enforced at runtime. (Any non-conformant hook... on any page-request... will raise an exception.)
  • The event-checks work with or without PHPUnit. (PHPUnit helpers like Assert are not available at runtime.) Instead, the checks throw their own exception.

Comments

I think it would make sense to enable this by default on local dev builds. I placed it next to another dev-tool (tools/extensions/phpstorm).

Copy link

civibot bot commented Dec 19, 2023

🤖 Thank you for contributing to CiviCRM! ❤️ We will need to test and review this PR. 👷

Introduction for new contributors...
  • If this is your first PR, an admin will greenlight automated testing with the command ok to test or add to whitelist.
  • A series of tests will automatically run. You can see the results at the bottom of this page (if there are any problems, it will include a link to see what went wrong).
  • A demo site will be built where anyone can try out a version of CiviCRM that includes your changes.
  • If this process needs to be repeated, an admin will issue the command test this please to rerun tests and build a new demo site.
  • Before this PR can be merged, it needs to be reviewed. Please keep in mind that reviewers are volunteers, and their response time can vary from a few hours to a few weeks depending on their availability and their knowledge of this particular part of CiviCRM.
  • A great way to speed up this process is to "trade reviews" with someone - find an open PR that you feel able to review, and leave a comment like "I'm reviewing this now, could you please review mine?" (include a link to yours). You don't have to wait for a response to get started (and you don't have to stop at one!) the more you review, the faster this process goes for everyone 😄
  • To ensure that you are credited properly in the final release notes, please add yourself to contributor-key.yml
  • For more information about contributing, see CONTRIBUTING.md.
Quick links for reviewers...

➡️ Online demo of this PR 🔗

This variant of hook_civicrm_links has multiple compliance issues.  It
raises so many red-flags that it makes the site unbrowseable and obscures
any useful signal about the other hooks. Skip it until someone
can take a full look.
@totten totten force-pushed the master-strict-hook branch from ebe0603 to d19c9bb Compare December 19, 2023 23:11
Copy link
Contributor

@artfulrobot artfulrobot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this idea. I generally dislike being able to throw gibberish input in without being told it's gibberish. So I think it's a good step.

Comment on lines +77 to +88
public static function assertNotEmpty($actual, string $message = ''): void {
if (empty($actual)) {
$comment = 'Value should not be empty.';
static::fail(trim("$message\n$comment"));
}
}

public static function assertTrue($condition, string $message = ''): void {
if ($condition !== TRUE) {
$comment = 'Value should be TRUE.';
static::fail(trim("$message\n$comment"));
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing these are just what we need right now and no more, but it feels weird to have assertNotEmpty and not assertEmpty; assertTrue and not assertFalse.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@artfulrobot Yup, exactly. I'm sure the vocabulary of assertions could be tuned-up more going forward.

@totten totten merged commit aa1ca50 into civicrm:master Dec 21, 2023
3 checks passed
@totten totten deleted the master-strict-hook branch December 21, 2023 18:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants