Skip to content

Commit

Permalink
feat: Add all resolvers unit tests #12
Browse files Browse the repository at this point in the history
  • Loading branch information
regevbr committed Apr 11, 2020
1 parent d38de10 commit 8c7ba28
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 2 deletions.
38 changes: 37 additions & 1 deletion src/resolvers/ciResolver/impl/nvmHandler.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as yargsParser from 'yargs-parser';
import { injectable } from 'inversify';
import { Env, INvmHandler } from '../interfaces/INvmHandler';
import { Env, INvmHandler, EnvMatrix } from '../interfaces/INvmHandler';
import { ITargetMatcher } from '..';
import { Options } from 'yargs-parser';
import { parse } from 'shell-quote';
Expand All @@ -18,6 +18,29 @@ const yargsOptions: Options = {
},
};

const expendMatrixAux = (matrix: EnvMatrix, keys: string[], keyIndex: number, environments: Env[], env: Env): void => {
if (keyIndex >= keys.length) {
environments.push(env);
return;
}
const key = keys[keyIndex];
const values = matrix[key];
for (const value of values) {
const currentEnv: Env = {
...env,
[key]: value,
};
expendMatrixAux(matrix, keys, keyIndex + 1, environments, currentEnv);
}
};

const expendMatrix = (matrix: EnvMatrix): Env[] => {
const keys = Object.keys(matrix);
const environments: Env[] = [];
expendMatrixAux(matrix, keys, 0, environments, {});
return environments;
};

const envIdentity = (key: string): string => {
return key;
};
Expand All @@ -28,6 +51,19 @@ export class NvmHandler extends INvmHandler {
super();
}

public getNvmVersions(cmd: string, environments: Env[]): Set<string> {
const versions = new Set<string>();
environments.forEach((env) => {
versions.add(this.getNvmVersion(cmd, env));
});
return versions;
}

public getNvmVersionsFromMatrix(cmd: string, matrix: EnvMatrix): Set<string> {
const environments: Env[] = expendMatrix(matrix);
return this.getNvmVersions(cmd, environments);
}

public getNvmVersion(cmd: string, env: Env): string {
const argsArray = this.getNvmCommandArgs(cmd, env);
const parsedArgs = yargsParser(argsArray, yargsOptions);
Expand Down
5 changes: 4 additions & 1 deletion src/resolvers/ciResolver/interfaces/INvmHandler.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import { injectable } from 'inversify';

export type Env = Record<string, string>;
export type EnvMatrix = Record<string, string[]>;

@injectable()
export abstract class INvmHandler {
public abstract isNvmCommand(cmd: string): boolean;
public abstract getNvmVersion(cmd: string, end: Env): string;
public abstract getNvmVersion(cmd: string, env: Env): string;
public abstract getNvmVersions(cmd: string, environments: Env[]): Set<string>;
public abstract getNvmVersionsFromMatrix(cmd: string, matrix: EnvMatrix): Set<string>;
}
16 changes: 16 additions & 0 deletions test/src/resolvers/ciResolver/impl/nvmHandler.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,4 +179,20 @@ describe(`nvm handler`, () => {
});
});
});

describe(`get nvm versions`, () => {
it(`should return node versions with multiple environments`, () => {
expect(nvmHandler.getNvmVersions(`nvm install "\${NODE}"`, [{ NODE: `12` }, { NODE: `13` }])).toEqual(
new Set([`12`, `13`])
);
});
});

describe(`get nvm versions from matrix`, () => {
it(`should return node versions with env matrix`, () => {
expect(
nvmHandler.getNvmVersionsFromMatrix(`nvm install "\${NODE}"`, { NODE: [`12`, `13`], BLA: [`1`, `2`, `3`] })
).toEqual(new Set([`12`, `13`]));
});
});
});

0 comments on commit 8c7ba28

Please sign in to comment.