From c2925feac32f47d124034b369325c1444ed3fb11 Mon Sep 17 00:00:00 2001 From: Justin Searls Date: Sun, 21 Aug 2016 10:37:29 -0400 Subject: [PATCH] Allows global config overrides & reset Fixes #25 --- lib/suture.rb | 9 ++++++++ lib/suture/builds_plan.rb | 2 +- lib/suture/prescribes_test_plan.rb | 4 ++-- safe/helper.rb | 1 + test/suture/builds_plan_test.rb | 9 ++++++++ test/suture/prescribes_test_plan_test.rb | 9 ++++++++ test/suture_test.rb | 26 ++++++++++++++++++++++++ 7 files changed, 57 insertions(+), 3 deletions(-) diff --git a/lib/suture.rb b/lib/suture.rb index e895e25..936cfcb 100644 --- a/lib/suture.rb +++ b/lib/suture.rb @@ -26,4 +26,13 @@ def self.verify(name, options) Suture::InterpretsResults.new.interpret(test_results) end end + + def self.config(config = {}) + @config ||= DEFAULT_OPTIONS.dup + @config.merge!(config) + end + + def self.reset! + @config = nil + end end diff --git a/lib/suture/builds_plan.rb b/lib/suture/builds_plan.rb index 869de47..10c4afb 100644 --- a/lib/suture/builds_plan.rb +++ b/lib/suture/builds_plan.rb @@ -7,7 +7,7 @@ class BuildsPlan def build(name, options = {}) Value::Plan.new( - DEFAULT_OPTIONS. + Suture.config. merge(options). merge(:name => name). merge(Suture::Util::Env.to_map(UN_ENV_IABLE_OPTIONS)) diff --git a/lib/suture/prescribes_test_plan.rb b/lib/suture/prescribes_test_plan.rb index 62f38cb..51d6b38 100644 --- a/lib/suture/prescribes_test_plan.rb +++ b/lib/suture/prescribes_test_plan.rb @@ -9,8 +9,8 @@ class PrescribesTestPlan } def prescribe(name, options = {}) - Value::TestPlan.new(DEFAULT_OPTIONS. - merge(DEFAULT_TEST_OPTIONS). + Value::TestPlan.new(DEFAULT_TEST_OPTIONS. + merge(Suture.config). merge(options). merge(:name => name). merge(Suture::Util::Env.to_map(UN_ENV_IABLE_OPTIONS))) diff --git a/safe/helper.rb b/safe/helper.rb index 27d22f0..ff54155 100644 --- a/safe/helper.rb +++ b/safe/helper.rb @@ -9,6 +9,7 @@ def setup super clean("db") ENV.delete_if { |(k,v)| k.start_with?("SUTURE_") } + Suture.reset! end private diff --git a/test/suture/builds_plan_test.rb b/test/suture/builds_plan_test.rb index 7176189..c5b8910 100644 --- a/test/suture/builds_plan_test.rb +++ b/test/suture/builds_plan_test.rb @@ -2,6 +2,7 @@ module Suture class BuildsPlanTest < Minitest::Test def teardown ENV.delete_if { |(k,v)| k.start_with?("SUTURE_") } + Suture.reset! end def test_defaults @@ -11,6 +12,14 @@ def test_defaults assert_equal :foo, result.name end + def test_global_overrides + Suture.config(:database_path => "other.db") + + result = BuildsPlan.new.build(:foo) + + assert_equal "other.db", result.database_path + end + def test_build_without_env_vars some_callable = lambda { "hi" } some_new_callable = lambda { "hi" } diff --git a/test/suture/prescribes_test_plan_test.rb b/test/suture/prescribes_test_plan_test.rb index fc3a859..f97a1a3 100644 --- a/test/suture/prescribes_test_plan_test.rb +++ b/test/suture/prescribes_test_plan_test.rb @@ -5,6 +5,7 @@ def setup def teardown ENV.delete_if { |(k,v)| k.start_with?("SUTURE_") } + Suture.reset! end def test_defaults @@ -15,6 +16,14 @@ def test_defaults assert_equal "db/suture.sqlite3", result.database_path end + def test_global_overrides + Suture.config(:database_path => "other.db") + + result = @subject.prescribe(:foo) + + assert_equal "other.db", result.database_path + end + def test_options some_subject = lambda {} diff --git a/test/suture_test.rb b/test/suture_test.rb index 6364550..5324aad 100644 --- a/test/suture_test.rb +++ b/test/suture_test.rb @@ -44,4 +44,30 @@ def test_verify_did_fail verify(interprets_results).interpret(test_results) end + + def test_config_default + assert_equal Suture::DEFAULT_OPTIONS, Suture.config + end + + def test_config_override + initial = Suture::DEFAULT_OPTIONS + + result = Suture.config({:pants => true}) + + expected = Suture::DEFAULT_OPTIONS.merge(:pants => true) + assert_equal expected, result + assert_equal expected, Suture.config + end + + def test_reset! + Suture.config({:trollface => "lol"}) + + Suture.reset! + + assert_equal Suture::DEFAULT_OPTIONS, Suture.config + end + + def teardown + Suture.reset! + end end