test(calculate-version): 整併單元測試至 app/test 並移除無法被執行的重複測試目錄
CI / AI Code Review (pull_request) Successful in 38s
CI / AI Code Review (pull_request) Successful in 38s
app/package.json 的 npm test(node --test,cwd 為 app/)只會探索 app/test/, repo 根目錄另一份 test/ 中的 main 整合測試(index.test.js)因此從未被執行。 將 config/index/releases/version 收斂至 app/test/(修正 require 路徑), 保留 output 測試,移除重複且無法執行的 repo 根 test/。現 app/test/ 共 34 筆測試皆可執行。
This commit is contained in:
+42
-58
@@ -1,7 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
const { test } = require('node:test');
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
|
||||
const {
|
||||
compareVersionArrays,
|
||||
parseStableVersions,
|
||||
@@ -11,91 +12,74 @@ const {
|
||||
calculateVersion,
|
||||
} = require('../version');
|
||||
|
||||
test('compareVersionArrays 逐區段數值比較,較短者視為較小', () => {
|
||||
assert.ok(compareVersionArrays([1, 10, 0], [1, 9, 0]) > 0);
|
||||
// 便於建構測試資料的小工具
|
||||
const rel = (tag) => ({ tag_name: tag });
|
||||
|
||||
test('compareVersionArrays 逐區段比較且較短者較小', () => {
|
||||
assert.ok(compareVersionArrays([1, 10], [1, 2, 3]) > 0);
|
||||
assert.ok(compareVersionArrays([1, 2], [1, 2, 0]) < 0);
|
||||
assert.equal(compareVersionArrays([1, 2, 3], [1, 2, 3]), 0);
|
||||
assert.ok(compareVersionArrays([2, 0, 0], [1, 9, 9]) > 0);
|
||||
});
|
||||
|
||||
test('parseStableVersions 排除 beta、去除前綴 v 並驗證數字格式', () => {
|
||||
test('parseStableVersions 排除 beta 與非法 tag 並去除 v 前綴', () => {
|
||||
const releases = [
|
||||
{ tag_name: 'v1.2.3' },
|
||||
{ tag_name: '2.0.0' },
|
||||
{ tag_name: 'v1.3.0-beta.1' },
|
||||
{ tag_name: 'nightly' },
|
||||
{ tag_name: null },
|
||||
null,
|
||||
rel('v1.2.3'),
|
||||
rel('2.0.0'),
|
||||
rel('v1.0.0-beta.1'),
|
||||
rel('latest'),
|
||||
{ name: '沒有 tag_name' },
|
||||
];
|
||||
|
||||
assert.deepEqual(parseStableVersions(releases), [[1, 2, 3], [2, 0, 0]]);
|
||||
});
|
||||
|
||||
test('parseStableVersions 對非陣列回傳空陣列', () => {
|
||||
assert.deepEqual(parseStableVersions(null), []);
|
||||
assert.deepEqual(parseStableVersions(undefined), []);
|
||||
});
|
||||
|
||||
test('latestStableVersion 在無資料時回傳 0.0.0', () => {
|
||||
test('latestStableVersion 無資料時回傳 0.0.0', () => {
|
||||
assert.equal(latestStableVersion([]), '0.0.0');
|
||||
assert.equal(latestStableVersion([{ tag_name: 'v1.0.0-beta.1' }]), '0.0.0');
|
||||
assert.equal(latestStableVersion(null), '0.0.0');
|
||||
});
|
||||
|
||||
test('latestStableVersion 取最新的穩定版(含跨區段比較)', () => {
|
||||
assert.equal(latestStableVersion([
|
||||
{ tag_name: 'v1.9.0' },
|
||||
{ tag_name: 'v1.10.0' },
|
||||
{ tag_name: 'v1.2.3' },
|
||||
]), '1.10.0');
|
||||
test('latestStableVersion 取出最大穩定版', () => {
|
||||
const releases = [rel('v1.2.3'), rel('v1.9.9'), rel('v1.2.9'), rel('v0.5.0-beta.2')];
|
||||
assert.equal(latestStableVersion(releases), '1.9.9');
|
||||
});
|
||||
|
||||
test('nextReleaseVersion 對 patch 進位', () => {
|
||||
test('nextReleaseVersion patch 進位', () => {
|
||||
assert.equal(nextReleaseVersion('0.0.0'), '0.0.1');
|
||||
assert.equal(nextReleaseVersion('1.2.3'), '1.2.4');
|
||||
});
|
||||
|
||||
test('nextReleaseVersion 在 patch 達 10 時進位至 minor', () => {
|
||||
test('nextReleaseVersion patch 達 10 進位至 minor', () => {
|
||||
assert.equal(nextReleaseVersion('1.2.9'), '1.3.0');
|
||||
});
|
||||
|
||||
test('nextReleaseVersion 在 minor 也達 10 時進位至 major', () => {
|
||||
test('nextReleaseVersion minor 達 10 進位至 major', () => {
|
||||
assert.equal(nextReleaseVersion('1.9.9'), '2.0.0');
|
||||
});
|
||||
|
||||
test('nextBetaNumber 在查無對應 beta 時回傳 1', () => {
|
||||
assert.equal(nextBetaNumber([], '1.2.4'), 1);
|
||||
assert.equal(nextBetaNumber([{ tag_name: 'v9.9.9-beta.5' }], '1.2.4'), 1);
|
||||
assert.equal(nextBetaNumber(null, '1.2.4'), 1);
|
||||
test('nextBetaNumber 無對應 beta 時回傳 1', () => {
|
||||
assert.equal(nextBetaNumber([], '0.0.1'), 1);
|
||||
assert.equal(nextBetaNumber([rel('v0.0.1')], '0.0.1'), 1);
|
||||
});
|
||||
|
||||
test('nextBetaNumber 取對應 beta 流水號最大值 + 1', () => {
|
||||
const releases = [
|
||||
{ tag_name: 'v1.2.4-beta.1' },
|
||||
{ tag_name: 'v1.2.4-beta.3' },
|
||||
{ tag_name: 'v1.2.4-beta.2' },
|
||||
{ tag_name: 'v1.2.5-beta.9' },
|
||||
];
|
||||
assert.equal(nextBetaNumber(releases, '1.2.4'), 4);
|
||||
test('nextBetaNumber 取最大流水號加一', () => {
|
||||
const releases = [rel('v1.3.0-beta.1'), rel('v1.3.0-beta.3'), rel('v1.3.0-beta.2')];
|
||||
assert.equal(nextBetaNumber(releases, '1.3.0'), 4);
|
||||
});
|
||||
|
||||
test('calculateVersion 計算下一個穩定版', () => {
|
||||
assert.deepEqual(
|
||||
calculateVersion([{ tag_name: 'v1.2.3' }], false),
|
||||
{ latest: '1.2.3', version: '1.2.4' },
|
||||
);
|
||||
});
|
||||
|
||||
test('calculateVersion 計算下一個 beta 版', () => {
|
||||
const releases = [
|
||||
{ tag_name: 'v1.2.3' },
|
||||
{ tag_name: 'v1.2.4-beta.2' },
|
||||
];
|
||||
assert.deepEqual(
|
||||
calculateVersion(releases, true),
|
||||
{ latest: '1.2.3', version: '1.2.4-beta.3' },
|
||||
);
|
||||
});
|
||||
|
||||
test('calculateVersion 在無任何 release 時的預設值', () => {
|
||||
test('calculateVersion 無 release 的穩定版', () => {
|
||||
assert.deepEqual(calculateVersion([], false), { latest: '0.0.0', version: '0.0.1' });
|
||||
});
|
||||
|
||||
test('calculateVersion 無 release 的 beta 版', () => {
|
||||
assert.deepEqual(calculateVersion([], true), { latest: '0.0.0', version: '0.0.1-beta.1' });
|
||||
});
|
||||
|
||||
test('calculateVersion 既有穩定版推下一個穩定版', () => {
|
||||
const releases = [rel('v1.2.3'), rel('v1.2.2')];
|
||||
assert.deepEqual(calculateVersion(releases, false), { latest: '1.2.3', version: '1.2.4' });
|
||||
});
|
||||
|
||||
test('calculateVersion 既有穩定版推下一個 beta 版', () => {
|
||||
const releases = [rel('v1.2.3'), rel('v1.2.4-beta.1')];
|
||||
assert.deepEqual(calculateVersion(releases, true), { latest: '1.2.3', version: '1.2.4-beta.2' });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user