implement coinbase tests

This commit is contained in:
r888888888 2014-11-29 13:14:46 -08:00
parent 358f22af86
commit cdd17de0af
3 changed files with 16 additions and 93 deletions

View File

@ -14,7 +14,7 @@ class ApplicationController < ActionController::Base
rescue_from User::PrivilegeError, :with => :access_denied
rescue_from Danbooru::Paginator::PaginationError, :with => :render_pagination_limit
rescue_from Exception, :with => :rescue_exception
# rescue_from Exception, :with => :rescue_exception
protected
def api_check

View File

@ -10,7 +10,9 @@ class UserUpgradesController < ApplicationController
user = User.find(user_id)
if user.level < User::Levels::PLATINUM && level >= User::Levels::GOLD && level <= User::Levels::PLATINUM
user.promote_to!(level, :skip_feedback => true)
CurrentUser.scoped(User.admins.first, "127.0.0.1") do
user.promote_to!(level, :skip_feedback => true)
end
end
end

View File

@ -1,113 +1,34 @@
require 'test_helper'
class UserUpgradesControllerTest < ActionController::TestCase
def get_stripe_token
Stripe::Token.create(
:card => {
:number => "4242424242424242",
:exp_month => 1,
:exp_year => 1.year.from_now.year,
:cvc => "123"
}
)
end
setup do
@admin = FactoryGirl.create(:admin_user)
@user = FactoryGirl.create(:user)
end
context "#create" do
setup do
@encrypted = ActiveSupport::MessageEncryptor.new(Danbooru.config.coinbase_secret).encrypt_and_sign("#{@user.id},#{User::Levels::GOLD}")
end
context "for basic -> gold" do
should "promote the account" do
VCR.use_cassette("stripe-basic-to-gold", :record => :once) do
post :create, {:stripeToken => get_stripe_token.id, :desc => "Upgrade to Gold", :email => "nowhere@donmai.us"}, {:user_id => @user.id}
end
assert_redirected_to user_upgrade_path
post :create, {:order => {:status => "completed", :custom => @encrypted}}
assert_response :success
@user.reload
assert_equal(User::Levels::GOLD, @user.level)
end
end
context "for basic -> platinum" do
should "promote the account" do
VCR.use_cassette("stripe-basic-to-plat", :record => :once) do
post :create, {:stripeToken => get_stripe_token.id, :desc => "Upgrade to Platinum", :email => "nowhere@donmai.us"}, {:user_id => @user.id}
end
assert_redirected_to user_upgrade_path
@user.reload
assert_equal(User::Levels::PLATINUM, @user.level)
end
end
context "for gold -> platinum" do
context "when the user is gold" do
setup do
@user.update_attribute(:level, User::Levels::GOLD)
end
should "promote the account" do
VCR.use_cassette("stripe-gold-to-plat", :record => :once) do
post :create, {:stripeToken => get_stripe_token.id, :desc => "Upgrade Gold to Platinum", :email => "nowhere@donmai.us"}, {:user_id => @user.id}
end
assert_redirected_to user_upgrade_path
@user.reload
assert_equal(User::Levels::PLATINUM, @user.level)
end
end
context "when the user is not gold" do
should "fail" do
VCR.use_cassette("stripe-gold-to-plat-bad", :record => :once) do
post :create, {:stripeToken => get_stripe_token.id, :desc => "Upgrade Gold to Platinum", :email => "nowhere@donmai.us"}, {:user_id => @user.id}
end
assert_response 422
@user.reload
assert_equal(User::Levels::MEMBER, @user.level)
end
end
end
end
context "#new" do
context "for safe mode" do
setup do
CurrentUser.stubs(:safe_mode?).returns(true)
end
should "render" do
get :new, {}, {:user_id => @user.id}
assert_response :success
end
setup do
Coinbase::Client.any_instance.stubs(:create_button).returns(OpenStruct.new)
end
context "for default mode" do
should "render" do
get :new, {}, {:user_id => @user.id}
assert_response :success
end
end
end
context "#show" do
context "with disable=true" do
should "render" do
get :show, {}, {:user_id => @user.id}, {:disable => true}
assert_response :success
end
end
context "with success=true" do
should "render" do
get :show, {}, {:user_id => @user.id}, {:success => true}
assert_response :success
end
end
context "with error=true" do
should "render" do
get :show, {}, {:user_id => @user.id}, {:error => true}
assert_response :success
end
should "render" do
get :new, {}, {:user_id => @user.id}
assert_response :success
end
end
end