unzip-crx-3
Version:
Unzip chrome extension files
93 lines (74 loc) • 2.83 kB
JavaScript
;
import expect from "unexpected";
import unzip from "../src";
import temp from "temp";
import path from "path";
import fs from "fs";
import mockfs from "mock-fs";
describe("unzip-crx", () => {
let tempDir;
before(() => {
temp.track();
});
beforeEach(() => {
tempDir = temp.mkdirSync("unzip-crx-test-files");
});
it("should unpack the given crx file", (done) => {
const unzipPath = path.resolve(tempDir, "ext");
const readmeFile = path.resolve(tempDir, "ext/README.md");
unzip("./test/fixtures/extension.crx", unzipPath)
.then(() => {
const file = fs.readFileSync(readmeFile, "utf8");
expect(file, "to equal", "# Crazy Readme File");
done();
})
.catch((err) => done(err));
});
it("should unpack the given regular zip file", (done) => {
const expectBinary = fs.readFileSync(
path.join(__dirname, "./fixtures/extension/test.bin")
);
const unzipPath = path.resolve(tempDir, "ext");
const readmeFile = path.resolve(tempDir, "ext/README.md");
const binaryFile = path.resolve(tempDir, "ext/test.bin");
unzip("./test/fixtures/extension-zipped.crx", unzipPath)
.then(() => {
const file = fs.readFileSync(readmeFile, "utf8");
const binaryContent = fs.readFileSync(binaryFile);
expect(file, "to equal", "# Crazy Readme File");
expect(binaryContent, "to equal", expectBinary);
done();
})
.catch((err) => done(err));
});
it("should throw if crx file header malformed", () => {
const unzipPath = path.resolve(tempDir, "ext");
return expect(
unzip("./test/fixtures/extension-malformed.crx", unzipPath),
"to be rejected with",
new Error("Invalid header: Does not start with Cr24")
);
});
it("should throw if crx version number is malformed", () => {
const unzipPath = path.resolve(tempDir, "ext");
return expect(
unzip("./test/fixtures/extension-malformed-v.crx", unzipPath),
"to be rejected with",
new Error("Unexpected crx format version number.")
);
});
describe("- ext dir is not writable", () => {
it("should throw if directory is not writable", () => {
const unzipPath = path.resolve(tempDir);
fs.chmodSync(unzipPath, "644");
return expect(
unzip("./test/fixtures/extension.crx", unzipPath),
"to be rejected with",
/EACCES: permission denied/
);
});
});
afterEach(() => {
temp.cleanupSync();
});
});