UNPKG

node-asset-compress

Version:

A lightweight library to perform integrity tests on your CakePHP asset_compress.ini file!

220 lines (179 loc) 6.91 kB
var AC = require('../src/AssetCompress'); var NAC = require('../src/NodeAssetCompress'); var NFP = require('node-file-parser'); describe('AssetCompress', function() { var asset_1 = 'data/1/asset_compress.ini'; it('should contain a "clean" function', function() { var asset = NAC.link(asset_1); expect(AC.clean).toBeUndefined(); expect(typeof asset.clean).toEqual('function'); }); it('should contain a "check" function', function() { var asset = NAC.link(asset_1); expect(AC.check).toBeUndefined(); expect(typeof asset.check).toEqual('function'); }); it('should contain a "fix" function', function() { var asset = NAC.link(asset_1); expect(AC.fix).toBeUndefined(); expect(typeof asset.fix).toEqual('function'); }); }); describe('AssetCompress.clean', function() { var asset_0 = 'data/0/asset_compress.ini'; var asset_1 = 'data/1/asset_compress.ini'; var asset_2 = 'data/2/asset_compress.ini'; var asset_3 = 'data/3/asset_compress.ini'; var asset_4 = 'data/4/asset_compress.ini'; function expectClean(file) { var original = NFP.link(asset_0).read().getRawContent(); var actual = NFP.link(file).read().getRawContent(); expect(actual).toEqual(original); } it('should remove all comments from the file', function() { NAC.link(asset_1).clean(); expectClean(asset_1); }); it('should remove all empty lines from the file', function() { NAC.link(asset_2).clean(); expectClean(asset_2); }); it('should remove all unneeded whitespace from the file', function() { NAC.link(asset_3).clean(); expectClean(asset_3); }); it('should do all of the above at the same time', function() { NAC.link(asset_4).clean(); expectClean(asset_4); }); }); describe('AssetCompress.check', function() { var asset_5 = 'data/5/asset_compress.ini'; var asset_6 = 'data/6/asset_compress.ini'; var asset_7 = 'data/7/asset_compress.ini'; var asset_8 = 'data/8/asset_compress.ini'; var asset_9 = 'data/9/asset_compress.ini'; it('should flatten test cases', function() { var test_1 = 'default.js'; var test_2 = ['default.js', 'calendar.js']; var test_3 = ['default.js', 'calendar.js', 'events.js']; var result = NAC.link(asset_5).check({ 'domain.com/home': { test_1: test_1, test_2: test_2 }, 'domain.com/user': { mobile: { test_3: test_3 } } }); expect(result.tests).toEqual({ 'domain.com/home.test_1': ['default.js'], 'domain.com/home.test_2': ['default.js', 'calendar.js'], 'domain.com/user.mobile.test_3': ['default.js', 'calendar.js', 'events.js'] }); }); it('should detect (and remove) duplicated test cases', function() { var test_1 = 'default.js'; var test_2 = ['default.js', 'calendar.js']; var test_3 = ['default.js', 'calendar.js', 'events.js']; var result = NAC.link(asset_6).check({ 'domain.com/home': { test_1: test_1, test_2: test_2 }, 'domain.com/user': { test_3: test_3, mobile: { test_4: test_3 }, tablet: { test_5: test_3 } } }); expect(result.duplicates).toEqual({ 'default.js,calendar.js,events.js': [ 'domain.com/user.test_3', 'domain.com/user.mobile.test_4', 'domain.com/user.tablet.test_5' ] }); expect(result.tests).toEqual({ 'domain.com/home.test_1': ['default.js'], 'domain.com/home.test_2': ['default.js', 'calendar.js'], 'domain.com/user.test_3': ['default.js', 'calendar.js', 'events.js'] }); }); it('should detect (and remove) test cases with non-existing sections', function() { var test_1 = 'made-up.js'; var test_2 = ['default.js', 'made-up.js']; var result = NAC.link(asset_7).check({ test_1: test_1, test_2: test_2 }); expect(result.tests).toEqual({}); expect(result.missing).toEqual([test_1]); }); it('should detect conflicting entries within a single section', function() { var test_1 = ['calendar.js', 'events.js']; var result = NAC.link(asset_8).check({ test_1: test_1 }); expect(result.conflicts.single).toEqual({ 'calendar.js': ['webroot/js/api/a.js', 'webroot/js/api/b.js'], 'events.js': ['webroot/js/api/f.js'] }); }); it('should detect conflicting entries within multiple sections', function() { var test_1 = ['calendar.js', 'events.js']; var test_2 = ['default.js', 'events.js', 'puppies.js']; var test_3 = ['default.js', 'calendar.js', 'puppies.js']; var result = NAC.link(asset_9).check({ test_1: test_1, test_2: test_2, test_3: test_3 }); expect(result.conflicts.multiple).toEqual({ 'webroot/js/api/f.js': ['events.js', 'puppies.js'], 'webroot/js/api/g.js': ['default.js', 'puppies.js', 'calendar.js'] }); }); }); describe('AssetCompress.fix', function() { var asset_0 = 'data/0/asset_compress.ini'; var asset_10 = 'data/10/asset_compress.ini'; var asset_11 = 'data/11/asset_compress.ini'; function expectClean(file) { var original = NFP.link(asset_0).read().getRawContent(); var actual = NFP.link(file).read().getRawContent(); expect(actual).toEqual(original); } it('should not be able to fix issues without manually checking', function() { var file = NAC.link(asset_10); var data; expect(function() { data = file.fix(); }).toThrow('Cannot fix issues without first checking for issues!'); expect(data).toBeUndefined(); }); it('should fix conflicting entries within a single section by default', function() { var test_1 = ['calendar.js', 'events.js']; var data; var result; var file = NAC.link(asset_11); data = file.check({ test_1: test_1 }); expect(data).toBeDefined(); expect(function() { result = file.fix(); }).not.toThrow(); expect(result).toBeDefined(); expect(result.fixes).toBeDefined(); expect(result.fixes.single).toBeDefined(); expect(result.fixes.single).toEqual(result.conflicts.single); expectClean(asset_11); }); });