Skip to content

Commit d90cf36

Browse files
committed
test: adds tests for text widget
1 parent 93050ec commit d90cf36

2 files changed

Lines changed: 82 additions & 34 deletions

File tree

packages/netlify-cms-widget-string/src/__tests__/string.spec.js

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,29 @@ import { NetlifyCmsWidgetString } from '../';
55

66
const StringControl = NetlifyCmsWidgetString.controlComponent;
77

8-
class StringController extends React.Component {
9-
state = {
10-
value: this.props.defaultValue,
11-
};
12-
13-
handleOnChange = jest.fn(value => {
14-
this.setState({ value });
15-
});
16-
17-
render() {
18-
return this.props.children({
19-
value: this.state.value,
20-
handleOnChange: this.handleOnChange,
21-
});
22-
}
23-
}
24-
258
function setup({ defaultValue } = {}) {
26-
let renderArgs;
279
const setActiveSpy = jest.fn();
2810
const setInactiveSpy = jest.fn();
11+
const onChangeSpy = jest.fn();
2912

3013
const helpers = render(
31-
<StringController defaultValue={defaultValue}>
32-
{({ value, handleOnChange }) => {
33-
renderArgs = { value, onChangeSpy: handleOnChange };
34-
return (
35-
<StringControl
36-
value={value}
37-
onChange={handleOnChange}
38-
forID="test-string"
39-
classNameWrapper="test-classname"
40-
setActiveStyle={setActiveSpy}
41-
setInactiveStyle={setInactiveSpy}
42-
/>
43-
);
44-
}}
45-
</StringController>,
14+
<StringControl
15+
value={defaultValue}
16+
onChange={onChangeSpy}
17+
forID="test-string"
18+
classNameWrapper="test-classname"
19+
setActiveStyle={setActiveSpy}
20+
setInactiveStyle={setInactiveSpy}
21+
/>,
4622
);
4723

4824
const input = helpers.container.querySelector('input');
4925

5026
return {
5127
...helpers,
52-
...renderArgs,
5328
setActiveSpy,
5429
setInactiveSpy,
30+
onChangeSpy,
5531
input,
5632
};
5733
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import React from 'react';
2+
import { render, fireEvent } from '@testing-library/react';
3+
4+
import { NetlifyCmsWidgetText } from '../';
5+
6+
const TextControl = NetlifyCmsWidgetText.controlComponent;
7+
8+
function setup({ defaultValue } = {}) {
9+
const setActiveSpy = jest.fn();
10+
const setInactiveSpy = jest.fn();
11+
const onChangeSpy = jest.fn();
12+
13+
const helpers = render(
14+
<TextControl
15+
value={defaultValue}
16+
onChange={onChangeSpy}
17+
forID="test-string"
18+
classNameWrapper="test-classname"
19+
setActiveStyle={setActiveSpy}
20+
setInactiveStyle={setInactiveSpy}
21+
/>,
22+
);
23+
24+
const textarea = helpers.container.querySelector('textarea');
25+
26+
return {
27+
...helpers,
28+
setActiveSpy,
29+
setInactiveSpy,
30+
onChangeSpy,
31+
textarea,
32+
};
33+
}
34+
35+
describe('String widget', () => {
36+
it('calls setActiveStyle when textarea focused', () => {
37+
const { textarea, setActiveSpy } = setup();
38+
39+
fireEvent.focus(textarea);
40+
41+
expect(setActiveSpy).toBeCalledTimes(1);
42+
});
43+
44+
it('calls setInactiveSpy when textarea blurred', () => {
45+
const { textarea, setInactiveSpy } = setup();
46+
47+
fireEvent.focus(textarea);
48+
fireEvent.blur(textarea);
49+
50+
expect(setInactiveSpy).toBeCalledTimes(1);
51+
});
52+
53+
it('renders with default value', () => {
54+
const testValue = 'bar';
55+
const { textarea } = setup({ defaultValue: testValue });
56+
expect(textarea.value).toEqual(testValue);
57+
});
58+
59+
it('calls onChange when textarea changes', () => {
60+
jest.useFakeTimers();
61+
const testValue = 'foo';
62+
const { textarea, onChangeSpy } = setup();
63+
64+
fireEvent.focus(textarea);
65+
fireEvent.change(textarea, { target: { value: testValue } });
66+
67+
jest.runAllTimers();
68+
69+
expect(onChangeSpy).toBeCalledTimes(1);
70+
expect(onChangeSpy).toBeCalledWith(testValue);
71+
});
72+
});

0 commit comments

Comments
 (0)