secret-polar-reworks
Version:
Polar is a development environment to compile, deploy, test, run scrt contracts on different networks.
81 lines (69 loc) • 2.25 kB
text/typescript
import * as fs from "fs";
import * as fsExtra from "fs-extra";
import path from "path";
import { TASK_CLEAN } from "../../src/builtin-tasks/task-names";
import { PolarRuntimeEnvironment } from "../../src/types";
import { testFixtureOutputFile } from "./constants";
import { useEnvironment } from "./environment";
/**
* This helper adds mocha hooks to run the tests inside one of the projects
* from test/fixture-projects.
*
* @param projectName The base name of the folder with the project to use.
*/
export function useFixtureProject (projectName: string): void {
let projectPath: string;
let prevWorkingDir: string;
before(() => {
projectPath = getFixtureProjectPath(projectName);
prevWorkingDir = process.cwd();
process.chdir(projectPath);
});
after(() => {
process.chdir(prevWorkingDir);
});
}
export function getFixtureProjectPath (
projectName: string
): string {
const projectPath = path.join(
__dirname,
"..",
"fixture-projects",
projectName
);
if (!fs.existsSync(projectPath)) {
throw new Error(`Fixture project ${projectName} doesn't exist`);
}
return fs.realpathSync(projectPath);
}
/**
* Creates a fresh copy of a fixture project, and uses it for test (as `useFixtureProject`).
* The copied project name is `projecName + "-tmp"`. If it already exists an exception
* is thrown.
*/
export function useFixtureProjectCopy (srcProjectName: string): void {
const project = srcProjectName + "-tmp";
const srcProjectPath = getFixtureProjectPath(srcProjectName);
const projectPath = path.join(srcProjectPath, "..", project);
fsExtra.copySync(srcProjectPath, projectPath);
useFixtureProject(project);
after(() => fsExtra.removeSync(projectPath));
}
/**
* Allows tests to interact with a clean fixture project.
* Allows to inspect the output file after running the test by cleaning before running.
*/
export function useCleanFixtureProject (projectName: string): void {
useFixtureProject(projectName);
useEnvironment(async (polarEnv: PolarRuntimeEnvironment) => {
return await polarEnv.run(TASK_CLEAN, {});
});
beforeEach(function () {
try {
fs.unlinkSync(testFixtureOutputFile);
} catch (err) {
// ignored
}
});
}