require File.dirname(__FILE__) + '/../test_helper' #require 'test/test_helper' class BannerShowsTest < ActionDispatch::IntegrationTest fixtures :all setup do @coke.reload @coke.fast_mode = true @coke.save! assert @coke.show_now_basics?, "fixtures problem" @pepsi.reload @pepsi.update({:confirmed => false}) assert !@pepsi.show_now_basics?, "fixtures prolbem 2" AdvertSelector.admin_access_class = AdvertSelector::AdminAccessClassAlwaysTrue end def response_includes_banner?(banner) @response.body.include?(banner.helper_items.where(:content_for => true).last.content) end def assert_response_includes_banner(banner) assert response_includes_banner?(banner), "should have default banner content in response" end test "normal request and banner loading" do AdvertSelector::Banner.expects(:find_current).twice.returns(AdvertSelector::Banner.find_future) get '/' assert_response :success assert_response_includes_banner(@coke) assert $advert_selector_banners_load_time > 1.minute.ago original_time = $advert_selector_banners_load_time #assert_equal $advert_selector_banners, AdvertSelector::Banner.find_current get '/' assert_response :success assert_equal $advert_selector_banners_load_time, original_time Timecop.travel( 15.minutes.from_now ) do get '/' assert $advert_selector_banners_load_time != original_time assert $advert_selector_banners_load_time > 1.minute.ago end end test "only_once_per_session banners" do placement = @coke.placement placement.only_once_per_session = true placement.save! get '/' assert_response :success assert_response_includes_banner(@coke) assert_equal ["Leaderboard"], session["advert_selector_session_shown"], "should have info in session" get '/' assert_response :success assert !response_includes_banner?(@coke), "should not include banner on second view" end test "banner_frequency, limit frequency within one week" do @coke.update({:frequency => 2}) get '/' assert_response :success assert_response_includes_banner(@coke) cookie_expiration_date_org = cookies.send(:eval, '@cookies').first.send(:eval, '@options')["expires"].to_time assert 6.days.from_now < cookie_expiration_date_org assert 7.days.from_now > cookie_expiration_date_org Timecop.travel( 3.days.from_now ) get '/' assert_response :success assert_response_includes_banner(@coke) cookie_expiration_date_new = cookies.send(:eval, '@cookies').first.send(:eval, '@options')["expires"].to_time assert_equal cookie_expiration_date_new, cookie_expiration_date_org get '/' assert_response :success assert !response_includes_banner?(@coke), "should not include banner after expiration date" end test "HelperItem runned" do get '/' assert_response :success assert_response_includes_banner(@coke) $advert_selector_banners_load_time = nil @coke.helper_items.create!(:position => 0, :name => 'always_false') get '/' assert_response :success assert !response_includes_banner?(@coke), "should not include banner if helper_item returned false" end test "HelperItem with raising error and common error displays" do @coke.helper_items.create!(:position => 0, :name => 'raise_error') get '/' assert_response :success assert !response_includes_banner?(@coke), "should not include banner if helper_item raised error" get '/advert_selector/placements' assert_response :success assert_select '.alert-error', :text => /Error with banner Coke in placement Leaderboard/ end test "complex setup conflicting banners placements" do @parade_banner.update({:confirmed => true, :frequency => 1}) get '/' assert_response :success assert response_includes_banner?(@parade_banner) assert !response_includes_banner?(@coke) get '/' assert_response :success assert !response_includes_banner?(@parade_banner) assert response_includes_banner?(@coke) end test "complex setup multiple banners placements" do @parade_banner.update({:confirmed => true, :frequency => 1}) @parade_banner.placement.conflicting_placements_array = "" @parade_banner.placement.save! get '/' assert_response :success assert response_includes_banner?(@parade_banner) assert response_includes_banner?(@coke) end test "banner preview url forces banner and displays information" do get '/' assert !response_includes_banner?(@parade_banner) assert_select '#advert_selector_info', :count => 0 get "/?advert_selector_force=#{@parade_banner.id}&advert_selector_force_stamp=#{@parade_banner.start_time.to_i}" assert_response :success assert response_includes_banner?(@parade_banner) assert_select '#advert_selector_info', :count => 1 end end