Rather than redirecting the global $stdout, which is not never clever in a threaded program, we'll make the secrets commands aware they are being inlined, so they return the value instead of printing it. Additionally we no longer need to interrupt the parent process on error as we've inlined the command - exit 1 is enough.
16 lines
735 B
Ruby
16 lines
735 B
Ruby
require "test_helper"
|
|
|
|
class SecretsInlineCommandSubstitution < SecretAdapterTestCase
|
|
test "inlines kamal secrets commands" do
|
|
Kamal::Cli::Main.expects(:start).with { |command| command == [ "secrets", "fetch", "...", "--inline" ] }.returns("results")
|
|
substituted = Kamal::Secrets::Dotenv::InlineCommandSubstitution.call("FOO=$(kamal secrets fetch ...)", nil, overwrite: false)
|
|
assert_equal "FOO=results", substituted
|
|
end
|
|
|
|
test "executes other commands" do
|
|
Kamal::Secrets::Dotenv::InlineCommandSubstitution.stubs(:`).with("blah").returns("results")
|
|
substituted = Kamal::Secrets::Dotenv::InlineCommandSubstitution.call("FOO=$(blah)", nil, overwrite: false)
|
|
assert_equal "FOO=results", substituted
|
|
end
|
|
end
|