From ef8764fbdf5f699bd7e4bdf3e21a6503a88a6958 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Tue, 7 Aug 2018 22:31:00 -0700 Subject: [PATCH] Add Afform.revert. Fix Afform.create. Add lifecycle test-case. --- ext/afform/afform/examplepage/layout.html | 1 + ext/afform/afform/examplepage/meta.json | 1 + ext/afform/api/v3/Afform/Create.php | 6 +- ext/afform/api/v3/Afform/Revert.php | 49 +++++++++++ .../phpunit/api/v3/Afform/CreateTest.php | 49 ----------- .../tests/phpunit/api/v3/Afform/GetTest.php | 49 ----------- .../tests/phpunit/api/v3/AfformTest.php | 84 +++++++++++++++++++ 7 files changed, 138 insertions(+), 101 deletions(-) create mode 100644 ext/afform/afform/examplepage/layout.html create mode 100644 ext/afform/afform/examplepage/meta.json create mode 100644 ext/afform/api/v3/Afform/Revert.php delete mode 100644 ext/afform/tests/phpunit/api/v3/Afform/CreateTest.php delete mode 100644 ext/afform/tests/phpunit/api/v3/Afform/GetTest.php create mode 100644 ext/afform/tests/phpunit/api/v3/AfformTest.php diff --git a/ext/afform/afform/examplepage/layout.html b/ext/afform/afform/examplepage/layout.html new file mode 100644 index 0000000000..0f1db46e78 --- /dev/null +++ b/ext/afform/afform/examplepage/layout.html @@ -0,0 +1 @@ +
Hello {{routeParams.name}}
diff --git a/ext/afform/afform/examplepage/meta.json b/ext/afform/afform/examplepage/meta.json new file mode 100644 index 0000000000..fbdd9d36ba --- /dev/null +++ b/ext/afform/afform/examplepage/meta.json @@ -0,0 +1 @@ +{"server_route": "civicrm/example-page"} diff --git a/ext/afform/api/v3/Afform/Create.php b/ext/afform/api/v3/Afform/Create.php index 412e721b19..599c763149 100644 --- a/ext/afform/api/v3/Afform/Create.php +++ b/ext/afform/api/v3/Afform/Create.php @@ -45,14 +45,14 @@ function civicrm_api3_afform_create($params) { } // Create or update meta.json. - $orig = civicrm_api('afform', 'get', ['name' => $name, 'sequential' => 1]); - if (is_array($orig['values'][0])) { + $orig = civicrm_api3('afform', 'get', ['name' => $name, 'sequential' => 1]); + if (isset($orig['values'][0])) { $meta = _afform_fields_filter(array_merge($orig['values'][0], $updates)); } else { $meta = $updates; } - unset($meta['definition']); + unset($meta['layout']); unset($meta['name']); if (!empty($meta)) { $metaPath = $scanner->createSiteLocalPath($name, CRM_Afform_AfformScanner::METADATA_FILE); diff --git a/ext/afform/api/v3/Afform/Revert.php b/ext/afform/api/v3/Afform/Revert.php new file mode 100644 index 0000000000..3dced7646c --- /dev/null +++ b/ext/afform/api/v3/Afform/Revert.php @@ -0,0 +1,49 @@ +createSiteLocalPath($name, $file); + if (file_exists($metaPath)) { + if (!@unlink($metaPath)) { + throw new API_Exception("Failed to remove afform overrides in $file"); + } + } + } + + // FIXME if `server_route` changes, then flush the menu cache. + // FIXME if asset-caching is enabled, then flush the asset cache. + + return civicrm_api3_create_success(1, $params, 'Afform', 'revert'); +} diff --git a/ext/afform/tests/phpunit/api/v3/Afform/CreateTest.php b/ext/afform/tests/phpunit/api/v3/Afform/CreateTest.php deleted file mode 100644 index 5fe2c9f8c8..0000000000 --- a/ext/afform/tests/phpunit/api/v3/Afform/CreateTest.php +++ /dev/null @@ -1,49 +0,0 @@ -installMe(__DIR__) - ->apply(); - } - - /** - * The setup() method is executed before the test is executed (optional). - */ - public function setUp() { - parent::setUp(); - } - - /** - * The tearDown() method is executed after the test was executed (optional) - * This can be used for cleanup. - */ - public function tearDown() { - parent::tearDown(); - } - - /** - * Simple example test case. - * - * Note how the function name begins with the word "test". - */ - public function testApiExample() { - $result = civicrm_api3('Afform', 'Create', array('magicword' => 'sesame')); - $this->assertEquals('Twelve', $result['values'][12]['name']); - } - -} diff --git a/ext/afform/tests/phpunit/api/v3/Afform/GetTest.php b/ext/afform/tests/phpunit/api/v3/Afform/GetTest.php deleted file mode 100644 index 6fd87013bc..0000000000 --- a/ext/afform/tests/phpunit/api/v3/Afform/GetTest.php +++ /dev/null @@ -1,49 +0,0 @@ -installMe(__DIR__) - ->apply(); - } - - /** - * The setup() method is executed before the test is executed (optional). - */ - public function setUp() { - parent::setUp(); - } - - /** - * The tearDown() method is executed after the test was executed (optional) - * This can be used for cleanup. - */ - public function tearDown() { - parent::tearDown(); - } - - /** - * Simple example test case. - * - * Note how the function name begins with the word "test". - */ - public function testApiExample() { - $result = civicrm_api3('Afform', 'Get', array('magicword' => 'sesame')); - $this->assertEquals('Twelve', $result['values'][12]['name']); - } - -} diff --git a/ext/afform/tests/phpunit/api/v3/AfformTest.php b/ext/afform/tests/phpunit/api/v3/AfformTest.php new file mode 100644 index 0000000000..0c639f892d --- /dev/null +++ b/ext/afform/tests/phpunit/api/v3/AfformTest.php @@ -0,0 +1,84 @@ +installMe(__DIR__) + ->apply(); + } + + /** + * The setup() method is executed before the test is executed (optional). + */ + public function setUp() { + parent::setUp(); + } + + /** + * The tearDown() method is executed after the test was executed (optional) + * This can be used for cleanup. + */ + public function tearDown() { + parent::tearDown(); + } + + /** + * This takes the bundled `examplepage` and performs some API calls on it. + */ + public function testGetUpdateRevert() { + $this->callAPISuccess('Afform', 'revert', ['name' => 'examplepage']); + + $message = 'The initial Afform.get should return default data'; + $result = $this->callAPISuccess('Afform', 'get', ['name' => 'examplepage']); + $this->assertEquals('examplepage', $result['values']['examplepage']['id'], $message); + $this->assertEquals('examplepage', $result['values']['examplepage']['name'], $message); + $this->assertEquals('', $result['values']['examplepage']['title'], $message); + $this->assertEquals('', $result['values']['examplepage']['description'], $message); + $this->assertEquals('civicrm/example-page', $result['values']['examplepage']['server_route'], $message); + $this->assertTrue(is_array($result['values']['examplepage']['layout']), $message); + + $message = 'After updating with Afform.create, the revised data should be returned'; + $result = $this->callAPISuccess('Afform', 'create', [ + 'name' => 'examplepage', + 'description' => 'The temporary description', + ]); + $this->assertEquals('examplepage', $result['values']['name'], $message); + $this->assertEquals('The temporary description', $result['values']['description'], $message); + + $message = 'After updating, the Afform.get API should return blended data'; + $result = $this->callAPISuccess('Afform', 'get', ['name' => 'examplepage']); + $this->assertEquals('examplepage', $result['values']['examplepage']['id'], $message); + $this->assertEquals('examplepage', $result['values']['examplepage']['name'], $message); + $this->assertEquals('', $result['values']['examplepage']['title'], $message); + $this->assertEquals('The temporary description', $result['values']['examplepage']['description'], $message); + $this->assertEquals('civicrm/example-page', $result['values']['examplepage']['server_route'], $message); + $this->assertTrue(is_array($result['values']['examplepage']['layout']), $message); + + $this->callAPISuccess('Afform', 'revert', ['name' => 'examplepage']); + $message = 'After reverting, te final Afform.get should return default data'; + $result = $this->callAPISuccess('Afform', 'get', ['name' => 'examplepage']); + $this->assertEquals('examplepage', $result['values']['examplepage']['id'], $message); + $this->assertEquals('examplepage', $result['values']['examplepage']['name'], $message); + $this->assertEquals('', $result['values']['examplepage']['title'], $message); + $this->assertEquals('', $result['values']['examplepage']['description'], $message); + $this->assertEquals('civicrm/example-page', $result['values']['examplepage']['server_route'], $message); + $this->assertTrue(is_array($result['values']['examplepage']['layout']), $message); + } + +} -- 2.25.1