import React from 'react';
import { renderHook } from '@testing-library/react';
import { useExpandable } from '../../expandable';
import { CardProvider, useCardContext, CardProviderProps } from '../context';

describe('useCardContext', () => {
    const render = (props?: Partial<CardProviderProps>) =>
        renderHook(() => ({ context: useCardContext(), expandable: useExpandable() }), {
            wrapper: ({ children }: { children?: React.ReactNode }) => (
                <CardProvider expandable={false} {...props}>
                    {children}
                </CardProvider>
            ),
        });

    test('passes through context values', () => {
        const { result } = render({ expandable: true });

        expect(result.current.context?.expandable).toBe(true);
    });

    describe('Expandable', () => {
        test('passes expanded and onExpand to Expandable component', () => {
            const onExpand = vi.fn();
            const { result } = render({ expanded: false, onExpand, defaultExpanded: true });

            expect(result.current.expandable.isExpanded).toBe(false);
        });

        test('passes defaultExpanded to Expandable', () => {
            const onExpand = vi.fn();
            const { result } = render({ onExpand, defaultExpanded: true });

            expect(result.current.expandable.isExpanded).toBe(true);
        });
    });
});
