diff --git a/.github/workflows/brand-plugin-test.yml b/.github/workflows/brand-plugin-test.yml index 8c56251..203665c 100644 --- a/.github/workflows/brand-plugin-test.yml +++ b/.github/workflows/brand-plugin-test.yml @@ -32,7 +32,6 @@ jobs: module-repo: ${{ github.repository }} module-branch: ${{ needs.setup.outputs.branch }} plugin-repo: 'bluehost/bluehost-wordpress-plugin' - plugin-branch: 'feature/solutions' secrets: inherit # hostgator: diff --git a/includes/js/debug.json b/tests/cypress/fixtures/entitlements.json similarity index 100% rename from includes/js/debug.json rename to tests/cypress/fixtures/entitlements.json diff --git a/tests/cypress/integration/solutions-app.cy.js b/tests/cypress/integration/solutions-app.cy.js new file mode 100644 index 0000000..fe5cb9a --- /dev/null +++ b/tests/cypress/integration/solutions-app.cy.js @@ -0,0 +1,106 @@ +// +const entitlementsFixture = require( '../fixtures/entitlements.json' ); + +describe( 'My Plugins and Tools in Plugin App', function () { + beforeEach( () => { + cy.visit( '/wp-admin/index.php' ); + } ); + + // check that it does not display when capabilities.hasSolution is false + it( 'My Plugins & Tools nav does not display without solution', () => { + cy.visit( + '/wp-admin/admin.php?page=' + Cypress.env( 'pluginId' ) + '#/', + { + onLoad() { + cy.window().then( ( win ) => { + win.NewfoldRuntime.capabilities.hasSolution = false; + } ); + }, + } + ); + cy.get( 'a.wppbh-app-navitem[href="#/my_plugins_and_tools"]' ).should( + 'not.exist' + ); + } ); + + // check that my plugins and tools displays when capabilities.hasSolution is true + it( 'My Plugins & Tools nav displays with Solution', () => { + cy.visit( + '/wp-admin/admin.php?page=' + Cypress.env( 'pluginId' ) + '#/', + { + onLoad() { + cy.window().then( ( win ) => { + win.NewfoldRuntime.capabilities.hasSolution = true; + } ); + }, + } + ); + cy.get( 'a.wppbh-app-navitem[href="#/my_plugins_and_tools"]' ).should( + 'be.visible' + ); + } ); + + // check that entitlement categories load in accordions + it( 'Entitlements Display with Solution', () => { + cy.visit( + '/wp-admin/admin.php?page=' + + Cypress.env( 'pluginId' ) + + '#/my_plugins_and_tools', + { + onLoad() { + cy.window().then( ( win ) => { + win.NewfoldRuntime.capabilities.hasSolution = true; + } ); + }, + } + ); + + cy.intercept( + { + method: 'GET', + url: /newfold-solutions(\/|%2F)v1(\/|%2F)entitlements/, + }, + { + body: entitlementsFixture, + delay: 100, + } + ).as( 'getEntitlements' ); + cy.wait( '@getEntitlements' ); + + cy.get( 'a.wppbh-app-navitem[href="#/my_plugins_and_tools"]' ).should( + 'be.visible' + ); + + cy.get( '.newfold-entitlements-container' ) + .contains( 'h2', 'Plugins & Tools' ) + .scrollIntoView() + .should( 'be.visible' ); + + cy.get( '.nfd-core-tool-mypluginsntools' ) + .contains( 'h2', 'Core Tools' ) + .scrollIntoView() + .should( 'be.visible' ); + + // accordion closed + cy.get( '.nfd-core-tool-mypluginsntools' ) + .contains( 'h3', 'Jetpack' ) + .should( 'not.exist' ); + + // test accordion functionality + cy.get( '.nfd-core-tool-mypluginsntools' ) + .contains( 'h2', 'Core Tools' ) + .click(); + + // accordion opened + cy.get( '.nfd-core-tool-mypluginsntools' ) + .contains( 'h3', 'Jetpack' ) + .scrollIntoView() + .should( 'be.visible' ); + } ); + + // test entitlement button case states + // 1. plugin already installed and active + // 2. plugin already installed but not active + // 3. free plugin not installed, needs appropriate installer attributes + // 4. premium plugin not installed, needs appropriate pls attributes +} ); diff --git a/tests/cypress/integration/solutions-plugins.cy.js b/tests/cypress/integration/solutions-plugins.cy.js new file mode 100644 index 0000000..94ff13d --- /dev/null +++ b/tests/cypress/integration/solutions-plugins.cy.js @@ -0,0 +1,86 @@ +// +const entitlementsFixture = require( '../fixtures/entitlements.json' ); + +describe( 'My Plugins and Tools in Plugin App', function () { + // path to the entitlements json to load into transient + const entitlementsjson = + 'vendor/newfold-labs/wp-module-solutions/tests/cypress/fixtures/entitlements.json'; + + after( () => { + cy.exec( + `npx wp-env run cli wp option delete _transient_nfd_site_capabilities` + ); + cy.exec( `npx wp-env run cli wp option delete _transient_newfold_solutions` ); + cy.exec( `npx wp-env run cli wp option delete nfd_data_token` ); + } ); + + // check that it does not display when capabilities.hasSolution is false + it( 'My Plugins & Tools tab does not display without solution', () => { + cy.exec( + `npx wp-env run cli wp option delete _transient_nfd_site_capabilities` + ); + cy.exec( `npx wp-env run cli wp option delete _transient_newfold_solutions` ); + + // need a cli command to set a capability before a test + cy.visit( '/wp-admin/plugin-install.php' ); + // check that my plugins and tools tab displays when capabilities.hasSolution is true + cy.get( + '#adminmenu a[href="plugin-install.php?tab=nfd_my_plugins_and_tools"]' + ).should( 'not.exist' ); + cy.get( '.plugin-install-nfd_my_plugins_and_tools' ).should( + 'not.exist' + ); + } ); + + it( 'My Plugins & Tools exists', () => { + // drop test entitlements into transient + cy.exec( + `npx wp-env run cli wp option set _transient_newfold_solutions --format=json < ${ entitlementsjson }` + ); + // spoof hiive connection + cy.exec( `npx wp-env run cli wp option set nfd_data_token 'xyc123'` ); + // Set hasSolution:true in capabilities + cy.exec( + `npx wp-env run cli wp option set _transient_nfd_site_capabilities '{"hasSolution": true}' --format=json` + ); + // Set a long timeout for the transients + cy.exec( + `npx wp-env run cli wp option set _transient_timeout_newfold_solutions 4102444800` + ); + cy.exec( + `npx wp-env run cli wp option set _transient_timeout_nfd_site_capabilities 4102444800` + ); + + // reload plugin install page + cy.reload( true ); + cy.visit( '/wp-admin/plugin-install.php' ); + + // check that my plugins and tools tab displays when capabilities.hasSolution is true + cy.get( + '#adminmenu a[href="plugin-install.php?tab=nfd_my_plugins_and_tools"]' + ).should( 'be.visible' ); + + // check that entitlement plugins load + cy.visit( '/wp-admin/plugin-install.php?tab=nfd_my_plugins_and_tools' ); + + cy.get( '.plugin-install-nfd_my_plugins_and_tools' ).should( + 'be.visible' + ); + + cy.get( '.nfd-solutions-availble-list' ) + .contains( 'h3', 'Jetpack' ) + .scrollIntoView() + .should( 'be.visible' ); + + cy.get( '.nfd-solutions-availble-list' ) + .contains( 'h3', 'Yoast SEO' ) + .scrollIntoView() + .should( 'be.visible' ); + } ); + + // test each entitlement button case state + // 1. plugin already installed and active + // 2. plugin already installed but not active + // 3. free plugin not installed, needs appropriate installer attributes + // 4. premium plugin not installed, needs appropriate pls attributes +} );