* wip * Right aligned the comment subscription panel. * Cleaned up the comment area on the article page so it uses crayon margin classes. * Updated tests * Removed old UI for comment subscriptions. * Made Discussion text bigger and bolder. * Fixed some layout issues as per PR comments. * Fixed some layout issues as per PR comments. * Updated Storybook stories, tests and snapshots * wip * Everything works now, just need to integrate snackbar. * Removed setTimeout I was debugging with. * Using the new utilities/http/request utility now. * Added the <SnackbarPoller /> * Now when unsubscribed, the subscription type resets to all comments. * Removed overflow hidden from .home CSS class so comment subscription component displays properly. * Now unsuccessful subscribes/unsubscribes error properly. * Changed button text from Done to Subscribe * Merged the <SnackbarPoller /> component into the <Snackbar /> component. * Fixed a propType issue. * Fixed a test. * Removed snackbar tests for now. Need to figure out polling in tests. * Now comment subscription component is only loaded for logged on users. * Added a comment. * Updated some storybook stories. * Fixed a small formatting issue. * Reduced snackbar item lifespans to 3 seconds. * Extracted <CogIcon /> to it's own file because other features are going to need it. * Added some Storybook stories and tests for the <CogIcon /> component. * Revert "Extracted <CogIcon /> to it's own file because other features are going to need it." This reverts commit b30406a50e491c53c3dce5be03bcdf8112b043df. * Put back <CogIcon /> component. * Added some error handling if the component doesn't load. * Moving some things around. * Rename the article pack file. * Changed wording from "article" to "post". * Fixed false negative CSS issue. It was a dangling div tag. * Add the option to add an optional close button to snackbar items. * Fixed z-index of subscription type options panel so it is always visible on mobile. * Reworked the comment subsciption utilities a bit. * Added test for comment subscription utilities. * Fixed a broken test from a refactor. * Added more tests for comment subscription utiltities. * Fixed comments footer bottom padding. * Fixed issue with stale find in comment subscription test. * Update app/javascript/packs/articlePage.jsx Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com> * Update app/assets/stylesheets/article-show.scss Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com> * Changed close button wording to Dismiss. * Fixed padding to use utility variable instead. * Added missing import for SASS file. Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>
114 lines
3.2 KiB
JavaScript
114 lines
3.2 KiB
JavaScript
import fetch from 'jest-fetch-mock';
|
|
import {
|
|
getCommentSubscriptionStatus,
|
|
setCommentSubscriptionStatus,
|
|
} from '../commentSubscriptionUtilities';
|
|
|
|
/* global globalThis */
|
|
|
|
describe('Comment Subscription Utilities', () => {
|
|
const csrfToken = 'this-is-a-csrf-token';
|
|
const articleID = 26; // Just a random article ID.
|
|
|
|
beforeAll(() => {
|
|
globalThis.fetch = fetch;
|
|
globalThis.getCsrfToken = async () => csrfToken;
|
|
});
|
|
afterAll(() => {
|
|
delete globalThis.fetch;
|
|
delete globalThis.getCsrfToken;
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
describe('getCommentSubscriptionStatus', () => {
|
|
it('should return a subscription status', async () => {
|
|
const response = '{ "config": "all_comments" }';
|
|
fetch.mockResponse(response);
|
|
|
|
const subscriptionStatus = await getCommentSubscriptionStatus(articleID);
|
|
|
|
expect(subscriptionStatus).toEqual(JSON.parse(response));
|
|
});
|
|
|
|
it('should return a friendly error message when it fails', async () => {
|
|
fetch.mockResponse('<html>...some error page</html>');
|
|
|
|
const subscriptionStatus = await getCommentSubscriptionStatus(articleID);
|
|
|
|
expect(subscriptionStatus instanceof Error).toEqual(true);
|
|
expect(subscriptionStatus.message).toEqual(
|
|
'An error occurred, please try again',
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('setCommentSubscriptionStatus', () => {
|
|
it('should unsubscribe', async () => {
|
|
fetch.mockResponse('false');
|
|
|
|
const subscriptionStatusMessage = await setCommentSubscriptionStatus(
|
|
articleID,
|
|
'not_subscribed',
|
|
);
|
|
|
|
expect(subscriptionStatusMessage).toEqual(
|
|
'You have been unsubscribed from comments for this post',
|
|
);
|
|
});
|
|
|
|
it('should subscribe', async () => {
|
|
fetch.mockResponse(true);
|
|
|
|
const subscriptionStatusMessage = await setCommentSubscriptionStatus(
|
|
articleID,
|
|
'all_comments',
|
|
);
|
|
|
|
expect(subscriptionStatusMessage).toEqual(
|
|
'You have been subscribed to all comments',
|
|
);
|
|
});
|
|
|
|
it('should return a friendly error message if HTML is returned', async () => {
|
|
fetch.mockResponse('<html><body>error</body></html>');
|
|
|
|
const subscriptionStatusMessage = await setCommentSubscriptionStatus(
|
|
articleID,
|
|
'all_comments',
|
|
);
|
|
|
|
expect(subscriptionStatusMessage).toEqual(
|
|
'An error occurred, please try again',
|
|
);
|
|
});
|
|
|
|
it('should return a friendly error message if an error occurs', async () => {
|
|
fetch.mockReject(() => new Error('oh no'));
|
|
|
|
const subscriptionStatusMessage = await setCommentSubscriptionStatus(
|
|
articleID,
|
|
'all_comments',
|
|
);
|
|
|
|
expect(subscriptionStatusMessage).toEqual(
|
|
'An error occurred, please try again',
|
|
);
|
|
});
|
|
|
|
it('should return a friendly error message if an HTTP status object is returned', async () => {
|
|
fetch.mockResponse('{"status":405,"error":"Method Not Allowed"}');
|
|
|
|
const subscriptionStatusMessage = await setCommentSubscriptionStatus(
|
|
articleID,
|
|
'all_comments',
|
|
);
|
|
|
|
expect(subscriptionStatusMessage).toEqual(
|
|
'An error occurred, please try again',
|
|
);
|
|
});
|
|
});
|
|
});
|