UNPKG

@amityco/ts-sdk-react-native

Version:

Amity Social Cloud Typescript SDK

74 lines (54 loc) 2.26 kB
import { ASCApiError } from '~/core/errors'; import { sessionResponse, user11, disconnectClient } from '~/utils/tests'; import { login, createClient } from '..'; import { setActiveClient } from '../activeClient'; let client: Amity.Client; const sessionHandler: Amity.SessionHandler = { sessionWillRenewAccessToken(_) { // do nothing }, }; const onConnect = () => describe('login', () => { beforeEach(() => { client = createClient('key', 'sg'); client.mqtt.connect = jest.fn(); client.mqtt.subscribe = jest.fn(); client.http.post = jest.fn().mockResolvedValueOnce(sessionResponse); setActiveClient(client); }); afterEach(async () => { if (client.sessionState === Amity.SessionStates.ESTABLISHED) await disconnectClient(); }); test('it should connect client', async () => { onConnect().unref(); const recieved = await login({ userId: user11.userId }, sessionHandler); expect(recieved).toBe(true); }); test('it should establish connection', async () => { onConnect().unref(); await login({ userId: user11.userId }, sessionHandler); const { sessionState } = client; expect(sessionState).toBe(Amity.SessionStates.ESTABLISHED); }); test('it should have session state establishing while connecting client', () => { login({ userId: user11.userId }, sessionHandler); expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHING); }); test('it should have session state notLoggedIn on failure', async () => { client.http.post = jest .fn() .mockRejectedValue( new ASCApiError('unauthorzed', Amity.ServerError.UNAUTHORIZED, Amity.ErrorLevel.FATAL), ); await expect(login({ userId: user11.userId }, sessionHandler)).rejects.toThrow('unauthorzed'); expect(client.sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN); }); test('it should terminate session on ban', async () => { onConnect().unref(); await login({ userId: user11.userId }, sessionHandler); // ban user client.emitter.emit('user.didGlobalBan', {} as Amity.UserPayload); expect(client.sessionState).toBe(Amity.SessionStates.TERMINATED); }); });