mattermost-mobile/app/hooks/use_tabs/use_tabs.test.tsx
Daniel Espino García 6c53533080
Standardize tabs across different components (#8691)
* Standardize tabs across different components

* Add tests and minor fixes

* Remove unneeded tests

* Add missing change

* Fix test

* Refactor to remove the component from the hook

* Rename hasDot for requiresUserAttention.

* Apply the changes to scheduled posts

* Fix texts

* Fix tests and fix minor style issue on iOS

* Fix filter positioning

* Fix some e2e tests

* Fix tests

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2025-05-28 16:23:37 +02:00

81 lines
2.8 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {renderHook, act} from '@testing-library/react-hooks';
import useTabs from './use_tabs';
import type {TabDefinition} from './types';
describe('hooks/useTabs', () => {
const defaultTabs: Array<TabDefinition<string>> = [
{id: 'tab1', name: {id: 'tab1.name', defaultMessage: 'Tab 1'}},
{id: 'tab2', name: {id: 'tab2.name', defaultMessage: 'Tab 2'}},
{id: 'tab3', name: {id: 'tab3.name', defaultMessage: 'Tab 3'}},
];
it('should initialize with the specified default tab', () => {
const {result} = renderHook(() => useTabs('tab1', defaultTabs));
const [selectedTab] = result.current;
expect(selectedTab).toBe('tab1');
});
it('should call change callback when tab changes', () => {
const mockCallback = jest.fn();
const {result} = renderHook(() => useTabs('tab1', defaultTabs, mockCallback));
const [, tabsProps] = result.current;
act(() => {
tabsProps.onTabChange('tab2');
});
expect(mockCallback).toHaveBeenCalledWith('tab2');
});
it('should render tabs with dots when specified', () => {
const tabsWithDot: Array<TabDefinition<string>> = [
{id: 'tab1', name: {id: 'tab1.name', defaultMessage: 'Tab 1'}, requiresUserAttention: true},
{id: 'tab2', name: {id: 'tab2.name', defaultMessage: 'Tab 2'}},
];
const {result} = renderHook(() => useTabs('tab1', tabsWithDot));
const [, tabsProps] = result.current;
expect(tabsProps.tabs[0].requiresUserAttention).toBe(true);
});
it('should use provided testID', () => {
const testID = 'test_tabs';
const {result} = renderHook(() => useTabs('tab1', defaultTabs, undefined, testID));
const [, tabsProps] = result.current;
expect(tabsProps.testID).toBe(testID);
});
it('should update selected tab when tab changes', () => {
const {result} = renderHook(() => useTabs('tab1', defaultTabs));
act(() => {
const [, tabsProps] = result.current;
tabsProps.onTabChange('tab2');
});
const [selectedTab] = result.current;
expect(selectedTab).toBe('tab2');
});
it('should use provided count', () => {
const tabsWithCount: Array<TabDefinition<string>> = [
{id: 'tab1', name: {id: 'tab1.name', defaultMessage: 'Tab 1'}, count: 1},
{id: 'tab2', name: {id: 'tab2.name', defaultMessage: 'Tab 2'}, count: 2},
];
const {result} = renderHook(() => useTabs('tab1', tabsWithCount));
const [, tabsProps] = result.current;
expect(tabsProps.tabs[0].count).toBe(1);
expect(tabsProps.tabs[1].count).toBe(2);
});
});