diff options
Diffstat (limited to 'data/extensions/https-everywhere@eff.org/test/update_test.js')
-rw-r--r-- | data/extensions/https-everywhere@eff.org/test/update_test.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/data/extensions/https-everywhere@eff.org/test/update_test.js b/data/extensions/https-everywhere@eff.org/test/update_test.js new file mode 100644 index 0000000..56ba04f --- /dev/null +++ b/data/extensions/https-everywhere@eff.org/test/update_test.js @@ -0,0 +1,69 @@ +'use strict' + +const assert = require('chai').assert, + update = require('../background-scripts/update'), + chrome = require("sinon-chrome"), + util = require('../background-scripts/util'), + atob = require("atob"), + TextDecoder = require('text-encoding').TextDecoder, + sinon = require('sinon'); + +const fs = require('fs'), + { update_channels } = require('../background-scripts/update_channels'), + pako = require('../external/pako-1.0.5/pako_inflate.min.js'); + +util.setDefaultLogLevel(util.WARN); + +describe('update.js', function() { + const example_rulesets_gz = fs.readFileSync(__dirname + '/example.rulesets.gz'); + + describe('applyStoredRulesets', function() { + beforeEach(() => { + chrome.flush(); + if(util.loadExtensionFile.restore){ util.loadExtensionFile.restore(); } + }); + + it('applies compressed rulesets from chrome.storage', function(done) { + let apply_promises = []; + + for(let update_channel of update_channels){ + const key = 'rulesets: ' + update_channel.name; + chrome.storage.local.get.withArgs(key).yields({[key]: example_rulesets_gz}); + } + + update.applyStoredRulesets({addFromJson: response => { + apply_promises.push(new Promise(resolve => { + assert.isArray(response); + assert.equal(response[0].name, "Example.com"); + resolve(); + })); + + if(apply_promises.length == update_channels.length){ + Promise.all(apply_promises).then(() => done()); + } + }}); + + }); + + it('applies rulesets from local extension file', function(done) { + for(let update_channel of update_channels){ + const key = 'rulesets: ' + update_channel.name; + chrome.storage.local.get.withArgs(key).yields({}); + } + + const example_rulesets_byte_array = pako.inflate(atob(example_rulesets_gz)); + const example_rulesets = new TextDecoder("utf-8").decode(example_rulesets_byte_array); + const example_rulesets_json = JSON.parse(example_rulesets); + + sinon.stub(util, "loadExtensionFile").returns(example_rulesets_json.rulesets); + + update.applyStoredRulesets({addFromJson: response => { + assert.isArray(response); + assert.equal(response[0].name, "Example.com"); + done(); + }}); + }); + + }); + +}) |