From d862551e120119bc3b0b32c6fcf3a9f5a7f1e94b Mon Sep 17 00:00:00 2001 From: Dan Rice Date: Sun, 22 May 2016 16:21:00 -0400 Subject: [PATCH] Isolate SITE_CONFIG in tests using minitest-stub-const --- Gemfile | 1 + Gemfile.lock | 2 + .../integrations_controller_test.rb | 100 ++++++++++-------- test/controllers/mailgun_controller_test.rb | 80 +++++++------- test/integration/stories_test.rb | 34 +++--- test/support/stub_site_config_helper.rb | 9 ++ 6 files changed, 130 insertions(+), 96 deletions(-) create mode 100644 test/support/stub_site_config_helper.rb diff --git a/Gemfile b/Gemfile index 312e81857..e86021165 100644 --- a/Gemfile +++ b/Gemfile @@ -75,6 +75,7 @@ group :test do gem "rspec-expectations" gem "database_cleaner" gem "mocha", :require => false + gem "minitest-stub-const" gem "aruba", ">=0.5.4", :require => false diff --git a/Gemfile.lock b/Gemfile.lock index ef82298c3..70996d9d7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -143,6 +143,7 @@ GEM mimemagic (0.3.0) mini_portile2 (2.0.0) minitest (5.9.0) + minitest-stub-const (0.5) mocha (1.1.0) metaclass (~> 0.0.1) multi_json (1.11.2) @@ -283,6 +284,7 @@ DEPENDENCIES htmlentities jquery-rails jquery-ui-rails + minitest-stub-const mocha mysql2 (~> 0.3.17) paperclip diff --git a/test/controllers/integrations_controller_test.rb b/test/controllers/integrations_controller_test.rb index 6e15235cc..647b7f93b 100644 --- a/test/controllers/integrations_controller_test.rb +++ b/test/controllers/integrations_controller_test.rb @@ -1,6 +1,8 @@ require 'test_helper' +require 'support/stub_site_config_helper' class IntegrationsControllerTest < ActionController::TestCase + include StubSiteConfigHelper def setup end @@ -12,58 +14,64 @@ def test_page_load end def test_cloudmailin_integration_success - SITE_CONFIG['cloudmailin'] = "123456789" - SITE_CONFIG['email_dispatch'] = 'from' - post :cloudmailin, { - "html"=>"", - "plain"=>"asdasd", - "x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]", - "disposable"=>"", - "from"=>"5555555555@tmomail.net", - "signature"=>"e85e908fb893394762047c21e54ce248", - "to"=>"<123123@cloudmailin.net>", - "subject"=>"asd", - "x_cc_header"=>"", - "message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <5555555555@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n" - } - - assert_response :success + stub_site_config do + SITE_CONFIG['cloudmailin'] = "123456789" + SITE_CONFIG['email_dispatch'] = 'from' + post :cloudmailin, { + "html"=>"", + "plain"=>"asdasd", + "x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]", + "disposable"=>"", + "from"=>"5555555555@tmomail.net", + "signature"=>"e85e908fb893394762047c21e54ce248", + "to"=>"<123123@cloudmailin.net>", + "subject"=>"asd", + "x_cc_header"=>"", + "message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <5555555555@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n" + } + + assert_response :success + end end def test_cloudmailin_integration_invalid_signature - SITE_CONFIG['cloudmailin'] = "12345678901234567890" - post :cloudmailin, { - "html"=>"", - "plain"=>"asdasd", - "x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]", - "disposable"=>"", - "from"=>"5555555555@tmomail.net", - "signature"=>"e85e908fb893394762047c21e54ce248", - "to"=>"<123123@cloudmailin.net>", - "subject"=>"asd", - "x_cc_header"=>"", - "message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <5555555555@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n" - } - - assert_response 403 + stub_site_config do + SITE_CONFIG['cloudmailin'] = "12345678901234567890" + post :cloudmailin, { + "html"=>"", + "plain"=>"asdasd", + "x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]", + "disposable"=>"", + "from"=>"5555555555@tmomail.net", + "signature"=>"e85e908fb893394762047c21e54ce248", + "to"=>"<123123@cloudmailin.net>", + "subject"=>"asd", + "x_cc_header"=>"", + "message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <5555555555@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n" + } + + assert_response 403 + end end def test_cloudmailin_integration_unknown_address - SITE_CONFIG['cloudmailin'] = "123456789" - post :cloudmailin, { - "html"=>"", - "plain"=>"asdasd", - "x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]", - "disposable"=>"", - "from"=>"444444444444@tmomail.net", - "signature"=>"6d2df0e807bfa9b77d24c31dce6d4515", - "to"=>"<123123@cloudmailin.net>", - "subject"=>"asd", - "x_cc_header"=>"", - "message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <444444444444@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n" - } - - assert_response 404 + stub_site_config do + SITE_CONFIG['cloudmailin'] = "123456789" + post :cloudmailin, { + "html"=>"", + "plain"=>"asdasd", + "x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]", + "disposable"=>"", + "from"=>"444444444444@tmomail.net", + "signature"=>"6d2df0e807bfa9b77d24c31dce6d4515", + "to"=>"<123123@cloudmailin.net>", + "subject"=>"asd", + "x_cc_header"=>"", + "message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <444444444444@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n" + } + + assert_response 404 + end end end diff --git a/test/controllers/mailgun_controller_test.rb b/test/controllers/mailgun_controller_test.rb index 876cc9bd5..a0b7360ab 100644 --- a/test/controllers/mailgun_controller_test.rb +++ b/test/controllers/mailgun_controller_test.rb @@ -1,6 +1,8 @@ require 'test_helper' +require 'support/stub_site_config_helper' class MailgunControllerTest < ActionController::TestCase + include StubSiteConfigHelper def setup @user = users(:sms_user) @@ -12,55 +14,61 @@ def load_message(filename) end def test_mailgun_signature_verifies - SITE_CONFIG['mailgun_api_key'] = "123456789" - SITE_CONFIG['email_dispatch'] = 'from' + stub_site_config do + SITE_CONFIG['mailgun_api_key'] = "123456789" + SITE_CONFIG['email_dispatch'] = 'from' - post :mailgun, { - "timestamp" => "1379539674", - "token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5", - "signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1", - "body-mime" => load_message('mailgun_message1.txt') - } + post :mailgun, { + "timestamp" => "1379539674", + "token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5", + "signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1", + "body-mime" => load_message('mailgun_message1.txt') + } - assert_response :success + assert_response :success + end end def test_mailgun_creates_todo_with_mailmap - SITE_CONFIG['mailgun_api_key'] = "123456789" - SITE_CONFIG['email_dispatch'] = 'to' - SITE_CONFIG['mailmap'] = { - '5555555555@tmomail.net' => ['incoming@othermail.com', 'notused@foo.org'] - } + stub_site_config do + SITE_CONFIG['mailgun_api_key'] = "123456789" + SITE_CONFIG['email_dispatch'] = 'to' + SITE_CONFIG['mailmap'] = { + '5555555555@tmomail.net' => ['incoming@othermail.com', 'notused@foo.org'] + } - todo_count = Todo.count - post :mailgun, { - "timestamp" => "1379539674", - "token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5", - "signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1", - "body-mime" => load_message('mailgun_message2.txt') - } + todo_count = Todo.count + post :mailgun, { + "timestamp" => "1379539674", + "token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5", + "signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1", + "body-mime" => load_message('mailgun_message2.txt') + } - assert_response :success + assert_response :success - assert_equal(todo_count+1, Todo.count) - message_todo = Todo.where(:description => "test").first - assert_not_nil(message_todo) - assert_equal(@inbox, message_todo.context) - assert_equal(@user, message_todo.user) + assert_equal(todo_count+1, Todo.count) + message_todo = Todo.where(:description => "test").first + assert_not_nil(message_todo) + assert_equal(@inbox, message_todo.context) + assert_equal(@user, message_todo.user) + end end def test_mailgun_signature_fails - SITE_CONFIG['mailgun_api_key'] = "invalidkey" - SITE_CONFIG['email_dispatch'] = 'from' + stub_site_config do + SITE_CONFIG['mailgun_api_key'] = "invalidkey" + SITE_CONFIG['email_dispatch'] = 'from' - post :mailgun, { - "timestamp" => "1379539674", - "token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5", - "signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1", - "body-mime" => load_message('mailgun_message1.txt') - } + post :mailgun, { + "timestamp" => "1379539674", + "token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5", + "signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1", + "body-mime" => load_message('mailgun_message1.txt') + } - assert_response 406 + assert_response 406 + end end end diff --git a/test/integration/stories_test.rb b/test/integration/stories_test.rb index 471d4f093..1c6cbf79d 100644 --- a/test/integration/stories_test.rb +++ b/test/integration/stories_test.rb @@ -1,6 +1,8 @@ require 'test_helper' +require 'support/stub_site_config_helper' class StoriesTest < ActionDispatch::IntegrationTest + include StubSiteConfigHelper # #################################################### # Testing login and signup by different kinds of users @@ -14,23 +16,27 @@ def test_signup_new_user_by_admin end def test_signup_new_user_by_nonadmin - SITE_CONFIG['open_signups'] = false - other_user = new_session_as(:other_user,"sesame") - other_user.goes_to_signup_as_nonadmin + stub_site_config do + SITE_CONFIG['open_signups'] = false + other_user = new_session_as(:other_user,"sesame") + other_user.goes_to_signup_as_nonadmin + end end def test_open_signup_new_user - SITE_CONFIG['open_signups'] = true - get "/signup" - assert_response :success - assert_template "users/new" - post "/users", :user => {:login => "newbie", - :password => "newbiepass", - :password_confirmation => "newbiepass"} - assert_response :redirect - follow_redirect! - assert_response :success - assert_template "todos/index" + stub_site_config do + SITE_CONFIG['open_signups'] = true + get "/signup" + assert_response :success + assert_template "users/new" + post "/users", :user => {:login => "newbie", + :password => "newbiepass", + :password_confirmation => "newbiepass"} + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "todos/index" + end end private diff --git a/test/support/stub_site_config_helper.rb b/test/support/stub_site_config_helper.rb new file mode 100644 index 000000000..ae3a27eb7 --- /dev/null +++ b/test/support/stub_site_config_helper.rb @@ -0,0 +1,9 @@ +require 'minitest/stub_const' + +module StubSiteConfigHelper + def stub_site_config + Object.stub_const(:SITE_CONFIG, SITE_CONFIG.clone) do + yield + end + end +end