feat: pool health score widget with trend indicators and suggestions - #245
Open
benzy018 wants to merge 2 commits into
Open
feat: pool health score widget with trend indicators and suggestions#245benzy018 wants to merge 2 commits into
benzy018 wants to merge 2 commits into
Annotations
10 errors, 1 warning, and 1 notice
|
Run E2E tests:
frontend/e2e/responsive.spec.ts#L63
5) [chromium] › e2e/responsive.spec.ts:57:7 › dashboard renders without overflow at mobile (375px)
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText(/Responsive Pool/i)
Expected: visible
Error: strict mode violation: getByText(/Responsive Pool/i) resolved to 2 elements:
1) <p title="Responsive Pool" class="font-semibold text-sm truncate">Responsive Pool</p> aka getByTitle('Responsive Pool')
2) <h3 class="text-xl font-semibold mb-1">Responsive Pool</h3> aka getByRole('heading', { name: 'Responsive Pool' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText(/Responsive Pool/i)
61 | await poolsResponse
62 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 63 | await expect(page.getByText(/Responsive Pool/i)).toBeVisible()
| ^
64 | await expectNoHorizontalOverflow(page)
65 | })
66 |
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/responsive.spec.ts:63:54
|
|
Run E2E tests:
frontend/e2e/responsive.spec.ts#L63
5) [chromium] › e2e/responsive.spec.ts:57:7 › dashboard renders without overflow at mobile (375px)
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText(/Responsive Pool/i)
Expected: visible
Error: strict mode violation: getByText(/Responsive Pool/i) resolved to 2 elements:
1) <p title="Responsive Pool" class="font-semibold text-sm truncate">Responsive Pool</p> aka getByTitle('Responsive Pool')
2) <h3 class="text-xl font-semibold mb-1">Responsive Pool</h3> aka getByRole('heading', { name: 'Responsive Pool' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText(/Responsive Pool/i)
61 | await poolsResponse
62 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 63 | await expect(page.getByText(/Responsive Pool/i)).toBeVisible()
| ^
64 | await expectNoHorizontalOverflow(page)
65 | })
66 |
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/responsive.spec.ts:63:54
|
|
Run E2E tests:
frontend/e2e/create-pool.spec.ts#L86
4) [chromium] › e2e/create-pool.spec.ts:57:7 › creates a flexible pool and surfaces it everywhere
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText('E2E Flexible Vault')
Expected: visible
Error: strict mode violation: getByText('E2E Flexible Vault') resolved to 2 elements:
1) <p title="E2E Flexible Vault" class="font-semibold text-sm truncate">E2E Flexible Vault</p> aka getByTitle('E2E Flexible Vault')
2) <h3 class="text-xl font-semibold mb-1">E2E Flexible Vault</h3> aka getByRole('heading', { name: 'E2E Flexible Vault' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText('E2E Flexible Vault')
84 | await poolsResponse
85 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 86 | await expect(page.getByText(c.name)).toBeVisible()
| ^
87 | })
88 | }
89 |
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/create-pool.spec.ts:86:42
|
|
Run E2E tests:
frontend/e2e/create-pool.spec.ts#L86
4) [chromium] › e2e/create-pool.spec.ts:57:7 › creates a flexible pool and surfaces it everywhere
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText('E2E Flexible Vault')
Expected: visible
Error: strict mode violation: getByText('E2E Flexible Vault') resolved to 2 elements:
1) <p title="E2E Flexible Vault" class="font-semibold text-sm truncate">E2E Flexible Vault</p> aka getByTitle('E2E Flexible Vault')
2) <h3 class="text-xl font-semibold mb-1">E2E Flexible Vault</h3> aka getByRole('heading', { name: 'E2E Flexible Vault' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText('E2E Flexible Vault')
84 | await poolsResponse
85 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 86 | await expect(page.getByText(c.name)).toBeVisible()
| ^
87 | })
88 | }
89 |
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/create-pool.spec.ts:86:42
|
|
Run E2E tests:
frontend/e2e/dashboard-tabs.spec.ts#L46
3) [chromium] › e2e/dashboard-tabs.spec.ts:40:5 › My Groups tab is default and shows pool list ───
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText(/Tab Pool/i)
Expected: visible
Error: strict mode violation: getByText(/Tab Pool/i) resolved to 2 elements:
1) <p title="Tab Pool" class="font-semibold text-sm truncate">Tab Pool</p> aka getByTitle('Tab Pool')
2) <h3 class="text-xl font-semibold mb-1">Tab Pool</h3> aka getByRole('heading', { name: 'Tab Pool' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText(/Tab Pool/i)
44 |
45 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 46 | await expect(page.getByText(/Tab Pool/i)).toBeVisible()
| ^
47 | })
48 |
49 | test("Explore tab shows explore content", async ({ page }) => {
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/dashboard-tabs.spec.ts:46:45
|
|
Run E2E tests:
frontend/e2e/dashboard-tabs.spec.ts#L46
3) [chromium] › e2e/dashboard-tabs.spec.ts:40:5 › My Groups tab is default and shows pool list ───
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText(/Tab Pool/i)
Expected: visible
Error: strict mode violation: getByText(/Tab Pool/i) resolved to 2 elements:
1) <p title="Tab Pool" class="font-semibold text-sm truncate">Tab Pool</p> aka getByTitle('Tab Pool')
2) <h3 class="text-xl font-semibold mb-1">Tab Pool</h3> aka getByRole('heading', { name: 'Tab Pool' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText(/Tab Pool/i)
44 |
45 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 46 | await expect(page.getByText(/Tab Pool/i)).toBeVisible()
| ^
47 | })
48 |
49 | test("Explore tab shows explore content", async ({ page }) => {
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/dashboard-tabs.spec.ts:46:45
|
|
Run E2E tests:
frontend/e2e/create-pool.spec.ts#L86
2) [chromium] › e2e/create-pool.spec.ts:57:7 › creates a rotational pool and surfaces it everywhere
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText('E2E Rotational Circle')
Expected: visible
Error: strict mode violation: getByText('E2E Rotational Circle') resolved to 2 elements:
1) <p title="E2E Rotational Circle" class="font-semibold text-sm truncate">E2E Rotational Circle</p> aka getByTitle('E2E Rotational Circle')
2) <h3 class="text-xl font-semibold mb-1">E2E Rotational Circle</h3> aka getByRole('heading', { name: 'E2E Rotational Circle' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText('E2E Rotational Circle')
84 | await poolsResponse
85 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 86 | await expect(page.getByText(c.name)).toBeVisible()
| ^
87 | })
88 | }
89 |
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/create-pool.spec.ts:86:42
|
|
Run E2E tests:
frontend/e2e/create-pool.spec.ts#L86
2) [chromium] › e2e/create-pool.spec.ts:57:7 › creates a rotational pool and surfaces it everywhere
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText('E2E Rotational Circle')
Expected: visible
Error: strict mode violation: getByText('E2E Rotational Circle') resolved to 2 elements:
1) <p title="E2E Rotational Circle" class="font-semibold text-sm truncate">E2E Rotational Circle</p> aka getByTitle('E2E Rotational Circle')
2) <h3 class="text-xl font-semibold mb-1">E2E Rotational Circle</h3> aka getByRole('heading', { name: 'E2E Rotational Circle' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText('E2E Rotational Circle')
84 | await poolsResponse
85 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 86 | await expect(page.getByText(c.name)).toBeVisible()
| ^
87 | })
88 | }
89 |
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/create-pool.spec.ts:86:42
|
|
Run E2E tests:
frontend/e2e/create-pool.spec.ts#L86
1) [chromium] › e2e/create-pool.spec.ts:57:7 › creates a target pool and surfaces it everywhere ──
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText('E2E Target Fund')
Expected: visible
Error: strict mode violation: getByText('E2E Target Fund') resolved to 2 elements:
1) <p title="E2E Target Fund" class="font-semibold text-sm truncate">E2E Target Fund</p> aka getByTitle('E2E Target Fund')
2) <h3 class="text-xl font-semibold mb-1">E2E Target Fund</h3> aka getByRole('heading', { name: 'E2E Target Fund' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText('E2E Target Fund')
84 | await poolsResponse
85 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 86 | await expect(page.getByText(c.name)).toBeVisible()
| ^
87 | })
88 | }
89 |
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/create-pool.spec.ts:86:42
|
|
Run E2E tests:
frontend/e2e/create-pool.spec.ts#L86
1) [chromium] › e2e/create-pool.spec.ts:57:7 › creates a target pool and surfaces it everywhere ──
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText('E2E Target Fund')
Expected: visible
Error: strict mode violation: getByText('E2E Target Fund') resolved to 2 elements:
1) <p title="E2E Target Fund" class="font-semibold text-sm truncate">E2E Target Fund</p> aka getByTitle('E2E Target Fund')
2) <h3 class="text-xl font-semibold mb-1">E2E Target Fund</h3> aka getByRole('heading', { name: 'E2E Target Fund' })
Call log:
- Expect "toBeVisible" with timeout 20000ms
- waiting for getByText('E2E Target Fund')
84 | await poolsResponse
85 | await expect(page.getByRole("heading", { name: /My Groups/i })).toBeVisible()
> 86 | await expect(page.getByText(c.name)).toBeVisible()
| ^
87 | })
88 | }
89 |
at /home/runner/work/Joint_Save/Joint_Save/frontend/e2e/create-pool.spec.ts:86:42
|
|
Complete job
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Run E2E tests
5 failed
[chromium] › e2e/create-pool.spec.ts:57:7 › creates a rotational pool and surfaces it everywhere
[chromium] › e2e/create-pool.spec.ts:57:7 › creates a target pool and surfaces it everywhere ───
[chromium] › e2e/create-pool.spec.ts:57:7 › creates a flexible pool and surfaces it everywhere ─
[chromium] › e2e/dashboard-tabs.spec.ts:40:5 › My Groups tab is default and shows pool list ────
[chromium] › e2e/responsive.spec.ts:57:7 › dashboard renders without overflow at mobile (375px)
1 flaky
[chromium] › e2e/responsive.spec.ts:57:7 › dashboard renders without overflow at desktop (1440px)
38 passed (1.9m)
|
background
wait
wait-all
cancel
parallel
Loading