Created
September 6, 2016 10:05
-
-
Save neudabei/1d1333fdea8a26a00539d92ea8e11ad5 to your computer and use it in GitHub Desktop.
vanity/test/frameworks/rails/action_controller_test.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "test_helper" | |
class UseVanityControllerTest < ActionController::TestCase | |
tests UseVanityController | |
def setup | |
super | |
metric :sugar_high | |
new_ab_test :pie_or_cake do | |
metrics :sugar_high | |
alternatives :pie, :cake | |
default :pie | |
end | |
# Class eval this instead of including in the controller to delay | |
# execution until the request exists in the context of the test | |
UseVanityController.class_eval do | |
use_vanity :current_user | |
end | |
# Rails 3 configuration for cookies | |
if ::Rails.respond_to?(:application) | |
::Rails.application.config.session_options[:domain] = '.foo.bar' | |
end | |
end | |
def teardown | |
super | |
end | |
def test_render_js_for_tests | |
Vanity.playground.use_js! | |
get :js | |
assert_match /script.*v=pie_or_cake=.*script/m, @response.body | |
end | |
def test_working_render_js_for_tests | |
Vanity.playground.use_js! | |
get :working_js | |
assert_match /script.*v=pie_or_cake=.*script/m, @response.body | |
end | |
def test_broken_render_js_for_tests | |
Vanity.playground.use_js! | |
get :broken_js | |
assert_match /script.*v=pie_or_cake=.*script/m, @response.body | |
end | |
def test_render_model_js_for_tests | |
Vanity.playground.use_js! | |
get :model_js | |
assert_match /script.*v=pie_or_cake=.*script/m, @response.body | |
end | |
def test_chooses_sets_alternatives_for_rails_tests | |
experiment(:pie_or_cake).chooses(:pie) | |
get :index | |
assert_equal 'pie', @response.body | |
experiment(:pie_or_cake).chooses(:cake) | |
get :index | |
assert_equal 'cake', @response.body | |
end | |
def test_adds_participant_to_experiment | |
get :index | |
assert_equal 1, experiment(:pie_or_cake).alternatives.map(&:participants).sum | |
end | |
def test_does_not_add_invalid_participant_to_experiment | |
Vanity.playground.use_js! | |
@request.user_agent = "Googlebot/2.1 ( http://www.google.com/bot.html)" | |
get :index | |
assert_equal 0, experiment(:pie_or_cake).alternatives.map(&:participants).sum | |
end | |
def test_vanity_cookie_is_persistent | |
get :index | |
cookie = @response["Set-Cookie"].to_s | |
assert_match /vanity_id=[a-f0-9]{32};/, cookie | |
expires = cookie[/expires=(.*)(;|$)/, 1] | |
assert expires | |
assert_in_delta Time.parse(expires), Time.now + 20 * 365 * 24 * 60 * 60, 1.day | |
end | |
def test_vanity_cookie_default_id | |
get :index | |
assert cookies["vanity_id"] =~ /^[a-f0-9]{32}$/ | |
end | |
def test_vanity_cookie_retains_id | |
@request.cookies["vanity_id"] = "from_last_time" | |
get :index | |
assert_equal "from_last_time", cookies["vanity_id"] | |
end | |
def test_vanity_cookie_uses_configuration | |
Vanity.configuration.cookie_name = "new_id" | |
get :index | |
assert cookies["new_id"] =~ /^[a-f0-9]{32}$/ | |
end | |
def test_vanity_identity_set_from_cookie | |
@request.cookies["vanity_id"] = "from_last_time" | |
get :index | |
assert_equal "from_last_time", @controller.send(:vanity_identity) | |
end | |
def test_vanity_identity_set_from_user | |
@controller.current_user = stub("user", :id=>"user_id") | |
get :index | |
assert_equal "user_id", @controller.send(:vanity_identity) | |
end | |
def test_vanity_identity_with_null_user_falls_back_to_cookie | |
@controller.current_user = stub("user", :id=>nil) | |
get :index | |
assert cookies["vanity_id"] =~ /^[a-f0-9]{32}$/ | |
end | |
def test_vanity_identity_with_no_user_model | |
UseVanityController.class_eval do | |
use_vanity nil | |
end | |
@controller.current_user = Object.new | |
get :index | |
assert cookies["vanity_id"] =~ /^[a-f0-9]{32}$/ | |
end | |
def test_vanity_identity_set_with_block | |
UseVanityController.class_eval do | |
attr_accessor :project_id | |
use_vanity { |controller| controller.project_id } | |
end | |
@controller.project_id = "576" | |
get :index | |
assert_equal "576", @controller.send(:vanity_identity) | |
end | |
def test_vanity_identity_set_with_identity_paramater | |
get :index, :_identity => "id_from_params" | |
assert_equal "id_from_params", @controller.send(:vanity_identity) | |
end | |
def test_vanity_identity_prefers_block_over_symbol | |
UseVanityController.class_eval do | |
attr_accessor :project_id | |
use_vanity(:current_user) { |controller| controller.project_id } | |
end | |
@controller.project_id = "576" | |
@controller.current_user = stub(:id=>"user_id") | |
get :index | |
assert_equal "576", @controller.send(:vanity_identity) | |
end | |
def test_vanity_identity_prefers_parameter_over_cookie | |
@request.cookies['vanity_id'] = "old_id" | |
get :index, :_identity => "id_from_params" | |
assert_equal "id_from_params", @controller.send(:vanity_identity) | |
assert cookies['vanity_id'], "id_from_params" | |
end | |
def test_vanity_identity_prefers_cookie_over_object | |
@request.cookies['vanity_id'] = "from_last_time" | |
@controller.current_user = stub(:id=>"user_id") | |
get :index | |
assert_equal "from_last_time", @controller.send(:vanity_identity) | |
end | |
# query parameter filter | |
def test_redirects_and_loses_vanity_query_parameter | |
get :index, :foo=>"bar", :_vanity=>"567" | |
assert_redirected_to "/use_vanity?foo=bar" | |
end | |
def test_sets_choices_from_vanity_query_parameter | |
first = experiment(:pie_or_cake).alternatives.first | |
fingerprint = experiment(:pie_or_cake).fingerprint(first) | |
10.times do | |
@controller = nil ; setup_controller_request_and_response | |
get :index, :_vanity => fingerprint | |
assert_equal experiment(:pie_or_cake).choose, experiment(:pie_or_cake).alternatives.first | |
assert experiment(:pie_or_cake).showing?(first) | |
end | |
end | |
def test_does_nothing_with_vanity_query_parameter_for_posts | |
experiment(:pie_or_cake).chooses(experiment(:pie_or_cake).alternatives.last.value) | |
first = experiment(:pie_or_cake).alternatives.first | |
fingerprint = experiment(:pie_or_cake).fingerprint(first) | |
post :index, :foo => "bar", :_vanity => fingerprint | |
assert_response :success | |
assert !experiment(:pie_or_cake).showing?(first) | |
end | |
def test_track_param_tracks_a_metric | |
get :index, :_identity => "123", :_track => "sugar_high" | |
assert_equal experiment(:pie_or_cake).alternatives[0].converted, 1 | |
end | |
def test_cookie_domain_from_rails_configuration | |
get :index | |
assert_match /domain=.foo.bar/, @response["Set-Cookie"] if ::Rails.respond_to?(:application) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment