account-session-identity-deploy.test.mjs 1.6 KB

1234567891011121314151617181920212223
  1. import test from 'node:test';
  2. import assert from 'node:assert/strict';
  3. import fs from 'node:fs';
  4. import {sessionIdentityFunction, deployAccountSessionIdentity} from '../../scripts/deploy-account-session-identity.mjs';
  5. const prior = fs.readFileSync(new URL('../../deploy/account-binding-short-links-20261112/previous-account-binding.mjs', import.meta.url), 'utf8').replaceAll('\r\n', '\n');
  6. test('开课补丁仅替换绑定解析与开课块,保存、账号确认和外围代码保持原字节', () => {
  7. const start=prior.indexOf(' async function resolve(ownerId, key, account'), end=prior.indexOf(' const originalSave =',start);
  8. const prefix=prior.slice(0,start),suffix=prior.slice(end);
  9. const output=sessionIdentityFunction(prior.replace(/^import .*;\n/gm,'').replace(/^export /gm,''));
  10. assert.ok(output.startsWith(prefix.replace(/^import .*;\n/gm,'').replace(/^export /gm,'')));
  11. assert.ok(output.endsWith(suffix));
  12. assert.ok(output.includes('allowMissingTenant: true'));
  13. assert.ok(output.includes('accountId: p.participant.account.accountId ?? b.platformUserId'));
  14. assert.throws(()=>sessionIdentityFunction(''),/BLOCK_MISMATCH/);
  15. });
  16. test('未知线上版本阻止开课函数补丁,不发生远程写入', async () => {
  17. const calls=[];
  18. const request=async(method,route)=>{calls.push({method,route});return{name:'ksfStartWorkshopSession',path:'/ksfStartWorkshopSession',code:'unknown-version'};};
  19. await assert.rejects(()=>deployAccountSessionIdentity({request,apply:true}),/UNKNOWN_SESSION_IDENTITY_FUNCTION_VERSION/);
  20. assert.deepEqual(calls.map(row=>row.method),['GET']);
  21. });