import * as WEDA_CLOUD_SDK from '@cloudbase/weda-cloud-sdk'; import * as user from '../../../src/web/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: '', nickName: '哈哈哈', avatarUrl: 'http://avatarUrl.com/avatarUrl.jpg', 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: '微搭学校', }, userType: '', userDesc: '', }; afterEach(() => { // restore the spy created with spyOn jest.restoreAllMocks(); }); const userInfo = { type: userInfoFromSDK.type, name: userInfoFromSDK.name, nickName: userInfoFromSDK.nickName, avatarUrl: userInfoFromSDK.avatarUrl, openId: '', 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: userInfoFromSDK.userType, userDesc: userInfoFromSDK.userDesc, }; describe('test src/web/auth/user.ts getUserInfo', () => { it('test getUserInfo', async () => { jest .spyOn(WEDA_CLOUD_SDK, 'initTcb') .mockReturnValue(new Promise((resolve) => resolve({ app: null as any, auth: null as any }))); jest .spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'getUserInfo') .mockReturnValue(new Promise((resolve) => resolve(userInfoFromSDK))); jest.spyOn(user, 'getUserInfoFromCloudSDK').mockReturnValue(new Promise((resolve) => resolve(userInfo))); const res = await user.getUserInfo(); expect(JSON.parse(JSON.stringify(res))).toStrictEqual(userInfo); const currentUser = user.userObj.currentUser; expect(JSON.parse(JSON.stringify(currentUser))).toStrictEqual(userInfo); }); }); describe('test src/web/auth/user.ts signIn', () => { it('test signIn', async () => { const result = { Data: [], }; jest.spyOn(service, 'callWedaApiFn').mockImplementationOnce(async () => { return new Promise((resolve, reject) => { return resolve(result); }); }); jest.spyOn(WEDA_CLOUD_SDK, 'getTcbInstance').mockImplementationOnce( async () => ({ auth: { signIn: jest.fn(), getLoginState: () => ({}), }, } as any), ); jest .spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'getUserInfo') .mockReturnValue(new Promise((resolve) => resolve(userInfoFromSDK))); Object.defineProperty(window, '_WedaHostConfig', { value: { login: jest.fn(), }, writable: true, }); await user.signIn({ username: 'xxx', password: 'xxx' }); expect(WEDA_CLOUD_SDK.getTcbInstance).toBeCalled(); expect(window._WedaHostConfig.login).toBeCalled(); }); }); describe('test src/web/auth/user.ts signOut', () => { it('test signOut', async () => { jest.spyOn(WEDA_CLOUD_SDK.CLOUD_SDK, 'signOut').mockImplementationOnce(async () => ({})); await user.signOut(); expect(WEDA_CLOUD_SDK.CLOUD_SDK.signOut).toBeCalled(); }); }); describe('test src/web/auth/user.ts onLoginStateChanged', () => { it('test onLoginStateChanged', async () => { jest.spyOn(WEDA_CLOUD_SDK, 'getTcbInstance').mockImplementationOnce( async () => ({ auth: { signIn: jest.fn(), getLoginState: () => ({}), onLoginStateChanged: jest.fn(), }, } as any), ); await user.onLoginStateChanged(() => {}); expect(WEDA_CLOUD_SDK.getTcbInstance).toBeCalled(); }); }); describe('test src/web/auth/user.ts getWedaUserList', () => { it('test getWedaUserList', async () => { const result = { Data: [], }; jest.spyOn(service, 'callWedaApiFn').mockImplementationOnce(async () => { return new Promise((resolve, reject) => { return resolve(result); }); }); await user.getWedaUserList({ wedaId: 'xxx', envId: 'xxx' }); expect(service.callWedaApiFn).toBeCalled(); }); }); describe('test src/web/auth/user.ts loginScope', () => { it('test loginScope', async () => { jest.spyOn(WEDA_CLOUD_SDK, 'getTcbInstance').mockImplementationOnce( async () => ({ auth: { signIn: jest.fn(), loginScope: () => { return () => {}; }, }, } as any), ); await user.loginScope(); expect(WEDA_CLOUD_SDK.getTcbInstance).toBeCalled(); }); }); 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/web/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/web/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 }); }); it('test filterCloudSdkUserInfo wedaUser={}', async () => { const res = user.filterCloudSdkUserInfo({}); expect(res).toMatchObject({ type: undefined }); }); }); describe('test src/web/auth/user.ts transformWedaHostUser', () => { it('test transformWedaHostUser wedaUser=null,userAllInfo=null', async () => { const res = user.transformWedaHostUser(null, null as any); expect(res).toMatchObject({ avatar: undefined }); }); it('test transformWedaHostUser wedaUser=null,userAllInfo.UserInfo=null', async () => { const res = user.transformWedaHostUser(null, { UserInfo: {} } as any); expect(res).toMatchObject({ avatar: undefined }); }); });