Skip to content

Commit ebc1d77

Browse files
committed
chore: setup playwright
1 parent 776dd5d commit ebc1d77

10 files changed

Lines changed: 8176 additions & 8007 deletions

File tree

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,8 @@ data.json
2323
temp
2424
.idea
2525
references/*
26+
/test-results/
27+
/playwright-report/
28+
/blob-report/
29+
/playwright/.cache/
30+
.env

package-lock.json

Lines changed: 8024 additions & 7950 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 50 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,52 @@
11
{
2-
"name": "lineage",
3-
"version": "0.2.0-dev",
4-
"description": "",
5-
"scripts": {
6-
"dev": "node esbuild.config.mjs",
7-
"build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
8-
"version": "node version-bump.mjs && git add manifest.json versions.json",
9-
"test:watch": "vitest",
10-
"test": "vitest run",
11-
"prepare": "husky install"
12-
},
13-
"keywords": [],
14-
"author": "",
15-
"license": "MIT",
16-
"devDependencies": {
17-
"@codemirror/language": "6.9.1",
18-
"@commitlint/cli": "17.4.0",
19-
"@commitlint/config-conventional": "17.4.0",
20-
"@tsconfig/svelte": "5.0.2",
21-
"@types/electron": "1.6.10",
22-
"@types/node": "20.11.24",
23-
"@types/uniqid": "5.3.4",
24-
"@typescript-eslint/eslint-plugin": "7.1.0",
25-
"@typescript-eslint/parser": "7.1.0",
26-
"builtin-modules": "3.3.0",
27-
"classnames": "2.5.1",
28-
"esbuild": "0.20.1",
29-
"esbuild-plugin-inline-worker": "0.1.1",
30-
"esbuild-svelte": "0.8.0",
31-
"eslint": "8.57.0",
32-
"eslint-plugin-svelte": "2.35.1",
33-
"husky": "8.0.3",
34-
"lint-staged": "13.3.0",
35-
"lucide-svelte": "0.344.0",
36-
"monkey-around": "3.0.0",
37-
"nanoid": "5.0.6",
38-
"obsidian": "latest",
39-
"prettier": "3.2.5",
40-
"prettier-plugin-svelte": "3.2.2",
41-
"svelte": "4.2.12",
42-
"svelte-eslint-parser": "0.33.1",
43-
"svelte-preprocess": "5.1.3",
44-
"tslib": "2.6.2",
45-
"typescript": "5.3.3",
46-
"vitest": "1.3.1",
47-
"fuse.js": "7.0.0",
48-
"jsdom": "24.0.0"
49-
},
50-
"dependencies": {}
2+
"name": "lineage",
3+
"version": "0.2.0-dev",
4+
"description": "",
5+
"scripts": {
6+
"dev": "node esbuild.config.mjs",
7+
"build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
8+
"version": "node version-bump.mjs && git add manifest.json versions.json",
9+
"test:watch": "vitest",
10+
"test": "vitest run",
11+
"prepare": "husky install"
12+
},
13+
"keywords": [],
14+
"author": "",
15+
"license": "MIT",
16+
"devDependencies": {
17+
"@codemirror/language": "6.9.1",
18+
"@commitlint/cli": "17.4.0",
19+
"@commitlint/config-conventional": "17.4.0",
20+
"@playwright/test": "^1.42.1",
21+
"@tsconfig/svelte": "5.0.2",
22+
"@types/electron": "1.6.10",
23+
"@types/node": "20.11.24",
24+
"@types/uniqid": "5.3.4",
25+
"@typescript-eslint/eslint-plugin": "7.1.0",
26+
"@typescript-eslint/parser": "7.1.0",
27+
"builtin-modules": "3.3.0",
28+
"classnames": "2.5.1",
29+
"esbuild": "0.20.1",
30+
"esbuild-plugin-inline-worker": "0.1.1",
31+
"esbuild-svelte": "0.8.0",
32+
"eslint": "8.57.0",
33+
"eslint-plugin-svelte": "2.35.1",
34+
"fuse.js": "7.0.0",
35+
"husky": "8.0.3",
36+
"jsdom": "24.0.0",
37+
"lint-staged": "13.3.0",
38+
"lucide-svelte": "0.344.0",
39+
"monkey-around": "3.0.0",
40+
"nanoid": "5.0.6",
41+
"obsidian": "latest",
42+
"prettier": "3.2.5",
43+
"prettier-plugin-svelte": "3.2.2",
44+
"svelte": "4.2.12",
45+
"svelte-eslint-parser": "0.33.1",
46+
"svelte-preprocess": "5.1.3",
47+
"tslib": "2.6.2",
48+
"typescript": "5.3.3",
49+
"vitest": "1.3.1",
50+
"dotenv": "^16.4.5"
51+
}
5152
}

playwright.config.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { defineConfig, devices } from '@playwright/test';
2+
import { config } from 'dotenv';
3+
4+
config();
5+
/**
6+
* Read environment variables from file.
7+
* https://github.com/motdotla/dotenv
8+
*/
9+
// require('dotenv').config();
10+
11+
/**
12+
* See https://playwright.dev/docs/test-configuration.
13+
*/
14+
export default defineConfig({
15+
testDir: './src/e2e',
16+
/* Run tests in files in parallel */
17+
fullyParallel: true,
18+
/* Fail the build on CI if you accidentally left test.only in the source code. */
19+
forbidOnly: !!process.env.CI,
20+
/* Retry on CI only */
21+
retries: process.env.CI ? 2 : 0,
22+
/* Opt out of parallel tests on CI. */
23+
workers: process.env.CI ? 1 : undefined,
24+
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
25+
reporter: 'html',
26+
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
27+
use: {
28+
/* Base URL to use in actions like `await page.goto('/')`. */
29+
// baseURL: 'http://127.0.0.1:3000',
30+
31+
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
32+
trace: 'on-first-retry',
33+
},
34+
35+
/* Configure projects for major browsers */
36+
projects: [
37+
{
38+
name: 'chromium',
39+
use: { ...devices['Desktop Chrome'] },
40+
},
41+
],
42+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export const PROMPT_INPUT = '.prompt-input';
2+
3+
export const LINEAGE_VIEW = '.lineage__main';
4+
5+
export const LINEAGE_CARD = '.lineage__card';
6+
7+
export const MARKDOWN_PREVIEW = '.content';

src/e2e/helpers/general/delay.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const delay = async (milliseconds: number): Promise<void> => {
2+
return new Promise((resolve) => setTimeout(resolve, milliseconds));
3+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Page } from '@playwright/test';
2+
import { PROMPT_INPUT } from '../consts/selectors';
3+
4+
export const runCommand = async (obsidian: Page, commandName: string) => {
5+
await obsidian.waitForSelector('.workspace-tabs');
6+
await obsidian.keyboard.press('Control+P');
7+
await obsidian.waitForSelector(PROMPT_INPUT);
8+
await obsidian.keyboard.type(commandName);
9+
await obsidian.keyboard.press('Enter');
10+
};

src/e2e/test.spec.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { _electron as electron } from 'playwright';
2+
import { expect, test } from '@playwright/test';
3+
import {
4+
LINEAGE_CARD,
5+
LINEAGE_VIEW,
6+
MARKDOWN_PREVIEW,
7+
} from './helpers/consts/selectors';
8+
import { runCommand } from './helpers/interactions/run-command';
9+
10+
test('can run', async ({ page }) => {
11+
const electronApp = await electron.launch({
12+
executablePath: process.env.OBSIDIAN_EXECUTABLE_PATH,
13+
});
14+
15+
const obsidian = await electronApp.firstWindow();
16+
await runCommand(obsidian, 'Lineage create');
17+
await obsidian.waitForSelector(LINEAGE_VIEW);
18+
await obsidian.focus(LINEAGE_VIEW);
19+
const typedText = 'card 1';
20+
await obsidian.keyboard.type(typedText);
21+
await obsidian.keyboard.press('Control+Shift+Enter');
22+
const cards = await obsidian.$$(LINEAGE_CARD);
23+
expect(cards.length).toBe(1);
24+
const content = await cards[0].$(MARKDOWN_PREVIEW);
25+
if (!content) throw new Error('content is undefined');
26+
expect(await content.textContent()).toEqual(typedText);
27+
});

src/view/components/container/column/components/group/components/card/components/content/content.svelte

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<script lang="ts">
2-
import { getPlugin, getStore } from 'src/view/components/container/context';
3-
import { ActiveStatus } from 'src/view/components/container/column/components/group/components/active-status.enum';
4-
import {
5-
markdownPreviewAction
6-
} from 'src/view/components/container/column/components/group/components/card/components/content/actions/markdown-preview-action';
2+
import { getPlugin, getStore } from 'src/view/components/container/context';
3+
import { ActiveStatus } from 'src/view/components/container/column/components/group/components/active-status.enum';
4+
import {
5+
markdownPreviewAction
6+
} from 'src/view/components/container/column/components/group/components/card/components/content/actions/markdown-preview-action';
77
8-
export let active: ActiveStatus | null;
8+
export let active: ActiveStatus | null;
99
1010
export let content: string;
1111
// eslint-disable-next-line no-undef
@@ -35,7 +35,7 @@
3535
</script>
3636

3737
<div
38-
class={'lineage__card content markdown-preview-view ' + (active?classes[active]:'')}
38+
class={' content markdown-preview-view ' + (active?classes[active]:'')}
3939
data-active={active||"inactive"}
4040
on:click={onClick}
4141
use:markdownPreviewAction={content}

vite.config.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const configMain = defineConfig({
44
test: {
55
threads: true,
66
environment: 'node',
7-
exclude: ['temp/**', "node_modules/**"],
7+
exclude: ['temp/**', "node_modules/**","src/e2e/**"],
88
},
99
});
1010

0 commit comments

Comments
 (0)