Skip to content

Commit

Permalink
Allow passing in the contents of a dangerfile - incase you're working…
Browse files Browse the repository at this point in the history
… in-memory, like peril does
  • Loading branch information
orta committed Aug 13, 2017
1 parent 0a8f27e commit 08f2193
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 16 deletions.
2 changes: 1 addition & 1 deletion source/commands/danger-pr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ async function runDanger(source: FakeCI, platform: GitHub, file: string) {
const exec = new Executor(source, platform, config)

const runtimeEnv = await exec.setupDanger()
const results = await runDangerfileEnvironment(file, runtimeEnv)
const results = await runDangerfileEnvironment(file, undefined, runtimeEnv)
if (program["repl"]) {
openRepl(runtimeEnv.sandbox)
} else {
Expand Down
8 changes: 6 additions & 2 deletions source/runner/DangerfileRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,15 @@ export type TranspileType = null | "babel" | "typescript"
* @param {any} environment the results of createDangerfileRuntimeEnvironment
* @returns {DangerResults} the results of the run
*/
export async function runDangerfileEnvironment(filename: string, environment: NodeVMOptions): Promise<DangerResults> {
export async function runDangerfileEnvironment(
filename: string,
originalContents: string | undefined,
environment: NodeVMOptions
): Promise<DangerResults> {
const vm = new NodeVM(environment)

// Require our dangerfile
const originalContents = fs.readFileSync(filename, "utf8")
originalContents = originalContents || fs.readFileSync(filename, "utf8")
let content = cleanDangerfile(originalContents)

// TODO: Relative imports get TS/Babel
Expand Down
2 changes: 1 addition & 1 deletion source/runner/Executor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export class Executor {
// If an eval of the Dangerfile fails, we should generate a
// message that can go back to the CI
try {
results = await runDangerfileEnvironment(file, runtime)
results = await runDangerfileEnvironment(file, undefined, runtime)
} catch (error) {
results = this.resultsForError(error)
}
Expand Down
28 changes: 16 additions & 12 deletions source/runner/_tests/_danger_runner.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ describe("with fixtures", () => {
it("handles a blank Dangerfile", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileEmpty.js"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileEmpty.js"), undefined, runtime)

expect(results).toEqual({
fails: [],
Expand All @@ -48,7 +48,7 @@ describe("with fixtures", () => {
it("handles a full set of messages", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileFullMessages.js"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileFullMessages.js"), undefined, runtime)

expect(results).toEqual({
fails: [{ message: "this is a failure" }],
Expand All @@ -63,7 +63,7 @@ describe("with fixtures", () => {
const runtime = await createDangerfileRuntimeEnvironment(context)

try {
await runDangerfileEnvironment(resolve(fixtures, "__DangerfileBadSyntax.js"), runtime)
await runDangerfileEnvironment(resolve(fixtures, "__DangerfileBadSyntax.js"), undefined, runtime)
throw new Error("Do not get to this")
} catch (e) {
// expect(e.message === ("Do not get to this")).toBeFalsy()
Expand All @@ -74,13 +74,13 @@ describe("with fixtures", () => {
it.skip("handles relative imports correctly in Babel", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
await runDangerfileEnvironment(resolve(fixtures, "__DangerfileImportRelative.js"), runtime)
await runDangerfileEnvironment(resolve(fixtures, "__DangerfileImportRelative.js"), undefined, runtime)
})

it("handles scheduled (async) code", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileScheduled.js"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileScheduled.js"), undefined, runtime)
expect(results).toEqual({
fails: [],
messages: [],
Expand All @@ -92,7 +92,11 @@ describe("with fixtures", () => {
it("handles multiple scheduled statements and all message types", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileMultiScheduled.js"), runtime)
const results = await runDangerfileEnvironment(
resolve(fixtures, "__DangerfileMultiScheduled.js"),
undefined,
runtime
)
expect(results).toEqual({
fails: [{ message: "Asynchronous Failure" }],
messages: [{ message: "Asynchronous Message" }],
Expand All @@ -104,7 +108,7 @@ describe("with fixtures", () => {
it("in Typescript it handles multiple scheduled statements and all message types", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileAsync.ts"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileAsync.ts"), undefined, runtime)
expect(results.warnings).toEqual([
{
message: "Async Function",
Expand All @@ -119,7 +123,7 @@ describe("with fixtures", () => {
// this test takes *forever* because of babel-polyfill being required
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileAsync.js"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileAsync.js"), undefined, runtime)
expect(results.warnings).toEqual([
{
message: "Async Function",
Expand All @@ -134,7 +138,7 @@ describe("with fixtures", () => {
// this test takes *forever* because of babel-polyfill being required
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileAsync.ts"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileAsync.ts"), undefined, runtime)
expect(results.warnings).toEqual([
{
message: "Async Function",
Expand All @@ -148,7 +152,7 @@ describe("with fixtures", () => {
it("can schedule callback-based promised ", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileCallback.js"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileCallback.js"), undefined, runtime)
expect(results.warnings).toEqual([
{
message: "Scheduled a callback",
Expand All @@ -159,7 +163,7 @@ describe("with fixtures", () => {
it("can handle TypeScript based Dangerfiles", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileTypeScript.ts"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileTypeScript.ts"), undefined, runtime)
expect(results.messages).toEqual([
{
message: "Honey, we got Types",
Expand All @@ -170,7 +174,7 @@ describe("with fixtures", () => {
it("can handle a plugin (which is already used in Danger)", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfilePlugin.js"), runtime)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfilePlugin.js"), undefined, runtime)

expect(results.fails[0].message).toContain("@types dependencies were added to package.json")
})
Expand Down

0 comments on commit 08f2193

Please sign in to comment.