summaryrefslogtreecommitdiff
path: root/billing
diff options
context:
space:
mode:
authorAzul <azul@leap.se>2014-04-11 10:03:19 +0200
committerAzul <azul@leap.se>2014-04-11 10:07:23 +0200
commit636692f9921bd695d726695d2d46c91f5a6e56f3 (patch)
treea7cc0b89007bd273ae7719f31c16e052a141fec7 /billing
parent32136605ddd405a0bf47f3b795b22fd4b49465b5 (diff)
move engines into engines directory
Also renamed help to support so it's harder to confuse it with documentation
Diffstat (limited to 'billing')
-rw-r--r--billing/Gemfile23
-rw-r--r--billing/README.md49
-rw-r--r--billing/Rakefile40
-rw-r--r--billing/app/controllers/billing_admin_controller.rb29
-rw-r--r--billing/app/controllers/billing_base_controller.rb22
-rw-r--r--billing/app/controllers/credit_card_info_controller.rb35
-rw-r--r--billing/app/controllers/customer_controller.rb64
-rw-r--r--billing/app/controllers/payments_controller.rb34
-rw-r--r--billing/app/controllers/subscriptions_controller.rb63
-rw-r--r--billing/app/helpers/billing_helper.rb51
-rw-r--r--billing/app/helpers/braintree_form_helper.rb64
-rw-r--r--billing/app/helpers/braintree_helper.rb5
-rw-r--r--billing/app/models/customer.rb58
-rw-r--r--billing/app/views/billing_admin/show.html.haml7
-rw-r--r--billing/app/views/credit_card_info/confirm.html.haml5
-rw-r--r--billing/app/views/credit_card_info/edit.html.haml17
-rw-r--r--billing/app/views/customer/_customer_data.html.haml16
-rw-r--r--billing/app/views/customer/_transaction.html.haml0
-rw-r--r--billing/app/views/customer/confirm.html.haml14
-rw-r--r--billing/app/views/customer/edit.html.haml23
-rw-r--r--billing/app/views/customer/new.html.haml24
-rw-r--r--billing/app/views/customer/show.html.haml27
-rw-r--r--billing/app/views/payments/_non_customer_fields.html.haml16
-rw-r--r--billing/app/views/payments/_transaction_details.html.haml15
-rw-r--r--billing/app/views/payments/confirm.html.haml26
-rw-r--r--billing/app/views/payments/index.html.haml5
-rw-r--r--billing/app/views/payments/new.html.haml17
-rw-r--r--billing/app/views/subscriptions/_subscription_details.html.haml26
-rw-r--r--billing/app/views/subscriptions/create.html.haml9
-rw-r--r--billing/app/views/subscriptions/destroy.html.haml7
-rw-r--r--billing/app/views/subscriptions/index.html.haml8
-rw-r--r--billing/app/views/subscriptions/new.html.haml15
-rw-r--r--billing/app/views/subscriptions/show.html.haml6
-rw-r--r--billing/config/initializers/braintree.rb23
-rw-r--r--billing/config/locales/en.yml11
-rw-r--r--billing/config/routes.rb25
-rw-r--r--billing/leap_web_billing.gemspec21
-rw-r--r--billing/lib/braintree_test_app.rb36
-rw-r--r--billing/lib/leap_web_billing.rb4
-rw-r--r--billing/lib/leap_web_billing/engine.rb10
-rwxr-xr-xbilling/script/rails8
-rw-r--r--billing/test/broken/admin_customer_test.rb31
-rw-r--r--billing/test/broken/customer_creation_test.rb84
-rw-r--r--billing/test/broken/subscription_test.rb49
-rw-r--r--billing/test/factories.rb25
-rw-r--r--billing/test/functional/customer_controller_test.rb124
-rw-r--r--billing/test/functional/customers_controller_test.rb61
-rw-r--r--billing/test/functional/payments_controller_test.rb50
-rw-r--r--billing/test/functional/subscriptions_controller_test.rb16
-rw-r--r--billing/test/support/braintree_integration_test.rb18
-rw-r--r--billing/test/support/customer_test_helper.rb11
-rw-r--r--billing/test/test_helper.rb15
-rw-r--r--billing/test/unit/customer_test.rb38
-rw-r--r--billing/test/unit/customer_with_payment_info_test.rb40
54 files changed, 0 insertions, 1520 deletions
diff --git a/billing/Gemfile b/billing/Gemfile
deleted file mode 100644
index 30e9669..0000000
--- a/billing/Gemfile
+++ /dev/null
@@ -1,23 +0,0 @@
-source "https://rubygems.org"
-
-eval(File.read(File.dirname(__FILE__) + '/../common_dependencies.rb'))
-eval(File.read(File.dirname(__FILE__) + '/../ui_dependencies.rb'))
-
-# We require leap_web_core from here so we can use the path option.
-gem "leap_web_core", :path => '../core'
-
-# Declare your gem's dependencies in billing.gemspec.
-# Bundler will treat runtime dependencies like base dependencies, and
-# development dependencies will be added by default to the :development group.
-gemspec
-
-# jquery-rails is used by the dummy application
-#gem "jquery-rails"
-
-# Declare any dependencies that are still in development here instead of in
-# your gemspec. These might include edge Rails or gems from your path or
-# Git. Remember to move these dependencies to your gemspec before releasing
-# your gem to rubygems.org.
-
-# To use debugger
-# gem 'debugger'
diff --git a/billing/README.md b/billing/README.md
deleted file mode 100644
index 3ef6153..0000000
--- a/billing/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-Billing Engine
-====================
-
-Currently, this engine support billing via Braintree. More backends to come later.
-
-Configuration
-----------------------------------
-
-Start with a sandbox account, which you can get here: https://www.braintreepayments.com/get-started
-
-Once you have registered for the sandbox, logging in will show you three important variables you will need to configure:
-
-* merchantId
-* publicKey
-* privatekey
-
-To configure the billing engine, edit `config/config.yaml` like so:
-
- production: (or "development", as you prefer)
- billing:
- braintree:
- environment: sandbox
- merchant_id: Ohp2aijaaqu6oJ4w
- public_key: ahnar0UwLahwe6Ce
- private_key: aemie2Geohgah2EaOad9DeeruW4Iegh4
-
-If deploying via puppet, the same data in webapp.json would like this:
-
- "billing": {
- "braintree": {
- "environment": "sandbox",
- "merchant_id": "Ohp2aijaaqu6oJ4w",
- "public_key": "ahnar0UwLahwe6Ce",
- "private_key": "aemie2Geohgah2EaOad9DeeruW4Iegh4"
- }
- }
-
-Now, you should be able to add charges to your own sandbox when you run the webapp.
-
-The acceptable values for `billing.braintree.environment` are: `development`, `qa`, `sandbox`, or `production`.
-
-Plans
---------------------------------
-
-You also will want to add a Plan to your Sandbox. Within the Braintree Sandbox, navigate to 'Recurring Billing' -> 'Plans'. From here, you can add a new Plan. The values of the test plan are not important, but the ID will be displayed, so should pick something descriptive.
-
-Here are credit cared numbers to try in the Sandbox:
-
-https://www.braintreepayments.com/docs/ruby/reference/sandbox \ No newline at end of file
diff --git a/billing/Rakefile b/billing/Rakefile
deleted file mode 100644
index 52929c4..0000000
--- a/billing/Rakefile
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env rake
-begin
- require 'bundler/setup'
-rescue LoadError
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
-end
-begin
- require 'rdoc/task'
-rescue LoadError
- require 'rdoc/rdoc'
- require 'rake/rdoctask'
- RDoc::Task = Rake::RDocTask
-end
-
-RDoc::Task.new(:rdoc) do |rdoc|
- rdoc.rdoc_dir = 'rdoc'
- rdoc.title = 'LeapWebBilling'
- rdoc.options << '--line-numbers'
- rdoc.rdoc_files.include('README.rdoc')
- rdoc.rdoc_files.include('lib/**/*.rb')
-end
-
-spec = eval(File.read('leap_web_billing.gemspec'))
-Gem::PackageTask.new(spec) do |p|
- p.gem_spec = spec
-end
-
-Bundler::GemHelper.install_tasks
-
-require 'rake/testtask'
-
-Rake::TestTask.new(:test) do |t|
- t.libs << 'lib'
- t.libs << 'test'
- t.pattern = 'test/**/*_test.rb'
- t.verbose = false
-end
-
-
-task :default => :test
diff --git a/billing/app/controllers/billing_admin_controller.rb b/billing/app/controllers/billing_admin_controller.rb
deleted file mode 100644
index e11d4ee..0000000
--- a/billing/app/controllers/billing_admin_controller.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-class BillingAdminController < BillingBaseController
- before_filter :require_admin
-
- def show
-
- br_atleast_90_days = Braintree::Subscription.search do |search|
- search.days_past_due >= 90
- end
- @past_due_atleast_90_days = braintree_resource_collection_to_array(br_atleast_90_days)
-
- br_all_past_due = Braintree::Subscription.search do |search|
- search.status.is Braintree::Subscription::Status::PastDue
- #cannot search by balance.
- end
- @all_past_due = braintree_resource_collection_to_array(br_all_past_due)
-
- end
-
- private
-
- def braintree_resource_collection_to_array(braintree_resource_collection)
- array = []
- braintree_resource_collection.each do |object|
- array << object
- end
- array
- end
-
-end
diff --git a/billing/app/controllers/billing_base_controller.rb b/billing/app/controllers/billing_base_controller.rb
deleted file mode 100644
index 0453677..0000000
--- a/billing/app/controllers/billing_base_controller.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-class BillingBaseController < ApplicationController
- before_filter :assign_user
-
- helper 'billing'
-
- # required for navigation to work.
- def assign_user
- if params[:user_id]
- @user = User.find(params[:user_id])
- elsif params[:action] == "confirm"# confirms will come back with different ID set, so check for this first
- # This is only for cases where an admin cannot apply action for customer, but should be all confirms
- @user = current_user
- elsif params[:id]
- @user = User.find(params[:id])
- else
- # TODO
- # hacky, what are cases where @user hasn't yet been set? certainly some cases with subscriptions and payments
- @user = current_user
- end
- end
-
-end
diff --git a/billing/app/controllers/credit_card_info_controller.rb b/billing/app/controllers/credit_card_info_controller.rb
deleted file mode 100644
index fbaa6f1..0000000
--- a/billing/app/controllers/credit_card_info_controller.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-class CreditCardInfoController < ApplicationController
- before_filter :require_login, :set_user
-
- def edit
- @credit_card = Braintree::CreditCard.find(params[:id])
- customer = Customer.find_by_user_id(@user.id)
- if customer and customer.braintree_customer_id == @credit_card.customer_id
- @tr_data = Braintree::TransparentRedirect.
- update_credit_card_data(:redirect_url => confirm_credit_card_info_url,
- :payment_method_token => @credit_card.token)
- else
- access_denied
- end
-
- end
-
- def confirm
- @result = Braintree::TransparentRedirect.confirm(request.query_string)
- if @result.success?
- render :action => "confirm"
- else
- @credit_card = Braintree::CreditCard.find(@result.params[:payment_method_token])
- render :action => "edit"
- end
- end
-
-
- private
-
- def set_user
- # this assumes anybody, even an admin, will not access for another user.
- @user = current_user
- end
-
-end
diff --git a/billing/app/controllers/customer_controller.rb b/billing/app/controllers/customer_controller.rb
deleted file mode 100644
index 6cbcb44..0000000
--- a/billing/app/controllers/customer_controller.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-class CustomerController < BillingBaseController
- before_filter :require_login, :fetch_customer
-
- def show
- if @customer
- @customer.with_braintree_data!
- @default_cc = @customer.default_credit_card
- @active_subscription = @customer.subscriptions
- @transactions = @customer.braintree_customer.transactions
- end
- end
-
- def new
- if @customer.has_payment_info?
- redirect_to edit_customer_path(@user), :notice => 'Here is your saved customer data'
- else
- fetch_new_transparent_redirect_data
- end
- end
-
- def edit
- fetch_edit_transparent_redirect_data
- end
-
- def confirm
- @result = Braintree::TransparentRedirect.confirm(request.query_string)
- if @result.success?
- @customer.braintree_customer = @result.customer
- @customer.save
- render :action => "confirm"
- elsif @customer.has_payment_info?
- fetch_edit_transparent_redirect_data
- render :action => "edit"
- else
- fetch_new_transparent_redirect_data
- render :action => "new"
- end
- end
-
- protected
-
- def fetch_new_transparent_redirect_data
- access_denied unless @user == current_user # admins cannot do this for others
- @tr_data = Braintree::TransparentRedirect.
- create_customer_data(:redirect_url => confirm_customer_url)
- end
-
- def fetch_edit_transparent_redirect_data
- access_denied unless @user == current_user # admins cannot do this for others
- @customer.with_braintree_data!
- @default_cc = @customer.default_credit_card
- @tr_data = Braintree::TransparentRedirect.
- update_customer_data(:redirect_url => confirm_customer_url,
- :customer_id => @customer.braintree_customer_id) ##??
- end
-
- def fetch_customer
- @customer = Customer.find_by_user_id(@user.id)
- if @user == current_user
- @customer ||= Customer.new(user: @user)
- end
- access_denied unless (@customer and (@customer.user == current_user)) or admin?
- end
-end
diff --git a/billing/app/controllers/payments_controller.rb b/billing/app/controllers/payments_controller.rb
deleted file mode 100644
index fce6570..0000000
--- a/billing/app/controllers/payments_controller.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-class PaymentsController < BillingBaseController
- before_filter :require_login, :only => [:index]
-
- def new
- fetch_transparent_redirect
- end
-
- def confirm
- @result = Braintree::TransparentRedirect.confirm(request.query_string)
- if @result.success?
- render :action => "confirm"
- else
- fetch_transparent_redirect
- render :action => "new"
- end
- end
-
- def index
- access_denied unless admin? or (@user == current_user)
- customer = Customer.find_by_user_id(@user.id)
- braintree_data = Braintree::Customer.find(customer.braintree_customer_id)
- # these will be ordered by created_at descending, per http://stackoverflow.com/questions/16425475/
- @transactions = braintree_data.transactions
- end
-
- protected
-
-
- def fetch_transparent_redirect
- @tr_data = Braintree::TransparentRedirect.transaction_data redirect_url: confirm_payment_url,
- transaction: { type: "sale", options: {submit_for_settlement: true } }
- end
-
-end
diff --git a/billing/app/controllers/subscriptions_controller.rb b/billing/app/controllers/subscriptions_controller.rb
deleted file mode 100644
index f066b3c..0000000
--- a/billing/app/controllers/subscriptions_controller.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-class SubscriptionsController < BillingBaseController
- before_filter :require_login
- before_filter :fetch_subscription, :only => [:show, :destroy]
- before_filter :confirm_cancel_subscription, :only => [:destroy]
- before_filter :confirm_self_or_admin, :only => [:index]
- before_filter :confirm_no_pending_active_pastdue_subscription, :only => [:new, :create]
- # for now, admins cannot create or destroy subscriptions for others:
- before_filter :confirm_self, :only => [:new, :create]
-
- def new
- # don't show link to subscribe if they are already subscribed?
- credit_card = @customer.default_credit_card #safe to assume default?
- @payment_method_token = credit_card.token
- @plans = Braintree::Plan.all
- end
-
- # show has no content, so not needed at this point.
-
- def create
- @result = Braintree::Subscription.create( :payment_method_token => params[:payment_method_token], :plan_id => params[:plan_id] )
- #if you want to test pastdue, can add :price => '2001', :trial_period => true,:trial_duration => 1,:trial_duration_unit => "day" and then wait a day
- end
-
- def destroy
- @result = Braintree::Subscription.cancel params[:id]
- end
-
- def index
- customer = Customer.find_by_user_id(@user.id)
- @subscriptions = customer.subscriptions(nil, false)
- end
-
- private
-
- def fetch_subscription
- @subscription = Braintree::Subscription.find params[:id]
- @credit_card = Braintree::CreditCard.find @subscription.payment_method_token
- @subscription_customer_id = @credit_card.customer_id
- current_user_customer = Customer.find_by_user_id(current_user.id)
- access_denied unless admin? or (current_user_customer and current_user_customer.braintree_customer_id == @subscription_customer_id)
-
- end
-
- def confirm_cancel_subscription
- access_denied unless view_context.allow_cancel_subscription(@subscription)
- end
-
- def confirm_no_pending_active_pastdue_subscription
- @customer = Customer.find_by_user_id(@user.id)
- if subscription = @customer.subscriptions # will return pending, active or pastdue subscription, if it exists
- redirect_to user_subscription_path(@user, subscription.id), :notice => 'You already have a subscription'
- end
- end
-
- def confirm_self
- @user == current_user
- end
-
- def confirm_self_or_admin
- access_denied unless confirm_self or admin?
- end
-
-end
diff --git a/billing/app/helpers/billing_helper.rb b/billing/app/helpers/billing_helper.rb
deleted file mode 100644
index b9e5e2e..0000000
--- a/billing/app/helpers/billing_helper.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-module BillingHelper
-
- def braintree_form_for(object, options = {}, &block)
- options.reverse_merge! params: @result && @result.params[object],
- errors: @result && @result.errors.for(object),
- builder: BraintreeFormHelper::BraintreeFormBuilder,
- url: Braintree::TransparentRedirect.url
-
- form_for object, options, &block
- end
-
- def billing_top_link(user)
- # for admins, top link will show special admin information, which has link to show their own customer information
- if (admin? and user == current_user)
- billing_admin_path
- else
- show_or_new_customer_link(user)
- end
- end
-
- def show_or_new_customer_link(user)
- # Link to show if user is admin viewing another user, or user is already a customer.
- # Otherwise link to create a new customer.
- if (admin? and (user != current_user)) or ((customer = Customer.find_by_user_id(user.id)) and customer.has_payment_info?)
- show_customer_path(user)
- else
- new_customer_path
- end
- end
-
- # a bit strange to put here, but we don't have a subscription model
- def user_for_subscription(subscription)
-
- if (transaction = subscription.transactions.first)
- # much quicker, but will only work if there is already a transaction associated with subscription (should generally be)
- braintree_customer_id = transaction.customer_details.id
- else
- credit_card = Braintree::CreditCard.find(subscription.payment_method_token)
- braintree_customer_id = credit_card.customer_id
- end
-
- customer = Customer.find_by_braintree_customer_id(braintree_customer_id)
- user = User.find(customer.user_id)
-
- end
-
- def allow_cancel_subscription(subscription)
- ['Active', 'Pending'].include? subscription.status or (admin? and subscription.status == 'Past Due')
- end
-
-end
diff --git a/billing/app/helpers/braintree_form_helper.rb b/billing/app/helpers/braintree_form_helper.rb
deleted file mode 100644
index cb322fa..0000000
--- a/billing/app/helpers/braintree_form_helper.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-module BraintreeFormHelper
- class BraintreeFormBuilder < ActionView::Helpers::FormBuilder
- include ActionView::Helpers::AssetTagHelper
- include ActionView::Helpers::TagHelper
-
- def initialize(object_name, object, template, options, proc)
- super
- @braintree_params = @options[:params]
- @braintree_errors = @options[:errors]
- @braintree_existing = @options[:existing]
- end
-
- def fields_for(record_name, *args, &block)
- options = args.extract_options!
- options[:builder] = BraintreeFormBuilder
- options[:params] = @braintree_params && @braintree_params[record_name]
- options[:errors] = @braintree_errors && @braintree_errors.for(record_name)
- new_args = args + [options]
- super record_name, *new_args, &block
- end
-
- def text_field(method, options = {})
- has_errors = @braintree_errors && @braintree_errors.on(method).any?
- field = super(method, options.merge(:value => determine_value(method)))
- result = content_tag("div", field, :class => has_errors ? "fieldWithErrors" : "")
- result.safe_concat validation_errors(method)
- result
- end
-
- protected
-
- def determine_value(method)
- if @braintree_params
- @braintree_params[method]
- elsif @braintree_existing
-
- if @braintree_existing.kind_of?(Braintree::CreditCard)
-
- case method
- when :number
- method = :masked_number
- when :cvv
- return nil
- end
- end
-
- @braintree_existing.send(method)
- else
- nil
- end
- end
-
- def validation_errors(method)
- if @braintree_errors && @braintree_errors.on(method).any?
- @braintree_errors.on(method).map do |error|
- content_tag("div", ERB::Util.h(error.message), {:style => "color: red;"})
- end.join
- else
- ""
- end
- end
- end
-end
-
diff --git a/billing/app/helpers/braintree_helper.rb b/billing/app/helpers/braintree_helper.rb
deleted file mode 100644
index 2d18b6c..0000000
--- a/billing/app/helpers/braintree_helper.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module BraintreeHelper
-
-
-end
-
diff --git a/billing/app/models/customer.rb b/billing/app/models/customer.rb
deleted file mode 100644
index 1acc7a5..0000000
--- a/billing/app/models/customer.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-class Customer < CouchRest::Model::Base
-
- FIELDS = [:first_name, :last_name, :phone, :website, :company, :fax, :addresses, :credit_cards, :custom_fields]
- attr_accessor *FIELDS
-
- use_database "customers"
- belongs_to :user
- belongs_to :braintree_customer
-
- # Braintree::Customer - stored on braintrees servers - we only have the id.
- def braintree_customer
- @braintree_customer ||= Braintree::Customer.find(braintree_customer_id)
- end
-
- validates :user, presence: true
-
- design do
- view :by_user_id
- view :by_braintree_customer_id
- end
-
- def has_payment_info?
- !!braintree_customer_id
- end
-
- # from braintree_ruby_examples/rails3_tr_devise and should be tweaked
- def with_braintree_data!
- return self unless has_payment_info?
-
- FIELDS.each do |field|
- send(:"#{field}=", braintree_customer.send(field))
- end
- self
- end
-
- def default_credit_card
- return unless has_payment_info?
-
- credit_cards.find { |cc| cc.default? }
- end
-
- # based on 2nd parameter, either returns the single active subscription (or nil if there isn't one), or an array of all subsciptions
- def subscriptions(braintree_data=nil, only_pending_active_pastdue=true)
- self.with_braintree_data!
- return unless has_payment_info?
-
- subscriptions = []
- self.default_credit_card.subscriptions.each do |sub|
- if only_pending_active_pastdue and ['Pending', 'Active','Past Due'].include? sub.status
- return sub
- else
- subscriptions << sub
- end
- end
- only_pending_active_pastdue ? nil : subscriptions
- end
-
-end
diff --git a/billing/app/views/billing_admin/show.html.haml b/billing/app/views/billing_admin/show.html.haml
deleted file mode 100644
index 0382cf0..0000000
--- a/billing/app/views/billing_admin/show.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-%legend= t(:more_than_90_days_past_due)
-= render(:partial => "subscriptions/subscription_details", :collection => @past_due_atleast_90_days, :as => 'subscription', :locals => {:show_user => true}) || t(:none)
-%legend= t(:all_past_due)
-= render(:partial => "subscriptions/subscription_details", :collection => @all_past_due, :as => 'subscription', :locals => {:show_user => true}) || t(:none)
-
-%legend= t(:your_settings)
-= link_to 'view own billing settings', show_or_new_customer_link(current_user) \ No newline at end of file
diff --git a/billing/app/views/credit_card_info/confirm.html.haml b/billing/app/views/credit_card_info/confirm.html.haml
deleted file mode 100644
index 9dd8176..0000000
--- a/billing/app/views/credit_card_info/confirm.html.haml
+++ /dev/null
@@ -1,5 +0,0 @@
-%h1 Payment Info Confirmation
-%p Your payment information was successfully saved.
-%dl
- %dt Credit Card
- %dd= @result.credit_card.masked_number
diff --git a/billing/app/views/credit_card_info/edit.html.haml b/billing/app/views/credit_card_info/edit.html.haml
deleted file mode 100644
index bd86a4c..0000000
--- a/billing/app/views/credit_card_info/edit.html.haml
+++ /dev/null
@@ -1,17 +0,0 @@
-%h1 Change Credit Card
-- if @result
- #total-errors{:style => "color:red;"}
- = h(@result.errors.size)
- error(s)
-= braintree_form_for :credit_card, :existing => @credit_card do |f|
- = field_set_tag "Credit Card" do
- %dl
- %dt= f.label :number, 'Number'
- %dd= f.text_field :number
- %dt= f.label :expiration_date, 'Expiration Date (MM/YY)'
- %dd= f.text_field :expiration_date
- %dt= f.label :cvv, 'CVV'
- %dd= f.text_field :cvv
- = hidden_field_tag :tr_data, @tr_data
- = f.submit 'Save Payment Info', :class => :btn
- = link_to t(:cancel), edit_customer_path(@user.id), :class => :btn
diff --git a/billing/app/views/customer/_customer_data.html.haml b/billing/app/views/customer/_customer_data.html.haml
deleted file mode 100644
index e9df040..0000000
--- a/billing/app/views/customer/_customer_data.html.haml
+++ /dev/null
@@ -1,16 +0,0 @@
-%legend= t(:customer_information)
-%dl
- %dt First Name
- %dd= @customer.first_name
- %dt Last Name
- %dd= @customer.last_name
- %dt Phone
- %dd= @customer.phone
-%legend= t(:credit_card_information)
-%dl
- %dt Number
- %dd= @default_cc.masked_number
- %dt Expiration Date
- %dd= @default_cc.expiration_date
- - if current_user == @user
- = link_to t(:edit_saved_data), edit_customer_path(@user.id), :class => :btn
diff --git a/billing/app/views/customer/_transaction.html.haml b/billing/app/views/customer/_transaction.html.haml
deleted file mode 100644
index e69de29..0000000
--- a/billing/app/views/customer/_transaction.html.haml
+++ /dev/null
diff --git a/billing/app/views/customer/confirm.html.haml b/billing/app/views/customer/confirm.html.haml
deleted file mode 100644
index 877a8ac..0000000
--- a/billing/app/views/customer/confirm.html.haml
+++ /dev/null
@@ -1,14 +0,0 @@
-%h1 Payment Info Confirmation
-%p Your payment information was successfully saved.
-%dl
- %dt First Name
- %dd= @result.customer.first_name
- %dt Last Name
- %dd= @result.customer.last_name
- %dt Phone
- %dd= @result.customer.phone
- %dt Credit Card
- - @result.customer.credit_cards.each do |cc|
- %dd= cc.masked_number
-- customer = Customer.find_by_user_id(@user.id)
-= link_to 'View Customer Info', show_customer_path(@user.id), :class=> :btn \ No newline at end of file
diff --git a/billing/app/views/customer/edit.html.haml b/billing/app/views/customer/edit.html.haml
deleted file mode 100644
index e882d53..0000000
--- a/billing/app/views/customer/edit.html.haml
+++ /dev/null
@@ -1,23 +0,0 @@
-- if @result
- #total-errors{:style => "color:red;"}
- = h(@result.errors.size)
- error(s)
-= braintree_form_for :customer, existing: @customer do |f|
- = field_set_tag "Customer" do
- %dl
- %dt= f.label :first_name, 'First Name'
- %dd= f.text_field :first_name
- %dt= f.label :last_name, 'Last Name'
- %dd= f.text_field :last_name
- %dt= f.label :phone, 'Phone'
- %dd= f.text_field :phone
- - if @default_cc
- = # todo, as they will need a credit card, so not sure about conditional?
- %dt= t(:stored_credit_card)
- %dd
- = @default_cc.masked_number
- = link_to t(:change_credit_card), edit_credit_card_info_path(:id => @default_cc.token), :class => :btn
- = hidden_field_tag :tr_data, @tr_data
- .form-actions
- = f.submit t(:save_customer_info), :class => 'btn btn-primary'
- = link_to t(:cancel), show_customer_path(@user), :class=> :btn
diff --git a/billing/app/views/customer/new.html.haml b/billing/app/views/customer/new.html.haml
deleted file mode 100644
index e1f5ba9..0000000
--- a/billing/app/views/customer/new.html.haml
+++ /dev/null
@@ -1,24 +0,0 @@
-- if @result
- #total-errors{:style => "color:red;"}
- = h(@result.errors.size)
- error(s)
-= braintree_form_for :customer do |f|
- = field_set_tag "Customer" do
- %dl
- %dt= f.label :first_name, 'First Name'
- %dd= f.text_field :first_name
- %dt= f.label :last_name, 'Last Name'
- %dd= f.text_field :last_name
- %dt= f.label :phone, 'Phone'
- %dd= f.text_field :phone
- = field_set_tag "Credit Card" do
- - f.fields_for :credit_card do |cc|
- %dl
- %dt= cc.label :number, 'Number'
- %dd= cc.text_field :number
- %dt= cc.label :expiration_date, 'Expiration Date (MM/YY)'
- %dd= cc.text_field :expiration_date
- %dt= cc.label :cvv, 'CVV'
- %dd= cc.text_field :cvv
- = hidden_field_tag :tr_data, @tr_data
- = f.submit 'Save Payment Info'
diff --git a/billing/app/views/customer/show.html.haml b/billing/app/views/customer/show.html.haml
deleted file mode 100644
index ec1779c..0000000
--- a/billing/app/views/customer/show.html.haml
+++ /dev/null
@@ -1,27 +0,0 @@
-- if admin? and !@customer
- = t(:no_saved_customer)
-- else
- = render :partial => 'customer_data'
- %legend= t(:last_three_transactions)
- - counter = 0
- = # these will be ordered with most recently created first, per http://stackoverflow.com/questions/16425475/
- - @transactions.each do |t|
- - break if counter > 2 # not ruby-like, but object is a Braintree::ResourceCollection so limited methods available
- = render :partial => "payments/transaction_details", :locals => {:transaction => t}
- - counter += 1
- = link_to t(:transaction_history), user_payments_path(@user)
- %legend= t(:subscriptions)
- - if @active_subscription
- = render :partial => "subscriptions/subscription_details", :locals => {:subscription => @active_subscription}
- - else
- %p
- = t(:no_relevant_subscription)
- - if current_user == @user
- %p
- .form-actions
- = link_to t(:subscribe_to_plan), new_subscription_path, :class => :btn
- %p
- = link_to t(:all_subscriptions), user_subscriptions_path(@user)
-
-.form-actions
- = link_to t(:make_donation), new_payment_path, :class => 'btn btn-primary'
diff --git a/billing/app/views/payments/_non_customer_fields.html.haml b/billing/app/views/payments/_non_customer_fields.html.haml
deleted file mode 100644
index 77cfe95..0000000
--- a/billing/app/views/payments/_non_customer_fields.html.haml
+++ /dev/null
@@ -1,16 +0,0 @@
-= field_set_tag "Personal Information" do
- = f.fields_for :customer do |c|
- %div= c.label :first_name, "First Name"
- %div= c.text_field :first_name
- %div= c.label :last_name, "Last Name"
- %div= c.text_field :last_name
- %div= c.label :email, "Email"
- %div= c.text_field :email
-= field_set_tag "Credit Card" do
- = f.fields_for :credit_card do |c|
- %div= c.label :number, "Number"
- %div= c.text_field :number
- %div= c.label :expiration_date, "Expiration Date (MM/YY)"
- %div= c.text_field :expiration_date
- %div= c.label :cvv, "CVV"
- %div= c.text_field :cvv \ No newline at end of file
diff --git a/billing/app/views/payments/_transaction_details.html.haml b/billing/app/views/payments/_transaction_details.html.haml
deleted file mode 100644
index 85e4f6a..0000000
--- a/billing/app/views/payments/_transaction_details.html.haml
+++ /dev/null
@@ -1,15 +0,0 @@
-%p
- = transaction.id
- Type:
- = transaction.type
- Amount:
- = number_to_currency(transaction.amount)
- Status:
- = transaction.status
- Date
- = transaction.created_at.strftime("%Y-%m-%d")
- - if sub_start = transaction.subscription_details.billing_period_start_date
- From subscription which started
- = sub_start
- - else # should not have any of these
- Not paid as part of subscription \ No newline at end of file
diff --git a/billing/app/views/payments/confirm.html.haml b/billing/app/views/payments/confirm.html.haml
deleted file mode 100644
index 45af3c9..0000000
--- a/billing/app/views/payments/confirm.html.haml
+++ /dev/null
@@ -1,26 +0,0 @@
-%h1 Payment Result
-%div Thank you for your donation.
-%h2 Transaction Details
-%table
- %tr
- %td Amount
- %td
- $#{@result.transaction.amount}
- %tr
- %td Transaction ID:
- %td= @result.transaction.id
- %tr
- %td First Name:
- %td= h @result.transaction.customer_details.first_name
- %tr
- %td Last Name:
- %td= h @result.transaction.customer_details.last_name
- %tr
- %td Email:
- %td= h @result.transaction.customer_details.email
- %tr
- %td Credit Card:
- %td= h @result.transaction.credit_card_details.masked_number
- %tr
- %td Card Type:
- %td= h @result.transaction.credit_card_details.card_type \ No newline at end of file
diff --git a/billing/app/views/payments/index.html.haml b/billing/app/views/payments/index.html.haml
deleted file mode 100644
index 7a89917..0000000
--- a/billing/app/views/payments/index.html.haml
+++ /dev/null
@@ -1,5 +0,0 @@
-%h2=t :transaction_history
-- if (@transactions.count == 0)
- = t(:no_transaction_history)
-- @transactions.each do |t|
- = render :partial => "transaction_details", :locals => {:transaction => t} \ No newline at end of file
diff --git a/billing/app/views/payments/new.html.haml b/billing/app/views/payments/new.html.haml
deleted file mode 100644
index e9a8273..0000000
--- a/billing/app/views/payments/new.html.haml
+++ /dev/null
@@ -1,17 +0,0 @@
-%h1
- = t(:Donation)
-- if logged_in?
- = t(:donation_not_payment)
-- if @result and @result.errors.size > 0
- %div{:style => "color: red;"}
- = h @result.errors.size
- error(s)
-- if @result and @result.transaction and @result.transaction.status != 'success'
- %div{:style => "color: red;"}
- = t(:processor_declined)
-= braintree_form_for :transaction, :html => {:autocomplete => "off"} do |f|
- = f.label :amount, t(:amount)
- = f.text_field :amount
- = render :partial => 'non_customer_fields', :locals => {:f => f}
- = hidden_field_tag :tr_data, @tr_data
- = f.submit "Submit Donation", :class => 'btn btn-primary'
diff --git a/billing/app/views/subscriptions/_subscription_details.html.haml b/billing/app/views/subscriptions/_subscription_details.html.haml
deleted file mode 100644
index 6145c95..0000000
--- a/billing/app/views/subscriptions/_subscription_details.html.haml
+++ /dev/null
@@ -1,26 +0,0 @@
-%p
- - if local_assigns[:show_user]
- User:
- - user_to_show = user_for_subscription(subscription)
- = link_to user_to_show.login, user_overview_path(user_to_show)
- ID:
- = link_to subscription.id, user_subscription_path(@user, subscription.id)
- Balance:
- - color = (subscription.balance > 0) ? "red" : ""
- %font{:color => color}
- = number_to_currency(subscription.balance)
- Bill on:
- = subscription.billing_day_of_month
- Start date:
- = subscription.first_billing_date
- Paid through:
- = subscription.paid_through_date
- Plan:
- = subscription.plan_id
- Price:
- = number_to_currency(subscription.price)
- - color = (subscription.status == 'Active') ? "green" : "red"
- Status:
- %font{:color => color}
- = subscription.status
- - # would be good to get plan name but not sure if that is possible? \ No newline at end of file
diff --git a/billing/app/views/subscriptions/create.html.haml b/billing/app/views/subscriptions/create.html.haml
deleted file mode 100644
index 2b6c5e9..0000000
--- a/billing/app/views/subscriptions/create.html.haml
+++ /dev/null
@@ -1,9 +0,0 @@
-- if @result.success?
- %h1
- Subscription Status
- = @result.subscription.status
- = render :partial => "subscription_details", :locals => {:subscription => @result.subscription}
-- else
- %h1
- Error:
- = @result.message \ No newline at end of file
diff --git a/billing/app/views/subscriptions/destroy.html.haml b/billing/app/views/subscriptions/destroy.html.haml
deleted file mode 100644
index 44b4333..0000000
--- a/billing/app/views/subscriptions/destroy.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-- if @result.success?
- Subscription destroyed
-- else
- Error:
- = @result.message
-%p
- = link_to 'Customer Information', show_customer_path(@user), :class=> :btn \ No newline at end of file
diff --git a/billing/app/views/subscriptions/index.html.haml b/billing/app/views/subscriptions/index.html.haml
deleted file mode 100644
index 3d4e8fd..0000000
--- a/billing/app/views/subscriptions/index.html.haml
+++ /dev/null
@@ -1,8 +0,0 @@
-%h2=t :all_subscriptions
-- pending_active_pastdue = false
-- @subscriptions.each do |s|
- - if ['Pending', 'Active','Past Due'].include? s.status
- - pending_active_pastdue = true
- = render :partial => "subscription_details", :locals => {:subscription => s}
-- if !pending_active_pastdue and @user == current_user
- = link_to 'subscribe to plan', new_subscription_path, :class => :btn \ No newline at end of file
diff --git a/billing/app/views/subscriptions/new.html.haml b/billing/app/views/subscriptions/new.html.haml
deleted file mode 100644
index 4183458..0000000
--- a/billing/app/views/subscriptions/new.html.haml
+++ /dev/null
@@ -1,15 +0,0 @@
-- if @payment_method_token
- %h1
- Subscribe to plan
- = #currently just one plan
- = @plans[0].name
- = number_to_currency(@plans[0].price)
- = simple_form_for :subscription, :url => :subscriptions do |f|
- = hidden_field_tag :payment_method_token, @payment_method_token
- = hidden_field_tag :plan_id, @plans[0].id
- .form-actions
- = f.submit t(:subscribe), :class => 'btn btn-primary'
-- else
- = t(:must_create_customer)
- %p
- = link_to t(:create_new_customer), new_customer_path
diff --git a/billing/app/views/subscriptions/show.html.haml b/billing/app/views/subscriptions/show.html.haml
deleted file mode 100644
index 2699db9..0000000
--- a/billing/app/views/subscriptions/show.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-%h1
- - if @subscription.status == 'Active'
- Current
- Subscription
-= render :partial => "subscription_details", :locals => {:subscription => @subscription}
-= link_to t(:cancel_subscription), user_subscription_path(@user, @subscription.id), :confirm => t(:are_you_sure), :method => :delete, :class => 'btn btn-danger' if allow_cancel_subscription(@subscription)
diff --git a/billing/config/initializers/braintree.rb b/billing/config/initializers/braintree.rb
deleted file mode 100644
index 3d87f4c..0000000
--- a/billing/config/initializers/braintree.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# set logger
-#
-if APP_CONFIG[:logfile].blank?
- require 'syslog/logger'
- Braintree::Configuration.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new('webapp'))
-else
- Braintree::Configuration.logger = Logger.new('log/braintree.log')
-end
-
-#
-# You can set these per environment in config/config.yml:
-#
-# Environment must be one of: :development, :qa, :sandbox, :production
-#
-if billing = APP_CONFIG[:billing]
- if braintree = billing[:braintree]
- Braintree::Configuration.environment = braintree[:environment].downcase.to_sym
- Braintree::Configuration.merchant_id = braintree[:merchant_id]
- Braintree::Configuration.public_key = braintree[:public_key]
- Braintree::Configuration.private_key = braintree[:private_key]
- end
-end
diff --git a/billing/config/locales/en.yml b/billing/config/locales/en.yml
deleted file mode 100644
index 1300958..0000000
--- a/billing/config/locales/en.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-en:
- create_new_customer: "Create a new Braintree Customer"
- must_create_customer: "You must store a customer in braintree before subscribing to a plan"
- subscribe: "Subscribe"
- save_customer_info: "Save Customer Information"
- donation_not_payment: "Note: This is a donation, and will not be applied towards your account."
- no_relevant_subscription: "No subscription which is Active, Pending, or Past Due"
- plan: "Plan"
- description: "Description"
- cost: "Cost"
- free: "Free" \ No newline at end of file
diff --git a/billing/config/routes.rb b/billing/config/routes.rb
deleted file mode 100644
index 7263dff..0000000
--- a/billing/config/routes.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-Rails.application.routes.draw do
-
- scope "(:locale)", :locale => MATCH_LOCALE do
- match 'payments/new' => 'payments#new', :as => :new_payment
- match 'payments/confirm' => 'payments#confirm', :as => :confirm_payment
- resources :users do
- resources :payments, :only => [:index]
- resources :subscriptions, :only => [:index, :show, :destroy]
- end
-
- resources :customer, :only => [:new, :edit]
- resources :credit_card_info, :only => [:edit]
-
- match 'customer/confirm/' => 'customer#confirm', :as => :confirm_customer
- match 'customer/show/:id' => 'customer#show', :as => :show_customer
- match 'credit_card_info/confirm' => 'credit_card_info#confirm', :as => :confirm_credit_card_info
-
- resources :subscriptions, :only => [:new, :create, :update] # index, show & destroy are within users path
- match 'billing_admin' => 'billing_admin#show', :as => :billing_admin
-
- #match 'transactions/:product_id/new' => 'transactions#new', :as => :new_transaction
- #match 'transactions/confirm/:product_id' => 'transactions#confirm', :as => :confirm_transaction
- end
-
-end
diff --git a/billing/leap_web_billing.gemspec b/billing/leap_web_billing.gemspec
deleted file mode 100644
index cb0335e..0000000
--- a/billing/leap_web_billing.gemspec
+++ /dev/null
@@ -1,21 +0,0 @@
-$:.push File.expand_path("../lib", __FILE__)
-
-require File.expand_path('../../lib/leap_web/version.rb', __FILE__)
-
-# Describe your gem and declare its dependencies:
-Gem::Specification.new do |s|
- s.name = "leap_web_billing"
- s.version = LeapWeb::VERSION
- s.authors = ["Jessib"]
- s.email = ["jessib@leap.se"]
- s.homepage = "http://www.leap.se"
- s.summary = "Billing for LeapWeb"
- s.description = "Billing System for a Leap provider"
-
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
- s.test_files = Dir["test/**/*"]
-
- # s.add_dependency "braintree-rails", "~> 0.4.5"
- s.add_dependency "braintree"
- #s.add_dependency "carmen-rails"
-end
diff --git a/billing/lib/braintree_test_app.rb b/billing/lib/braintree_test_app.rb
deleted file mode 100644
index 41c327d..0000000
--- a/billing/lib/braintree_test_app.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# RackTest assumes all requests to be local.
-# Braintree requests need to go out to a different server though.
-# So we use a middleware to catch these and send them out again.
-
-class BraintreeTestApp
- def initialize(app)
- @app = app
- end
-
- def call(env)
- @env = env
- config = Braintree::Configuration.instantiate
- if request.path =~ /\/merchants\/#{config.merchant_id}\/transparent_redirect_requests$/
- #proxy post to braintree
- uri = URI.parse(config.protocol + "://" + config.server + ":" +
- config.port.to_s + request.path)
- http = Net::HTTP.new(uri.host, uri.port)
- res = http.post(uri.path, request.body.read)
-
- if res.code == "303"
- header_hash = res.header.to_hash
- header_hash["location"].first.gsub!("http://localhost:3000/", "http://www.example.com/")
- [303, {"location" => header_hash["location"].first}, ""]
- else
- raise "unexpected response from Braintree: expected a 303"
- end
- else
- @app.call(env)
- end
- end
-
- def request
- @request = Rack::Request.new(@env)
- end
-end
-
diff --git a/billing/lib/leap_web_billing.rb b/billing/lib/leap_web_billing.rb
deleted file mode 100644
index 288d846..0000000
--- a/billing/lib/leap_web_billing.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require "leap_web_billing/engine"
-
-module LeapWebBilling
-end
diff --git a/billing/lib/leap_web_billing/engine.rb b/billing/lib/leap_web_billing/engine.rb
deleted file mode 100644
index ab574f2..0000000
--- a/billing/lib/leap_web_billing/engine.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# thou shall require all your dependencies in an engine.
-#require "braintree-rails"
-require "braintree"
-#require "carmen-rails"
-
-module LeapWebBilling
- class Engine < ::Rails::Engine
-
- end
-end
diff --git a/billing/script/rails b/billing/script/rails
deleted file mode 100755
index 8bd9c0a..0000000
--- a/billing/script/rails
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
-
-ENGINE_ROOT = File.expand_path('../..', __FILE__)
-ENGINE_PATH = File.expand_path('../../lib/leap_web_billing/engine', __FILE__)
-
-require 'rails/all'
-require 'rails/engine/commands'
diff --git a/billing/test/broken/admin_customer_test.rb b/billing/test/broken/admin_customer_test.rb
deleted file mode 100644
index df92a0d..0000000
--- a/billing/test/broken/admin_customer_test.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require 'test_helper'
-require 'fake_braintree'
-
-class AdminCustomerTest < BraintreeIntegrationTest
-
- setup do
- @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin')
- @user = FactoryGirl.create(:user)
- end
-
- teardown do
- @user.destroy if @user
- @admin.destroy if @admin
- end
-
- test "check non customer as admin" do
- login_as @admin
- visit '/'
- click_link 'Users'
- click_link @user.login
- click_link 'Billing Settings'
- assert page.has_content? @user.email_address
- assert page.has_content? 'No Saved Customer'
- end
-
- test "check customer as admin" do
- skip "cannot check customer as admin"
- # it would be good to have a test where an admin tries to view the 'Billing Settings' for another user.
- # However, partially due to limitations of FakeBraintree, this doesn't seem pursuing at this time.
- end
-end
diff --git a/billing/test/broken/customer_creation_test.rb b/billing/test/broken/customer_creation_test.rb
deleted file mode 100644
index 90319a9..0000000
--- a/billing/test/broken/customer_creation_test.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require 'test_helper'
-require 'fake_braintree'
-
-class CustomerCreationTest < BraintreeIntegrationTest
-
- setup do
- @user = FactoryGirl.create(:user)
- login_as @user
- end
-
- teardown do
- @user.destroy
- end
-
- # Let's test both steps together with capybara
- #
- # This test is nice and clean but also a bit fragile:
- # RackTest assumes all requests to be local. So we need
- # BraintreeTestApp for the braintree transparent redirect to work.
- #
- # this mystifies me why this works. when i type the click_button line (and the
- # customer.braintree_customer line) in the debugger, it gives a timeout,
- # but it works fine embedded in the test.
- test "create customer with braintree" do
- visit '/'
- click_link 'Billing Settings'
- # i am a bit unclear why this works, as it seems there will be validation errors
- assert_difference("Customer.count") do
- click_button 'Save Payment Info' # this gives me a timeout
- end
- assert customer = Customer.find_by_user_id(@user.id)
- assert customer.braintree_customer
- end
-
- # We only test the confirmation here.
- # The request to Braintree is triggered outside of rails
- # In skippped test below, we see this works even if the attributes are
- # for a broken customer
- test "successfully confirms customer creation" do
- response = post_transparent_redirect :create_customer_data,
- customer: FactoryGirl.attributes_for(:braintree_customer),
- redirect_url: confirm_customer_url
-
- assert_difference("Customer.count") do
- post response['Location']
- end
-
- assert_equal 200, status
- assert customer = Customer.find_by_user_id(@user.id)
- assert customer.braintree_customer
- end
-
-
- test "failed customer creation" do
- skip "cannot get customer creation to fail"
-
- FakeBraintree.decline_all_cards!
-
- response = post_transparent_redirect :create_customer_data,
- customer: FactoryGirl.attributes_for(:broken_customer),
- redirect_url: confirm_customer_url
-
- assert FakeBraintree.decline_all_cards?
- assert_no_difference("Customer.count") do
- post response['Location'] #this gives me a timeout when run alone
- end
- assert_nil Customer.find_by_user_id(@user.id)
-
- end
-
- def post_transparent_redirect(type, data)
- params = data.dup
- params[:tr_data] = Braintree::TransparentRedirect.send(type, params)
- post_transparent_redirect_params(params)
- end
-
- def post_transparent_redirect_params(params)
- uri = URI.parse(Braintree::TransparentRedirect.url)
- Net::HTTP.start(uri.host, uri.port) do |http|
- http.post(uri.path, Rack::Utils.build_nested_query(params))
- end
- end
-
-end
diff --git a/billing/test/broken/subscription_test.rb b/billing/test/broken/subscription_test.rb
deleted file mode 100644
index cd010bd..0000000
--- a/billing/test/broken/subscription_test.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require 'test_helper'
-require 'fake_braintree'
-
-class SubscriptionTest < BraintreeIntegrationTest
- include CustomerTestHelper
- include StubRecordHelper
-
- setup do
- @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin')
- @customer = stub_customer
- @braintree_customer = @customer.braintree_customer
- response = Braintree::Subscription.create plan_id: '5',
- payment_method_token: @braintree_customer.credit_cards.first.token,
- price: '10'
- @subscription = response.subscription
- end
-
- teardown do
- @admin.destroy
- end
-
- test "admin can see all subscriptions for another" do
- login_as @admin
- @customer.stubs(:subscriptions).returns([@subscription])
- @subscription.stubs(:balance).returns 0
- visit user_subscriptions_path(@customer.user_id, :locale => nil)
- assert page.has_content?("Subscriptions")
- assert page.has_content?("Status: Active")
- end
-
- # test "user cannot see all subscriptions for other user" do
- #end
-
- #test "admin cannot add subscription for another" do
- #end
-
- #test "authenticated user can cancel own subscription" do
- #end
-
- #test "user cannot add subscription if they have active one" do
- #end
-
- #test "user can view own subscriptions"
- #end
-
- #test "admin can view another user's subscriptions" do
- #end
-
-end
diff --git a/billing/test/factories.rb b/billing/test/factories.rb
deleted file mode 100644
index 87543b2..0000000
--- a/billing/test/factories.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-FactoryGirl.define do
-
- TEST_CC_NUMBER = %w(4111 1111 1111 1111).join
-
- factory :customer do
- user
-
- factory :customer_with_payment_info do
- braintree_customer
- end
- end
-
- factory :braintree_customer, class: Braintree::Customer do
- first_name 'Big'
- last_name 'Spender'
- credit_card number: TEST_CC_NUMBER, expiration_date: '04/2016'
- initialize_with { Braintree::Customer.create(attributes).customer }
- skip_create
-
- factory :broken_customer do
- credit_card number: '123456', expiration_date: '04/2016'
- end
- end
-
-end
diff --git a/billing/test/functional/customer_controller_test.rb b/billing/test/functional/customer_controller_test.rb
deleted file mode 100644
index d943e23..0000000
--- a/billing/test/functional/customer_controller_test.rb
+++ /dev/null
@@ -1,124 +0,0 @@
-require 'test_helper'
-require 'fake_braintree'
-
-class CustomerControllerTest < ActionController::TestCase
- include CustomerTestHelper
-
- test "new assigns redirect url" do
- login
- get :new
-
- assert_response :success
- assert assigns(:tr_data)
- tr_data = Braintree::Util.parse_query_string(assigns(:tr_data))
- assert_equal confirm_customer_url, tr_data[:redirect_url]
- end
-
- test "new requires login" do
- get :new
-
- assert_response :redirect
- assert_redirected_to login_path
- end
-
- test "edit uses params[:id]" do
- customer = stub_customer
- login customer.user
- get :edit, id: customer.user.id
-
- assert_response :success
- assert assigns(:tr_data)
- tr_data = Braintree::Util.parse_query_string(assigns(:tr_data))
- assert_equal customer.braintree_customer_id, tr_data[:customer_id]
- assert_equal confirm_customer_url, tr_data[:redirect_url]
- end
-
- test "confirm customer creation" do
- login
- Braintree::TransparentRedirect.expects(:confirm).returns(success_response)
- # to_confirm = prepare_confirmation :create_customer_data,
- # customer: FactoryGirl.attributes_for(:braintree_customer),
- # redirect_url: confirm_customer_url
-
- assert_difference("Customer.count") do
- post :confirm, braintree: :query
- end
-
- assert_response :success
- assert result = assigns(:result)
- assert result.success?
- assert result.customer.id
- end
-
- test "customer update" do
- customer = stub_customer
- customer.expects(:save)
- login customer.user
- Braintree::TransparentRedirect.expects(:confirm).
- returns(success_response(customer))
-
- assert_no_difference("Customer.count") do
- post :confirm, query: :from_braintree
- end
-
- assert_response :success
- assert result = assigns(:result)
- assert result.success?
- assert_equal customer.braintree_customer, result.customer
- end
-
- test "failed customer creation" do
- skip "can't get customer creation to fail"
- login
- FakeBraintree.decline_all_cards!
- # what is prepare_confirmation ?? this method isn't found
- to_confirm = prepare_confirmation :create_customer_data,
- customer: FactoryGirl.attributes_for(:broken_customer),
- redirect_url: confirm_customer_url
- post :confirm, to_confirm
-
- FakeBraintree.clear!
- assert_response :success
- assert result = assigns(:result)
- assert !result.success?
- end
-
- test "failed customer creation with stubbing" do
- login
- Braintree::TransparentRedirect.expects(:confirm).returns(failure_response)
- post :confirm, bla: :blub
-
- assert_response :success
- assert_template :new
- end
-
- test "failed customer update with stubbing" do
- customer = stub_customer
- login customer.user
- Braintree::TransparentRedirect.expects(:confirm).returns(failure_response)
- post :confirm, bla: :blub
-
- assert_response :success
- assert_template :edit
- end
-
- def failure_response
- stub success?: false,
- errors: stub(for: nil, size: 0),
- params: {}
- end
-
- def success_response(customer = nil)
- stub success?: true,
- customer: braintree_customer(customer)
- end
-
- def braintree_customer(customer)
- if customer
- customer.braintree_customer
- else
- FactoryGirl.build :braintree_customer
- end
- end
-
-end
diff --git a/billing/test/functional/customers_controller_test.rb b/billing/test/functional/customers_controller_test.rb
deleted file mode 100644
index 46c33c9..0000000
--- a/billing/test/functional/customers_controller_test.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require 'test_helper'
-require 'fake_braintree'
-
-class CustomersControllerTest < ActionController::TestCase
- tests CustomerController
-
- setup do
- @user = FactoryGirl.create :user
- @other_user = FactoryGirl.create :user
- #FakeBraintree.clear!
- #FakeBraintree.verify_all_cards!
- testid = 'testid'
- #this wasn't actually being used
- #FakeBraintree::Customer.new({:credit_cards => [{:number=>"5105105105105100", :expiration_date=>"05/2013"}]}, {:id => testid, :merchant_id => Braintree::Configuration.merchant_id})
- # any reason to call the create instance method on the FakeBraintree::Customer ?
- @customer = Customer.new(:user_id => @other_user.id)
- @customer.braintree_customer_id = testid
- @customer.save
-
- end
-
- teardown do
- @user.destroy
- @other_user.destroy
- @customer.destroy
- end
-
- test "no access if not logged in" do
- get :new
- assert_access_denied(true, false)
- get :show, :id => @customer.braintree_customer_id
- assert_access_denied(true, false)
- get :edit, :id => @customer.braintree_customer_id
- assert_access_denied(true, false)
- end
-
-
- test "should get new if logged in and not customer" do
- login @user
- get :new
- assert_not_nil assigns(:tr_data)
- assert_response :success
- end
-
- test "new should direct edit if user is already a customer" do
- login @other_user
- get :new
- assert_response :redirect
- assert_equal edit_customer_url(@customer.user), response.header['Location']
- end
-
-
- test "show" do
- skip "show customer"
- login @other_user
- # Below will fail, as when we go to fetch the customer data, Braintree::Customer.find(params[:id]) won't find the customer as it is a FakeBraintree customer.
- #get :show, :id => @customer.braintree_customer_id
-
- end
-
-end
diff --git a/billing/test/functional/payments_controller_test.rb b/billing/test/functional/payments_controller_test.rb
deleted file mode 100644
index 90b7582..0000000
--- a/billing/test/functional/payments_controller_test.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-require 'test_helper'
-require 'fake_braintree'
-
-class PaymentsControllerTest < ActionController::TestCase
- include CustomerTestHelper
-
- test "payment when unauthorized" do
- get :new
- assert_not_nil assigns(:tr_data)
- assert_response :success
- end
-
- test "successful confirmation renders confirm" do
- Braintree::TransparentRedirect.expects(:confirm).returns(success_response)
- get :confirm
-
- assert_response :success
- assert_template :confirm
- end
-
- test "failed confirmation renders new" do
- Braintree::TransparentRedirect.expects(:confirm).returns(failure_response)
- get :confirm
-
- assert_response :success
- assert_not_nil assigns(:tr_data)
- assert_template :new
- end
-
- def failure_response
- stub success?: false,
- errors: stub(for: nil, size: 0),
- params: {},
- transaction: stub(status: nil)
- end
-
- def success_response
- stub success?: true,
- transaction: stub_transaction
- end
-
- # that's what you get when not following the law of demeter...
- def stub_transaction
- stub amount: "100.00",
- id: "ASDF",
- customer_details: FactoryGirl.build(:braintree_customer),
- credit_card_details: FactoryGirl.build(:braintree_customer).credit_cards.first
- end
-
-end
diff --git a/billing/test/functional/subscriptions_controller_test.rb b/billing/test/functional/subscriptions_controller_test.rb
deleted file mode 100644
index a6a1057..0000000
--- a/billing/test/functional/subscriptions_controller_test.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require 'test_helper'
-require 'fake_braintree'
-
-class SubscriptionsControllerTest < ActionController::TestCase
- include CustomerTestHelper
-
- test "destroy cancels subscription" do
- customer = stub_customer
- login customer.user
- result = Braintree::Subscription.create plan_id: 'my_plan',
- payment_method_token: customer.braintree_customer.credit_cards.first.token
- subscription = result.subscription
- delete :destroy, id: subscription.id, user_id: customer.user.id
- assert_equal "Canceled", Braintree::Subscription.find(subscription.id).status
- end
-end
diff --git a/billing/test/support/braintree_integration_test.rb b/billing/test/support/braintree_integration_test.rb
deleted file mode 100644
index 976c5a2..0000000
--- a/billing/test/support/braintree_integration_test.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'capybara/rails'
-# require 'fake_braintree' - messes up other integration tests
-require 'braintree_test_app'
-
-class BraintreeIntegrationTest < BrowserIntegrationTest
- include Warden::Test::Helpers
-
- setup do
- Warden.test_mode!
- Rails.application.config.middleware.use BraintreeTestApp
- end
-
- teardown do
- Warden.test_reset!
- Rails.application.config.middleware.delete "BraintreeTestApp"
- end
-
-end
diff --git a/billing/test/support/customer_test_helper.rb b/billing/test/support/customer_test_helper.rb
deleted file mode 100644
index adac00a..0000000
--- a/billing/test/support/customer_test_helper.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-module CustomerTestHelper
-
- def stub_customer(user = nil)
- user ||= find_record :user
- customer = stub_record :customer_with_payment_info,
- user: user,
- user_id: user.id
- Customer.stubs(:find_by_user_id).with(user.id).returns(customer)
- return customer
- end
-end
diff --git a/billing/test/test_helper.rb b/billing/test/test_helper.rb
deleted file mode 100644
index 1e26a31..0000000
--- a/billing/test/test_helper.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# Configure Rails Environment
-ENV["RAILS_ENV"] = "test"
-
-require File.expand_path("../dummy/config/environment.rb", __FILE__)
-require "rails/test_help"
-
-Rails.backtrace_cleaner.remove_silencers!
-
-# Load support files
-Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
-
-# Load fixtures from the engine
-if ActiveSupport::TestCase.method_defined?(:fixture_path=)
- ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
-end
diff --git a/billing/test/unit/customer_test.rb b/billing/test/unit/customer_test.rb
deleted file mode 100644
index 6156f87..0000000
--- a/billing/test/unit/customer_test.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require 'test_helper'
-
-class CustomerTest < ActiveSupport::TestCase
- include StubRecordHelper
-
- setup do
- @user = find_record :user
- @customer = FactoryGirl.build(:customer, user: @user)
- end
-
- test "test set of attributes should be valid" do
- @customer.valid?
- assert_equal Hash.new, @customer.errors.messages
- end
-
- test "customer belongs to user" do
- assert_equal User, @customer.user.class
- end
-
- test "user validation" do
- @customer.user = nil
- assert !@customer.valid?
- end
-
- test "has no payment info" do
- assert !@customer.braintree_customer_id
- assert !@customer.has_payment_info?
- end
-
- test "with no braintree data" do
- assert_equal @customer, @customer.with_braintree_data!
- end
-
- test "without default credit card" do
- assert_nil @customer.default_credit_card
- end
-
-end
diff --git a/billing/test/unit/customer_with_payment_info_test.rb b/billing/test/unit/customer_with_payment_info_test.rb
deleted file mode 100644
index 0589a59..0000000
--- a/billing/test/unit/customer_with_payment_info_test.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require 'test_helper'
-require 'fake_braintree'
-
-class CustomerWithPaymentInfoTest < ActiveSupport::TestCase
- include StubRecordHelper
-
- setup do
- @user = find_record :user
- @customer = FactoryGirl.build(:customer_with_payment_info, user: @user)
- end
-
- test "has payment_info" do
- assert @customer.braintree_customer_id
- assert @customer.has_payment_info?
- end
-
- test "constructs customer with braintree data" do
- @customer.with_braintree_data!
- assert_equal 'Big', @customer.first_name
- assert_equal 'Spender', @customer.last_name
- assert_equal 1, @customer.credit_cards.size
- assert_equal Hash.new, @customer.custom_fields
- end
-
- test "can access braintree_customer after reload" do
- @customer.save
- @customer = Customer.find_by_user_id(@customer.user_id)
- @customer.with_braintree_data!
- assert_equal 'Big', @customer.first_name
- assert_equal 'Spender', @customer.last_name
- assert_equal 1, @customer.credit_cards.size
- assert_equal Hash.new, @customer.custom_fields
- @customer.destroy
- end
-
- test "sets default_credit_card" do
- @customer.with_braintree_data!
- assert_equal @customer.credit_cards.first, @customer.default_credit_card
- end
-end