Software projects mount only bootstrap/delivery keys and skip the medical seven-template clone. SWBOOT-10 stays a fail-closed stub. Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
beginCreateProjectSubmit,
|
|
createProjectSubmitButtonLabel,
|
|
endCreateProjectSubmit,
|
|
resolveCreateProjectSubmitPhase,
|
|
shouldBlockCreateProjectClose,
|
|
shouldCloneMedicalTemplates,
|
|
} from './createProjectSubmitGuard';
|
|
|
|
test('beginCreateProjectSubmit rejects concurrent second entry until end', async () => {
|
|
const lock = { current: false };
|
|
let entered = 0;
|
|
let creates = 0;
|
|
|
|
const run = async () => {
|
|
if (!beginCreateProjectSubmit(lock)) return;
|
|
entered += 1;
|
|
try {
|
|
creates += 1;
|
|
await new Promise((r) => setTimeout(r, 30));
|
|
} finally {
|
|
endCreateProjectSubmit(lock);
|
|
}
|
|
};
|
|
|
|
await Promise.all([run(), run(), run()]);
|
|
assert.equal(entered, 1);
|
|
assert.equal(creates, 1);
|
|
assert.equal(lock.current, false);
|
|
|
|
// 失败/结束后允许串行重试
|
|
assert.equal(beginCreateProjectSubmit(lock), true);
|
|
endCreateProjectSubmit(lock);
|
|
assert.equal(lock.current, false);
|
|
});
|
|
|
|
test('resolveCreateProjectSubmitPhase uses bootstrap to choose syncing label', () => {
|
|
assert.equal(resolveCreateProjectSubmitPhase(null), 'creating');
|
|
assert.equal(resolveCreateProjectSubmitPhase(0), 'creating');
|
|
assert.equal(resolveCreateProjectSubmitPhase(6071), 'syncing_members');
|
|
});
|
|
|
|
test('createProjectSubmitButtonLabel and close block while submitting', () => {
|
|
assert.equal(createProjectSubmitButtonLabel(false, null), '确认立项并创建会话');
|
|
assert.equal(createProjectSubmitButtonLabel(true, 'creating'), '立项中');
|
|
assert.equal(createProjectSubmitButtonLabel(true, 'syncing_members'), '同步成员中');
|
|
assert.equal(shouldBlockCreateProjectClose(true), true);
|
|
assert.equal(shouldBlockCreateProjectClose(false), false);
|
|
});
|
|
|
|
test('shouldCloneMedicalTemplates skips the 7-pack for software domain', () => {
|
|
assert.equal(shouldCloneMedicalTemplates('non_medical_software'), false);
|
|
assert.equal(shouldCloneMedicalTemplates('medical_device'), true);
|
|
assert.equal(shouldCloneMedicalTemplates(undefined), true);
|
|
});
|