* set up refactored onboarding * create onboarding page * add in first slide and change slide functionality * fix test suite * profile refactor * profile refactor * refactor to api * add checkbox fields * add checkbox fields * remove puts * add basic css * add styling * add redirect * hide back and next at first and last slides * test refactored onboarding * test refactored onboarding * remove article edits * Fix schema * Add deleted file back in * Add default value for checked_t&c column * Adjust HTML structure to keep nav buttons in place * Fix ESLint issues on Onboarding.jsx file * Handling for undefined or empty followedTags on getUserTags * Fix codeclimate issues * Fix codeclimate issues * Fix more codeclimate issues * Fix more codeclimate issues * Update Onboarding snapshots * Uncheck the CoC and T&C checkboxes on render * Update snapshots * Return false instead of raising error * Update spec to use new onboarding * Redirect to onboarding if haven't seen it yet * Prevent redirect to onboarding from /signout_confirm * Use assign_attributes instead of saving twice * Move COC and T&C checkbox page to second slide * Add 'go back to original page' functionality * Reuse ready prototype logic * Keep track of the last visited onboarding page * Fix email subscription bug * Fix overflow issue for tags page * Remove height to prevent page container scrolling * Check for CoC and T&C for displaying onboarding * Add InstantClick redirect and preserve referrer in client * Fix async update + check by using localStorage * Turn off onboarding for tests * Finalize design for onboarding * Finalize design for onboarding * Make bulk follows during onboarding * Fix bulk follow test
72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
import { h, render as preactRender } from 'preact';
|
|
import render from 'preact-render-to-json';
|
|
import { shallow, deep } from 'preact-render-spy';
|
|
import { JSDOM } from 'jsdom';
|
|
import ArticleForm from '../articleForm';
|
|
import algoliasearch from '../elements/__mocks__/algoliasearch';
|
|
|
|
describe('<ArticleForm />', () => {
|
|
beforeEach(() => {
|
|
const doc = new JSDOM('<!doctype html><html><body></body></html>');
|
|
global.document = doc;
|
|
global.window = doc.defaultView;
|
|
|
|
global.document.body.createTextRange = function() {
|
|
return {
|
|
setEnd() {},
|
|
setStart() {},
|
|
getBoundingClientRect() {
|
|
return { right: 0 };
|
|
},
|
|
getClientRects() {
|
|
return {
|
|
length: 0,
|
|
left: 0,
|
|
right: 0,
|
|
};
|
|
},
|
|
};
|
|
};
|
|
|
|
global.document.body.innerHTML = "<div id='editor-help-guide'></div>";
|
|
|
|
global.window.algoliasearch = algoliasearch;
|
|
|
|
localStorage.clear();
|
|
localStorage.__STORE__ = {};
|
|
});
|
|
|
|
it('renders properly', () => {
|
|
const tree = render(getArticleForm());
|
|
expect(tree).toMatchSnapshot();
|
|
});
|
|
|
|
it('initally loads blank', () => {
|
|
const form = shallow(getArticleForm());
|
|
expect(form.state().bodyMarkdown).toBe('');
|
|
});
|
|
|
|
it('loads text from sessionstorage when available', () => {
|
|
localStorage.setItem(
|
|
'editor-v2-http://localhost/',
|
|
JSON.stringify({ bodyMarkdown: 'hello, world' }),
|
|
);
|
|
const form = shallow(getArticleForm());
|
|
expect(form.state().bodyMarkdown).toBe('hello, world');
|
|
});
|
|
|
|
it('resets the post on reset press', () => {
|
|
const form = shallow(getArticleForm());
|
|
form.find('.clear').simulate('click');
|
|
expect(form.state().bodyMarkdown).toBe('');
|
|
});
|
|
});
|
|
|
|
const getArticleForm = () => (
|
|
<ArticleForm
|
|
version="v2"
|
|
article={
|
|
'{ "id": null, "body_markdown": null, "cached_tag_list": null, "main_image": null, "published": false, "title": null }'
|
|
}
|
|
/>
|
|
);
|