diff --git a/tests/Browser/PluginSettingsTest.php b/tests/Browser/PluginSettingsTest.php
index 06ff4ad..7a09ea7 100644
--- a/tests/Browser/PluginSettingsTest.php
+++ b/tests/Browser/PluginSettingsTest.php
@@ -2,91 +2,96 @@
namespace Tests\Browser;
-use function Tests\{asAdmin, asAuthor, asEditor};
+use function Tests\{asAdmin, asAuthor, asEditor, testBaseUrl, testUrl};
const DEFAULT_SCRIPT_SELECTOR = 'script[src="https://scripts.simpleanalyticscdn.com/latest.js"]';
-const INACTIVE_ADMIN_SCRIPT_SELECTOR = 'script[src="http://localhost:8100/wp-content/plugins/simpleanalytics/resources/js/inactive.js"]';
const INACTIVE_ADMIN_COMMENT = '';
const NOSCRIPT_SELECTOR = 'noscript img[src="https://queue.simpleanalyticscdn.com/noscript.gif"][alt=""][referrerpolicy="no-referrer-when-downgrade"]';
+function inactiveAdminScriptSelector(): string
+{
+ return 'script[src="' . testBaseUrl() . '/wp-content/plugins/simpleanalytics/resources/js/inactive.js"]';
+}
+
it('can be activated', function () {
asAdmin()
- ->navigate('http://localhost:8100/wp-admin/plugins.php')
+ ->navigate(testUrl('/wp-admin/plugins.php'))
->assertPresent('tr[data-slug="simpleanalytics"]')
- ->click('#activate-simpleanalytics')
+ // Use href selector as id can vary across WordPress versions.
+ ->click('a[href*="action=activate"][href*="plugin=simpleanalytics%2Fsimple-analytics.php"]')
->assertPresent('a[href="options-general.php?page=simpleanalytics"]')
->assertPresent('#deactivate-simpleanalytics')
->screenshot();
});
it('adds a script by default', function () {
- visit('http://localhost:8100')->assertPresent(DEFAULT_SCRIPT_SELECTOR);
+ visit(testUrl())->assertPresent(DEFAULT_SCRIPT_SELECTOR);
});
it('adds inactive script for authenticated users by default', function () {
asAdmin()
- ->navigate('http://localhost:8100')
- ->assertPresent('script[src="http://localhost:8100/wp-content/plugins/simpleanalytics/resources/js/inactive.js"]')
+ ->navigate(testUrl())
+ ->assertPresent(inactiveAdminScriptSelector())
->assertSourceHas(INACTIVE_ADMIN_COMMENT);
});
it('adds a script with ignored pages', function () {
asAdmin()
- ->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=ignore-rules')
+ ->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=ignore-rules'))
->fill('simpleanalytics_ignore_pages', '/vouchers')
->click('Save Changes')
->refresh()
->assertValue('simpleanalytics_ignore_pages', '/vouchers')
->screenshot();
- visit('http://localhost:8100')->refresh()->assertSourceHas('data-ignore-pages="/vouchers"');
+ visit(testUrl())->refresh()->assertSourceHas('data-ignore-pages="/vouchers"');
});
it('adds inactive script for selected user roles', function () {
- $admin = asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=ignore-rules')
+ $admin = asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=ignore-rules'))
->check('simpleanalytics_exclude_user_roles-editor')
->check('simpleanalytics_exclude_user_roles-author')
->click('Save Changes')
->assertChecked('simpleanalytics_exclude_user_roles-editor')
->assertChecked('simpleanalytics_exclude_user_roles-author');
- $admin->navigate('http://localhost:8100')
+ $admin->navigate(testUrl())
->assertPresent(DEFAULT_SCRIPT_SELECTOR);
- asAuthor()->navigate('http://localhost:8100')
- ->assertPresent(INACTIVE_ADMIN_SCRIPT_SELECTOR)
+ asAuthor()->navigate(testUrl())
+ ->assertPresent(inactiveAdminScriptSelector())
->assertSourceHas(INACTIVE_ADMIN_COMMENT);
- asEditor()->navigate('http://localhost:8100')
- ->assertPresent(INACTIVE_ADMIN_SCRIPT_SELECTOR)
+ asEditor()->navigate(testUrl())
+ ->assertPresent(inactiveAdminScriptSelector())
->assertSourceHas(INACTIVE_ADMIN_COMMENT);
});
it('adds a script with collect do not track enabled', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=advanced')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=advanced'))
->check('simpleanalytics_collect_dnt')
->click('Save Changes')
->assertChecked('simpleanalytics_collect_dnt');
- visit('http://localhost:8100')->assertSourceHas('data-collect-dnt="true"');
+ visit(testUrl())->assertSourceHas('data-collect-dnt="true"');
});
it('adds a script with hash mode enabled', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=advanced')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=advanced'))
->check('simpleanalytics_hash_mode')
->click('Save Changes')
->assertChecked('simpleanalytics_hash_mode');
- visit('http://localhost:8100')->assertSourceHas('data-mode="hash"');
+ visit(testUrl())->assertSourceHas('data-mode="hash"');
});
it('adds a script with manually collect page views enabled', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=advanced')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=advanced'))
->check('simpleanalytics_manual_collect')
->click('Save Changes')
->assertChecked('simpleanalytics_manual_collect');
- visit('http://localhost:8100')->assertSourceHas('data-auto-collect="true"');
+ visit(testUrl())->assertSourceHas('data-auto-collect="true"');
});
/*it('adds noscript tag when support no javascript mode is enabled', function () {
@@ -108,93 +113,93 @@
});*/
it('adds a script with overwrite domain name', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=advanced')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=advanced'))
->fill('simpleanalytics_hostname', 'example.com')
->click('Save Changes')
->assertValue('simpleanalytics_hostname', 'example.com');
- visit('http://localhost:8100')->assertSourceHas('data-hostname="example.com"');
+ visit(testUrl())->assertSourceHas('data-hostname="example.com"');
});
it('adds a script with global variable name', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=advanced')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=advanced'))
->fill('simpleanalytics_sa_global', 'ba_event')
->click('Save Changes')
->assertValue('simpleanalytics_sa_global', 'ba_event');
- visit('http://localhost:8100')->assertSourceHas('data-sa-global="ba_event"');
+ visit(testUrl())->assertSourceHas('data-sa-global="ba_event"');
});
it('adds automated events script when collect automated events is enabled', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=events')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=events'))
->check('simpleanalytics_automated_events')
->click('Save Changes')
->assertChecked('simpleanalytics_automated_events');
- visit('http://localhost:8100')->assertPresent('script[src="https://scripts.simpleanalyticscdn.com/auto-events.js"]');
+ visit(testUrl())->assertPresent('script[src="https://scripts.simpleanalyticscdn.com/auto-events.js"]');
});
it('adds automated events script with auto collect downloads', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=events')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=events'))
->check('simpleanalytics_automated_events')
->fill('simpleanalytics_event_collect_downloads', 'outbound,emails,downloads')
->click('Save Changes')
->assertChecked('simpleanalytics_automated_events')
->assertValue('simpleanalytics_event_collect_downloads', 'outbound,emails,downloads');
- visit('http://localhost:8100')->assertSourceHas('data-collect="outbound,emails,downloads"');
+ visit(testUrl())->assertSourceHas('data-collect="outbound,emails,downloads"');
});
it('adds automated events script with download file extensions', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=events')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=events'))
->check('simpleanalytics_automated_events')
->fill('simpleanalytics_event_extensions', 'pdf,zip')
->click('Save Changes')
->assertChecked('simpleanalytics_automated_events')
->assertValue('simpleanalytics_event_extensions', 'pdf,zip');
- visit('http://localhost:8100')->assertSourceHas('data-extensions="pdf,zip"');
+ visit(testUrl())->assertSourceHas('data-extensions="pdf,zip"');
});
it('adds automated events script with use titles of page enabled', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=events')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=events'))
->check('simpleanalytics_automated_events')
->check('simpleanalytics_event_use_title')
->click('Save Changes')
->assertChecked('simpleanalytics_automated_events')
->assertChecked('simpleanalytics_event_use_title');
- visit('http://localhost:8100')->assertSourceHas('data-use-title');
+ visit(testUrl())->assertSourceHas('data-use-title');
});
it('adds automated events script with use full urls enabled', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=events')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=events'))
->check('simpleanalytics_automated_events')
->check('simpleanalytics_event_full_urls')
->click('Save Changes')
->assertChecked('simpleanalytics_automated_events')
->assertChecked('simpleanalytics_event_full_urls');
- visit('http://localhost:8100')->assertSourceHas('data-full-urls');
+ visit(testUrl())->assertSourceHas('data-full-urls');
});
it('adds automated events script with override global', function () {
- asAdmin()->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=events')
+ asAdmin()->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=events'))
->check('simpleanalytics_automated_events')
->fill('simpleanalytics_event_sa_global', 'ba_event')
->click('Save Changes')
->assertChecked('simpleanalytics_automated_events')
->assertValue('simpleanalytics_event_sa_global', 'ba_event');
- visit('http://localhost:8100')->assertSourceHas('data-sa-global="ba_event"');
+ visit(testUrl())->assertSourceHas('data-sa-global="ba_event"');
});
it('adds a script with a custom domain name', function () {
asAdmin()
- ->navigate('http://localhost:8100/wp-admin/options-general.php?page=simpleanalytics&tab=general')
+ ->navigate(testUrl('/wp-admin/options-general.php?page=simpleanalytics&tab=general'))
->fill('simpleanalytics_custom_domain', 'mydomain.com')
->click('Save Changes')
->assertValue('simpleanalytics_custom_domain', 'mydomain.com');
- visit('http://localhost:8100')->assertPresent('script[src="https://mydomain.com/latest.js"]');
+ visit(testUrl())->assertPresent('script[src="https://mydomain.com/latest.js"]');
});
diff --git a/tests/Pest.php b/tests/Pest.php
index 629843a..59a0b32 100644
--- a/tests/Pest.php
+++ b/tests/Pest.php
@@ -16,7 +16,22 @@
use Pest\Browser\Api\Webpage;
pest()->extend(TestCase::class)->in('Feature');
-pest()->browser()->timeout(30000);
+pest()->browser()->timeout(60000);
+
+function testBaseUrl(): string
+{
+ return rtrim(getenv('TEST_BASE_URL') ?: 'http://localhost:8100', '/');
+}
+
+function testUrl(string $path = ''): string
+{
+ return testBaseUrl() . '/' . ltrim($path, '/');
+}
+
+beforeEach(function () {
+ $headers = @get_headers(testUrl('/wp-login.php'));
+ if (!$headers) throw new \RuntimeException('WordPress test site is unavailable. Set TEST_BASE_URL or run local site on localhost:8100.');
+});
/*
|--------------------------------------------------------------------------
@@ -46,11 +61,13 @@
function asUser(string $login, string $password)
{
- return visit('http://localhost:8100/wp-login.php')
+ return visit(testUrl('/wp-login.php'))
->assertPresent('#loginform')
->fill('user_login', $login)
->fill('user_pass', $password)
->press('wp-submit')
+ // Explicitly navigate to wp-admin to avoid flaky redirect handling in CI.
+ ->navigate(testUrl('/wp-admin/'))
->assertPresent('#wpadminbar');
}