Files
gitea-ci-library/tests/features/step_definitions/gitops-update.steps.js
T
moilanik 86e73d87d3
CI Feature / Load example-gitea-env.conf to pipeline env (push) Successful in 24s
acc-tests Cucumber test report
CI Feature / Cucumber tests (push) Failing after 1m10s
unit-tests Bats test report
CI Feature / Bats tests (push) Successful in 1m35s
CI Feature / Report Summary (push) Successful in 6s
gitops init
2026-06-21 15:44:31 +03:00

72 lines
2.7 KiB
JavaScript

const { execSync } = require('child_process');
const { When, Then } = require('@cucumber/cucumber');
const path = require('path');
const PROJECT_ROOT = path.resolve(__dirname, '..', '..', '..');
const MOCK_SCRIPT = path.join(PROJECT_ROOT, 'tests', 'helpers', 'mock-api.sh');
const GITOPS_SCRIPT = path.join(PROJECT_ROOT, 'scripts', 'gitops-update.sh');
function bash(cmd) {
try {
const out = execSync(`bash -c '${cmd}'`, {
cwd: PROJECT_ROOT,
encoding: 'utf-8',
stdio: ['pipe', 'pipe', 'pipe'],
});
return { status: 0, stdout: out };
} catch (e) {
return { status: e.status, stdout: e.stdout || '', stderr: e.stderr || '' };
}
}
function getFirstBody() {
return bash(`source "${MOCK_SCRIPT}" && _get_request_file && mock_get_first_request_body`).stdout.trim();
}
function getFirstPath() {
return bash(`source "${MOCK_SCRIPT}" && _get_request_file && mock_get_first_request_path`).stdout.trim();
}
function getLastBody() {
return bash(`source "${MOCK_SCRIPT}" && _get_request_file && mock_get_request_body`).stdout.trim();
}
function getLastPath() {
return bash(`source "${MOCK_SCRIPT}" && _get_request_file && mock_get_request_path`).stdout.trim();
}
When('a build completes successfully and dispatches a GitOps update', function () {
const env = [
'INPUT_FILE=dev/Chart.yaml',
'YQ_TPL=\'(.version) = "{{VERSION}}"\'',
'VERSION=0.2.3',
'SOURCE_REPO=niko/app',
'SOURCE_COMMIT=abc123def456',
'GITOPS_REPO=niko/app-gitops',
'GITEA_API_URL=http://localhost:18080',
'GITEA_TOKEN=test-token',
].join(' ');
const r = bash(`${env} bash "${GITOPS_SCRIPT}"`);
if (r.status !== 0) throw new Error(`Expected exit 0, got ${r.status}: ${r.stderr}`);
});
Then('the GitOps repo has a new commit with the updated version', function () {
const out = bash(`git -C /tmp log --oneline -1 2>/dev/null || echo "no-git-log"`);
});
Then('the code repo shows a gitops status link to the GitOps commit', function () {
const body = getFirstBody();
if (!body.includes('"state":"success"')) throw new Error('Expected success status');
if (!body.includes('"context":"gitops/niko/app"')) throw new Error('Expected gitops context');
const pathStr = getFirstPath();
if (!pathStr.includes('/repos/niko/app/statuses/')) throw new Error('Expected source repo status path');
});
Then('the GitOps repo shows a source status link to the code commit', function () {
const body = getLastBody();
if (!body.includes('"state":"success"')) throw new Error('Expected success status');
if (!body.includes('"context":"source/niko/app"')) throw new Error('Expected source context');
const pathStr = getLastPath();
if (!pathStr.includes('/repos/niko/app-gitops/statuses/')) throw new Error('Expected gitops repo status path');
});