ensure-test-company.js
2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* ensure-test-company.js —— 38 号文档 Phase 2 落地后,company.js / graph-run.js 的
* :companyId / :id 路由都会先查 company-service.js 的 companyService.get(cid)(判断
* "这家公司存不存在"),存在才轮到归属校验。company-service.js 的 DATA_DIR 是硬编码的
* `<repo>/data/companies`,无 env 覆盖口,且只认 company.json 这一份真相。
*
* 仓库里一批测试文件直接在 graph_runs/company_agents 等表里插一个虚构的 companyId
* (从没真的建过公司),这在 Phase 2 之前无所谓——company.js 那层从不检查。现在会被
* 挡在 router.param 那一关,404。这个 helper 补一份最小 company.json,让这类"只是需要
* 一个 companyId 字符串来做数据隔离"的测试继续成立,不代表要去验证公司归属本身
* (那是 company-service.test.js / route-auth-gate.test.js 的职责)。
*
* 幂等、同步、可重复调用。清理交给调用方自己的 afterAll(多数这类测试本来就有一次性
* 数据目录清理逻辑,顺手带上这个)。
*/
const fs = require('fs');
const path = require('path');
const COMPANIES_DIR = path.resolve(__dirname, '../../../data/companies');
/**
* @param {string} companyId
* @param {object} [opts]
* @param {number} [opts.ownerId] - 默认 -1,跟 jwt-auth.js 测试环境放行时用的
* TEST_BYPASS_USER.id 对齐,但其实无所谓——TEST_BYPASS_USER.role='admin',
* canAccessCompany 不看 ownerId。
*/
function ensureTestCompany(companyId, { ownerId = -1 } = {}) {
const dir = path.join(COMPANIES_DIR, companyId);
const fp = path.join(dir, 'company.json');
if (fs.existsSync(fp)) return;
fs.mkdirSync(dir, { recursive: true });
fs.writeFileSync(fp, JSON.stringify({ id: companyId, name: companyId, ownerId }));
}
/** 测试收尾用:删掉 ensureTestCompany 建出来的目录(连同调用方自己可能写进去的其它文件)。*/
function removeTestCompany(companyId) {
fs.rmSync(path.join(COMPANIES_DIR, companyId), { recursive: true, force: true });
}
module.exports = { ensureTestCompany, removeTestCompany };