|
1 | 1 | defmodule ElixirScript.CommandLineTest do
|
2 | 2 | use ExUnit.Case, async: false
|
| 3 | + import ExUnit.CaptureIO |
| 4 | + import Mox |
3 | 5 |
|
4 | 6 | alias ElixirScript.CommandLine
|
5 | 7 |
|
| 8 | + setup :verify_on_exit! |
| 9 | + |
| 10 | + describe "main/1" do |
| 11 | + test "passes script and github_token to script runner" do |
| 12 | + expect(ElixirScript.ScriptRunnerMock, :run, fn "foo", [github_token: "token"] -> "bar" end) |
| 13 | + |
| 14 | + capture_io(fn -> |
| 15 | + CommandLine.main(["--script", "foo", "--gh-token", "token"]) |
| 16 | + end) |
| 17 | + end |
| 18 | + |
| 19 | + test "outputs the result of script runner to GitHub command" do |
| 20 | + stub(ElixirScript.ScriptRunnerMock, :run, fn _, _ -> "bar" end) |
| 21 | + safe_delete_env("GITHUB_OUTPUT") |
| 22 | + |
| 23 | + io = |
| 24 | + capture_io(fn -> |
| 25 | + CommandLine.main(["--script", "foo", "--gh-token", "token"]) |
| 26 | + end) |
| 27 | + |
| 28 | + assert io == "::set-output name=result::bar\n" |
| 29 | + end |
| 30 | + |
| 31 | + test "outputs result to GitHub environment commands if available" do |
| 32 | + {:ok, file_path} = safe_temp_path() |
| 33 | + safe_put_env("GITHUB_OUTPUT", file_path) |
| 34 | + |
| 35 | + stub(ElixirScript.ScriptRunnerMock, :run, fn _, _ -> "bar" end) |
| 36 | + |
| 37 | + capture_io(fn -> |
| 38 | + CommandLine.main(["--script", "foo", "--gh-token", "token"]) |
| 39 | + end) |
| 40 | + |
| 41 | + regex = |
| 42 | + ~r/result<<ghadelimiter_#Ref<(?:\d|\.)+>\n(?<result>.*)\nghadelimiter_#Ref<(?:\d|\.)+>\n/ |
| 43 | + |
| 44 | + output = File.read!(file_path) |
| 45 | + assert [_, result] = Regex.run(regex, output), "Regex failed on: " <> output |
| 46 | + assert result == "bar" |
| 47 | + end |
| 48 | + end |
| 49 | + |
6 | 50 | describe "parse_args!/1" do
|
7 | 51 | @script "IO.puts('Hello, world!')"
|
8 | 52 |
|
@@ -84,4 +128,17 @@ defmodule ElixirScript.CommandLineTest do
|
84 | 128 | else: System.delete_env(varname)
|
85 | 129 | end)
|
86 | 130 | end
|
| 131 | + |
| 132 | + def safe_delete_env(varname) do |
| 133 | + original_value = System.get_env(varname) |
| 134 | + System.delete_env(varname) |
| 135 | + |
| 136 | + on_exit(fn -> if original_value, do: System.put_env(varname, original_value) end) |
| 137 | + end |
| 138 | + |
| 139 | + def safe_temp_path do |
| 140 | + {:ok, file_path} = Temp.open("my-file", &IO.write(&1, "")) |
| 141 | + on_exit(fn -> File.rm(file_path) end) |
| 142 | + {:ok, file_path} |
| 143 | + end |
87 | 144 | end
|
0 commit comments