Skip to content
Open
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
40 changes: 19 additions & 21 deletions test/AUtilsTests.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,35 @@
"use strict";

var utils = require("../lib/AUtils");
var os = require("../lib/osTools");
var assert = require("assert");
var expect = require("chai").expect;
import assert from "assert";
import {expect} from "chai";
import {assertFileExists, fixFilePathSlashes, searchForExecutable, stringifyKeysInOrder} from "../lib/AUtils";
import {platform} from "../lib/osTools";

describe("AUtils", function () {
// only run these tests on Windows
if (os.platform.isWindows) {
if (platform.isWindows) {
describe("searchForExecutable", function () {
if (!process.env.APPVEYOR) {
describe("when using windows where.exe to find programs", function () {
it("ipconfig should be found once", function () {
var file = utils.searchForExecutable("ipconfig");
const file = searchForExecutable("ipconfig");

utils.assertFileExists(file);
assertFileExists(file);
});

it("notepad is found multiple times and we should just use the first one", function () {
var file = utils.searchForExecutable("ipconfig");
const file = searchForExecutable("ipconfig");

utils.assertFileExists(file);
assertFileExists(file);
});
});

describe("When looking for a program in program files", function () {
it("should find iexplorer", function () {
var file = utils.searchForExecutable(
const file = searchForExecutable(
"Internet Explorer",
"iexplore",
);

utils.assertFileExists(file);
assertFileExists(file);
});
});
}
Expand All @@ -40,27 +38,27 @@ describe("AUtils", function () {
describe("find linux executable", function () {
describe("when using linux 'which' to find programs", function () {
it("ifconfig should be found once", function () {
var file = utils.searchForExecutable("ifconfig");
const file = searchForExecutable("ifconfig");

utils.assertFileExists(file);
assertFileExists(file);
});
});
});
}

describe("fixFilePathSlashes", function () {
it("should replace back slashes with forward slashes", function () {
var before = "C:\\Windows\\System32\\ipconfig.exe";
var expected = "C:/Windows/System32/ipconfig.exe";
const before = "C:\\Windows\\System32\\ipconfig.exe";
const expected = "C:/Windows/System32/ipconfig.exe";

var fixed = utils.fixFilePathSlashes(before);
const fixed = fixFilePathSlashes(before);

assert.strictEqual(fixed, expected);
});
});

describe("stringifyKeysInOrder", function () {
var expected = `{
const expected = `{
"a": 1,
"aSub": {
"a": 1,
Expand All @@ -84,7 +82,7 @@ describe("AUtils", function () {
]
}`;
it("should return proper string with keys in order", function () {
var result = utils.stringifyKeysInOrder({
const result = stringifyKeysInOrder({
a: 1,
aSub: {
a: 1,
Expand All @@ -108,7 +106,7 @@ describe("AUtils", function () {
});

it("should return proper string with keys in order", function () {
var result = utils.stringifyKeysInOrder({
const result = stringifyKeysInOrder({
b: 2,
arr: [1, 2],
aSub: {
Expand Down
101 changes: 101 additions & 0 deletions test/approvalsTests.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import fs from "fs";
import path from "path";
import {scrubbers, verify, verifyAsJSON, verifyAsJSONAndScrub} from "../lib/Approvals";

const approvalOverrides = {
EOL: "\r\n",
normalizeLineEndingsTo: "\n",
appendEOL: false,
};

describe("approvals", function () {
describe("verify", function () {
it("can verify some manual text", function () {
const testName = "manualVerification";
const dataToVerify = "some stuff here";
verify(__dirname, testName, dataToVerify, approvalOverrides);
});

it("should verify an image", function () {
// copy of the Approvals logo but base64 encoded
const logoBase46 =
"data:image/png;base64,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";

// copied how to save a base64 image to disk by using
// http://stackoverflow.com/questions/6926016/nodejs-saving-a-base64-encoded-image-to-disk
const base64Data = logoBase46.replace(/^data:image\/png;base64,/, "");
const imgBuffer = Buffer.from(base64Data, "base64");

verify(__dirname, "basic-image-test-png", imgBuffer);
});

it("should verify an image 2", function () {
const testImage = path.join(__dirname, "basic-image-test-png.approved.png");
const imgBuffer = fs.readFileSync(testImage);

verify(__dirname, "basic-image-test-png", imgBuffer);
});
});

describe("verifyAsJSON", function () {
it("can verify some json object", function () {
const testName = "manualVerificationAsJSON";
const dataToVerify = {
x: "some stuff here",
y: 123,
};
verifyAsJSON(
__dirname,
testName,
dataToVerify,
approvalOverrides,
);
});

it("can be run with same JSON but keys ordered differently", function () {
const testName = "manualVerificationAsJSON-Ordered";
const dataToVerify = {
x: "some stuff here",
y: 123,
};
verifyAsJSON(
__dirname,
testName,
dataToVerify,
approvalOverrides,
);

const dataToVerify2 = {
y: 123,
x: "some stuff here",
};
verifyAsJSON(
__dirname,
testName,
dataToVerify2,
approvalOverrides,
);
});
});

describe("verifyAsJSONAndScrub", function () {
it("can verify and scrub some json object", function () {
const testName = "manualverifyAsJSONAndScrub";
const dataToVerify = {
x: "some stuff here",
y: 123,
sampleGuid: "3dda561f-903d-4a89-8c96-99ca6272e53d",
sampleGuid2: "11111111-1111-1111-1111-111111111111",
sampleGuidRepeated: "3dda561f-903d-4a89-8c96-99ca6272e53d",
};

verifyAsJSONAndScrub(
__dirname,
testName,
dataToVerify,
scrubbers.guidScrubber,
approvalOverrides,
);
});
});
});
8 changes: 4 additions & 4 deletions test/approvalsTestsReportedIssuesTests.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var approvals = require("../lib/Approvals");
var expect = require("chai").expect;
import {verify} from "../lib/Approvals";
import {expect} from "chai";

describe("When issues are reported on github", () => {
it("Issue #86: Issues with Buffer Compare Loop", () => {
Expand All @@ -22,13 +22,13 @@ describe("When issues are reported on github", () => {
var testName = "manualVerification";
var dataToVerify = "some stuff here";

approvals.verify(__dirname, testName, dataToVerify, approvalOverrides);
verify(__dirname, testName, dataToVerify, approvalOverrides);

approvalOverrides.forceApproveAll = false;
dataToVerify = "some stuff here - also";

expect(() => {
approvals.verify(__dirname, testName, dataToVerify, approvalOverrides);
verify(__dirname, testName, dataToVerify, approvalOverrides);
}).throws(Error);
});
});
9 changes: 3 additions & 6 deletions test/commandLineTests.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
"use strict";

/// <reference path="../typings/tests.d.ts"/>
var shelljs = require("shelljs");
var path = require("path");
import shelljs from "shelljs";
import path from "path";

describe("Command Line", function () {
it("Should run approvals CLI with basic text input", function (done) {
var cliTestCommand =
const cliTestCommand =
'echo "Hello\nWorld" | ' +
path.join("./", "bin", "index.js") +
" --reporter gitdiff --errorOnStaleApprovedFiles=false --outdir ./test commandlineTest";
Expand Down
33 changes: 16 additions & 17 deletions test/configTests.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import chai from "chai";
import {expect} from "chai";
import sinon from "sinon";
import fs from "fs";
import _ from "lodash";
import * as cfg from "../lib/config";
import {defaultConfig, getConfig, getHomeApprovalConfig, reset} from "../lib/config";

var expect = chai.expect;
describe("config.js - ", function () {
var fsExistsSyncStub;
var fsReadFileSyncStub;
let fsExistsSyncStub;
let fsReadFileSyncStub;

beforeEach(function () {
fsExistsSyncStub = null;
cfg.reset();
reset();
});

afterEach(function () {
Expand All @@ -32,20 +31,20 @@ describe("config.js - ", function () {
});

it("should not find config in user home directory", function () {
var configFile = cfg.getHomeApprovalConfig();
const configFile = getHomeApprovalConfig();

expect(configFile).to.not.exist;
});

it("should load default config", function () {
cfg.reset();
var configFile = cfg.getConfig();
expect(configFile).to.deep.equal(cfg.defaultConfig);
reset();
const configFile = getConfig();
expect(configFile).to.deep.equal(defaultConfig);
});
});

describe("when a config file exists in a user's home directory", function () {
var configToLoad;
let configToLoad;
beforeEach(function () {
configToLoad = {};

Expand All @@ -56,7 +55,7 @@ describe("config.js - ", function () {
fsReadFileSyncStub = sinon
.stub(fs, "readFileSync")
.callsFake(function () {
var data =
const data =
typeof configToLoad === "string"
? configToLoad
: JSON.stringify(configToLoad, null, " ");
Expand All @@ -65,7 +64,7 @@ describe("config.js - ", function () {
});

it("should find config in user home directory", function () {
var configFile = cfg.getHomeApprovalConfig();
const configFile = getHomeApprovalConfig();

expect(configFile).to.exist;
});
Expand All @@ -75,7 +74,7 @@ describe("config.js - ", function () {
reporters: ["gitdiff"],
};

var configFile = cfg.getHomeApprovalConfig();
const configFile = getHomeApprovalConfig();

expect(configFile?.reporters).to.deep.equal(["gitdiff"]);
});
Expand All @@ -91,9 +90,9 @@ describe("config.js - ", function () {
configToLoad = {
myConfig: true,
};
var expectedConfig = _.defaults(configToLoad, cfg.defaultConfig);
cfg.reset();
var configFile = cfg.getConfig();
const expectedConfig = _.defaults(configToLoad, defaultConfig);
reset();
const configFile = getConfig();
expect(configFile).to.deep.equal(expectedConfig);
});
});
Expand Down
20 changes: 9 additions & 11 deletions test/namerTests.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
"use strict";

var assert = require("assert");
var path = require("path");
var Namer = require("../lib/Namer").Namer;
import assert from "assert";
import path from "path";
import {Namer} from "../lib/Namer";

describe("Namer", function () {
describe("getReceivedFile & approvedFile", function () {
it("should format a path that has no trailing separator", function () {
var pathWithoutTrailingSlash = "C:\\temp";
var fileName = "foo.js";
var namer = new Namer(pathWithoutTrailingSlash, fileName);
const pathWithoutTrailingSlash = "C:\\temp";
const fileName = "foo.js";
const namer = new Namer(pathWithoutTrailingSlash, fileName);

assert.strictEqual(
namer.getReceivedFile("txt"),
Expand All @@ -23,9 +21,9 @@ describe("Namer", function () {
});

it("should clean up not normalized input", function () {
var pathWithoutTrailingSlash = "C:\\temp" + path.sep;
var fileName = "foo.js.";
var namer = new Namer(pathWithoutTrailingSlash, fileName);
const pathWithoutTrailingSlash = "C:\\temp" + path.sep;
const fileName = "foo.js.";
const namer = new Namer(pathWithoutTrailingSlash, fileName);

assert.strictEqual(
namer.getReceivedFile(".txt"),
Expand Down
Loading