Skip to content

Commit

Permalink
Add the governance plugin (#4907)
Browse files Browse the repository at this point in the history
* Add the VIP Governance plugin to the integrations

* Update the config used for seeing if the governance plugin is loaded or not

* Add a test for the new vip-governance integration

* Leave only the single test that actually tests some functionality

* Add a test for the Block Data API as well

* Shift the import lines to be in the right order

* Add in a test to see if the isloaded method works correctly for both the integrations

* Add a code coverage ignore block to the registrations

* Remove the extra false loaded check

* Switch the isLoad check to not define any constant

* Initial rollout safeguard
  • Loading branch information
ingeniumed authored Oct 2, 2023
1 parent f7a70b1 commit 070e9e4
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 0 deletions.
63 changes: 63 additions & 0 deletions integrations/vip-governance.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php
/**
* Integration: VIP Governance.
*
* @package Automattic\VIP\Integrations
*/

namespace Automattic\VIP\Integrations;

/**
* Loads VIP Governance.
*
* @private
*/
class VipGovernanceIntegration extends Integration {

/**
* The version of the VIP Governance plugin to load, that's set to the latest version.
* This should be higher than the lowestVersion set in "vip-governance" config (https://github.com/Automattic/vip-go-mu-plugins-ext/blob/trunk/config.json)
*
* @var string
*/
protected string $version = '1.0';

/**
* Returns `true` if `VIP Governance` is already available e.g. via customer code. We will use
* this function to prevent activating of integration from platform side.
*/
public function is_loaded(): bool {
return defined( 'VIP_GOVERNANCE_LOADED' );
}

/**
* Applies hooks to load VIP Governance plugin.
*
* @private
*/
public function load(): void {
// Wait until plugins_loaded to give precedence to the plugin in the customer repo.
add_action( 'plugins_loaded', function () {
// Return if the integration is already loaded.
//
// In activate() method we do make sure to not activate the integration if its already loaded
// but still adding it here as a safety measure i.e. if load() is called directly.
if ( $this->is_loaded() ) {
return;
}

// Load the version of the plugin that should be set to the latest version, otherwise if it's not found deactivate the integration.
$load_path = WPMU_PLUGIN_DIR . '/vip-integrations/vip-governance-' . $this->version . '/vip-governance.php';
if ( file_exists( $load_path ) ) {
require_once $load_path;
} else {
$this->is_active = false;
}
} );
}

/**
* Configure `VIP Governance` for VIP Platform.
*/
public function configure(): void {}
}
30 changes: 30 additions & 0 deletions tests/integrations/test-vip-block-data-api.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php
/**
* Test: Block Data API Integration.
*
* @package Automattic\VIP\Integrations
*/

namespace Automattic\VIP\Integrations;

use WP_UnitTestCase;

// phpcs:disable Squiz.Commenting.ClassComment.Missing, Squiz.Commenting.FunctionComment.Missing, Squiz.Commenting.VariableComment.Missing

class Block_Data_API_Integration_Test extends WP_UnitTestCase {
private string $slug = 'block-data-api';

public function test__load_call_returns_inactive_because_no_block_data_api_plugin_loaded(): void {
$block_data_api_integration = new BlockDataApiIntegration( $this->slug );

$block_data_api_integration->load();

$this->assertFalse( $block_data_api_integration->is_active() );
}

public function test__if_is_loaded_gives_back_true_when_loaded(): void {
$block_data_api_integration = new BlockDataApiIntegration( $this->slug );

$this->assertFalse( $block_data_api_integration->is_loaded() );
}
}
30 changes: 30 additions & 0 deletions tests/integrations/test-vip-governance.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php
/**
* Test: VIP Governance Integration.
*
* @package Automattic\VIP\Integrations
*/

namespace Automattic\VIP\Integrations;

use WP_UnitTestCase;

// phpcs:disable Squiz.Commenting.ClassComment.Missing, Squiz.Commenting.FunctionComment.Missing, Squiz.Commenting.VariableComment.Missing

class VIP_Governance_Integration_Test extends WP_UnitTestCase {
private string $slug = 'vip-governance';

public function test__load_call_returns_inactive_because_no_governance_plugin_loaded(): void {
$vip_governance_integration = new VipGovernanceIntegration( $this->slug );

$vip_governance_integration->load();

$this->assertFalse( $vip_governance_integration->is_active() );
}

public function test__if_is_loaded_gives_back_true_when_loaded(): void {
$vip_governance_integration = new VipGovernanceIntegration( $this->slug );

$this->assertFalse( $vip_governance_integration->is_loaded() );
}
}
10 changes: 10 additions & 0 deletions vip-integrations.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

defined( 'ABSPATH' ) || die();

// @codeCoverageIgnoreStart - the actual code here is tested individually in the unit tests.

require_once __DIR__ . '/integrations/integration.php';
require_once __DIR__ . '/integrations/integrations.php';
require_once __DIR__ . '/integrations/enums.php';
Expand All @@ -25,6 +27,14 @@
IntegrationsSingleton::instance()->register( new BlockDataApiIntegration( 'block-data-api' ) );
IntegrationsSingleton::instance()->register( new ParselyIntegration( 'parsely' ) );

// ToDo: Remove this after the initial deployment of the VIP Governance integration.
if ( file_exists( __DIR__ . '/integrations/vip-governance.php' ) ) {
require_once __DIR__ . '/integrations/vip-governance.php';
IntegrationsSingleton::instance()->register( new VipGovernanceIntegration( 'vip-governance' ) );
}

// @codeCoverageIgnoreEnd

/**
* Activates an integration with an optional configuration value.
*
Expand Down

0 comments on commit 070e9e4

Please sign in to comment.