UNPKG

4.87 kBJavaScriptView Raw
1'use strict';
2
3const frisby = require('../src/frisby');
4const Joi = frisby.Joi;
5const mocks = require('./fixtures/http_mocks');
6
7const testHost = 'http://api.example.com';
8
9describe('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