diff --git a/electron/playwright.config.ts b/electron/playwright.config.ts
index 98b2c7b45..1fa3313f2 100644
--- a/electron/playwright.config.ts
+++ b/electron/playwright.config.ts
@@ -1,9 +1,9 @@
-import { PlaywrightTestConfig } from "@playwright/test";
+import { PlaywrightTestConfig } from '@playwright/test'
const config: PlaywrightTestConfig = {
- testDir: "./tests",
+ testDir: './tests',
retries: 0,
- timeout: 120000,
-};
+ globalTimeout: 300000,
+}
-export default config;
+export default config
diff --git a/electron/tests/explore.e2e.spec.ts b/electron/tests/hub.e2e.spec.ts
similarity index 68%
rename from electron/tests/explore.e2e.spec.ts
rename to electron/tests/hub.e2e.spec.ts
index 77eb3dbda..6bfe45ac4 100644
--- a/electron/tests/explore.e2e.spec.ts
+++ b/electron/tests/hub.e2e.spec.ts
@@ -9,6 +9,7 @@ import {
let electronApp: ElectronApplication
let page: Page
+const TIMEOUT: number = parseInt(process.env.TEST_TIMEOUT || '300000')
test.beforeAll(async () => {
process.env.CI = 'e2e'
@@ -26,7 +27,9 @@ test.beforeAll(async () => {
})
await stubDialog(electronApp, 'showMessageBox', { response: 1 })
- page = await electronApp.firstWindow()
+ page = await electronApp.firstWindow({
+ timeout: TIMEOUT,
+ })
})
test.afterAll(async () => {
@@ -34,8 +37,13 @@ test.afterAll(async () => {
await page.close()
})
-test('explores models', async () => {
- await page.getByTestId('Hub').first().click()
- await page.getByTestId('testid-explore-models').isVisible()
- // More test cases here...
+test('explores hub', async () => {
+ // Set the timeout for this test to 60 seconds
+ test.setTimeout(TIMEOUT)
+ await page.getByTestId('Hub').first().click({
+ timeout: TIMEOUT,
+ })
+ await page.getByTestId('hub-container-test-id').isVisible({
+ timeout: TIMEOUT,
+ })
})
diff --git a/electron/tests/main.e2e.spec.ts b/electron/tests/main.e2e.spec.ts
deleted file mode 100644
index 1a5bfe696..000000000
--- a/electron/tests/main.e2e.spec.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { _electron as electron } from 'playwright'
-import { ElectronApplication, Page, expect, test } from '@playwright/test'
-
-import {
- findLatestBuild,
- parseElectronApp,
- stubDialog,
-} from 'electron-playwright-helpers'
-
-let electronApp: ElectronApplication
-let page: Page
-
-test.beforeAll(async () => {
- process.env.CI = 'e2e'
-
- const latestBuild = findLatestBuild('dist')
- expect(latestBuild).toBeTruthy()
-
- // parse the packaged Electron app and find paths and other info
- const appInfo = parseElectronApp(latestBuild)
- expect(appInfo).toBeTruthy()
- expect(appInfo.asar).toBe(true)
- expect(appInfo.executable).toBeTruthy()
- expect(appInfo.main).toBeTruthy()
- expect(appInfo.name).toBe('jan')
- expect(appInfo.packageJson).toBeTruthy()
- expect(appInfo.packageJson.name).toBe('jan')
- expect(appInfo.platform).toBeTruthy()
- expect(appInfo.platform).toBe(process.platform)
- expect(appInfo.resourcesDir).toBeTruthy()
-
- electronApp = await electron.launch({
- args: [appInfo.main], // main file from package.json
- executablePath: appInfo.executable, // path to the Electron executable
- })
- await stubDialog(electronApp, 'showMessageBox', { response: 1 })
-
- page = await electronApp.firstWindow()
-})
-
-test.afterAll(async () => {
- await electronApp.close()
- await page.close()
-})
-
-test('renders the home page', async () => {
- expect(page).toBeDefined()
-
- // Welcome text is available
- const welcomeText = await page
- .getByTestId('testid-welcome-title')
- .first()
- .isVisible()
- expect(welcomeText).toBe(false)
-})
diff --git a/electron/tests/navigation.e2e.spec.ts b/electron/tests/navigation.e2e.spec.ts
index 2f4f7b767..2066fa60a 100644
--- a/electron/tests/navigation.e2e.spec.ts
+++ b/electron/tests/navigation.e2e.spec.ts
@@ -9,6 +9,7 @@ import {
let electronApp: ElectronApplication
let page: Page
+const TIMEOUT: number = parseInt(process.env.TEST_TIMEOUT || '300000')
test.beforeAll(async () => {
process.env.CI = 'e2e'
@@ -26,7 +27,9 @@ test.beforeAll(async () => {
})
await stubDialog(electronApp, 'showMessageBox', { response: 1 })
- page = await electronApp.firstWindow()
+ page = await electronApp.firstWindow({
+ timeout: TIMEOUT,
+ })
})
test.afterAll(async () => {
@@ -35,20 +38,20 @@ test.afterAll(async () => {
})
test('renders left navigation panel', async () => {
- // Chat section should be there
- const chatSection = await page.getByTestId('Chat').first().isVisible()
- expect(chatSection).toBe(false)
-
- // Home actions
- /* Disable unstable feature tests
- ** const botBtn = await page.getByTestId("Bot").first().isEnabled();
- ** Enable back when it is whitelisted
- */
-
const systemMonitorBtn = await page
.getByTestId('System Monitor')
.first()
- .isEnabled()
- const settingsBtn = await page.getByTestId('Settings').first().isEnabled()
+ .isEnabled({
+ timeout: TIMEOUT,
+ })
+ const settingsBtn = await page
+ .getByTestId('Thread')
+ .first()
+ .isEnabled({ timeout: TIMEOUT })
expect([systemMonitorBtn, settingsBtn].filter((e) => !e).length).toBe(0)
+ // Chat section should be there
+ const apiServer = await page.getByTestId('Local API Server').first()
+ expect(apiServer).toBeVisible({
+ timeout: TIMEOUT,
+ })
})
diff --git a/electron/tests/settings.e2e.spec.ts b/electron/tests/settings.e2e.spec.ts
index 798504c70..765c3cba7 100644
--- a/electron/tests/settings.e2e.spec.ts
+++ b/electron/tests/settings.e2e.spec.ts
@@ -9,6 +9,7 @@ import {
let electronApp: ElectronApplication
let page: Page
+const TIMEOUT: number = parseInt(process.env.TEST_TIMEOUT || '300000')
test.beforeAll(async () => {
process.env.CI = 'e2e'
@@ -26,7 +27,9 @@ test.beforeAll(async () => {
})
await stubDialog(electronApp, 'showMessageBox', { response: 1 })
- page = await electronApp.firstWindow()
+ page = await electronApp.firstWindow({
+ timeout: TIMEOUT,
+ })
})
test.afterAll(async () => {
@@ -35,6 +38,7 @@ test.afterAll(async () => {
})
test('shows settings', async () => {
- await page.getByTestId('Settings').first().click()
- await page.getByTestId('testid-setting-description').isVisible()
+ await page.getByTestId('Settings').first().click({ timeout: TIMEOUT })
+ const settingDescription = page.getByTestId('testid-setting-description')
+ expect(settingDescription).toBeVisible({ timeout: TIMEOUT })
})
diff --git a/electron/tests/system-monitor.e2e.spec.ts b/electron/tests/system-monitor.e2e.spec.ts
deleted file mode 100644
index 747a8ae18..000000000
--- a/electron/tests/system-monitor.e2e.spec.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { _electron as electron } from 'playwright'
-import { ElectronApplication, Page, expect, test } from '@playwright/test'
-
-import {
- findLatestBuild,
- parseElectronApp,
- stubDialog,
-} from 'electron-playwright-helpers'
-
-let electronApp: ElectronApplication
-let page: Page
-
-test.beforeAll(async () => {
- process.env.CI = 'e2e'
-
- const latestBuild = findLatestBuild('dist')
- expect(latestBuild).toBeTruthy()
-
- // parse the packaged Electron app and find paths and other info
- const appInfo = parseElectronApp(latestBuild)
- expect(appInfo).toBeTruthy()
-
- electronApp = await electron.launch({
- args: [appInfo.main], // main file from package.json
- executablePath: appInfo.executable, // path to the Electron executable
- })
- await stubDialog(electronApp, 'showMessageBox', { response: 1 })
-
- page = await electronApp.firstWindow()
-})
-
-test.afterAll(async () => {
- await electronApp.close()
- await page.close()
-})
-
-test('shows system monitor', async () => {
- await page.getByTestId('System Monitor').first().click()
- await page.getByTestId('testid-system-monitor').isVisible()
- // More test cases here...
-})
diff --git a/web/screens/ExploreModels/index.tsx b/web/screens/ExploreModels/index.tsx
index d988fcafc..398b2db08 100644
--- a/web/screens/ExploreModels/index.tsx
+++ b/web/screens/ExploreModels/index.tsx
@@ -52,9 +52,12 @@ const ExploreModelsScreen = () => {
if (loading) return