Files
dockhand-upstream/tests/repo-predicates.test.ts
T

58 lines
2.5 KiB
TypeScript

/**
* Unit tests for the shared repo/environment predicates
* (src/lib/shared/repo-predicates.ts). Consolidates the copies five call sites
* used to hand-inline. #1316: a local-path repo on a remote/direct env is no
* longer blocked (the backup helper self-checks at run time); the predicate is
* now advisory-only for the UI hint.
*/
import { describe, test, expect } from 'bun:test';
import { isLocalRepo, isRemoteEnvironment, localRepoNeedsSameHost } from '../src/lib/shared/repo-predicates';
describe('isLocalRepo', () => {
test('absolute and relative filesystem paths are local', () => {
expect(isLocalRepo('/mnt/nas/backups')).toBe(true);
expect(isLocalRepo('./data/repo')).toBe(true);
});
test('cloud / rest backends are not local', () => {
expect(isLocalRepo('s3:s3.amazonaws.com/bucket')).toBe(false);
expect(isLocalRepo('rest:http://host:8000/')).toBe(false);
expect(isLocalRepo('b2:bucket:path')).toBe(false);
});
});
describe('isRemoteEnvironment', () => {
test('hawser envs are remote', () => {
expect(isRemoteEnvironment({ connectionType: 'hawser-standard' })).toBe(true);
expect(isRemoteEnvironment({ connectionType: 'hawser-edge' })).toBe(true);
});
test('direct-with-host is remote (this includes a socket-proxy env)', () => {
expect(isRemoteEnvironment({ connectionType: 'direct', host: '192.168.1.221' })).toBe(true);
});
test('socket env and empty env are local', () => {
expect(isRemoteEnvironment({ connectionType: 'socket' })).toBe(false);
expect(isRemoteEnvironment(undefined)).toBe(false);
expect(isRemoteEnvironment({ connectionType: 'direct', host: null })).toBe(false);
});
});
describe('localRepoNeedsSameHost (#1316 advisory)', () => {
const localDest = { repository: '/mnt/nas/backups' };
const cloudDest = { repository: 's3:s3.amazonaws.com/bucket' };
const socketEnv = { connectionType: 'socket' };
const proxyEnv = { connectionType: 'direct', host: '192.168.1.221' };
test('local repo + remote/proxy env => needs same host (advisory true)', () => {
expect(localRepoNeedsSameHost(localDest, proxyEnv)).toBe(true);
});
test('local repo + socket env => fine (helper runs on Dockhand host)', () => {
expect(localRepoNeedsSameHost(localDest, socketEnv)).toBe(false);
});
test('cloud repo => never needs same host', () => {
expect(localRepoNeedsSameHost(cloudDest, proxyEnv)).toBe(false);
expect(localRepoNeedsSameHost(cloudDest, socketEnv)).toBe(false);
});
test('no env (undefined) => not flagged', () => {
expect(localRepoNeedsSameHost(localDest, undefined)).toBe(false);
});
});