import * as WEDA_CLOUD_SDK from '@cloudbase/weda-cloud-sdk'; import * as user from '../../../src/mp/auth/user'; import * as service from '../../../src/common/models/request'; const userInfoFromSDK = { country: '', gender: '', city: '', wxOpenId: '', wedaId: 'xxxx', wxPublicId: '', source: 1, hasPassword: false, type: 0, uuid: 'xxxx', province: '', wxUnionId: '', internalUserType: 0, uin: '12345', email: '4444@qq.com', customUserId: '', avatarUrl: '', nickName: '哈哈哈', parentUserId: 'xxxx', updateTime: '2022-11-03T11:18:32.198', envId: 'lowcode-9gu72kpiac8de2d6', relatedRoles: [ { Name: '模版开发者', RoleIdentity: 'developer', Source: 1, UpdateTime: '2022-05-16T19:01:07', Id: '1526155781903896577', EnvId: 'lowcode-9gu72kpiac8de2d6', }, { Name: 'rosefang', RoleIdentity: 'rosefang', Source: 1, UpdateTime: '2022-05-23T18:41:12', Id: '1528687483702702082', RoleDesc: '', EnvId: 'lowcode-9gu72kpiac8de2d6', }, ], isAnonymous: false, phone: '18718572333', createTime: '2022-09-15 11:57:44', name: 'rosefang', mainOrg: { OrgId: '16db756f6315954b13ee00607a15418c', OrgName: '后端研发组', Level: 2, }, orgs: [ { OrgId: '85a41a42632310e00000cfd23fc59c6d', OrgName: '研发部', Level: 2, }, ], userExtend: '{"test":"test1111","parent_user_id":"xxxx","_departmentList":["16db756f6315954b13ee00607a15418c","85a41a42632310e00000cfd23fc59c6d"],"##DATA":{"_departmentList":[{"departmentName":"后端研发组","createdAt":1662358859040,"createBy":"administrator","depth":2,"departmentParentCode":"ycpyb_eiod","updateBy":"administrator","departmentCode":"hdyfz_9n6o","_id":"16db756f6315954b13ee00607a15418c","updatedAt":1662358859040},{"departmentName":"研发部","createdAt":1663242464116,"createBy":"administrator","depth":2,"departmentParentCode":"ycpyb_eiod","updateBy":"administrator","departmentCode":"yfb_ch0j","_id":"85a41a42632310e00000cfd23fc59c6d","updatedAt":1663242464116}]},"##SHOW":{"_departmentList":["后端研发组","研发部"]},"createdAt":1663243064411,"createBy":"administrator","updateBy":"administrator","app_id":"1252394733","updatedAt":1667445512198}', corp: { id: '234242424234', name: '微搭学校', }, }; const userInfo = { type: userInfoFromSDK.type, name: userInfoFromSDK.name, nickName: userInfoFromSDK.nickName, avatarUrl: userInfoFromSDK.avatarUrl, openId: 'oDXgH5VYKCLyhWE_rmPBlzjCjlPE', unionId: '', relatedRoles: userInfoFromSDK.relatedRoles.map((item) => ({ envId: item.EnvId, id: item.Id, name: item.Name, roleIdentity: item.RoleIdentity, })), userId: userInfoFromSDK.wedaId, email: userInfoFromSDK.email, phone: userInfoFromSDK.phone, licensed: true, mainOrg: { name: userInfoFromSDK.mainOrg.OrgName, id: userInfoFromSDK.mainOrg.OrgId }, orgs: userInfoFromSDK.orgs.map((item) => ({ name: item.OrgName, id: item.OrgId })), corp: userInfoFromSDK.corp, userType: undefined, userDesc: '', }; function mockSignInDep(grantProviderTokenRes, signInWithProviderRes, callWedaApiRes) { jest.spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'getCloudInstance').mockImplementation(async () => ({ auth: { grantProviderToken: async () => { return new Promise((resolve, reject) => { return resolve(grantProviderTokenRes); }); }, signInWithProvider: async () => { return new Promise((resolve, reject) => { return resolve(signInWithProviderRes); }); }, }, })); jest.spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'callWedaApi').mockImplementation(async () => { return new Promise((resolve, reject) => { resolve(callWedaApiRes); }); }); jest.spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'signIn').mockImplementation(jest.fn()); } afterEach(() => { // restore the spy created with spyOn jest.restoreAllMocks(); }); describe('test src/mp/auth/user.ts getUserInfo', () => { it('test getUserInfo', async () => { const data = { OPENID: userInfo.openId, }; jest .spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'getUserInfo') .mockReturnValue(new Promise((resolve) => resolve(userInfoFromSDK))); jest.spyOn(user, 'getUserInfoFromCloudSDK').mockReturnValue(new Promise((resolve) => resolve(userInfo))); jest.spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'callWedaApi').mockImplementation(async () => ({ Data: data, })); const res = await user.getUserInfo(); expect(res).toStrictEqual(userInfo); }); }); describe('test src/mp/auth/user.ts currentUser', () => { it('test currentUser', () => { const res = user.userObj.currentUser; expect(res).toStrictEqual(userInfo); }); }); describe('test src/mp/auth/user.ts signIn', () => { it('test signIn', async () => { mockSignInDep( { code: '', }, { code: '', }, { token: 'xxx', }, ); await user.signIn({ encryptedPhoneCode: 'xxx' }); expect(wx.setStorageSync).toBeCalled(); }); it('test signIn token is null', async () => { try { mockSignInDep( { code: 'xxx', }, { code: '', }, '', ); await user.signIn({ encryptedPhoneCode: 'xxx' }); expect(wx.setStorageSync).not.toBeCalled(); } catch (err) {} }); it('test signIn providerToken.code is not null', async () => { try { mockSignInDep( { code: 'xxx', }, { code: '', }, { token: 'xxx', }, ); await user.signIn({ encryptedPhoneCode: 'xxx' }); expect(wx.setStorageSync).not.toBeCalled(); } catch (err) {} }); it('test signIn signInWithProviderRes.code is not null', async () => { try { mockSignInDep( { code: '', }, { code: 'xxx', }, { token: 'xxx', }, ); await user.signIn({ encryptedPhoneCode: 'xxx' }); expect(wx.setStorageSync).not.toBeCalled(); } catch (err) {} }); }); describe('test src/mp/auth/user.ts getWedaUserList', () => { it('test getWedaUserList', async () => { const result = { Data: [], }; jest.spyOn(service, 'callWedaApiFn').mockImplementation(async () => { return new Promise((resolve, reject) => { return resolve(result); }); }); const res = await user.getWedaUserList({ wedaId: 'xxx', envId: 'xxx', }); expect(res).toBe(result); }); }); describe('test src/mp/auth/user.ts getAccessToken', () => { it('test getAccessToken', async () => { try { const res = await user.getAccessToken(); expect(res).toBeUndefined(); } catch (err) {} }); }); describe('test src/mp/auth/user.ts getUserInfoFromCloudSDK', () => { it('test getUserInfoFromCloudSDK', async () => { try { jest.spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'getUserInfo').mockImplementationOnce(() => { throw new Error('xxx'); }); const res = await user.getUserInfoFromCloudSDK(); console.log('getUserInfoFromCloudSDK', res); expect(res).toMatchObject({ nickName: '哈哈哈' }); } catch (err) { console.log('web getUserInfoFromCloudSDK err', err); } }); }); describe('test src/mp/auth/user.ts filterCloudSdkUserInfo', () => { it('test filterCloudSdkUserInfo wedaUser.userType=anonymousUser', async () => { const userInfoRes = { userType: 'anonymousUser', type: 1, openId: userInfo.openId, wedaId: userInfoFromSDK.wedaId, }; const res = user.filterCloudSdkUserInfo(userInfoRes); expect(res).toMatchObject({ type: 1 }); }); });