UNPKG

10.4 kBJavaScriptView Raw
1'use strict';
2const h = require('highland'),
3 lib = require('./formatting');
4
5describe('formatting', () => {
6 let bootstrapComponents, bootstrapLayouts, bootstrapPages, bootstrapUsers, bootstrapUserError, bootstrapArbitrary,
7 componentDispatch, layoutDispatch, pageDispatch, userDispatch, arbitraryDispatch;
8
9 beforeEach(() => {
10 bootstrapComponents = {
11 _components: {
12 article: {
13 title: 'Empty',
14 content: [{
15 _ref: '/_components/paragraph'
16 }],
17 instances: {
18 foo: {
19 title: 'My Article',
20 content: [{
21 _ref: '/_components/paragraph/instances/bar'
22 }]
23 }
24 }
25 },
26 paragraph: {
27 text: 'empty',
28 instances: {
29 bar: {
30 text: 'lorem ipsum'
31 }
32 }
33 },
34 image: {
35 url: 'domain.com/image'
36 }
37 }
38 };
39 bootstrapLayouts = {
40 _layouts: {
41 index: {
42 instances: {
43 foo: {
44 head: [{
45 _ref: '/_components/meta-title/instances/bar'
46 }],
47 main: 'main',
48 meta: { title: 'Lorem Ipsum Layout' }
49 }
50 }
51 },
52 article: {
53 head: [{
54 _ref: '/_components/meta-title'
55 }],
56 main: 'main'
57 },
58 tags: {
59 instances: {
60 first: {
61 main: 'main'
62 }
63 }
64 }
65 },
66 _components: {
67 'meta-title': {
68 text: 'empty',
69 instances: {
70 bar: {
71 text: 'lorem ipsum'
72 }
73 }
74 }
75 }
76 };
77 bootstrapPages = {
78 _pages: {
79 foo: {
80 layout: '/_components/layout/instances/bar',
81 main: ['/_components/foo/instances/bar'],
82 meta: { title: 'Foo' }
83 },
84 '/bar': { // it deals with slahes
85 layout: '/_components/layout/instances/bar',
86 main: ['/_components/foo/instances/bar'],
87 url: 'http://google.com' // and legacy urls
88 }
89 }
90 };
91 bootstrapUsers = {
92 _users: [{
93 username: 'foo',
94 provider: 'google',
95 auth: 'admin'
96 }, {
97 username: 'nobody',
98 provider: 'google',
99 auth: 'write'
100 }]
101 };
102 bootstrapUserError = {
103 _users: [{
104 username: 'foo', // no provider
105 auth: 'admin'
106 }, {
107 username: 'nobody',
108 provider: 'google' // no auth
109 }]
110 };
111 bootstrapArbitrary = {
112 _lists: {
113 a: [1, 2, 3]
114 },
115 _uris: {
116 '/': '/_pages/index'
117 }
118 };
119 componentDispatch = [{
120 '/_components/article': {
121 title: 'Empty',
122 content: [{
123 _ref: '/_components/paragraph',
124 text: 'empty'
125 }]
126 }
127 }, {
128 '/_components/article/instances/foo': {
129 title: 'My Article',
130 content: [{
131 _ref: '/_components/paragraph/instances/bar',
132 text: 'lorem ipsum'
133 }]
134 }
135 }, {
136 '/_components/image': {
137 url: 'domain.com/image'
138 }
139 }];
140 layoutDispatch = [{
141 '/_layouts/index/instances/foo': {
142 head: [{
143 _ref: '/_components/meta-title/instances/bar',
144 text: 'lorem ipsum'
145 }],
146 main: 'main'
147 }
148 }, {
149 '/_layouts/index/instances/foo/meta': { title: 'Lorem Ipsum Layout' }
150 }, {
151 '/_layouts/article': {
152 head: [{
153 _ref: '/_components/meta-title',
154 text: 'empty'
155 }],
156 main: 'main'
157 }
158 }, {
159 '/_layouts/tags/instances/first': {
160 main: 'main'
161 }
162 }];
163 pageDispatch = [{
164 '/_pages/foo': {
165 layout: '/_components/layout/instances/bar',
166 main: ['/_components/foo/instances/bar']
167 }
168 }, {
169 '/_pages/foo/meta': { title: 'Foo' }
170 }, {
171 '/_pages/bar': {
172 layout: '/_components/layout/instances/bar',
173 main: ['/_components/foo/instances/bar'],
174 customUrl: 'http://google.com'
175 }
176 }];
177 userDispatch = [{
178 '/_users/Zm9vQGdvb2dsZQ==': {
179 username: 'foo',
180 provider: 'google',
181 auth: 'admin'
182 }
183 }, {
184 '/_users/bm9ib2R5QGdvb2dsZQ==': {
185 username: 'nobody',
186 provider: 'google',
187 auth: 'write'
188 }
189 }];
190 arbitraryDispatch = [{
191 '/_lists/a': [1, 2, 3]
192 }, {
193 '/_uris/': '/_pages/index'
194 }];
195 });
196
197 describe('toDispatch', () => {
198 it('passes through empty root properties', () => {
199 return lib.toDispatch(h([{ _components: {}, _layouts: {}, _pages: {}, _uris: {}, _users: [] }])).collect().toPromise(Promise).then((res) => {
200 expect(res).toEqual([]);
201 });
202 });
203
204 it('converts bootstrapped components to dispatch', () => {
205 return lib.toDispatch(h([bootstrapComponents])).collect().toPromise(Promise).then((res) => {
206 expect(res).toEqual(componentDispatch);
207 });
208 });
209
210 it('converts bootstrapped layouts to dispatch', () => {
211 return lib.toDispatch(h([bootstrapLayouts])).collect().toPromise(Promise).then((res) => {
212 expect(res).toEqual(layoutDispatch);
213 });
214 });
215
216 it('converts bootstrapped pages to dispatch', () => {
217 return lib.toDispatch(h([bootstrapPages])).collect().toPromise(Promise).then((res) => {
218 expect(res).toEqual(pageDispatch);
219 });
220 });
221
222 it('converts bootstrapped users to dispatch', () => {
223 return lib.toDispatch(h([bootstrapUsers])).collect().toPromise(Promise).then((res) => {
224 expect(res).toEqual(userDispatch);
225 });
226 });
227
228 it('errors if users are missing properties', () => {
229 return lib.toDispatch(h([bootstrapUserError])).collect().toPromise(Promise).catch((e) => {
230 expect(e.message).toBe('Cannot bootstrap users without username, provider, and auth level');
231 });
232 });
233
234 it('converts bootstrapped arbitrary data to dispatch', () => {
235 return lib.toDispatch(h([bootstrapArbitrary])).collect().toPromise(Promise).then((res) => {
236 expect(res).toEqual(arbitraryDispatch);
237 });
238 });
239 });
240
241 describe('toBootstrap', () => {
242 it('converts deep component dispatch to bootstrap', () => {
243 return lib.toBootstrap(h(componentDispatch)).toPromise(Promise).then((res) => {
244 expect(res).toEqual(bootstrapComponents);
245 });
246 });
247
248 it('converts deep layout dispatch to bootstrap', () => {
249 return lib.toBootstrap(h(layoutDispatch)).toPromise(Promise).then((res) => {
250 expect(res).toEqual(bootstrapLayouts);
251 });
252 });
253
254 it('converts page dispatch to bootstrap (legacy)', () => {
255 return lib.toBootstrap(h([{
256 '/_pages/foo': { // convert slash
257 layout: '/_components/layout/instances/bar',
258 main: ['/_components/foo/instances/bar']
259 }
260 }, {
261 '/_pages/bar': {
262 layout: '/_components/layout/instances/bar',
263 main: ['/_components/foo/instances/bar'],
264 url: 'http://google.com'
265 }
266 }])).toPromise(Promise).then((res) => {
267 expect(res).toEqual({
268 _pages: {
269 foo: { // adds slash
270 layout: '/_components/layout/instances/bar',
271 main: ['/_components/foo/instances/bar']
272 },
273 bar: {
274 layout: '/_components/layout/instances/bar',
275 main: ['/_components/foo/instances/bar'],
276 customUrl: 'http://google.com' // deals with url
277 }
278 }
279 });
280 });
281 });
282
283 it('converts page dispatch to bootstrap', () => {
284 return lib.toBootstrap(h([{
285 '/_pages/foo': { // convert slash
286 layout: '/_layouts/layout/instances/bar',
287 main: ['/_components/foo/instances/bar']
288 }
289 }, {
290 '/_pages/bar': {
291 layout: '/_layouts/layout/instances/bar',
292 main: ['/_components/foo/instances/bar'],
293 url: 'http://google.com'
294 }
295 }, {
296 '/_pages/foo/meta': { title: 'Foo' }
297 }])).toPromise(Promise).then((res) => {
298 expect(res).toEqual({
299 _pages: {
300 foo: { // adds slash
301 layout: '/_layouts/layout/instances/bar',
302 main: ['/_components/foo/instances/bar'],
303 meta: { title: 'Foo' }
304 },
305 bar: {
306 layout: '/_layouts/layout/instances/bar',
307 main: ['/_components/foo/instances/bar'],
308 customUrl: 'http://google.com' // deals with url
309 }
310 }
311 });
312 });
313 });
314
315 it('converts user dispatch to bootstrap', () => {
316 return lib.toBootstrap(h(userDispatch)).toPromise(Promise).then((res) => {
317 expect(res).toEqual({
318 _users: [{
319 username: 'foo',
320 provider: 'google',
321 auth: 'admin'
322 }, {
323 username: 'nobody',
324 provider: 'google',
325 auth: 'write'
326 }]
327 });
328 });
329 });
330
331 it('converts arbitrary data dispatch to bootstrap', () => {
332 return lib.toBootstrap(h(arbitraryDispatch)).toPromise(Promise).then((res) => {
333 expect(res).toEqual(bootstrapArbitrary);
334 });
335 });
336
337 it('converts mixed dispatches to bootstrap', () => {
338 return lib.toBootstrap(h([{
339 '/_components/a': { child: { _ref: '/_components/b', a: 'b' } }
340 }, {
341 '/_layouts/l/instances/i': { head: 'head' }
342 }, {
343 '/_layouts/l/instances/i/meta': { title: 'L'}
344 }, {
345 '/_users/abc': { username: 'a', provider: 'b', auth: 'admin' }
346 }, {
347 '/_users/def': { username: 'd', provider: 'e', auth: 'admin' }
348 }])).toPromise(Promise).then((res) => {
349 expect(res).toEqual({
350 _components: {
351 a: { child: { _ref: '/_components/b' } },
352 b: { a: 'b' }
353 },
354 _layouts: {
355 l: {
356 instances: {
357 i: {
358 head: 'head',
359 meta: { title: 'L' }
360 }
361 }
362 }
363 },
364 _users: [{
365 username: 'a',
366 provider: 'b',
367 auth: 'admin'
368 }, {
369 username: 'd',
370 provider: 'e',
371 auth: 'admin'
372 }]
373 });
374 });
375 });
376 });
377});