UNPKG

6.21 kBJavaScriptView Raw
1/*
2 * Copyright 2018 Adobe. All rights reserved.
3 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License. You may obtain a copy
5 * of the License at http://www.apache.org/licenses/LICENSE-2.0
6 *
7 * Unless required by applicable law or agreed to in writing, software distributed under
8 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9 * OF ANY KIND, either express or implied. See the License for the specific language
10 * governing permissions and limitations under the License.
11 */
12/* eslint-env mocha */
13const assert = require('assert');
14const winston = require('winston');
15const { Pipeline } = require('../index.js');
16
17const logger = winston.createLogger({
18 // tune this for debugging
19 level: 'debug',
20 // and turn this on if you want the output
21 silent: true,
22 format: winston.format.simple(),
23 transports: [
24 new winston.transports.Console(),
25 ],
26});
27
28describe('Testing Pipeline', () => {
29 it('Executes without logger', (done) => {
30 new Pipeline().run().then(() => done()).catch(done);
31 });
32
33 it('Executes correct order', (done) => {
34 const order = [];
35 new Pipeline({ logger })
36 .pre(() => { order.push('pre0'); })
37 .post(() => { order.push('post0'); })
38 .pre(() => { order.push('pre1'); })
39 .post(() => { order.push('post1'); })
40 .once(() => { order.push('once'); })
41 .run()
42 .then(() => {
43 assert.deepEqual(order, ['pre0', 'pre1', 'once', 'post0', 'post1']);
44 done();
45 })
46 .catch(done);
47 });
48
49 it('Disables pre before when', (done) => {
50 const order = [];
51 new Pipeline({ logger })
52 .pre(() => { order.push('pre0'); })
53 .pre(() => { order.push('disabled'); })
54 .when(() => false)
55 .pre(() => { order.push('pre1'); })
56 .once(() => { order.push('once'); })
57 .post(() => { order.push('post0'); })
58 .post(() => { order.push('post1'); })
59 .run()
60 .then(() => {
61 assert.deepEqual(order, ['pre0', 'pre1', 'once', 'post0', 'post1']);
62 done();
63 })
64 .catch(done);
65 });
66
67 it('When works with promises pre before when', (done) => {
68 const order = [];
69 new Pipeline({ logger })
70 .pre(() => { order.push('pre0'); })
71 .pre(() => { order.push('disabled'); })
72 .when(() => Promise.resolve(false))
73 .pre(() => { order.push('pre1'); })
74 .once(() => { order.push('once'); })
75 .post(() => { order.push('post0'); })
76 .post(() => { order.push('post1'); })
77 .run()
78 .then(() => {
79 assert.deepEqual(order, ['pre0', 'pre1', 'once', 'post0', 'post1']);
80 done();
81 })
82 .catch(done);
83 });
84
85 it('Disables post before when', (done) => {
86 const order = [];
87 new Pipeline({ logger })
88 .pre(() => { order.push('pre0'); })
89 .pre(() => { order.push('pre1'); })
90 .once(() => { order.push('once'); })
91 .post(() => { order.push('post0'); })
92 .post(() => { order.push('disabled'); })
93 .when(() => false)
94 .post(() => { order.push('post1'); })
95 .run()
96 .then(() => {
97 assert.deepEqual(order, ['pre0', 'pre1', 'once', 'post0', 'post1']);
98 done();
99 })
100 .catch(done);
101 });
102
103 it('when after once throws error', (done) => {
104 try {
105 const order = [];
106 new Pipeline({ logger })
107 .pre(() => { order.push('pre0'); })
108 .once(() => { order.push('once'); })
109 .when(() => false)
110 .post(() => { order.push('post1'); })
111 .run()
112 .then(() => {
113 assert.fail('when after once should fail.');
114 done();
115 });
116 } catch (err) {
117 assert.equal(err.toString(), 'Error: when() needs function to operate on.');
118 done();
119 }
120 });
121
122 it('when before pre throws error', (done) => {
123 try {
124 const order = [];
125 new Pipeline({ logger })
126 .when(() => false)
127 .post(() => { order.push('post1'); })
128 .run()
129 .then(() => {
130 assert.fail('when after once should fail.');
131 done();
132 });
133 } catch (err) {
134 assert.equal(err.toString(), 'Error: when() needs function to operate on.');
135 done();
136 }
137 });
138
139 it('Disables pre before unless', (done) => {
140 const order = [];
141 new Pipeline({ logger })
142 .pre(() => { order.push('pre0'); })
143 .pre(() => { order.push('disabled'); })
144 .unless(() => true)
145 .pre(() => { order.push('pre1'); })
146 .once(() => { order.push('once'); })
147 .post(() => { order.push('post0'); })
148 .post(() => { order.push('post1'); })
149 .run()
150 .then(() => {
151 assert.deepEqual(order, ['pre0', 'pre1', 'once', 'post0', 'post1']);
152 done();
153 })
154 .catch(done);
155 });
156
157 it('Enables pre before when', (done) => {
158 const order = [];
159 new Pipeline({ logger })
160 .pre(() => { order.push('pre0'); })
161 .pre(() => { order.push('enabled'); })
162 .when(() => true)
163 .pre(() => { order.push('pre1'); })
164 .once(() => { order.push('once'); })
165 .post(() => { order.push('post0'); })
166 .post(() => { order.push('post1'); })
167 .run()
168 .then(() => {
169 assert.deepEqual(order, ['pre0', 'enabled', 'pre1', 'once', 'post0', 'post1']);
170 done();
171 })
172 .catch(done);
173 });
174
175 it('Enables pre before unless', (done) => {
176 const order = [];
177 new Pipeline({ logger })
178 .pre(() => { order.push('pre0'); })
179 .pre(() => { order.push('enabled'); })
180 .unless(() => false)
181 .pre(() => { order.push('pre1'); })
182 .once(() => { order.push('once'); })
183 .post(() => { order.push('post0'); })
184 .post(() => { order.push('post1'); })
185 .run()
186 .then(() => {
187 assert.deepEqual(order, ['pre0', 'enabled', 'pre1', 'once', 'post0', 'post1']);
188 done();
189 })
190 .catch(done);
191 });
192
193 it('Executes promises', (done) => {
194 const retval = new Pipeline({ logger })
195 .post(() => Promise.resolve({ foo: 'bar' }))
196 .post((v) => {
197 assert.equal(v.foo, 'bar');
198 }).run();
199 retval.then((r) => {
200 assert.equal(r.foo, 'bar');
201 done();
202 });
203 });
204});