UNPKG

4.17 kBJavaScriptView Raw
1'use strict';
2
3var ServiceWorkerBuilder = require('../lib/service-worker-builder');
4var assert = require('chai').assert;
5var fs = require('fs');
6var path = require('path');
7var helper = require('broccoli-test-helper');
8var Babel = require('broccoli-babel-transpiler');
9var EmberCliBabel = require('ember-cli-babel');
10
11var fixturePath = path.join(__dirname, 'fixtures');
12var createBuilder = helper.createBuilder;
13var serviceWorkerFilename = 'sw.js';
14
15var generatePlugin = function(name, projectPath) {
16 return {
17 pkg: { name: name },
18 root: path.join(fixturePath, projectPath),
19 };
20};
21
22describe('Service Worker Builder', () => {
23 let app;
24 let build;
25 let output;
26
27 beforeEach(() => {
28
29 build = function(options, type) {
30 let subject = new ServiceWorkerBuilder(options).build(type);
31 output = createBuilder(subject);
32 return output.build();
33 };
34
35 app = {
36 treeGenerator: (dir) => dir,
37 project: {
38 addons: [
39 {
40 name: 'ember-cli-babel',
41 transpileTree(tree, options) {
42 return new Babel(tree, {
43 annotation: "Babel: app-with-sw",
44 babelrc: false,
45 highlightCode: false,
46 sourceMaps: false,
47 presets: [
48 EmberCliBabel._getPresetEnv({ 'ember-cli-babel': { compileModules: false } }),
49 ].filter(Boolean)
50 });
51 }
52 }
53 ]
54 },
55 };
56 });
57
58 afterEach(() => output.dispose());
59
60 it('returns a tree with the sw.js file', () => {
61 let plugins = [generatePlugin('test-project', 'builder-test')];
62 return build({ app, plugins, serviceWorkerFilename }, 'service-worker').then(() => {
63 let files = output.read();
64 assert.property(files, serviceWorkerFilename);
65 });
66 });
67
68 it('returns a tree with a custom service worker file', () => {
69 let plugins = [generatePlugin('test-project', 'builder-test')];
70 return build({ app, plugins, serviceWorkerFilename: 'kermit.js' }, 'service-worker').then(() => {
71 let files = output.read();
72 assert.property(files, 'kermit.js');
73 });
74 });
75
76 it('returns a tree with the sw-registration.js file', () => {
77 let plugins = [generatePlugin('test-project', 'builder-test')];
78 return build({ app, plugins }, 'service-worker-registration').then(() => {
79 let files = output.read();
80 assert.property(files, 'sw-registration.js');
81 });
82 });
83
84 it('transpiles code with babel', () => {
85 let plugins = [generatePlugin('test-project', 'builder-test/babel')];
86 return build({ app, plugins, serviceWorkerFilename }, 'service-worker').then(() => {
87 let expected = `(function () {
88 'use strict';
89
90 var CONSTANT = 42;
91 self.addEventListener('fetch', function () {
92 var x = CONSTANT + 1;
93 return x;
94 });
95
96}());
97`;
98 let files = output.read();
99 assert.property(files, serviceWorkerFilename);
100 assert.equal(files[serviceWorkerFilename], expected);
101 });
102 });
103
104 it('uses rollup to concat all modules in a file', () => {
105 let plugins = [
106 generatePlugin('plugin-a', 'builder-test/rollup/plugin-a'),
107 generatePlugin('plugin-b', 'builder-test/rollup/plugin-b')
108 ];
109
110 return build({ app, plugins, serviceWorkerFilename }, 'service-worker')
111 .then((results) => {
112 let expected = `(function () {
113 'use strict';
114
115 var CONSTANT = 42;
116
117 self.addEventListener('fetch', function () {
118 var x = CONSTANT + 1;
119 return x;
120 });
121
122}());
123`;
124
125 let files = output.read();
126 assert.property(files, serviceWorkerFilename);
127 assert.equal(files[serviceWorkerFilename], expected);
128 });
129 });
130
131 it('uglifies the code when `minifyJS` is enabled', () => {
132 let plugins = [generatePlugin('test-project', 'builder-test')];
133 return build({ app, plugins, serviceWorkerFilename, minifyJS: { enabled: true } }, 'service-worker')
134 .then((results) => {
135 let expected = '\n//# sourceMappingURL=sw.map';
136
137 let files = output.read();
138 assert.property(files, serviceWorkerFilename);
139 assert.equal(files[serviceWorkerFilename], expected);
140 });
141 });
142});