import { Map as ImmutableMap } from 'immutable'; import { __stub } from 'soapbox/api'; import { buildGroup, buildGroupRelationship } from 'soapbox/jest/factory'; import { renderHook, waitFor } from 'soapbox/jest/test-helpers'; import { normalizeAccount, normalizeInstance } from 'soapbox/normalizers'; import { useGroupsPath } from '../useGroupsPath'; describe('useGroupsPath()', () => { test('without the groupsDiscovery feature', () => { const store = { instance: normalizeInstance({ version: '2.7.2 (compatible; Pleroma 2.3.0)', }), }; const { result } = renderHook(useGroupsPath, undefined, store); expect(result.current).toEqual('/groups'); }); describe('with the "groupsDiscovery" feature', () => { let store: any; beforeEach(() => { const userId = '1'; store = { instance: normalizeInstance({ version: '3.4.1 (compatible; TruthSocial 1.0.0+unreleased)', }), me: userId, accounts: ImmutableMap({ [userId]: normalizeAccount({ id: userId, acct: 'justin-username', display_name: 'Justin L', avatar: 'test.jpg', chats_onboarded: false, }), }), }; }); describe('when the user has no groups', () => { test('should default to the discovery page', () => { const { result } = renderHook(useGroupsPath, undefined, store); expect(result.current).toEqual('/groups/discover'); }); }); describe('when the user has groups', () => { beforeEach(() => { __stub((mock) => { mock.onGet('/api/v1/groups').reply(200, [ buildGroup({ display_name: 'Group', id: '1', }), ]); mock.onGet('/api/v1/groups/relationships?id[]=1').reply(200, [ buildGroupRelationship({ id: '1', }), ]); }); }); test('should default to the "My Groups" page', async () => { const { result } = renderHook(useGroupsPath, undefined, store); await waitFor(() => { expect(result.current).toEqual('/groups'); }); }); }); }); });