1 | 'use strict';
|
2 |
|
3 | const frisby = require('../src/frisby');
|
4 | const Joi = frisby.Joi;
|
5 | const mocks = require('./fixtures/http_mocks');
|
6 |
|
7 | const testHost = 'http://api.example.com';
|
8 |
|
9 | describe('expect(\'json\', <path>, <value>)', function() {
|
10 |
|
11 | describe('json', function() {
|
12 | it('should get single array object at known position', function(doneFn) {
|
13 | mocks.use(['getUsers']);
|
14 |
|
15 | frisby.fetch(testHost + '/users')
|
16 | .expect('json', 'data.0', {
|
17 | id: 1,
|
18 | email: 'joe.schmoe@example.com'
|
19 | })
|
20 | .done(doneFn);
|
21 | });
|
22 |
|
23 | it('should get single array object at known position using bracket', function(doneFn) {
|
24 | mocks.use(['getUsers']);
|
25 |
|
26 | frisby.fetch(testHost + '/users')
|
27 | .expect('json', 'data[0]', {
|
28 | id: 1,
|
29 | email: 'joe.schmoe@example.com'
|
30 | })
|
31 | .done(doneFn);
|
32 | });
|
33 |
|
34 | it('should get single array object at known position and test for single value', function(doneFn) {
|
35 | mocks.use(['getUsers']);
|
36 |
|
37 | frisby.fetch(testHost + '/users')
|
38 | .expect('json', 'data.0.id', 1)
|
39 | .done(doneFn);
|
40 | });
|
41 |
|
42 | it('should test one of the values in an array', function(doneFn) {
|
43 | mocks.use(['getUsers']);
|
44 |
|
45 | frisby.fetch(testHost + '/users')
|
46 | .expect('json', 'data.?', {
|
47 | id: 1,
|
48 | email: 'joe.schmoe@example.com'
|
49 | })
|
50 | .done(doneFn);
|
51 | });
|
52 |
|
53 | it('should test one of the values in an array for a single field', function(doneFn) {
|
54 | mocks.use(['getUsers']);
|
55 |
|
56 | frisby.fetch(testHost + '/users')
|
57 | .expect('json', 'data.?.email', 'joe.schmoe@example.com')
|
58 | .done(doneFn);
|
59 | });
|
60 |
|
61 | it('should test one of the values in an object', function(doneFn) {
|
62 | mocks.use(['getUsersName']);
|
63 |
|
64 | frisby.fetch(testHost + '/users.name')
|
65 | .expect('json', 'data.?', {
|
66 | id: 1,
|
67 | email: 'joe.schmoe@example.com'
|
68 | })
|
69 | .done(doneFn);
|
70 | });
|
71 |
|
72 | it('should test one of the values in an object for a single field', function(doneFn) {
|
73 | mocks.use(['getUsersName']);
|
74 |
|
75 | frisby.fetch(testHost + '/users.name')
|
76 | .expect('json', 'data.?.email', 'joe.schmoe@example.com')
|
77 | .done(doneFn);
|
78 | });
|
79 |
|
80 | it('should error on an empty array (1)', function(doneFn) {
|
81 | frisby.setup({ request: { inspectOnFailure: false } })
|
82 | .fromJSON([])
|
83 | .expect('json', '*', 1)
|
84 | .catch(function (err) {
|
85 | expect(err.message).toContain("Expected '*' not found");
|
86 | })
|
87 | .done(doneFn);
|
88 | });
|
89 |
|
90 | it('should error in an empty array (2)', function(doneFn) {
|
91 | frisby.setup({ request: { inspectOnFailure: false } })
|
92 | .fromJSON([])
|
93 | .expect('json', '?', 1)
|
94 | .catch(function (err) {
|
95 | expect(err.message).toContain("Expected '?' not found");
|
96 | })
|
97 | .done(doneFn);
|
98 | });
|
99 |
|
100 | it('should error in an empty object', function(doneFn) {
|
101 | frisby.setup({ request: { inspectOnFailure: false } })
|
102 | .fromJSON({})
|
103 | .expect('json', '&', 1)
|
104 | .catch(function (err) {
|
105 | expect(err.message).toContain("Expected '&' not found");
|
106 | })
|
107 | .done(doneFn);
|
108 | });
|
109 | });
|
110 |
|
111 | describe('jsonTypes', function() {
|
112 | it('should test every object in an array', function(doneFn) {
|
113 | mocks.use(['getUsers']);
|
114 |
|
115 | frisby.fetch(testHost + '/users')
|
116 | .expect('jsonTypes', 'data.*', {
|
117 | id: Joi.number(),
|
118 | email: Joi.string().email()
|
119 | })
|
120 | .done(doneFn);
|
121 | });
|
122 |
|
123 | it('should test every object in an array for a single value', function(doneFn) {
|
124 | mocks.use(['getUsers']);
|
125 |
|
126 | frisby.fetch(testHost + '/users')
|
127 | .expect('jsonTypes', 'data.*.id', Joi.number())
|
128 | .done(doneFn);
|
129 | });
|
130 |
|
131 | it('should test every object in an object', function(doneFn) {
|
132 | mocks.use(['getUsersName']);
|
133 |
|
134 | frisby.fetch(testHost + '/users.name')
|
135 | .expect('jsonTypes', 'data.&', {
|
136 | id: Joi.number(),
|
137 | email: Joi.string().email()
|
138 | })
|
139 | .done(doneFn);
|
140 | });
|
141 |
|
142 | it('should test every object in an object for a single value', function(doneFn) {
|
143 | mocks.use(['getUsersName']);
|
144 |
|
145 | frisby.fetch(testHost + '/users.name')
|
146 | .expect('jsonTypes', 'data.&.id', Joi.number())
|
147 | .done(doneFn);
|
148 | });
|
149 |
|
150 | it('should test every object in an object (2)', function(doneFn) {
|
151 | mocks.use(['getUsersName']);
|
152 |
|
153 | frisby.fetch(testHost + '/users.name')
|
154 | .expect('jsonTypes', 'data.*', {
|
155 | id: Joi.number(),
|
156 | email: Joi.string().email()
|
157 | })
|
158 | .done(doneFn);
|
159 | });
|
160 |
|
161 | it('should test every object in an object for a single value (2)', function(doneFn) {
|
162 | mocks.use(['getUsersName']);
|
163 |
|
164 | frisby.fetch(testHost + '/users.name')
|
165 | .expect('jsonTypes', 'data.*.id', Joi.number())
|
166 | .done(doneFn);
|
167 | });
|
168 | });
|
169 |
|
170 | });
|
171 |
|