Skip to content

Commit

Permalink
Isolate SITE_CONFIG in tests using minitest-stub-const
Browse files Browse the repository at this point in the history
  • Loading branch information
dnrce committed May 23, 2016
1 parent 3de582f commit 58e2b82
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 96 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -283,6 +284,7 @@ DEPENDENCIES
htmlentities
jquery-rails
jquery-ui-rails
minitest-stub-const
mocha
mysql2 (~> 0.3.17)
paperclip
Expand Down
100 changes: 54 additions & 46 deletions test/controllers/integrations_controller_test.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
require 'test_helper'
require 'support/stub_site_config_helper'

class IntegrationsControllerTest < ActionController::TestCase
include StubSiteConfigHelper

def setup
end
Expand All @@ -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"=>"[\"[email protected]\"]",
"disposable"=>"",
"from"=>"[email protected]",
"signature"=>"e85e908fb893394762047c21e54ce248",
"to"=>"<[email protected]>",
"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 <[email protected]>\r\nTo: Tracks <[email protected]>\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: <[email protected]>\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"=>"[\"[email protected]\"]",
"disposable"=>"",
"from"=>"[email protected]",
"signature"=>"e85e908fb893394762047c21e54ce248",
"to"=>"<[email protected]>",
"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 <[email protected]>\r\nTo: Tracks <[email protected]>\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: <[email protected]>\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"=>"[\"[email protected]\"]",
"disposable"=>"",
"from"=>"[email protected]",
"signature"=>"e85e908fb893394762047c21e54ce248",
"to"=>"<[email protected]>",
"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 <[email protected]>\r\nTo: Tracks <[email protected]>\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: <[email protected]>\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"=>"[\"[email protected]\"]",
"disposable"=>"",
"from"=>"[email protected]",
"signature"=>"e85e908fb893394762047c21e54ce248",
"to"=>"<[email protected]>",
"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 <[email protected]>\r\nTo: Tracks <[email protected]>\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: <[email protected]>\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"=>"[\"[email protected]\"]",
"disposable"=>"",
"from"=>"[email protected]",
"signature"=>"6d2df0e807bfa9b77d24c31dce6d4515",
"to"=>"<[email protected]>",
"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 <[email protected]>\r\nTo: Tracks <[email protected]>\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: <[email protected]>\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"=>"[\"[email protected]\"]",
"disposable"=>"",
"from"=>"[email protected]",
"signature"=>"6d2df0e807bfa9b77d24c31dce6d4515",
"to"=>"<[email protected]>",
"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 <[email protected]>\r\nTo: Tracks <[email protected]>\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: <[email protected]>\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
80 changes: 44 additions & 36 deletions test/controllers/mailgun_controller_test.rb
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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'] = {
'[email protected]' => ['[email protected]', '[email protected]']
}
stub_site_config do
SITE_CONFIG['mailgun_api_key'] = "123456789"
SITE_CONFIG['email_dispatch'] = 'to'
SITE_CONFIG['mailmap'] = {
'[email protected]' => ['[email protected]', '[email protected]']
}

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
34 changes: 20 additions & 14 deletions test/integration/stories_test.rb
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down
9 changes: 9 additions & 0 deletions test/support/stub_site_config_helper.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 58e2b82

Please sign in to comment.