CI / go-test (push) Canceled after 0s
CI / postgres-durable-first (push) Canceled after 0s
CI / codegen (push) Canceled after 0s
CI / govulncheck (push) Canceled after 0s
CI / race (push) Canceled after 0s
CI / fuzz-smoke (push) Canceled after 0s
CI / golangci (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CodeQL Advanced / Analyze (go) (push) Canceled after 0s
CodeQL Advanced / Analyze (actions) (push) Canceled after 0s
CodeQL Advanced / Analyze (javascript-typescript) (push) Canceled after 0s
Docs CI / build (push) Canceled after 0s
Docs Deploy (GitHub Pages) / build (push) Canceled after 0s
Release 3X-UI / build (386) (push) Canceled after 0s
Release 3X-UI / build (amd64) (push) Canceled after 0s
Release 3X-UI / build (arm64) (push) Canceled after 0s
Release 3X-UI / build (armv5) (push) Canceled after 0s
Release 3X-UI / build (armv6) (push) Canceled after 0s
Release 3X-UI / build (armv7) (push) Canceled after 0s
Release 3X-UI / build (s390x) (push) Canceled after 0s
Release 3X-UI / Build for Windows (amd64) (push) Canceled after 0s
Deploy Smoke Tests / noninteractive-install (ubuntu-24.04-arm) (push) Canceled after 0s
Deploy Smoke Tests / noninteractive-install (ubuntu-latest) (push) Canceled after 0s
Deploy Smoke Tests / release-tag-install (ubuntu-24.04-arm) (push) Canceled after 0s
Deploy Smoke Tests / release-tag-install (ubuntu-latest) (push) Canceled after 0s
Docs Deploy (GitHub Pages) / deploy (push) Canceled after 0s
Release 3X-UI / Publish rolling dev release (push) Canceled after 0s
70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import {
|
|
buildScriptCommand,
|
|
buildDockerRun,
|
|
buildDockerCompose,
|
|
type InstallOptions,
|
|
} from './install';
|
|
|
|
const base: InstallOptions = {
|
|
method: 'script',
|
|
version: '',
|
|
enableFail2ban: true,
|
|
panelPort: '',
|
|
webBasePath: '',
|
|
};
|
|
|
|
describe('buildScriptCommand', () => {
|
|
it('uses the master install.sh for the latest version', () => {
|
|
expect(buildScriptCommand(base)).toBe(
|
|
'bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)',
|
|
);
|
|
});
|
|
|
|
it('pins a specific version by passing the tag to master install.sh', () => {
|
|
const cmd = buildScriptCommand({ ...base, version: 'v3.4.1' });
|
|
expect(cmd).toBe(
|
|
'bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v3.4.1',
|
|
);
|
|
});
|
|
|
|
it('supports the rolling dev-latest build', () => {
|
|
const cmd = buildScriptCommand({ ...base, version: 'dev-latest' });
|
|
expect(cmd).toBe(
|
|
'bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) dev-latest',
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('buildDockerRun', () => {
|
|
it('reflects fail2ban, port, and base path options', () => {
|
|
const cmd = buildDockerRun({
|
|
...base,
|
|
enableFail2ban: false,
|
|
panelPort: '8443',
|
|
webBasePath: '/panel',
|
|
});
|
|
expect(cmd).toContain('XUI_ENABLE_FAIL2BAN=false');
|
|
expect(cmd).toContain('XUI_PORT=8443');
|
|
expect(cmd).toContain('XUI_INIT_WEB_BASE_PATH=/panel');
|
|
expect(cmd).toContain('ghcr.io/mhsanaei/3x-ui:latest');
|
|
expect(cmd).toContain('-v $PWD/db/:/etc/x-ui/');
|
|
});
|
|
|
|
it('omits unset port and path', () => {
|
|
const cmd = buildDockerRun(base);
|
|
expect(cmd).not.toContain('XUI_PORT');
|
|
expect(cmd).not.toContain('XUI_INIT_WEB_BASE_PATH');
|
|
});
|
|
});
|
|
|
|
describe('buildDockerCompose', () => {
|
|
it('produces valid-looking compose with the image and volumes', () => {
|
|
const yaml = buildDockerCompose({ ...base, panelPort: '2096' });
|
|
expect(yaml).toContain('image: ghcr.io/mhsanaei/3x-ui:latest');
|
|
expect(yaml).toContain('network_mode: host');
|
|
expect(yaml).toContain("XUI_PORT: '2096'");
|
|
expect(yaml).toContain('- ./db/:/etc/x-ui/');
|
|
});
|
|
});
|