const test=require('node:test'); const assert=require('node:assert/strict'); const path=require('node:path'); const fs=require('node:fs'); const createLoader=require('./load-module.cjs'); function setup(update) { let definition;const calls=[],toasts=[],tabs=[]; const api={updatePartnerProfile:async payload=>{calls.push(payload);return update(payload);}}; const load=createLoader({Page:value=>definition=value,wx:{getStorageSync:()=>1,showToast:value=>toasts.push(value)},console,Date}, {'../../utils/request':{api,getImageUrl:value=>value},'../../utils/page-cache':{withDataCache:page=>page}}); load(path.join(__dirname,'../pages/profile/profile.js')); let refreshes=0; const page={...definition,data:{...definition.data,hasPartner:true,partnerId:42,coupleId:2,partnerName:'TA原昵称',partnerDetail:'20岁',partnerGenderRaw:'female',partnerBirthday:'2006-01-01',tempLoveDate:'2025-07-03',loveStartDate:'2025-07-03',tempLoveStory:'原故事'},setData(value){Object.assign(this.data,value);},getTabBar:()=>({setHidden:value=>tabs.push(value)}),async loadData(){refreshes++;}}; return {page,calls,toasts,tabs,refreshes:()=>refreshes}; } test('partner card opens editing directly and saves the internal partner id with changed fields',async()=>{ const e=setup(async()=>({success:true}));e.page.showEditPartnerModal(); e.page.onEditPartnerNicknameInput({detail:{value:' 新昵称 '}});e.page.onEditPartnerGenderChange({detail:{value:0}}); await e.page.savePartnerProfile(); assert.equal(e.calls[0].partner_id,42);assert.equal(e.calls[0].nickname,'新昵称');assert.equal(e.calls[0].gender,'male');assert.equal(e.calls[0].birthday,'2006-01-01'); assert.equal(e.page.data.showEditPartnerModal,false);assert.equal(e.refreshes(),1);assert.deepEqual(e.tabs,[true,false]); const markup=fs.readFileSync(path.join(__dirname,'../pages/profile/profile.wxml'),'utf8'); assert.ok(markup.includes('class="j-relation-card" bindtap="showEditPartnerModal"'));assert.ok(!markup.includes('关系管理'));assert.ok(!markup.includes('编辑TA的资料 →')); }); test('failed partner save preserves editing, repeated save is blocked, and changed relationship cannot submit',async()=>{ let finish;const e=setup(()=>new Promise(resolve=>finish=resolve));e.page.showEditPartnerModal(); const pending=e.page.savePartnerProfile();await e.page.savePartnerProfile();e.page.hideEditPartnerModal(); assert.equal(e.calls.length,1);assert.equal(e.page.data.showEditPartnerModal,true); finish({success:false,error:'保存失败'});await pending; assert.equal(e.page.data.showEditPartnerModal,true);assert.equal(e.page.data.partnerSaving,false);assert.equal(e.refreshes(),0); e.page.data.partnerId=43;await e.page.savePartnerProfile();assert.equal(e.calls.length,1); });