Files
NetMesh/application/state/vaultSnapshotStore.test.ts

96 lines
2.9 KiB
TypeScript
Raw Permalink Normal View History

import assert from 'node:assert/strict';
import test from 'node:test';
import type { Host } from '../../domain/models.ts';
import {
EMPTY_VAULT_SNAPSHOT,
getVaultSnapshot,
getVaultSnapshotActions,
publishVaultSnapshot,
registerVaultSnapshotActions,
subscribeVaultSnapshot,
vaultSnapshotsEqual,
type VaultSnapshotActions,
} from './vaultSnapshotStore.ts';
function makeHost(id: string): Host {
return { id, label: id, hostname: `${id}.example`, username: 'root' } as Host;
}
test('vaultSnapshotStore notifies only when a field identity changes', () => {
const seen: number[] = [];
const unsubscribe = subscribeVaultSnapshot(() => {
seen.push(getVaultSnapshot().hosts.length);
});
const hosts = [makeHost('h1')];
const snapshot = { ...EMPTY_VAULT_SNAPSHOT, isVaultInitialized: true, hosts };
publishVaultSnapshot(snapshot);
assert.deepEqual(seen, [1]);
assert.equal(getVaultSnapshot().hosts, hosts);
assert.equal(getVaultSnapshot().isVaultInitialized, true);
// Same field identities in a fresh object must not wake subscribers.
publishVaultSnapshot({ ...snapshot });
assert.deepEqual(seen, [1]);
const moreHosts = [...hosts, makeHost('h2')];
publishVaultSnapshot({ ...snapshot, hosts: moreHosts });
assert.deepEqual(seen, [1, 2]);
unsubscribe();
publishVaultSnapshot(EMPTY_VAULT_SNAPSHOT);
assert.deepEqual(seen, [1, 2]);
});
test('vaultSnapshotsEqual compares every published field', () => {
assert.equal(vaultSnapshotsEqual(EMPTY_VAULT_SNAPSHOT, { ...EMPTY_VAULT_SNAPSHOT }), true);
assert.equal(
vaultSnapshotsEqual(EMPTY_VAULT_SNAPSHOT, { ...EMPTY_VAULT_SNAPSHOT, groupConfigs: [] }),
false,
);
assert.equal(
vaultSnapshotsEqual(EMPTY_VAULT_SNAPSHOT, {
...EMPTY_VAULT_SNAPSHOT,
isVaultInitialized: true,
}),
false,
);
});
test('vault actions register and unregister', () => {
assert.equal(getVaultSnapshotActions(), null);
const calls: string[] = [];
const noop = (() => {}) as never;
registerVaultSnapshotActions({
updateHosts: ((() => {
calls.push('hosts');
}) as unknown) as VaultSnapshotActions['updateHosts'],
updateKeys: noop,
importOrReuseKey: noop,
updateIdentities: noop,
updateProxyProfiles: noop,
updateSnippets: noop,
updateSnippetPackages: noop,
updateCustomGroups: noop,
updateKnownHosts: noop,
updateManagedSources: noop,
updateGroupConfigs: noop,
convertKnownHostToHost: noop,
readPersistedHosts: noop,
readPersistedManagedSources: noop,
commitPluginImporterData: noop,
commitVaultImportTransaction: noop,
commitVaultGroupMutation: noop,
updateHostDistro: noop,
updateHostLastConnected: noop,
addShellHistoryEntry: noop,
removeShellHistoryEntry: noop,
});
getVaultSnapshotActions()?.updateHosts([]);
assert.deepEqual(calls, ['hosts']);
registerVaultSnapshotActions(null);
assert.equal(getVaultSnapshotActions(), null);
});