companion-student-names.test.mjs 1.1 KB

123456789101112
  1. import {test} from 'node:test';
  2. import assert from 'node:assert/strict';
  3. import {readFileSync} from 'node:fs';
  4. import {runInNewContext} from 'node:vm';
  5. import {PGlite} from '@electric-sql/pglite';
  6. test('排课学员姓名跳过空白字段,兼容旧昵称、预约标题和缺失资料',async()=>{
  7. const expression=runInNewContext(readFileSync(new URL('../cloud/mobile-teaching.js',import.meta.url),'utf8')+';companionStudentNameSql()');
  8. const db=new PGlite();try{
  9. const rows=[['小徐','','{}','其他(60分钟练习)','login','小徐'],['',' ','{"HoneyName":"花花"}','其他(60分钟练习)','login','花花'],['','','{}','张雅茜(60分钟练习)','login','张雅茜'],[null,null,'{}','',null,'学员 213']];
  10. for(const [realName,nickname,legacy,title,username,expected]of rows){const result=await db.query(`SELECT ${expression} AS name FROM (SELECT $1::text "realName",$2::text nickname,$3::jsonb "legacyUserData",$5::text username) u CROSS JOIN (SELECT $4::text title) c CROSS JOIN (SELECT '213'::text szyh) a`,[realName,nickname,legacy,title,username]);assert.equal(result.rows[0].name,expected);}
  11. }finally{await db.close();}
  12. });