diff --git a/web/app/controllers/api_recurly_controller.rb b/web/app/controllers/api_recurly_controller.rb index 4c841320d..2fd7a0341 100644 --- a/web/app/controllers/api_recurly_controller.rb +++ b/web/app/controllers/api_recurly_controller.rb @@ -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 \ No newline at end of file diff --git a/web/config/environments/development.rb b/web/config/environments/development.rb index 3cc7be84b..8aeccd95f 100644 --- a/web/config/environments/development.rb +++ b/web/config/environments/development.rb @@ -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 diff --git a/web/config/environments/test.rb b/web/config/environments/test.rb index 5f2faac49..c4a57c3b1 100644 --- a/web/config/environments/test.rb +++ b/web/config/environments/test.rb @@ -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 diff --git a/web/config/routes.rb b/web/config/routes.rb index 7e298ddeb..43b9b9114 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -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 diff --git a/web/spec/controllers/api_recurly_spec.rb b/web/spec/controllers/api_recurly_spec.rb index eb3abbd8f..5cb254793 100644 --- a/web/spec/controllers/api_recurly_spec.rb +++ b/web/spec/controllers/api_recurly_spec.rb @@ -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