Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: add --ordering unit tests with chai #357

Merged
merged 3 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ jobs:
test:
name: Test
strategy:
fail-fast: false
matrix:
node-version:
- '20.10'
Expand Down
6 changes: 6 additions & 0 deletions .mocharc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
'watch-files': ['test/**/*.js', 'lib/**/*.js'],
recursive: true,
file: './mocha.setup.js', // setup file before everything else loads
'forbid-only': process.env.CI ?? false, // make sure no `test.only` is merged into `main`
};
4 changes: 4 additions & 0 deletions mocha.setup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
const chai = require('chai');
const { jestSnapshotPlugin } = require('mocha-chai-jest-snapshot');

chai.use(jestSnapshotPlugin());
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@
"scripts": {
"build": "tsc",
"mocha": "xvfb-maybe electron-mocha --reporter spec && mocha --reporter spec",
"mocha:update": "UPDATE_SNAPSHOT=true yarn mocha",
"mocha:watch": "mocha --watch",
"test": "yarn lint && yarn mocha",
"lint": "yarn prettier:check",
"prettier": "prettier \"src/**/*.ts\" \"test/**/*.js\"",
"prettier": "prettier \"src/**/*.ts\" \"test/**/*.js\" \"*.js\"",
"prettier:check": "yarn prettier --check",
"prettier:write": "yarn prettier --write",
"prepare": "tsc"
Expand All @@ -44,10 +46,12 @@
"devDependencies": {
"@types/minimatch": "^3.0.5",
"@types/node": "^12.0.0",
"chai": "^4.5.0",
"electron": "^22.0.0",
"electron-mocha": "^13.0.1",
"lodash": "^4.17.15",
"mocha": "^10.1.0",
"mocha-chai-jest-snapshot": "^1.1.6",
"prettier": "^3.3.3",
"rimraf": "^3.0.2",
"typescript": "^5.5.4",
Expand Down
7 changes: 7 additions & 0 deletions src/asar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ export async function createPackage(src: string, dest: string) {
export type CreateOptions = {
dot?: boolean;
globOptions?: IOptions;
/**
* Path to a file containing the list of relative filepaths relative to `src` and the specific order they should be inserted into the asar.
* Formats allowed below:
* filepath
* : filepath
* <anything>:filepath
*/
ordering?: string;
pattern?: string;
transform?: (filePath: string) => NodeJS.ReadWriteStream | void;
Expand Down
276 changes: 276 additions & 0 deletions test/__snapshots__/cli-spec.js.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,276 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`command line interface should respect ordering file (format: "\${filepath}") 1`] = `
Object {
"files": Object {
"private": Object {
"files": Object {
"var": Object {
"files": Object {
"app": Object {
"files": Object {
"file.txt": Object {
"link": "private/var/file.txt",
},
},
},
"file.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
],
"hash": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
},
"offset": "15",
"size": 11,
},
"file1.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"5b41362bc82b7f3d56edc5a306db22105707d01ff4819e26faef9724a2d406c9",
],
"hash": "5b41362bc82b7f3d56edc5a306db22105707d01ff4819e26faef9724a2d406c9",
},
"offset": "10",
"size": 5,
},
"file2.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"d98cf53e0c8b77c14a96358d5b69584225b4bb9026423cbc2f7b0161894c402c",
],
"hash": "d98cf53e0c8b77c14a96358d5b69584225b4bb9026423cbc2f7b0161894c402c",
},
"offset": "5",
"size": 5,
},
"file3.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"f60f2d65da046fcaaf8a10bd96b5630104b629e111aff46ce89792e1caa11b18",
],
"hash": "f60f2d65da046fcaaf8a10bd96b5630104b629e111aff46ce89792e1caa11b18",
},
"offset": "0",
"size": 5,
},
},
},
},
},
"var": Object {
"link": "private/var",
},
},
}
`;

exports[`command line interface should respect ordering file (format: "\${random number} : \${filepath}") 1`] = `
Object {
"files": Object {
"private": Object {
"files": Object {
"var": Object {
"files": Object {
"app": Object {
"files": Object {
"file.txt": Object {
"link": "private/var/file.txt",
},
},
},
"file.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
],
"hash": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
},
"offset": "15",
"size": 11,
},
"file1.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"5b41362bc82b7f3d56edc5a306db22105707d01ff4819e26faef9724a2d406c9",
],
"hash": "5b41362bc82b7f3d56edc5a306db22105707d01ff4819e26faef9724a2d406c9",
},
"offset": "10",
"size": 5,
},
"file2.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"d98cf53e0c8b77c14a96358d5b69584225b4bb9026423cbc2f7b0161894c402c",
],
"hash": "d98cf53e0c8b77c14a96358d5b69584225b4bb9026423cbc2f7b0161894c402c",
},
"offset": "5",
"size": 5,
},
"file3.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"f60f2d65da046fcaaf8a10bd96b5630104b629e111aff46ce89792e1caa11b18",
],
"hash": "f60f2d65da046fcaaf8a10bd96b5630104b629e111aff46ce89792e1caa11b18",
},
"offset": "0",
"size": 5,
},
},
},
},
},
"var": Object {
"link": "private/var",
},
},
}
`;

exports[`command line interface should respect ordering file (format: ": \${filepath}") 1`] = `
Object {
"files": Object {
"private": Object {
"files": Object {
"var": Object {
"files": Object {
"app": Object {
"files": Object {
"file.txt": Object {
"link": "private/var/file.txt",
},
},
},
"file.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
],
"hash": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
},
"offset": "15",
"size": 11,
},
"file1.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"5b41362bc82b7f3d56edc5a306db22105707d01ff4819e26faef9724a2d406c9",
],
"hash": "5b41362bc82b7f3d56edc5a306db22105707d01ff4819e26faef9724a2d406c9",
},
"offset": "10",
"size": 5,
},
"file2.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"d98cf53e0c8b77c14a96358d5b69584225b4bb9026423cbc2f7b0161894c402c",
],
"hash": "d98cf53e0c8b77c14a96358d5b69584225b4bb9026423cbc2f7b0161894c402c",
},
"offset": "5",
"size": 5,
},
"file3.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"f60f2d65da046fcaaf8a10bd96b5630104b629e111aff46ce89792e1caa11b18",
],
"hash": "f60f2d65da046fcaaf8a10bd96b5630104b629e111aff46ce89792e1caa11b18",
},
"offset": "0",
"size": 5,
},
},
},
},
},
"var": Object {
"link": "private/var",
},
},
}
`;

exports[`command line interface should unpack static framework with all underlying symlinks unpacked 1`] = `
Object {
"files": Object {
"private": Object {
"files": Object {
"var": Object {
"files": Object {
"app": Object {
"files": Object {
"file.txt": Object {
"link": "private/var/file.txt",
"unpacked": true,
},
},
},
"file.txt": Object {
"integrity": Object {
"algorithm": "SHA256",
"blockSize": 4194304,
"blocks": Array [
"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
],
"hash": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
},
"size": 11,
"unpacked": true,
},
},
},
},
},
"var": Object {
"link": "private/var",
"unpacked": true,
},
},
}
`;

exports[`command line interface should unpack static framework with all underlying symlinks unpacked 2`] = `
Array [
Object {
"content": "hello world",
"name": "private/var/app/file.txt",
},
"private/var/app",
Object {
"content": "hello world",
"name": "private/var/file.txt",
},
"private/var",
"private",
"var",
]
`;
3 changes: 2 additions & 1 deletion test/api-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const compDirs = require('./util/compareDirectories');
const compFileLists = require('./util/compareFileLists');
const { compFiles, isSymbolicLinkSync } = require('./util/compareFiles');
const transform = require('./util/transformStream');
const { TEST_APPS_DIR } = require('./util/constants');

async function assertPackageListEquals(actualList, expectedFilename) {
const expected = await fs.readFile(expectedFilename, 'utf8');
Expand All @@ -19,7 +20,7 @@ async function assertPackageListEquals(actualList, expectedFilename) {

describe('api', function () {
beforeEach(() => {
rimraf.sync(path.join(__dirname, '..', 'tmp'), fs);
rimraf.sync(TEST_APPS_DIR, fs);
});

it('should create archive from directory', async () => {
Expand Down
Loading
Loading