Guard expanded backup evidence across workload polling

Issue #1869 reports views resetting during refresh. Exercise the mounted backup coverage view through three replacement workload snapshots so losing expanded restore evidence is caught before release. Confirm each refreshed workload name renders to exclude stale-state false positives.

Contract-Neutral: regression coverage only; no runtime or API changes.

Change-source: pulse-maintainer
This commit is contained in:
pulse-triage[bot]
2026-09-05 01:06:14 +01:00
parent e2e2990550
commit ddea7cd0bf
@@ -1,6 +1,6 @@
import { cleanup, fireEvent, render, screen, waitFor } from '@solidjs/testing-library';
import { Route, Router } from '@solidjs/router';
import type { JSX } from 'solid-js';
import { createSignal, type JSX } from 'solid-js';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { ProxmoxBackupsTable } from '../ProxmoxBackupsTable';
@@ -495,6 +495,31 @@ describe('ProxmoxBackupsTable', () => {
expect(screen.getAllByText('Snapshot').length).toBeGreaterThan(0);
});
it('keeps coverage evidence expanded across repeated workload snapshots', async () => {
mockBackupAPIs();
const [workloads, setWorkloads] = createSignal<readonly Resource[]>([workloadResource]);
renderInRouter(() => (
<ProxmoxBackupsTable emptyIcon={<span />} workloads={workloads()} />
));
await screen.findAllByText('pbs-docker');
await fireEvent.click(screen.getByRole('link', { name: /coverage/i }));
await fireEvent.click(screen.getByRole('button', { name: /expand details for pbs-docker/i }));
for (let snapshot = 1; snapshot <= 3; snapshot += 1) {
const name = `pbs-docker-snapshot-${snapshot}`;
setWorkloads([{ ...workloadResource, name, displayName: name }]);
// Assert the new snapshot reached the rendered table, rather than merely
// checking that a stale expanded row survived.
await screen.findAllByText(name);
expect(screen.getByRole('columnheader', { name: /posture/i })).toBeInTheDocument();
expect(screen.getByText('Restore evidence')).toBeInTheDocument();
expect(screen.getAllByText('PVE file').length).toBeGreaterThan(0);
expect(screen.getAllByText('Snapshot').length).toBeGreaterThan(0);
}
});
it('filters the backup feed by search term', async () => {
mockBackupAPIs();