From: Tim Otten Date: Sat, 19 Oct 2019 03:16:14 +0000 (-0700) Subject: afform_mock - Add test-coverage for auto-requires functionality X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=74f862e4e950c0d0418df4041a4114ed8ac6d1b7;p=civicrm-core.git afform_mock - Add test-coverage for auto-requires functionality --- diff --git a/ext/afform/core/Civi/Api4/Action/Afform/Update.php b/ext/afform/core/Civi/Api4/Action/Afform/Update.php index 212c252fb1..4ee3130426 100644 --- a/ext/afform/core/Civi/Api4/Action/Afform/Update.php +++ b/ext/afform/core/Civi/Api4/Action/Afform/Update.php @@ -56,7 +56,7 @@ class Update extends BasicUpdateAction { } // We may have changed list of files covered by the cache. - $scanner->clear(); + _afform_clear(); if (isset($updates['server_route']) && $updates['server_route'] !== $orig[0]['server_route']) { \CRM_Core_Menu::store(); diff --git a/ext/afform/core/Civi/Api4/Afform.php b/ext/afform/core/Civi/Api4/Afform.php index 75b2095d87..86e26a4d95 100644 --- a/ext/afform/core/Civi/Api4/Afform.php +++ b/ext/afform/core/Civi/Api4/Afform.php @@ -40,7 +40,7 @@ class Afform extends AbstractEntity { } // We may have changed list of files covered by the cache. - $scanner->clear(); + _afform_clear(); // FIXME if `server_route` changes, then flush the menu cache. // FIXME if asset-caching is enabled, then flush the asset cache diff --git a/ext/afform/core/afform.php b/ext/afform/core/afform.php index 605a186f18..167af68d67 100644 --- a/ext/afform/core/afform.php +++ b/ext/afform/core/afform.php @@ -423,6 +423,18 @@ function afform_civicrm_alterMenu(&$items) { } } +/** + * Clear any local/in-memory caches based on afform data. + */ +function _afform_clear() { + $container = \Civi::container(); + $container->get('afform_scanner')->clear(); + + // Civi\Angular\Manager doesn't currently have a way to clear its in-memory + // data, so we just reset the whole object. + $container->set('angular', NULL); +} + /** * @param string $fileBaseName * Ex: foo-bar diff --git a/ext/afform/mock/ang/mockPage.aff.json b/ext/afform/mock/ang/mockPage.aff.json index bd3a6baf25..9b45e0bfbe 100644 --- a/ext/afform/mock/ang/mockPage.aff.json +++ b/ext/afform/mock/ang/mockPage.aff.json @@ -1 +1 @@ -{"server_route": "civicrm/mock-page", "requires":["mockFoo", "mockBareFile"]} +{"server_route": "civicrm/mock-page", "requires":["extraMock"]} diff --git a/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php b/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php index 2bbc3e106c..538e977e5e 100644 --- a/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php +++ b/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php @@ -6,6 +6,8 @@ * @group headless */ class api_v4_AfformTest extends api_v4_AfformTestCase { + use \Civi\Test\Api3TestTrait; + use \Civi\Test\ContactTestTrait; public function getBasicDirectives() { return [ @@ -115,4 +117,45 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { Civi\Api4\Afform::revert()->addWhere('name', '=', $directiveName)->execute(); } + public function testAutoRequires() { + $directiveName = 'mockPage'; + $this->createLoggedInUser(); + + // The default mockPage has 1 explicit requirement + 2 automatic requirements. + Civi\Api4\Afform::revert()->addWhere('name', '=', $directiveName)->execute(); + $angModule = Civi::service('angular')->getModule($directiveName); + $this->assertEquals(['afCore', 'extraMock', 'mockBareFile', 'mockFoo'], $angModule['requires']); + $storedRequires = Civi\Api4\Afform::get()->addWhere('name', '=', $directiveName)->addSelect('requires')->execute(); + $this->assertEquals(['extraMock'], $storedRequires[0]['requires']); + + // Knock down to 1 explicit + 1 automatic. + Civi\Api4\Afform::update() + ->addWhere('name', '=', $directiveName) + ->setLayoutFormat('html') + ->setValues(['layout' => '
The bare file says ""
']) + ->execute(); + $angModule = Civi::service('angular')->getModule($directiveName); + $this->assertEquals(['afCore', 'extraMock', 'mockBareFile'], $angModule['requires']); + $storedRequires = Civi\Api4\Afform::get()->addWhere('name', '=', $directiveName)->addSelect('requires')->execute(); + $this->assertEquals(['extraMock'], $storedRequires[0]['requires']); + + // Remove the last explict and implicit requirements. + Civi\Api4\Afform::update() + ->addWhere('name', '=', $directiveName) + ->setLayoutFormat('html') + ->setValues([ + 'layout' => '
The file has nothing! NOTHING! JUST RANTING!
', + 'requires' => [], + ]) + ->execute(); + $angModule = Civi::service('angular')->getModule($directiveName); + $this->assertEquals(['afCore'], $angModule['requires']); + $storedRequires = Civi\Api4\Afform::get()->addWhere('name', '=', $directiveName)->addSelect('requires')->execute(); + $this->assertEquals([], $storedRequires[0]['requires']); + + Civi\Api4\Afform::revert()->addWhere('name', '=', $directiveName)->execute(); + $angModule = Civi::service('angular')->getModule($directiveName); + $this->assertEquals(['afCore', 'extraMock', 'mockBareFile', 'mockFoo'], $angModule['requires']); + } + }