e2e.spec.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import type {ElectronApplication} from 'playwright';
  2. import {_electron as electron} from 'playwright';
  3. import {afterAll, beforeAll, expect, test} from 'vitest';
  4. import {createHash} from 'crypto';
  5. let electronApp: ElectronApplication;
  6. beforeAll(async () => {
  7. electronApp = await electron.launch({args: ['.'], timeout: 60000 * 5});
  8. });
  9. afterAll(async () => {
  10. await electronApp.close();
  11. });
  12. test('Main window state', async () => {
  13. const windowState: { isVisible: boolean; isDevToolsOpened: boolean; isCrashed: boolean }
  14. = await electronApp.evaluate(({BrowserWindow}) => {
  15. const mainWindow = BrowserWindow.getAllWindows()[0];
  16. const getState = () => ({
  17. isVisible: mainWindow.isVisible(),
  18. isDevToolsOpened: mainWindow.webContents.isDevToolsOpened(),
  19. isCrashed: mainWindow.webContents.isCrashed(),
  20. });
  21. return new Promise((resolve) => {
  22. if (mainWindow.isVisible()) {
  23. resolve(getState());
  24. } else
  25. mainWindow.once('ready-to-show', () => setTimeout(() => resolve(getState()), 0));
  26. });
  27. });
  28. expect(windowState.isCrashed, 'App was crashed').toBeFalsy();
  29. expect(windowState.isVisible, 'Main window was not visible').toBeTruthy();
  30. expect(windowState.isDevToolsOpened, 'DevTools was opened').toBeFalsy();
  31. });
  32. test('Main window web content', async () => {
  33. const page = await electronApp.firstWindow();
  34. const element = await page.$('#app', {strict: true});
  35. expect(element, 'Can\'t find root element').toBeDefined();
  36. expect((await element.innerHTML()).trim(), 'Window content was empty').not.equal('');
  37. });
  38. test('Preload versions', async () => {
  39. const page = await electronApp.firstWindow();
  40. const renderedVersions = await page.locator('#process-versions').innerText();
  41. const expectedVersions = await electronApp.evaluate(() => process.versions);
  42. for (const expectedVersionsKey in expectedVersions) {
  43. expect(renderedVersions).include(`${expectedVersionsKey}: v${expectedVersions[expectedVersionsKey]}`);
  44. }
  45. });
  46. test('Preload nodeCrypto', async () => {
  47. const page = await electronApp.firstWindow();
  48. /**
  49. * Random string to test hashing
  50. */
  51. const testString = Math.random().toString(36).slice(2, 7);
  52. await page.fill('input', testString);
  53. const renderedHash = await page.inputValue('input[readonly]');
  54. const expectedHash = createHash('sha256').update(testString).digest('hex');
  55. expect(renderedHash).toEqual(expectedHash);
  56. });