Skip to content

Commit 51d0a3c

Browse files
committed
tests introduced; zero-approximation
1 parent e4d25b2 commit 51d0a3c

File tree

10 files changed

+431
-7
lines changed

10 files changed

+431
-7
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@
3838
"path-exists": "2.1.0",
3939
"postcss-loader": "1.0.0",
4040
"promise": "7.1.1",
41+
"react-addons-test-utils": "^15.4.2",
4142
"react-dev-utils": "^0.4.2",
43+
"react-test-renderer": "^15.4.2",
4244
"recursive-readdir": "2.1.0",
4345
"strip-ansi": "3.0.1",
4446
"style-loader": "0.13.1",

scripts/start.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,13 @@ function addMiddleware(devServer) {
204204
proxyReq.setHeader('authorization', token);
205205
console.log(`requested: [${req.method}] ${req.url}`);
206206
console.log('query:', req.query);
207-
console.log('-\n');
207+
console.log('-');
208208
},
209209
onProxyRes: (proxyRes, req, res) => {
210210
proxyRes.on('data', (chunk) => {
211211
console.log(`response for: [${req.method}] ${req.url}`);
212212
console.log((new StringDecoder('utf8')).write(chunk));
213-
console.log('-\n');
213+
console.log('-');
214214
});
215215
},
216216
// pathRewrite: {

src/__tests__sample/Bookie.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
jest.dontMock('../Bookie.jsx');
2+
3+
describe('Bookie', function () {
4+
var React = require('react');
5+
var ReactDOM = require('react-dom');
6+
var TestUtils = require('react-addons-test-utils');
7+
8+
var Bookie;
9+
10+
beforeEach(function () {
11+
Bookie = require('../Bookie').default;
12+
});
13+
14+
it('should exists', function () {
15+
// Render into document
16+
var bookie = TestUtils.renderIntoDocument(<Bookie />);
17+
expect(TestUtils.isCompositeComponent(bookie)).toBeTruthy();
18+
});
19+
});

src/components/.env_test

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
REACT_APP_API_ENDPOINT="http://sandbox.gonebusy.com/api/v1"
2+
REACT_APP_API_ENDPOINT="v1"
3+
REACT_APP_TOKEN="Token af9094c6d46658e60cde12e34ad26979"
4+
5+
CI="true"

src/components/Bookie.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class Bookie extends Component {
7575
pickerUpdater.adjust();
7676
if (setLoading)
7777
this.setParentLoading(pickerUpdater.state().loading);
78-
console.log('applying diff', diff, pickerUpdater.diff());
78+
// console.log('applying diff', diff, pickerUpdater.diff());
7979
this.setState(pickerUpdater.diff(), () => { this.pullMissingData(); });
8080
}
8181
}

src/components/Bookie.test.jsx

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
const React = require('react');
2+
const ReactDOM = require('react-dom');
3+
import ReactDOMServer from 'react-dom/server';
4+
5+
const TestUtils = require('react-addons-test-utils');
6+
const Bookie = require('./Bookie').default;
7+
const renderer = require('react-test-renderer');
8+
9+
const Scheduler = require('../lib/Scheduler').default;
10+
const moment = require('moment');
11+
12+
Scheduler.getCurrentMoment = (() => moment('2017-01-02 17:00'));
13+
14+
it('should exists', () => {
15+
const bookie = TestUtils.renderIntoDocument(<Bookie />);
16+
expect(TestUtils.isCompositeComponent(bookie)).toBeTruthy();
17+
});
18+
19+
it('markup matches snapshot', () => {
20+
const tree = renderer.create(<Bookie />).toJSON();
21+
expect(tree).toMatchSnapshot();
22+
});
23+
24+
describe('enabling bookie button', () => {
25+
// there's a gap on 2017-01-01 at 17:00-18:00
26+
const savedState = require('./cut_response');
27+
28+
const createBookieWithState = function(state) {
29+
const result = TestUtils.renderIntoDocument(<Bookie />);
30+
result.setState(state);
31+
result.negotiateStateDiff({}, true);
32+
return result;
33+
}
34+
35+
it('is enabled for valid range', () => {
36+
const bookieComponent = createBookieWithState(savedState);
37+
38+
// ensure booking is enabled in state
39+
expect(bookieComponent.state.bookingAllowed).toBe(true);
40+
41+
// ensure booking button is enabled
42+
expect(ReactDOM.findDOMNode(bookieComponent).querySelector('button').disabled).toBe(false);
43+
44+
// check markup snapshot
45+
const reactElement = bookieComponent.render();
46+
const renderedMarkup = ReactDOMServer.renderToStaticMarkup(reactElement);
47+
expect(renderedMarkup).toMatchSnapshot();
48+
});
49+
50+
it('is disabled for the range with a gap', () => {
51+
const state = Object.assign({}, savedState, {
52+
"hourPicked": 16,
53+
"minutesIdxPicked": 2,
54+
"endVal": "2017-01-01T18:15:00+02:00",
55+
});
56+
57+
const bookieComponent = createBookieWithState(state);
58+
59+
expect(bookieComponent.state.bookingAllowed).toBe(false);
60+
expect(ReactDOM.findDOMNode(bookieComponent).querySelector('button').disabled).toBe(true);
61+
62+
const reactElement = bookieComponent.render();
63+
const renderedMarkup = ReactDOMServer.renderToStaticMarkup(reactElement);
64+
expect(renderedMarkup).toMatchSnapshot();
65+
});
66+
});
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
exports[`enabling bookie button is disabled for the range with a gap 1`] = `"<div class=\"bookie-container\"><ul class=\"pick-day\"><li class=\"disabled\"><a>&lt;&lt;</a></li><li class=\"current disabled\"><a>01/01/2017</a></li><li class=\"disabled\"><a>01/02/2017</a></li><li class=\"disabled\"><a>01/03/2017</a></li><li class=\"disabled\"><a>01/04/2017</a></li><li class=\"disabled\"><a>&gt;&gt;</a></li></ul><ul class=\"pick-minutes\"><li class=\"disabled\"><a>00</a></li><li class=\"disabled\"><a>15</a></li><li class=\"current disabled\"><a>30</a></li><li class=\"disabled\"><a>45</a></li></ul><ul class=\"pick-hour\"><li class=\"disabled\"><a>&lt;&lt;</a></li><li class=\"current disabled\"><a>4pm</a></li><li class=\"disabled\"><a>5pm</a></li><li class=\"disabled\"><a>6pm</a></li><li class=\"disabled\"><a>7pm</a></li><li class=\"disabled\"><a>&gt;&gt;</a></li></ul><div class=\"range\"><span class=\"pick start picking\">01-01 4pm:30</span><span> — </span><span class=\"pick end\">01-01 6pm:15</span></div><div class=\"text-center\"><button disabled=\"\" type=\"button\" class=\"btn btn-default\">Book</button></div></div>"`;
2+
3+
exports[`enabling bookie button is enabled for valid range 1`] = `"<div class=\"bookie-container\"><ul class=\"pick-day\"><li class=\"disabled\"><a>&lt;&lt;</a></li><li class=\"current disabled\"><a>01/01/2017</a></li><li class=\"disabled\"><a>01/02/2017</a></li><li class=\"disabled\"><a>01/03/2017</a></li><li class=\"disabled\"><a>01/04/2017</a></li><li class=\"disabled\"><a>&gt;&gt;</a></li></ul><ul class=\"pick-minutes\"><li class=\"disabled\"><a>00</a></li><li class=\"current disabled\"><a>15</a></li><li class=\"disabled\"><a>30</a></li><li class=\"disabled\"><a>45</a></li></ul><ul class=\"pick-hour\"><li class=\"disabled\"><a>&lt;&lt;</a></li><li class=\"disabled\"><a>5pm</a></li><li class=\"current disabled\"><a>6pm</a></li><li class=\"disabled\"><a>7pm</a></li><li class=\"disabled\"><a>8pm</a></li><li class=\"disabled\"><a>&gt;&gt;</a></li></ul><div class=\"range\"><span class=\"pick start picking\">01-01 6pm:15</span><span> — </span><span class=\"pick end\">01-01 7pm:00</span></div><div class=\"text-center\"><button type=\"button\" class=\"btn btn-default\">Book</button></div></div>"`;
4+
5+
exports[`test markup matches snapshot 1`] = `
6+
<div
7+
className="bookie-container">
8+
<ul
9+
className="pick-day">
10+
<li
11+
className="disabled"
12+
onClick={undefined}>
13+
<a>
14+
<<
15+
</a>
16+
</li>
17+
<li
18+
className="current"
19+
onClick={[Function]}>
20+
<a>
21+
01/02/2017
22+
</a>
23+
</li>
24+
<li
25+
className=""
26+
onClick={[Function]}>
27+
<a>
28+
01/03/2017
29+
</a>
30+
</li>
31+
<li
32+
className=""
33+
onClick={[Function]}>
34+
<a>
35+
01/04/2017
36+
</a>
37+
</li>
38+
<li
39+
className=""
40+
onClick={[Function]}>
41+
<a>
42+
01/05/2017
43+
</a>
44+
</li>
45+
<li
46+
className=""
47+
onClick={[Function]}>
48+
<a>
49+
>>
50+
</a>
51+
</li>
52+
</ul>
53+
<ul
54+
className="pick-minutes">
55+
<li
56+
className="disabled"
57+
onClick={undefined}>
58+
<a>
59+
00
60+
</a>
61+
</li>
62+
<li
63+
className="disabled"
64+
onClick={undefined}>
65+
<a>
66+
15
67+
</a>
68+
</li>
69+
<li
70+
className="disabled"
71+
onClick={undefined}>
72+
<a>
73+
30
74+
</a>
75+
</li>
76+
<li
77+
className="disabled"
78+
onClick={undefined}>
79+
<a>
80+
45
81+
</a>
82+
</li>
83+
</ul>
84+
<ul
85+
className="pick-hour">
86+
<li
87+
className="disabled"
88+
onClick={undefined}>
89+
<a>
90+
<<
91+
</a>
92+
</li>
93+
<li
94+
className="disabled"
95+
onClick={undefined}>
96+
<a>
97+
5pm
98+
</a>
99+
</li>
100+
<li
101+
className="disabled"
102+
onClick={undefined}>
103+
<a>
104+
6pm
105+
</a>
106+
</li>
107+
<li
108+
className="disabled"
109+
onClick={undefined}>
110+
<a>
111+
7pm
112+
</a>
113+
</li>
114+
<li
115+
className="disabled"
116+
onClick={undefined}>
117+
<a>
118+
8pm
119+
</a>
120+
</li>
121+
<li
122+
className=""
123+
onClick={[Function]}>
124+
<a>
125+
>>
126+
</a>
127+
</li>
128+
</ul>
129+
<div
130+
className="range">
131+
<span
132+
className="pick start picking"
133+
onClick={[Function]}>
134+
choose start
135+
</span>
136+
<span>
137+
 — 
138+
</span>
139+
<span
140+
className="pick end"
141+
onClick={[Function]}>
142+
choose end
143+
</span>
144+
</div>
145+
<div
146+
className="text-center">
147+
<button
148+
className="btn btn-default"
149+
disabled={true}
150+
onClick={[Function]}
151+
type="button">
152+
Book
153+
</button>
154+
</div>
155+
</div>
156+
`;

0 commit comments

Comments
 (0)