mirror of
https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
synced 2024-07-29 21:57:12 +00:00
278 lines
6.8 KiB
TypeScript
278 lines
6.8 KiB
TypeScript
import * as fse from "fs-extra";
|
|
import { expect } from "chai";
|
|
import path from "./assert_path";
|
|
import helper from "./helper";
|
|
import * as jetpack from "..";
|
|
|
|
describe("read", () => {
|
|
beforeEach(helper.setCleanTestCwd);
|
|
afterEach(helper.switchBackToCorrectCwd);
|
|
|
|
describe("reads file as a string", () => {
|
|
const preparations = () => {
|
|
fse.outputFileSync("file.txt", "abc");
|
|
};
|
|
|
|
const expectations = (content: any) => {
|
|
expect(content).to.equal("abc");
|
|
};
|
|
|
|
it("sync", () => {
|
|
preparations();
|
|
expectations(jetpack.read("file.txt")); // defaults to 'utf8'
|
|
expectations(jetpack.read("file.txt", "utf8")); // explicitly specified
|
|
});
|
|
|
|
it("async", done => {
|
|
preparations();
|
|
jetpack
|
|
.readAsync("file.txt") // defaults to 'utf8'
|
|
.then(content => {
|
|
expectations(content);
|
|
return jetpack.readAsync("file.txt", "utf8"); // explicitly said
|
|
})
|
|
.then(content => {
|
|
expectations(content);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("reads file as a Buffer", () => {
|
|
const preparations = () => {
|
|
fse.outputFileSync("file.txt", new Buffer([11, 22]));
|
|
};
|
|
|
|
const expectations = (content: Buffer) => {
|
|
expect(Buffer.isBuffer(content)).to.equal(true);
|
|
expect(content.length).to.equal(2);
|
|
expect(content[0]).to.equal(11);
|
|
expect(content[1]).to.equal(22);
|
|
};
|
|
|
|
it("sync", () => {
|
|
preparations();
|
|
expectations(jetpack.read("file.txt", "buffer"));
|
|
});
|
|
|
|
it("async", done => {
|
|
preparations();
|
|
jetpack.readAsync("file.txt", "buffer").then(content => {
|
|
expectations(content);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("reads file as JSON", () => {
|
|
const obj = {
|
|
utf8: "ąćłźż"
|
|
};
|
|
|
|
const preparations = () => {
|
|
fse.outputFileSync("file.json", JSON.stringify(obj));
|
|
};
|
|
|
|
const expectations = (content: any) => {
|
|
expect(content).to.eql(obj);
|
|
};
|
|
|
|
it("sync", () => {
|
|
preparations();
|
|
expectations(jetpack.read("file.json", "json"));
|
|
});
|
|
|
|
it("async", done => {
|
|
preparations();
|
|
jetpack.readAsync("file.json", "json").then(content => {
|
|
expectations(content);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("gives nice error message when JSON parsing failed", () => {
|
|
const preparations = () => {
|
|
fse.outputFileSync("file.json", '{ "abc: 123 }'); // Malformed JSON
|
|
};
|
|
|
|
const expectations = (err: any) => {
|
|
expect(err.message).to.have.string("JSON parsing failed while reading");
|
|
};
|
|
|
|
it("sync", () => {
|
|
preparations();
|
|
try {
|
|
jetpack.read("file.json", "json");
|
|
throw new Error("Expected error to be thrown");
|
|
} catch (err) {
|
|
expectations(err);
|
|
}
|
|
});
|
|
|
|
it("async", done => {
|
|
preparations();
|
|
jetpack.readAsync("file.json", "json").catch(err => {
|
|
expectations(err);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("reads file as JSON with Date parsing", () => {
|
|
const obj = {
|
|
utf8: "ąćłźż",
|
|
date: new Date()
|
|
};
|
|
|
|
const preparations = () => {
|
|
fse.outputFileSync("file.json", JSON.stringify(obj));
|
|
};
|
|
|
|
const expectations = (content: any) => {
|
|
expect(content).to.eql(obj);
|
|
};
|
|
|
|
it("sync", () => {
|
|
preparations();
|
|
expectations(jetpack.read("file.json", "jsonWithDates"));
|
|
});
|
|
|
|
it("async", done => {
|
|
preparations();
|
|
jetpack.readAsync("file.json", "jsonWithDates").then(content => {
|
|
expectations(content);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("returns undefined if file doesn't exist", () => {
|
|
const expectations = (content: any) => {
|
|
expect(content).to.equal(undefined);
|
|
};
|
|
|
|
it("sync", () => {
|
|
expectations(jetpack.read("nonexistent.txt"));
|
|
expectations(jetpack.read("nonexistent.txt", "json"));
|
|
expectations(jetpack.read("nonexistent.txt", "buffer"));
|
|
});
|
|
|
|
it("async", done => {
|
|
jetpack
|
|
.readAsync("nonexistent.txt")
|
|
.then(content => {
|
|
expectations(content);
|
|
return jetpack.readAsync("nonexistent.txt", "json");
|
|
})
|
|
.then(content => {
|
|
expectations(content);
|
|
return jetpack.readAsync("nonexistent.txt", "buffer");
|
|
})
|
|
.then(content => {
|
|
expectations(content);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("throws if given path is a directory", () => {
|
|
const preparations = () => {
|
|
fse.mkdirsSync("dir");
|
|
};
|
|
|
|
const expectations = (err: any) => {
|
|
expect(err.code).to.equal("EISDIR");
|
|
};
|
|
|
|
it("sync", () => {
|
|
preparations();
|
|
try {
|
|
jetpack.read("dir");
|
|
throw new Error("Expected error to be thrown");
|
|
} catch (err) {
|
|
expectations(err);
|
|
}
|
|
});
|
|
|
|
it("async", done => {
|
|
preparations();
|
|
jetpack.readAsync("dir").catch(err => {
|
|
expectations(err);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("respects internal CWD of jetpack instance", () => {
|
|
const preparations = () => {
|
|
fse.outputFileSync("a/file.txt", "abc");
|
|
};
|
|
|
|
const expectations = (data: any) => {
|
|
expect(data).to.equal("abc");
|
|
};
|
|
|
|
it("sync", () => {
|
|
const jetContext = jetpack.cwd("a");
|
|
preparations();
|
|
expectations(jetContext.read("file.txt"));
|
|
});
|
|
|
|
it("async", done => {
|
|
const jetContext = jetpack.cwd("a");
|
|
preparations();
|
|
jetContext.readAsync("file.txt").then(data => {
|
|
expectations(data);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("input validation", () => {
|
|
const tests = [
|
|
{ type: "sync", method: jetpack.read as any, methodName: "read" },
|
|
{
|
|
type: "async",
|
|
method: jetpack.readAsync as any,
|
|
methodName: "readAsync"
|
|
}
|
|
];
|
|
|
|
describe('"path" argument', () => {
|
|
tests.forEach(test => {
|
|
it(test.type, () => {
|
|
expect(() => {
|
|
test.method(undefined, "xyz");
|
|
}).to.throw(
|
|
`Argument "path" passed to ${
|
|
test.methodName
|
|
}(path, returnAs) must be a string. Received undefined`
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('"returnAs" argument', () => {
|
|
tests.forEach(test => {
|
|
it(test.type, () => {
|
|
expect(() => {
|
|
test.method("abc", true);
|
|
}).to.throw(
|
|
`Argument "returnAs" passed to ${
|
|
test.methodName
|
|
}(path, returnAs) must be a string or an undefined. Received boolean`
|
|
);
|
|
expect(() => {
|
|
test.method("abc", "foo");
|
|
}).to.throw(
|
|
`Argument "returnAs" passed to ${
|
|
test.methodName
|
|
}(path, returnAs) must have one of values: utf8, buffer, json, jsonWithDates`
|
|
);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|