-
-
Notifications
You must be signed in to change notification settings - Fork 522
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: update commands and clean up test configurations
- Loading branch information
Showing
8 changed files
with
70 additions
and
199 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,98 +1,14 @@ | ||
import { expect, test } from '@playwright/test'; | ||
import { | ||
BrowserContext, | ||
ElectronApplication, | ||
Page, | ||
_electron as electron, | ||
} from 'playwright'; | ||
const PATH = require('path'); | ||
const fs = require('fs'); | ||
|
||
let app: ElectronApplication; | ||
let page: Page; | ||
let context: BrowserContext; | ||
test('basic test', async ({ page }) => { | ||
await page.goto('/'); | ||
|
||
test.beforeAll(async () => { | ||
app = await electron.launch({ | ||
args: [PATH.join(__dirname, '../electron/main.js')], | ||
env: { | ||
e2e: 'true', | ||
}, | ||
}); | ||
// Basic checks | ||
expect(await page.title()).toBe('IPTVnator'); | ||
|
||
context = app.context(); | ||
await context.tracing.start({ screenshots: true, snapshots: true }); | ||
|
||
page = await app.firstWindow(); | ||
const isMainWindow = (await page.title()) === 'IPTVnator'; | ||
if (!isMainWindow) { | ||
page = app.windows()[1]; | ||
} | ||
await page.waitForLoadState('domcontentloaded'); | ||
}); | ||
|
||
test.describe('Check Home Page', () => { | ||
test('Launch electron app', async () => { | ||
const windowState = await app.evaluate((electronProcess) => { | ||
let mainWindow = electronProcess.BrowserWindow.getAllWindows()[0]; | ||
const isMainWindow = mainWindow.title === 'IPTVnator'; | ||
if (!isMainWindow) { | ||
mainWindow = electronProcess.BrowserWindow.getAllWindows()[1]; | ||
} | ||
|
||
return { | ||
isVisible: mainWindow.isVisible(), | ||
isDevToolsOpened: mainWindow.webContents.isDevToolsOpened(), | ||
isCrashed: mainWindow.webContents.isCrashed(), | ||
}; | ||
}); | ||
|
||
expect(windowState.isVisible).toBeTruthy(); | ||
expect(windowState.isDevToolsOpened).toBeFalsy(); | ||
expect(windowState.isCrashed).toBeFalsy(); | ||
expect(app.windows()).toHaveLength(2); | ||
}); | ||
|
||
// eslint-disable-next-line no-empty-pattern | ||
test('Check title of the application', async ({}, testInfo) => { | ||
const title = await page.title(); | ||
const screenshot = await page.screenshot({ | ||
path: `./e2e/screenshots/home/${testInfo.title}.png`, | ||
}); | ||
await testInfo.attach('screenshot', { | ||
body: screenshot, | ||
contentType: 'image/png', | ||
}); | ||
expect(title).toBe('IPTVnator'); | ||
}); | ||
// Upload playlist test | ||
await page.getByTestId('add-playlist').click(); | ||
await page.click('"Add via file upload"'); | ||
await page.setInputFiles('input[type="file"]', './e2e/fixtures/test.m3u'); | ||
await expect(page.getByTestId('channel-item')).toHaveCount(4); | ||
}); | ||
|
||
test.describe('Upload playlists', () => { | ||
test('should upload m3u playlist via file upload', async () => { | ||
await page.getByTestId('add-playlist').click(); | ||
await page.click('"Add via file upload"'); | ||
await page.setInputFiles( | ||
'input[type="file"]', | ||
'./e2e/fixtures/test.m3u' | ||
); | ||
await expect(page.getByTestId('channel-item')).toHaveCount(4); | ||
}); | ||
}); | ||
|
||
test.afterAll(async () => { | ||
deleteDbFile(); | ||
await page.close(); | ||
await app.close(); | ||
}); | ||
|
||
function deleteDbFile() { | ||
const pathToFile = './e2e/db/data.db'; | ||
|
||
try { | ||
fs.unlink(pathToFile, () => { | ||
console.log('db file was deleted'); | ||
}); | ||
} catch (error) { | ||
console.log('db file not found'); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,100 +1,79 @@ | ||
import { expect, test } from '@playwright/test'; | ||
import { | ||
BrowserContext, | ||
ElectronApplication, | ||
Page, | ||
_electron as electron, | ||
} from 'playwright'; | ||
const PATH = require('path'); | ||
|
||
let app: ElectronApplication; | ||
let page: Page; | ||
let context: BrowserContext; | ||
|
||
test.beforeAll(async () => { | ||
app = await electron.launch({ | ||
args: [PATH.join(__dirname, '../electron/main.js')], | ||
env: { | ||
e2e: 'true', | ||
}, | ||
test.describe('Settings', () => { | ||
test.beforeEach(async ({ page }) => { | ||
await page.goto('/'); | ||
// Clear IndexedDB before each test | ||
await page.evaluate(async () => { | ||
const dbNames = (await window.indexedDB.databases()).map( | ||
(db) => db.name | ||
); | ||
dbNames.forEach((name) => | ||
name !== undefined | ||
? window.indexedDB.deleteDatabase(name) | ||
: null | ||
); | ||
}); | ||
}); | ||
|
||
context = app.context(); | ||
await context.tracing.start({ screenshots: true, snapshots: true }); | ||
|
||
page = await app.firstWindow(); | ||
const isMainWindow = (await page.title()) === 'IPTVnator'; | ||
if (!isMainWindow) { | ||
page = app.windows()[1]; | ||
} | ||
await page.waitForLoadState('domcontentloaded'); | ||
}); | ||
|
||
test.describe('Settings', () => { | ||
test('Check settings page', async () => { | ||
await page.getByTestId('open-settings').click(); | ||
test('Check settings page', async ({ page }) => { | ||
await page.getByTestId('pwa-menu').click(); | ||
await page.getByTestId('pwa-open-settings').click(); | ||
await expect(page.getByTestId('settings-container')).toBeVisible(); | ||
await page.getByTestId('back-to-home').click(); | ||
}); | ||
|
||
test('Change video player', async () => { | ||
await page.getByTestId('open-settings').click(); | ||
test('Change video player', async ({ page }) => { | ||
await page.getByTestId('pwa-menu').click(); | ||
await page.getByTestId('pwa-open-settings').click(); | ||
|
||
await expect(page.locator('text="VideoJs Player"')).toBeVisible(); | ||
await page.getByTestId('select-video-player').click(); | ||
await page.getByTestId('html5').click(); | ||
|
||
await page.getByTestId('save-settings').click(); | ||
await page.getByTestId('back-to-home').click(); | ||
await page.getByTestId('open-settings').click(); | ||
|
||
await page.getByTestId('pwa-menu').click(); | ||
await page.getByTestId('pwa-open-settings').click(); | ||
|
||
await expect(page.locator('text="HTML5 Video Player"')).toBeVisible(); | ||
}); | ||
|
||
test('Change app theme', async () => { | ||
test('Change app theme', async ({ page }) => { | ||
await page.getByTestId('pwa-menu').click(); | ||
await page.getByTestId('pwa-open-settings').click(); | ||
await expect(page.locator('text="Light theme"')).toBeVisible(); | ||
await page.getByTestId('select-theme').click(); | ||
await page.getByTestId('DARK_THEME').click(); | ||
|
||
await page.getByTestId('save-settings').click(); | ||
await page.getByTestId('back-to-home').click(); | ||
await page.getByTestId('open-settings').click(); | ||
|
||
await page.getByTestId('pwa-menu').click(); | ||
await page.getByTestId('pwa-open-settings').click(); | ||
|
||
await expect(page.locator('text="Dark theme"')).toBeVisible(); | ||
}); | ||
|
||
test('Change app language', async () => { | ||
test('Change app language', async ({ page }) => { | ||
await page.getByTestId('pwa-menu').click(); | ||
await page.getByTestId('pwa-open-settings').click(); | ||
await expect(page.locator('text="English"')).toBeVisible(); | ||
await page.getByTestId('select-language').click(); | ||
await page.getByTestId('de').click(); | ||
|
||
await page.getByTestId('save-settings').click(); | ||
await page.getByTestId('back-to-home').click(); | ||
await page.getByTestId('open-settings').click(); | ||
await page.getByTestId('pwa-menu').click(); | ||
await page.getByTestId('pwa-open-settings').click(); | ||
|
||
await expect(page.locator('text="Deutsch"')).toBeVisible(); | ||
}); | ||
}); | ||
|
||
test.beforeEach(async () => { | ||
await page.evaluate(async () => { | ||
const dbNames = (await window.indexedDB.databases()).map( | ||
(db) => db.name | ||
); | ||
dbNames.forEach((name) => | ||
name !== undefined ? window.indexedDB.deleteDatabase(name) : null | ||
); | ||
test.afterEach(async ({ page }, testInfo) => { | ||
await page.screenshot({ | ||
path: `./e2e/screenshots/settings/${testInfo.title}.png`, | ||
}); | ||
}); | ||
}); | ||
|
||
// eslint-disable-next-line no-empty-pattern | ||
test.afterEach(async ({}, testInfo) => { | ||
await page.screenshot({ | ||
path: `./e2e/screenshots/home/${testInfo.title}.png`, | ||
}); | ||
}); | ||
|
||
test.afterAll(async () => { | ||
await page.close(); | ||
await app.close(); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,21 @@ | ||
import { devices, PlaywrightTestConfig } from '@playwright/test'; | ||
import { defineConfig, devices } from '@playwright/test'; | ||
|
||
const config: PlaywrightTestConfig = { | ||
export default defineConfig({ | ||
testDir: './e2e', | ||
timeout: 45000, | ||
maxFailures: 2, | ||
testMatch: /.*\.e2e\.ts/, | ||
projects: [ | ||
{ | ||
name: 'chromium', | ||
use: { | ||
...devices['Desktop Chrome'], | ||
serviceWorkers: 'block', | ||
}, | ||
}, | ||
/* { | ||
name: 'firefox', | ||
use: { | ||
...devices['Desktop Firefox'], | ||
serviceWorkers: 'block', | ||
}, | ||
}, | ||
{ | ||
name: 'webkit', | ||
use: { | ||
...devices['Desktop Safari'], | ||
serviceWorkers: 'block', | ||
}, | ||
}, */ | ||
], | ||
webServer: { | ||
command: 'npm run serve', | ||
port: 4200, | ||
reuseExistingServer: !process.env.CI, | ||
timeout: 120000, | ||
}, | ||
use: { | ||
...devices['Desktop Chrome'], | ||
baseURL: 'http://localhost:4200', | ||
headless: false, | ||
screenshot: 'only-on-failure', | ||
testIdAttribute: 'data-test-id', | ||
}, | ||
}; | ||
|
||
export default config; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters