fix: stabilize MindSpace local workflows

Signed-off-by: john <cynell@139.com>
This commit is contained in:
john
2026-07-12 08:12:15 +08:00
parent 32fb2cdeaf
commit a3f669d4e7
9 changed files with 107 additions and 23 deletions
+8 -6
View File
@@ -6,6 +6,7 @@ import { USER_COOKIE } from '../user-auth.mjs';
import { PUBLISH_ROOT_DIR } from '../user-publish.mjs';
const repoRoot = path.join(path.dirname(fileURLToPath(import.meta.url)), '..');
const scenarioH5Root = path.resolve(process.env.MEMIND_SCENARIO_H5_ROOT ?? repoRoot);
export function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
@@ -246,7 +247,7 @@ async function listPublicHtmlFiles(publishDir) {
}
export async function snapshotPublicHtml(publishKey) {
const publishDir = path.join(repoRoot, PUBLISH_ROOT_DIR, publishKey);
const publishDir = path.join(scenarioH5Root, PUBLISH_ROOT_DIR, publishKey);
return listPublicHtmlFiles(publishDir);
}
@@ -304,7 +305,7 @@ export async function verifyPageAccess({
let pageUrl = links.find((url) => /\/MindSpace\/.+\.html/i.test(url)) ?? null;
if (!pageUrl && publishKey) {
const htmlAfter = await listPublicHtmlFiles(path.join(repoRoot, PUBLISH_ROOT_DIR, publishKey));
const htmlAfter = await listPublicHtmlFiles(path.join(scenarioH5Root, PUBLISH_ROOT_DIR, publishKey));
const beforeSet = new Set(htmlBefore.map((item) => item.fullPath));
const fresh = htmlAfter
.filter((item) => !beforeSet.has(item.fullPath))
@@ -359,7 +360,7 @@ export async function verifySurveyDelivery({
expect = {},
reporter,
}) {
const publishDir = path.join(repoRoot, PUBLISH_ROOT_DIR, publishKey);
const publishDir = path.join(scenarioH5Root, PUBLISH_ROOT_DIR, publishKey);
const publicDir = path.join(publishDir, 'public');
const policyDir = path.join(publishDir, '.mindspace', 'page-data-policies');
const sqlitePath = path.join(publishDir, '.mindspace', 'private-data.sqlite');
@@ -469,7 +470,7 @@ async function readJsonIfExists(filePath) {
}
async function findPublicSurveyPolicy(publishKey, datasetName) {
const policyDir = path.join(repoRoot, PUBLISH_ROOT_DIR, publishKey, '.mindspace', 'page-data-policies');
const policyDir = path.join(scenarioH5Root, PUBLISH_ROOT_DIR, publishKey, '.mindspace', 'page-data-policies');
let entries = [];
try {
entries = await fs.readdir(policyDir);
@@ -493,7 +494,7 @@ export async function verifyChildrenHobbyDietSurvey({
testInsert = true,
spec = CHILDREN_HOBBY_DIET_SURVEY,
} = {}) {
const publishDir = path.join(repoRoot, PUBLISH_ROOT_DIR, publishKey);
const publishDir = path.join(scenarioH5Root, PUBLISH_ROOT_DIR, publishKey);
const publicDir = path.join(publishDir, 'public');
const sqlitePath = path.join(publishDir, '.mindspace', 'private-data.sqlite');
let ok = true;
@@ -524,7 +525,8 @@ export async function verifyChildrenHobbyDietSurvey({
} else {
reporter.pass('问卷提交字段', `${spec.dataset}.${spec.dietField}`);
}
if (!adminHtml.includes('每日饮食') || !adminHtml.includes(spec.dietField)) {
const adminHasDietLabel = spec.dietKeywords.some((keyword) => adminHtml.includes(keyword));
if (!adminHasDietLabel || !adminHtml.includes(spec.dietField)) {
reporter.fail('后台饮食列', `未展示 ${spec.dietField}`);
ok = false;
} else {