VRFS-2480 : Recurly specs, fixes and new implementation.

This commit is contained in:
Steven Miers 2014-11-16 20:20:54 -06:00
parent 696cdc0283
commit 2d3bbd2a47
5 changed files with 141 additions and 83 deletions

View File

@ -1,11 +1,10 @@
class ApiRecurlyController < ApiController
before_filter :api_signed_in_user
respond_to :json
# create Recurly account
def create_account
logger.debug(params[:billing_info])
#logger.debug(params[:billing_info])
if current_user.recurly_code.nil?
@account = Recurly::Account.create(
account_code: current_user.id,
@ -31,44 +30,38 @@ class ApiRecurlyController < ApiController
@account.billing_info = params[:billing_info]
@account.billing_info.save
logger.debug @account
#logger.debug @account.to_json
end
respond_with @account
render :json=>@account.to_json
rescue Recurly::Error, NoMethodError => e
render :json => { :message => e.inspect }, :status => 404
render json: { :message => e.inspect, error: e }, :status => 404
end
def delete_account
@account = Recurly::Account.find(current_user.recurly_code)
if @account.present?
@account.destroy
end
render :json=>{}, :status=>200
rescue Recurly::Error, NoMethodError => e
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
# get Recurly account
def get_account
@account = Recurly::Account.find(current_user.reculry_code)
respond_with @account
@account = Recurly::Account.find(current_user.recurly_code)
render :json=>@account.to_json
rescue Recurly::Error, NoMethodError => e
render :json => { message: ValidationMessages::RECURLY_ERROR}, :status => 404
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
# update Recurly account
def update_account
if current_user.recurly_code.nil?
@account = Recurly::Account.create(
account_code: current_user.id,
email: current_user.email,
first_name: current_user.first_name,
last_name: current_user.last_name,
address: {
city: current_user.city,
state: current_user.state,
country: current_user.country
}
)
else
@account = Recurly::Account.get(current_user.recurly_code)
end
safe_retrieve_account()
@account.first_name = current_user.first_name
@account.last_name = current_user.last_name
@account.email = current_user.email
@account.update
@account.save
if @account.errors.any?
response.status = 404
@ -76,18 +69,18 @@ class ApiRecurlyController < ApiController
current_user.recurly_code = @account.account_code
current_user.save
end
respond_with @account
render :json=>@account.to_json
rescue Recurly::Error, NoMethodError => e
render :json => { message: ValidationMessages::RECURLY_ERROR}, :status => 404
raise e
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
# get subscription
def get_subscription
@account = Recurly::Acount.find(current_user.reculry_code)
respond_with @account.subscriptions.last
safe_retrieve_account()
render :json=>@account.subscriptions.last.to_json
rescue Recurly::Error, NoMethodError => e
render :json => { message: ValidationMessages::RECURLY_GET_ACCOUNT_ERROR}, :status => 404
render json: { message: ValidationMessages::RECURLY_ACCOUNT_ERROR, error: e}, :status => 404
end
# create subscription
@ -97,44 +90,44 @@ class ApiRecurlyController < ApiController
# get Billing Information
def billing_info
if current_user.recurly_code.nil?
render :json => { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
render json: { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
else
@account = Recurly::Account.find(current_user.recurly_code)
logger.debug @account
respond_with @account.billing_info
#logger.debug @account
render json: @account.billing_info
end
rescue Recurly::Error, NoMethodError => e
render :json => { message: ValidationMessages::RECURLY_ERROR}, :status => 404
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
# update Billing Information
def update_billing_info
if current_user.recurly_code.nil?
render :json => { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
render json: { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
else
if params[:first_name].blank? or params[:last_name].blank? or params[:number].blank? or params[:year].blank? or params[:month].blank? or params[:verification_value].blank?
render :json => { message: ValidationMessages::RECURLY_PARAMETER_ERROR }, :status => 404 and return
render json: { message: ValidationMessages::RECURLY_PARAMETER_ERROR }, :status => 404 and return
end
@account = Recurly::Acount.find(current_user.reculry_code)
@account = Recurly::Account.find(current_user.recurly_code)
@account.billing_info = params
@account.billing_info.save
if @account.erros.any?
if @account.errors.any?
response.status = :unprocessable_entity
end
respond_with @account
render json: @account
end
rescue Recurly::Error, NoMethodError => e
render :json => { message: ValidationMessages::RECURLY_ERROR}, :status => 404
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
def place_order
if current_user.recurly_code.nil?
render :json => { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
render json: { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
else
if params[:first_name].blank? or params[:last_name].blank? or params[:number].blank? or params[:year].blank? or params[:month].blank? or params[:verification_value].blank?
render :json => { message: ValidationMessages::RECURLY_PARAMETER_ERROR }, :status => 404 and return
render json: { message: ValidationMessages::RECURLY_PARAMETER_ERROR }, :status => 404 and return
end
@account = Recurly::Account.find(current_user.recurly_code)
@account.billing_info = params
@ -142,14 +135,32 @@ class ApiRecurlyController < ApiController
# create subscription.
if @account.erros.any?
if @account.errors.any?
response.status = :unprocessable_entity
end
respond_with @account
render json: @account
end
rescue Recurly::Error, NoMethodError => e
render :json => { message: ValidationMessages::RECURLY_ERROR}, :status => 404
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
private
def safe_retrieve_account
if current_user.recurly_code.nil?
@account = Recurly::Account.create(
account_code: current_user.id,
email: current_user.email,
first_name: current_user.first_name,
last_name: current_user.last_name,
address: {
city: current_user.city,
state: current_user.state,
country: current_user.country
}
)
else
@account = Recurly::Account.find(current_user.recurly_code)
end
end
end

View File

@ -89,5 +89,5 @@ SampleApp::Application.configure do
config.youtube_developer_key = "AI39si5bPqiNc5GQHscWJh9Wl1WTAr9aZqr_YncUvaR7Kz0rgPdBVWVubHZ94xZ3KLIBqtE9mu3VZe-UpMU80QxXoC66kBNp7A"
config.youtube_app_name = "JamKazamDev"
config.jam_tracks_available=false
config.jam_tracks_available=true
end

View File

@ -98,6 +98,7 @@ SampleApp::Application.configure do
# Use Public Keys to identify your site when using Recurly.js. See https://docs.recurly.com/js/#include to learn more.
config.recurly_public_api_key = 'sc-s6G2OA80Rwyvsb1RmS3mAE'
config.recurly_subdomain = 'jamkazam-test'
config.jam_tracks_available=true
end

View File

@ -232,8 +232,11 @@ SampleApp::Application.routes.draw do
match '/users/:id/set_password' => 'api_users#set_password', :via => :post
# recurly
match '/recurly/create_account' => 'api_recurly#create_account', :via => :post
match '/recurly/create_account' => 'api_recurly#create_account', :via => :post
match '/recurly/delete_account' => 'api_recurly#delete_account', :via => :delete
match '/recurly/get_account' => 'api_recurly#get_account', :via => :get
#match '/recurly/get_subscription' => 'api_recurly#get_subscription', :via => :get
match '/recurly/update_account' => 'api_recurly#update_account', :via => :post
match '/recurly/billing_info' => 'api_recurly#billing_info', :via => :get
match '/recurly/update_billing_info' => 'api_recurly#update_billing_info', :via => :put
match '/recurly/place_order' => 'api_recurly#place_order', :via => :put

View File

@ -1,34 +1,77 @@
# require 'spec_helper'
#
# describe ApiRecurlyController do
# render_views
#
# let(:user) { FactoryGirl.create(:user) }
# let(:jamtrack) { FactoryGirl.create(:jam_track) }
#
# before(:each) do
# @billing_info = {}
# @billing_info[:first_name] = user.first_name
# @billing_info[:last_name] = user.last_name
# @billing_info[:address1] = 'Test Address 1'
# @billing_info[:address2] = 'Test Address 2'
# @billing_info[:city] = user.city
# @billing_info[:state] = user.state
# @billing_info[:country] = user.country
# @billing_info[:zip] = '12345'
# @billing_info[:number] = '4111-1111-1111-1111'
# @billing_info[:month] = '08'
# @billing_info[:year] = '2017'
# @billing_info[:verification_value] = '1111'
# controller.current_user = user
# end
#
# describe "start" do
# it "should create recurly account" do
# post :create_account, { :format => 'json', :billing_info => @billing_info}
# response_body = JSON.parse(response.body)
# puts response_body
# response.should be_success
# end
# end
# end
require 'spec_helper'
require 'recurly/account'
describe ApiRecurlyController do
render_views
let(:user) { FactoryGirl.create(:user) }
let(:jamtrack) { FactoryGirl.create(:jam_track) }
before(:each) do
@billing_info = {}
@billing_info[:first_name] = user.first_name
@billing_info[:last_name] = user.last_name
@billing_info[:address1] = 'Test Address 1'
@billing_info[:address2] = 'Test Address 2'
@billing_info[:city] = user.city
@billing_info[:state] = user.state
@billing_info[:country] = user.country
@billing_info[:zip] = '12345'
@billing_info[:number] = '4111-1111-1111-1111'
@billing_info[:month] = '08'
@billing_info[:year] = '2017'
@billing_info[:verification_value] = '1111'
controller.current_user = user
end
after(:each) do
if (user.recurly_code)
@account = Recurly::Account.find(user.recurly_code)
if @account.present?
@account.destroy
end
end
end
it "should create account" do
post :create_account, { :format => 'json', :billing_info => @billing_info}
response.should be_success
end
it "should retrieve account" do
post :create_account, { :format => 'json', :billing_info => @billing_info}
response.should be_success
get :get_account, { :format => 'json'}
body = JSON.parse(response.body)
response.should be_success
puts "body: #{body}"
body['attributes']['email'].should eq(user.email)
end
it "should update account" do
post :create_account, { :format => 'json', :billing_info => @billing_info}
response.should be_success
body = JSON.parse(response.body)
body['attributes']['first_name'].should eq("Person")
user.update_attribute(:first_name, "Thing")
post :update_account
body = JSON.parse(response.body)
body['attributes']['first_name'].should eq("Thing")
get :get_account, { :format => 'json'}
response.should be_success
body = JSON.parse(response.body)
body['attributes']['first_name'].should eq("Thing")
end
# Note: We don't have any subscriptions yet:
it "should get subscription" do
pending "We don't have any subscriptions yet -- uncomment in routes"
get :get_subscription, { :format => 'json'}
response.should be_success
body = JSON.parse(response.body)
puts body['attributes']
end
end