import React from 'react';
import { render, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
import { VendorName } from '../types';
import { Vendor } from '../SocialVendor';
// Mock components
jest.mock('../../../contexts/SocialEmbedsProvider', () => ({
useSocialEmbedsContext: () => ({
isSocialEmbedAllowed: {
instagram: true,
twitter: true,
tiktok: true,
youtube: true,
facebook: true
},
setIsSocialEmbedAllowed: jest.fn(),
isAllowedOnce: {
instagram: true,
twitter: true,
tiktok: true,
youtube: true,
facebook: true
},
setIsAllowedOnce: jest.fn()
})
}));
jest.mock('../components/TwitterComponent', () => ({
Twitter: jest.fn(() => (
Twitter Component
))
}));
jest.mock('../components/YoutubeComponent', () => ({
Youtube: jest.fn(() => (
Youtube Component
))
}));
jest.mock('../components/TiktokComponent', () => ({
TikTok: jest.fn(() => (
TikTok Component
))
}));
jest.mock('../components/InstagramComponent', () => ({
Instagram: jest.fn(() => (
Instagram Component
))
}));
jest.mock('../components/FacebookComponent', () => ({
Facebook: jest.fn(() => (
Facebook Component
))
}));
describe('Vendor Component', () => {
const renderVendor = (vendorName: VendorName, url: string) =>
render();
it('renders the Twitter component when vendorName is "twitter"', () => {
renderVendor('twitter' as VendorName, 'https://twitter.com/some/tweet');
expect(screen.getByTestId('twitter-component')).toBeInTheDocument();
});
it('renders the Youtube component when vendorName is "youtube"', () => {
renderVendor('youtube' as VendorName, 'https://youtube.com/some/video');
expect(screen.getByTestId('youtube-component')).toBeInTheDocument();
});
it('renders the TikTok component when vendorName is "tiktok"', () => {
renderVendor(
'tiktok' as VendorName,
'https://www.tiktok.com/@user/video/1234567890'
);
expect(screen.getByTestId('tiktok-component')).toBeInTheDocument();
});
it('renders the Instagram component when vendorName is "instagram"', () => {
renderVendor('instagram' as VendorName, 'https://instagram.com/some/video');
expect(screen.getByTestId('instagram-component')).toBeInTheDocument();
});
it('renders the Facebook component when vendorName is "facebook"', () => {
renderVendor('facebook' as VendorName, 'https://facebook.com/some/video');
expect(screen.getByTestId('facebook-component')).toBeInTheDocument();
});
it('throws an error if an invalid vendorName is provided', () => {
const renderInvalidVendor = () =>
render(
);
expect(renderInvalidVendor).toThrowError();
});
});