69 行
2.1 KiB
JavaScript
69 行
2.1 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import { mkdtempSync, readFileSync, rmSync } from 'node:fs'
|
|
import { tmpdir } from 'node:os'
|
|
import path from 'node:path'
|
|
import test from 'node:test'
|
|
|
|
import { createAndroidReleaseIdentity } from './release-identity.mjs'
|
|
|
|
test('release identity increases for repeated builds with the same app version', () => {
|
|
const root = mkdtempSync(path.join(tmpdir(), 'xuqm-release-identity-'))
|
|
try {
|
|
const first = createAndroidReleaseIdentity({
|
|
projectRoot: root,
|
|
environment: {},
|
|
now: 1_800_000_000_000,
|
|
entropy: 'first',
|
|
})
|
|
const second = createAndroidReleaseIdentity({
|
|
projectRoot: root,
|
|
environment: {},
|
|
now: 1_800_000_000_000,
|
|
entropy: 'second',
|
|
})
|
|
assert.equal(second.versionCode, first.versionCode + 1)
|
|
assert.notEqual(second.buildId, first.buildId)
|
|
const cached = JSON.parse(
|
|
readFileSync(path.join(root, '.xuqm-cache', 'release-build.json'), 'utf8'),
|
|
)
|
|
assert.deepEqual({ versionCode: cached.versionCode, buildId: cached.buildId }, second)
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true })
|
|
}
|
|
})
|
|
|
|
test('release identity accepts explicit CI identity and validates its contract', () => {
|
|
const root = mkdtempSync(path.join(tmpdir(), 'xuqm-release-identity-ci-'))
|
|
try {
|
|
assert.deepEqual(
|
|
createAndroidReleaseIdentity({
|
|
projectRoot: root,
|
|
environment: {
|
|
XUQM_VERSION_CODE: '123456',
|
|
XUQM_BUILD_ID: 'jenkins-123456',
|
|
},
|
|
now: 1_800_000_000_000,
|
|
}),
|
|
{ versionCode: 123456, buildId: 'jenkins-123456' },
|
|
)
|
|
assert.throws(
|
|
() =>
|
|
createAndroidReleaseIdentity({
|
|
projectRoot: root,
|
|
environment: { XUQM_VERSION_CODE: 'invalid' },
|
|
}),
|
|
/XUQM_VERSION_CODE/,
|
|
)
|
|
assert.throws(
|
|
() =>
|
|
createAndroidReleaseIdentity({
|
|
projectRoot: root,
|
|
environment: { XUQM_BUILD_ID: 'contains whitespace' },
|
|
}),
|
|
/XUQM_BUILD_ID/,
|
|
)
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true })
|
|
}
|
|
})
|