Skip to content

Commit

Permalink
Add support for running in-browser tests via playwright in GitHub CLI (
Browse files Browse the repository at this point in the history
…TiddlyWiki#7820)

* Add support for running in-browser tests via playwright in GitHub CLI

* `ci.yml` was updated to store the report so that it can be inspected on failure
* `ci-test.sh` was added as an expansion to `test.sh` which installs and runs playwright
* `playwright.spec.js` does the actual verification of opening the test TW edition in browser, waiting for the tests to finish and then verifying it has indeed passed
* `playwright.config.js` Playwrifht configuration

* Add support for running in-browser tests via playwright in GitHub CLI

* `ci.yml` was updated to store the report so that it can be inspected on failure
* `ci-test.sh` was added as an expansion to `test.sh` which installs and runs playwright
* `playwright.spec.js` does the actual verification of opening the test TW edition in browser, waiting for the tests to finish and then verifying it has indeed passed
* `playwright.config.js` Playwrifht configuration

* Fix file permissions for `ci-test.sh`

* Increased node version for github actions to support playwright

* Add installation of the required @playwright/test library during CI test execution
  • Loading branch information
EvidentlyCube authored Oct 29, 2023
1 parent 902c7f5 commit 4b56cb4
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 3 deletions.
10 changes: 8 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
- master
- tiddlywiki-com
env:
NODE_VERSION: "12"
NODE_VERSION: "18"
jobs:
test:
runs-on: ubuntu-latest
Expand All @@ -14,7 +14,13 @@ jobs:
- uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE_VERSION }}"
- run: "./bin/test.sh"
- run: "./bin/ci-test.sh"
- uses: actions/upload-artifact@v3
if: always()
with:
name: playwright-report
path: playwright-report/
retention-days: 30
build-prerelease:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@
tmp/
output/
node_modules/

/test-results/
/playwright-report/
/playwright/.cache/
16 changes: 16 additions & 0 deletions bin/ci-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash

# test TiddlyWiki5 for tiddlywiki.com

npm install playwright @playwright/test
npx playwright install chromium firefox --with-deps

node ./tiddlywiki.js \
./editions/test \
--verbose \
--version \
--rendertiddler $:/core/save/all test.html text/plain \
--test \
|| exit 1

npx playwright test
25 changes: 25 additions & 0 deletions editions/test/playwright.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const { test, expect } = require('@playwright/test');
const {resolve} = require('path');

const indexPath = resolve(__dirname, 'output', 'test.html');
const crossPlatformIndexPath = indexPath.replace(/^\/+/, '');


test('get started link', async ({ page }) => {
// The tests can take a while to run
const timeout = 1000 * 30;
test.setTimeout(timeout);

// Load the generated test TW html
await page.goto(`file:///${crossPlatformIndexPath}`);

// Sanity check
await expect(page.locator('.tc-site-title'), "Expected correct page title to verify the test page was loaded").toHaveText('TiddlyWiki5');

// Wait for jasmine results bar to appear
await expect(page.locator('.jasmine-overall-result'), "Expected jasmine test results bar to be present").toBeVisible({timeout});

// Assert the tests have passed
await expect(page.locator('.jasmine-overall-result.jasmine-failed'), "Expected jasmine tests to not have failed").not.toBeVisible();
await expect(page.locator('.jasmine-overall-result.jasmine-passed'), "Expected jasmine tests to have passed").toBeVisible();
});
46 changes: 46 additions & 0 deletions playwright.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const { defineConfig, devices } = require('@playwright/test');

/**
* @see https://playwright.dev/docs/test-configuration
*/
module.exports = defineConfig({
testDir: './editions/test/',

// Allow parallel tests
fullyParallel: true,

// Prevent accidentally committed "test.only" from wrecking havoc
forbidOnly: !!process.env.CI,

// Do not retry tests on failure
retries: 0,

// How many parallel workers
workers: process.env.CI ? 1 : undefined,

// Reporter to use. See https://playwright.dev/docs/test-reporters
reporter: 'html',

// Settings shared with all the tests
use: {
// Take a screenshot when the test fails
screenshot: {
mode: 'only-on-failure',
fullPage: true
}
},

/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},

{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
}
],
});

0 comments on commit 4b56cb4

Please sign in to comment.