const test=require('node:test'); const assert=require('node:assert/strict'); const path=require('node:path'); const createLoader=require('./load-module.cjs'); function load(wx,api) {return createLoader({wx,Date,Promise},{'./request':{api}})(path.join(__dirname,'../utils/user-location.js'));} test('current address uses live coordinates first and shares concurrent lookups',async()=>{ let reports=0;const {currentUserLocation}=load({getStorageSync:()=>1,getFuzzyLocation:o=>o.success({latitude:25,longitude:102})},{updateIpLocation:async data=>{reports++;assert.equal(data.lat,25);return {location:'云南省 昆明市 盘龙区'};}}); const [a,b]=await Promise.all([currentUserLocation(),currentUserLocation()]);assert.equal(a.location,'云南省 昆明市 盘龙区');assert.equal(b.location,a.location);assert.equal(reports,1);await currentUserLocation();assert.equal(reports,1); }); test('location permission failure falls back to current user, never partner',async()=>{ const {currentUserLocation}=load({getStorageSync:()=>2,getFuzzyLocation:o=>o.fail()},{updateIpLocation:async()=>{throw Error('offline');},coupleInfo:async()=>({partner1:{id:1,location:'对方地址'},partner2:{id:2,location:'我的地址'}})}); assert.equal((await currentUserLocation()).location,'我的地址'); }); test('switching users clears address cache and unavailable coordinates do not become an address',async()=>{ let uid=1;const {currentUserLocation}=load({getStorageSync:()=>uid},{updateIpLocation:async()=>({}),coupleInfo:async()=>({partner1:{id:uid,location:uid===1?'我的地址':'25.0,102.0'}})}); assert.equal((await currentUserLocation()).location,'我的地址');uid=2;assert.equal((await currentUserLocation()).location,''); });