import { render, fireEvent } from '@testing-library/vue';
import Feedback from '@/components/Feedback.vue';

vi.mock('@/composables/useI18n', () => ({
	useI18n: () => ({
		baseText: (key: string) => key,
	}),
}));

describe('Feedback', () => {
	it('should emit update:modelValue event with positive feedback', async () => {
		const { getByTestId, emitted } = render(Feedback);

		await fireEvent.click(getByTestId('feedback-button-positive'));

		expect(emitted()).toHaveProperty('update:modelValue');
		expect(emitted()['update:modelValue'][0]).toEqual(['positive']);
	});

	it('should emit update:modelValue event with negative feedback', async () => {
		const { getByTestId, emitted } = render(Feedback);

		await fireEvent.click(getByTestId('feedback-button-negative'));

		expect(emitted()).toHaveProperty('update:modelValue');
		expect(emitted()['update:modelValue'][0]).toEqual(['negative']);
	});

	it('should display positive feedback message when modelValue is positive', () => {
		const { getByText } = render(Feedback, {
			props: {
				modelValue: 'positive',
			},
		});

		expect(getByText(/feedback.positive/i)).toBeInTheDocument();
	});

	it('should display negative feedback message when modelValue is negative', () => {
		const { getByText } = render(Feedback, {
			props: {
				modelValue: 'negative',
			},
		});

		expect(getByText(/feedback.negative/i)).toBeInTheDocument();
	});
});
