diff --git a/README.md b/README.md index 7f769d7..6014faa 100644 --- a/README.md +++ b/README.md @@ -34,15 +34,6 @@ quasar build ### Testing: - -#### Unit test - with pretty web-UI -``` -test:unit:ui -``` -#### Unit test - Without any UI, fully in a terminal -``` -test:unit:ci -``` #### Component test - via Playwright ``` test:component diff --git a/package.json b/package.json index 53c77ba..c8e20f4 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,6 @@ "lint": "eslint --ext .js,.ts,.vue ./", "dev:electron": "quasar dev -m electron", "build": "quasar build -m electron --publish never", - "test:unit:ui": "vitest --ui", - "test:unit:ci": "vitest run --reporter verbose", "test:component": "node \"node_modules/@playwright/test/cli.js\" test src/components/", "test:e2e": "node \"node_modules/@playwright/test/cli.js\" test test/playwright-e2e/" }, @@ -30,19 +28,14 @@ }, "devDependencies": { "@intlify/vite-plugin-vue-i18n": "^3.3.1", - "@pinia/testing": "^0.1.3", "@playwright/test": "^1.37.1", "@quasar/app-vite": "^1.3.0", "@quasar/quasar-app-extension-qmarkdown": "^2.0.0-beta.10", - "@quasar/quasar-app-extension-testing": "^2.1.0", - "@quasar/quasar-app-extension-testing-unit-vitest": "^0.4.0", "@types/lodash-es": "^4.17.10", "@types/node": "^16.18.0", "@types/uuid": "^9.0.5", "@typescript-eslint/eslint-plugin": "^5.10.0", "@typescript-eslint/parser": "^5.10.0", - "@vitest/ui": "^0.15.0", - "@vue/test-utils": "^2.0.0", "autoprefixer": "^10.4.2", "electron": "^25.5.0", "electron-builder": "^24.3.0", @@ -55,13 +48,12 @@ "jsdom": "^22.1.0", "playwright": "^1.37.1", "postcss-html": "^1.5.0", - "sass": "^1.69.0", + "sass": "1.29.0", "stylelint": "^15.10.3", "stylelint-config-standard": "^34.0.0", "stylelint-config-standard-scss": "^11.0.0", "stylelint-config-standard-vue": "^1.0.0", - "typescript": "^4.5.4", - "vitest": "^0.15.0" + "typescript": "^4.5.4" }, "engines": { "node": "^18 || ^16 || ^14.19", diff --git a/playwright.config.ts b/playwright.config.ts index 175aa80..179d204 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,6 +1,8 @@ import { defineConfig } from '@playwright/test' export default defineConfig({ + workers: 3, + fullyParallel: false, testMatch: '**/*playwright.@(spec|test).?(c|m)[jt]s?(x)', reporter: [ ['list'], diff --git a/quasar.extensions.json b/quasar.extensions.json index d29a932..c51ad8a 100644 --- a/quasar.extensions.json +++ b/quasar.extensions.json @@ -1,17 +1,5 @@ { - "@quasar/testing": { - "harnesses": [ - "unit-vitest@alpha" - ] - }, - "@quasar/testing-unit-vitest": { - "options": [ - "scripts", - "typescript", - "ui" - ] - }, "@quasar/qmarkdown": { "import_md": true } -} \ No newline at end of file +} diff --git a/quasar.testing.json b/quasar.testing.json deleted file mode 100644 index d7110cb..0000000 --- a/quasar.testing.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "unit-vitest": { - "runnerCommand": "vitest run" - } -} diff --git a/src/components/AppControlMenus/AppControlMenus.playwright.test.ts b/src/components/AppControlMenus/AppControlMenus.playwright.test.ts new file mode 100644 index 0000000..fddf141 --- /dev/null +++ b/src/components/AppControlMenus/AppControlMenus.playwright.test.ts @@ -0,0 +1,79 @@ +import { _electron as electron } from 'playwright' +import { test, expect } from '@playwright/test' +import { extraEnvVariablesAPI } from 'app/src-electron/customContentBridgeAPIs/extraEnvVariablesAPI' + +/** + * Extra env settings to trigger component testing via Playwright + */ +const extraEnvSettings = { + TEST_ENV: 'components', + COMPONENT_NAME: 'AppControlMenus', + COMPONENT_PROPS: JSON.stringify({}) +} + +/** + * Electron main filepath + */ +const electronMainFilePath:string = extraEnvVariablesAPI.ELECTRON_MAIN_FILEPATH + +/** + * Extra rended timer buffer for tests to start after loading the app + * - Change here in order manually adjust this component's wait times + */ +const faFrontendRenderTimer = extraEnvVariablesAPI.FA_FRONTEND_RENDER_TIMER + +/** + * Object of string data selectors for the component + */ +const selectorList = { + testMenu: 'appControlMenus-testMenu', + anyMenu: 'appControlMenus-anyMenu' +} + +/** + * Load a custom "Test Title" menu button in the menu and check if it loaded + */ +test('Load "Test Title" menu button sub-component', async () => { + const electronApp = await electron.launch({ + env: extraEnvSettings, + args: [electronMainFilePath] + }) + + const appWindow = await electronApp.firstWindow() + await appWindow.waitForTimeout(faFrontendRenderTimer) + + const testMenu = await appWindow.$(`[data-test-test-menu="${selectorList.testMenu}"]`) + + // Check if the tested element exists + if (testMenu !== null) { + await expect(true).toBe(true) + await electronApp.close() + } else { + // Element doesn't exist + test.fail() + } +}) + +/** + * Check if we have exactly one testing menu loaded + */ +test('Check if we have exactly one testing menu loaded', async () => { + const electronApp = await electron.launch({ + env: extraEnvSettings, + args: [electronMainFilePath] + }) + + const appWindow = await electronApp.firstWindow() + await appWindow.waitForTimeout(faFrontendRenderTimer) + + const anyMenus = await appWindow.$$(`[data-test-any-menu="${selectorList.anyMenu}"]`) + + // Check for example one testing menu + if (anyMenus.length === 1) { + await expect(true).toBe(true) + await electronApp.close() + } else { + // No menus/too many menus + test.fail() + } +}) diff --git a/src/components/AppControlMenus/AppControlMenus.vue b/src/components/AppControlMenus/AppControlMenus.vue index 629a8e5..4b5bf25 100644 --- a/src/components/AppControlMenus/AppControlMenus.vue +++ b/src/components/AppControlMenus/AppControlMenus.vue @@ -6,29 +6,57 @@ flat class="appControlMenus__inner" > - - + + - - + + - - + + + + + +