import {render, within} from '@testing-library/react';
import App from './App';
import {ROOT_DIV_ID} from './utils/constants';
import {buildComment} from './utils/test-utils';
const sinon = require('sinon');
function renderApp({member = null, documentStyles = {}, props = {}} = {}) {
const postId = 'my-post';
const api = {
init: async () => {
return {
member
};
},
comments: {
count: async () => {
return {
[postId]: 0
};
},
browse: async () => {
return {
comments: [],
meta: {
pagination: {
total: 0,
next: null,
prev: null,
page: 1
}
}
};
}
}
};
// In tests, we currently don't wait for the styles to have loaded. In the app we check if the styles url is set or not.
const stylesUrl = '';
const {container} = render(
);
const iframeElement = container.querySelector('iframe[title="comments-box"]');
expect(iframeElement).toBeInTheDocument();
const iframeDocument = iframeElement.contentDocument;
return {container, api, iframeDocument};
}
describe('Auth frame', () => {
it('renders the auth frame', () => {
const {container} = renderApp();
const iframeElement = container.querySelector('iframe[data-frame="admin-auth"]');
expect(iframeElement).toBeInTheDocument();
});
});
describe('Dark mode', () => {
it('uses dark mode when container has a light text color', async () => {
const {iframeDocument} = renderApp({documentStyles: {
color: '#FFFFFF'
}});
const darkModeCommentsBox = await within(iframeDocument).findByTestId('comments-box');
expect(darkModeCommentsBox.classList).toContain('dark');
});
it('uses dark mode when container has a dark text color', async () => {
const {iframeDocument} = renderApp({documentStyles: {
color: '#000000'
}});
const darkModeCommentsBox = await within(iframeDocument).findByTestId('comments-box');
expect(darkModeCommentsBox.classList).not.toContain('dark');
});
it('uses dark mode when custom mode has been passed as a property', async () => {
const {iframeDocument} = renderApp({
props: {
colorScheme: 'dark'
}
});
const darkModeCommentsBox = await within(iframeDocument).findByTestId('comments-box');
expect(darkModeCommentsBox.classList).toContain('dark');
});
it('uses light mode when custom mode has been passed as a property', async () => {
const {iframeDocument} = renderApp({
props: {
colorScheme: 'light'
},
color: '#FFFFFF'
});
const darkModeCommentsBox = await within(iframeDocument).findByTestId('comments-box');
expect(darkModeCommentsBox.classList).not.toContain('dark');
});
});
describe('Comments', () => {
it('renders comments', async () => {
const {api, iframeDocument} = renderApp();
sinon.stub(api.comments, 'browse').callsFake(() => {
return {
comments: [
buildComment({html: 'This is a comment body
'})
],
meta: {
pagination: {
total: 1,
next: null,
prev: null,
page: 1
}
}
};
});
const commentBody = await within(iframeDocument).findByText(/This is a comment body/i);
expect(commentBody).toBeInTheDocument();
});
});