Files
past-go/weapp/tests/user-location.test.cjs

18 lines
1.7 KiB
JavaScript

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,'');
});