-
Notifications
You must be signed in to change notification settings - Fork 68
Expand file tree
/
Copy pathAzureSqlActionHelper.test.ts
More file actions
78 lines (61 loc) · 3.11 KB
/
AzureSqlActionHelper.test.ts
File metadata and controls
78 lines (61 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import * as fs from 'fs';
import * as semver from 'semver';
import AzureSqlActionHelper from "../src/AzureSqlActionHelper";
import AzureSqlAction, { IBuildAndPublishInputs, IDacpacActionInputs, ActionType, SqlPackageAction, IActionInputs } from "../src/AzureSqlAction";
import { getInputs } from './AzureSqlAction.test';
jest.mock('fs', () => {
return {
__esModule: true,
...jest.requireActual('fs')
};
});
describe('AzureSqlActionHelper tests', () => {
afterEach(() => {
jest.restoreAllMocks();
});
const versions = [ // returned from sqlpackage, validated version expected
['162.3.563.1', '162.3.563'], // GA version
['162.4.101.0', '162.4.101'], // GA version
['162.3.562-preview', '162.3.562'], // preview version
['15.0.5164.1', '15.0.5164'] // old version
];
// checks parsing logic used from semver
describe('tests semver parsing for potential sqlpackage version values', () => {
it.each(versions)('should parse %s version correctly', (versionReturned, versionExpected) => {
let semverExpected = semver.coerce(versionExpected);
let semverTested = semver.coerce(versionReturned);
expect(semverTested).toEqual(semverExpected);
});
});
// checks sorting logic used from semver
describe('tests sorting of versions to select latest version', () => {
it('should select latest version', () => {
let versionArray: semver.SemVer[] = [];
versions.forEach(([versionReturned, versionExpected]) => {
versionArray.push(semver.coerce(versionReturned) ?? new semver.SemVer('0.0.0'));
});
let latestVersion = semver.rsort(versionArray)[0];
let latestVersionExpected = semver.coerce(versions[1][1]);
expect(latestVersion).toEqual(latestVersionExpected);
});
});
// ensures the sqlpackagepath input overrides the version check
describe('sqlpackagepath input options', () => {
const sqlpackagepaths = ['//custom/path/to/sqlpackage', 'c:/Program Files/Sqlpackage/sqlpackage'];
it.each(sqlpackagepaths)('should return sqlpackagepath if provided', async (path) => {
let inputs = getInputs(ActionType.DacpacAction) as IDacpacActionInputs;
inputs.sqlpackagePath = path;
let fileExistsSpy = jest.spyOn(fs, 'existsSync').mockReturnValue(true);
let sqlpackagePath = await AzureSqlActionHelper.getSqlPackagePath(inputs);
expect(fileExistsSpy).toHaveBeenCalledWith(inputs.sqlpackagePath);
expect(sqlpackagePath).toEqual(path);
});
});
it('throws if SqlPackage.exe fails to be found at user-specified location', async () => {
let inputs = getInputs(ActionType.DacpacAction) as IDacpacActionInputs;
let action = new AzureSqlAction(inputs);
let getSqlPackagePathSpy = jest.spyOn(AzureSqlActionHelper, 'getSqlPackagePath').mockRejectedValue(1);
expect(await action.execute().catch(() => null)).rejects;
expect(getSqlPackagePathSpy).toHaveBeenCalledTimes(1);
});
});