import { mount } from '@vue/test-utils';
import ToggleButton from './ToggleButton.vue';

describe('ToggleButton', () => {
    let wrapper;

    beforeEach(() => {
        wrapper = mount(ToggleButton, {
            props: {
                modelValue: false,
                onIcon: 'pi pi-check',
                offIcon: 'pi pi-times'
            }
        });
    });

    it('is ToggleButton exist', () => {
        expect(wrapper.find('.p-togglebutton.p-component').exists()).toBe(true);
        expect(wrapper.find('span.pi-times.p-button-icon').exists()).toBe(true);
    });

    it('should have onIcon', async () => {
        await wrapper.setProps({ modelValue: true });

        expect(wrapper.find('span.pi-check').exists()).toBe(true);
    });

    it('should click works', async () => {
        await wrapper.vm.onClick({});

        expect(wrapper.emitted()['update:modelValue'][0]).toEqual([true]);

        await wrapper.setProps({ modelValue: true });
        await wrapper.vm.onClick({});

        expect(wrapper.emitted()['update:modelValue'][1]).toEqual([false]);
    });

    it('should be customized', async () => {
        await wrapper.setProps({
            modelValue: true,
            onLabel: 'I confirm',
            offLabel: 'I reject',
            style: 'width: 10em'
        });

        expect(wrapper.find('.p-button-label').text()).toBe('I confirm');
        expect(wrapper.attributes().style).toContain('width: 10em');

        await wrapper.setProps({ modelValue: false });

        expect(wrapper.find('.p-button-label').text()).toBe('I reject');
    });
});