pay_me 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +111 -0
- data/Rakefile +33 -0
- data/app/controllers/pay_me/api/v1/invoices_controller.rb +30 -0
- data/app/controllers/pay_me/api/v1/stripe_plans_controller.rb +35 -0
- data/app/controllers/pay_me/application_controller.rb +10 -0
- data/app/helpers/pay_me/application_helper.rb +4 -0
- data/app/subscribers/pay_me/customer_subscriber.rb +42 -0
- data/app/subscribers/pay_me/plan_subscriber.rb +38 -0
- data/app/subscribers/pay_me/subscription_subscriber.rb +50 -0
- data/app/subscribers/pay_me/webhook_event_subscriber.rb +11 -0
- data/config/routes.rb +11 -0
- data/db/migrate/20160725204454_create_pay_me_subscriptions.rb +16 -0
- data/db/migrate/20161011170659_create_pay_me_plans.rb +8 -0
- data/db/migrate/20171030174731_add_quantity_to_pay_me_subscription.rb +6 -0
- data/db/migrate/20171130192525_create_pay_me_customers.rb +11 -0
- data/db/migrate/20180116193943_remove_customerable_from_subscriptions.rb +11 -0
- data/db/migrate/20180215235017_add_past_due_to_subscriptions.rb +5 -0
- data/lib/generators/pay_me/controllers/controllers_generator.rb +11 -0
- data/lib/generators/pay_me/controllers/templates/subscriptions_controller.rb +12 -0
- data/lib/generators/pay_me/install_generator.rb +39 -0
- data/lib/generators/pay_me/migrate_to_customer_model/USAGE +8 -0
- data/lib/generators/pay_me/migrate_to_customer_model/migrate_to_customer_model_generator.rb +9 -0
- data/lib/generators/pay_me/migrate_to_customer_model/templates/migration.rb.erb +64 -0
- data/lib/generators/pay_me/models/models_generator.rb +13 -0
- data/lib/generators/pay_me/models/templates/customer.rb +14 -0
- data/lib/generators/pay_me/models/templates/plan.rb +14 -0
- data/lib/generators/pay_me/models/templates/subscription.rb +14 -0
- data/lib/generators/pay_me/policies/policies_generator.rb +11 -0
- data/lib/generators/pay_me/policies/templates/subscription_policy.rb +34 -0
- data/lib/generators/pay_me/templates/pay_me_initializer.rb +17 -0
- data/lib/pay_me.rb +28 -0
- data/lib/pay_me/active_record.rb +6 -0
- data/lib/pay_me/concerns/controllers/customerable.rb +116 -0
- data/lib/pay_me/concerns/models/customerable.rb +54 -0
- data/lib/pay_me/concerns/models/stripe_customerable.rb +24 -0
- data/lib/pay_me/concerns/models/stripe_plannable.rb +31 -0
- data/lib/pay_me/concerns/models/stripe_subscribable.rb +43 -0
- data/lib/pay_me/configuration.rb +27 -0
- data/lib/pay_me/engine.rb +8 -0
- data/lib/pay_me/models.rb +4 -0
- data/lib/pay_me/railtie.rb +2 -0
- data/lib/pay_me/route_helpers.rb +21 -0
- data/lib/pay_me/services/customer.rb +141 -0
- data/lib/pay_me/version.rb +3 -0
- data/lib/pay_me/view_models/charge.rb +48 -0
- data/lib/tasks/pay_me_tasks.rake +4 -0
- data/lib/tasks/stripe.rake +22 -0
- data/test/controllers/pay_me/api/v1/invoices_controller_test.rb +82 -0
- data/test/controllers/pay_me/api/v1/plans_controller_test.rb +62 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/api/v1/users_controller.rb +10 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/pay_me/api/v1/subscriptions_controller.rb +12 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/pay_me/customer.rb +5 -0
- data/test/dummy/app/models/pay_me/plan.rb +5 -0
- data/test/dummy/app/models/pay_me/subscription.rb +5 -0
- data/test/dummy/app/models/user.rb +8 -0
- data/test/dummy/app/policies/pay_me/subscription_policy.rb +34 -0
- data/test/dummy/app/serializers/pay_me/subscription_serializer.rb +3 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +25 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/pay_me.rb +17 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +10 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/db/migrate/20160630181300_create_pay_me_users.rb +12 -0
- data/test/dummy/db/migrate/20180118001940_api_me_migrate_to_customer_model.rb +9 -0
- data/test/dummy/db/schema.rb +53 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/customer_test.rb +395 -0
- data/test/lib/generators/pay_me/pay_me/migrate_to_customer_model_generator_test.rb +16 -0
- data/test/models/pay_me/customer_test.rb +9 -0
- data/test/models/pay_me/subscription_test.rb +9 -0
- data/test/models/pay_me/user_test.rb +6 -0
- data/test/pay_me_test.rb +7 -0
- data/test/support/concerns/api_test_helper.rb +15 -0
- data/test/support/concerns/stripe_helpers.rb +25 -0
- data/test/test_helper.rb +52 -0
- data/test/unit/concerns/customerable.rb +21 -0
- data/test/unit/models/customerable_test.rb +18 -0
- data/test/unit/services/customer_test.rb +75 -0
- data/test/unit/stubs/customerable.rb +28 -0
- data/test/unit/stubs/customerable_test.rb +16 -0
- data/test/webhooks/customer_webhook_test.rb +74 -0
- data/test/webhooks/plan_webhook_test.rb +74 -0
- metadata +288 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'generators/pay_me/migrate_to_customer_model/migrate_to_customer_model_generator'
|
|
3
|
+
|
|
4
|
+
module PayMe
|
|
5
|
+
class PayMe::MigrateToCustomerModelGeneratorTest < Rails::Generators::TestCase
|
|
6
|
+
tests PayMe::MigrateToCustomerModelGenerator
|
|
7
|
+
destination Rails.root.join('tmp/generators')
|
|
8
|
+
setup :prepare_destination
|
|
9
|
+
|
|
10
|
+
# test "generator runs without errors" do
|
|
11
|
+
# assert_nothing_raised do
|
|
12
|
+
# run_generator ["arguments"]
|
|
13
|
+
# end
|
|
14
|
+
# end
|
|
15
|
+
end
|
|
16
|
+
end
|
data/test/pay_me_test.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'minitest/autorun'
|
|
2
|
+
|
|
3
|
+
module Minitest
|
|
4
|
+
class Spec
|
|
5
|
+
def self.with_a_monthly_plan(&block) # rubocop:disable Metrics/MethodLength
|
|
6
|
+
describe 'looking to subscribe to a monthly plan' do
|
|
7
|
+
after do
|
|
8
|
+
plan.delete
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:plan) do
|
|
12
|
+
Stripe::Plan.create(
|
|
13
|
+
amount: 200,
|
|
14
|
+
interval: 'month',
|
|
15
|
+
name: 'This is a automated tests monthly plan',
|
|
16
|
+
currency: 'usd',
|
|
17
|
+
id: "pay_me_monthly_test-#{SecureRandom.uuid}"
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
instance_exec(&block)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Configure Rails Environment
|
|
2
|
+
ENV['RAILS_ENV'] = 'test'
|
|
3
|
+
require File.expand_path('../../test/dummy/config/environment.rb', __FILE__)
|
|
4
|
+
ActiveRecord::Migrator.migrations_paths = [
|
|
5
|
+
File.expand_path('../../test/dummy/db/migrate', __FILE__)
|
|
6
|
+
]
|
|
7
|
+
ActiveRecord::Migrator.migrations_paths << File.expand_path('../../db/migrate', __FILE__)
|
|
8
|
+
require 'minitest/pride'
|
|
9
|
+
require 'stripe'
|
|
10
|
+
require 'vcr'
|
|
11
|
+
require 'minitest-vcr'
|
|
12
|
+
require 'webmock'
|
|
13
|
+
require 'stripe_mock'
|
|
14
|
+
require 'spy/integration'
|
|
15
|
+
require 'database_cleaner'
|
|
16
|
+
require 'dotenv/load'
|
|
17
|
+
|
|
18
|
+
VCR.configure do |c|
|
|
19
|
+
c.cassette_library_dir = 'test/cassettes'
|
|
20
|
+
c.hook_into :webmock
|
|
21
|
+
c.filter_sensitive_data("<ENV['STRIPE_TEST_PUBLISHABLE_KEY']>") { ENV['STRIPE_TEST_PUBLISHABLE_KEY'] }
|
|
22
|
+
c.allow_http_connections_when_no_cassette = true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
DatabaseCleaner.strategy = :transaction
|
|
26
|
+
|
|
27
|
+
class Minitest::Test
|
|
28
|
+
def before_setup
|
|
29
|
+
super
|
|
30
|
+
DatabaseCleaner.clean
|
|
31
|
+
DatabaseCleaner.start
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
MinitestVcr::Spec.configure!
|
|
37
|
+
|
|
38
|
+
# Stripe.api_key = ENV['STRIPE_TEST_SECRET_KEY']
|
|
39
|
+
|
|
40
|
+
# Filter out Minitest backtrace while allowing backtrace from other libraries
|
|
41
|
+
# to be shown.
|
|
42
|
+
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
|
43
|
+
|
|
44
|
+
# Load support files
|
|
45
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
|
46
|
+
|
|
47
|
+
# Load fixtures from the engine
|
|
48
|
+
if ActiveSupport::TestCase.respond_to?(:fixture_path=)
|
|
49
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path('../fixtures', __FILE__)
|
|
50
|
+
ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
|
|
51
|
+
ActiveSupport::TestCase.fixtures :all
|
|
52
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module PayMe
|
|
2
|
+
module Concerns
|
|
3
|
+
module CustomerableInterfaceTest
|
|
4
|
+
def test_responds_to_customer_service
|
|
5
|
+
assert_respond_to(@object, :customer_service)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_responds_to_customer_id
|
|
9
|
+
assert_respond_to(@object, :customer_id)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_responds_to_update!
|
|
13
|
+
assert_respond_to(@object, :update!)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_responds_to_id
|
|
17
|
+
assert_respond_to(@object, :id)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'securerandom'
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
require 'unit/concerns/customerable'
|
|
4
|
+
|
|
5
|
+
module PayMe
|
|
6
|
+
module Models
|
|
7
|
+
class TestCustomerableInterface < Minitest::Test
|
|
8
|
+
include PayMe::Concerns::CustomerableInterfaceTest
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
ActiveRecord::Base.transaction do
|
|
12
|
+
customer = PayMe::Customer.create!(customer_id: SecureRandom.uuid)
|
|
13
|
+
@object = User.create(customer: customer)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'minitest/mock'
|
|
2
|
+
require 'minitest/test'
|
|
3
|
+
require 'securerandom'
|
|
4
|
+
require 'test_helper'
|
|
5
|
+
require 'pay_me/services/customer'
|
|
6
|
+
require 'unit/stubs/customerable'
|
|
7
|
+
|
|
8
|
+
module PayMe
|
|
9
|
+
module Services
|
|
10
|
+
class TestCustomerService < Minitest::Test
|
|
11
|
+
# def setup
|
|
12
|
+
# customer_class_mock = Minitest::Mock.new
|
|
13
|
+
# customerable_stub = PayMe::Stubs::Customerable.new
|
|
14
|
+
|
|
15
|
+
# @object = PayMe::Services::Customer.new(
|
|
16
|
+
# customerable: customerable_stub,
|
|
17
|
+
# customer_class: customer_class_mock
|
|
18
|
+
# )
|
|
19
|
+
# end
|
|
20
|
+
|
|
21
|
+
# def test_create_will_invoke_the_create_method_on_the_customer_class
|
|
22
|
+
# customer_mock = Minitest::Mock.new
|
|
23
|
+
# customer_mock.expect :id, SecureRandom.uuid
|
|
24
|
+
|
|
25
|
+
# @object.customer_class.expect :create, customer_mock, [Hash]
|
|
26
|
+
# @object.create!({})
|
|
27
|
+
# @object.customer_class.verify
|
|
28
|
+
# end
|
|
29
|
+
|
|
30
|
+
# def test_create_will_create_a_new_customer
|
|
31
|
+
# customer_mock = Minitest::Mock.new
|
|
32
|
+
# customer_mock.expect :id, SecureRandom.uuid
|
|
33
|
+
|
|
34
|
+
# @object.customer_class.expect :create, customer_mock, [Hash]
|
|
35
|
+
# @object.create!({})
|
|
36
|
+
# assert @object.customer, 'The create! method should create a new customer'
|
|
37
|
+
# end
|
|
38
|
+
|
|
39
|
+
# def test_create_will_set_the_customer_id_on_the_customerable_instance
|
|
40
|
+
# customer_mock = Minitest::Mock.new
|
|
41
|
+
# customer_mock.expect :id, SecureRandom.uuid
|
|
42
|
+
|
|
43
|
+
# @object.customer_class.expect :create, customer_mock, [Hash]
|
|
44
|
+
# @object.create!({})
|
|
45
|
+
|
|
46
|
+
# assert @object.customerable.customer_id,
|
|
47
|
+
# 'The create! method should set the customer id on the customerable instance'
|
|
48
|
+
# end
|
|
49
|
+
|
|
50
|
+
# def test_destroy_will_invoke_the_delete_method_on_the_customer_class
|
|
51
|
+
# customer_mock = Minitest::Mock.new
|
|
52
|
+
# customer_mock.expect :delete, customer_mock
|
|
53
|
+
# @object.customerable.customer_id = SecureRandom.uuid
|
|
54
|
+
# @object.customer_class.expect :retrieve, customer_mock, [String]
|
|
55
|
+
# @object.destroy!
|
|
56
|
+
# customer_mock.verify
|
|
57
|
+
# end
|
|
58
|
+
|
|
59
|
+
# def test_customer_will_invoke_the_retieve_method_on_the_customer_class_if_an_id_exists
|
|
60
|
+
# customer_mock = Minitest::Mock.new
|
|
61
|
+
# @object.customerable.customer_id = SecureRandom.uuid
|
|
62
|
+
# @object.customer_class.expect :retrieve, customer_mock, [String]
|
|
63
|
+
# @object.customer
|
|
64
|
+
# @object.customer_class.verify
|
|
65
|
+
# end
|
|
66
|
+
|
|
67
|
+
# def test_customer_will_raise_on_the_retieve_method_on_the_customer_class_if_an_id_does_not_exist
|
|
68
|
+
# customer_mock = Minitest::Mock.new
|
|
69
|
+
# assert_raises RuntimeError do
|
|
70
|
+
# @object.customer
|
|
71
|
+
# end
|
|
72
|
+
# end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'securerandom'
|
|
2
|
+
require 'pay_me/services/customer'
|
|
3
|
+
|
|
4
|
+
module PayMe
|
|
5
|
+
module Stubs
|
|
6
|
+
class Customerable
|
|
7
|
+
attr_accessor :customer_id
|
|
8
|
+
|
|
9
|
+
def initialize
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def update!(params)
|
|
13
|
+
self.customer_id = params[:customer_id]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def customer_service
|
|
17
|
+
PayMe::Services::Customer.new(
|
|
18
|
+
customerable: self,
|
|
19
|
+
customer_class: nil
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def id
|
|
24
|
+
SecureRandom.uuid
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'unit/stubs/customerable'
|
|
3
|
+
require 'unit/concerns/customerable'
|
|
4
|
+
|
|
5
|
+
module PayMe
|
|
6
|
+
module Stubs
|
|
7
|
+
# Mixin Interface tests to insure the stub matches the correct interface
|
|
8
|
+
class TestCustomerableStub < Minitest::Test
|
|
9
|
+
include PayMe::Concerns::CustomerableInterfaceTest
|
|
10
|
+
|
|
11
|
+
def setup
|
|
12
|
+
@object = PayMe::Stubs::Customerable.new
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'webmock/minitest'
|
|
3
|
+
|
|
4
|
+
describe "Customer Events" do
|
|
5
|
+
include PayMe::Support::ApiTestHelper # Mixin get/post/etc... methods, see /test/test_helper.rb for details
|
|
6
|
+
before { StripeMock.start }
|
|
7
|
+
after { StripeMock.stop }
|
|
8
|
+
let(:customer_id) { 'cus_CBY9H0MMBoZfnu' }
|
|
9
|
+
|
|
10
|
+
describe "customer.created" do
|
|
11
|
+
let(:event) { StripeMock.mock_webhook_event('customer.created', id: customer_id) }
|
|
12
|
+
|
|
13
|
+
it "is successful if customer does not exist" do
|
|
14
|
+
assert_equal 0, PayMe::Customer.count
|
|
15
|
+
callback_spy = Spy.on(PayMe::Customer, :created_webhook!)
|
|
16
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
17
|
+
assert_equal 200, last_response.status
|
|
18
|
+
assert_equal 0, PayMe::Customer.count # Shouldn't autocreate customer
|
|
19
|
+
assert callback_spy.has_been_called?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "is successful if customer does exist" do
|
|
23
|
+
PayMe::Customer.create(customer_id: customer_id)
|
|
24
|
+
assert_equal 1, PayMe::Customer.count
|
|
25
|
+
callback_spy = Spy.on(PayMe::Customer, :created_webhook!)
|
|
26
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
27
|
+
assert_equal 200, last_response.status
|
|
28
|
+
assert_equal 1, PayMe::Customer.count
|
|
29
|
+
assert callback_spy.has_been_called?
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "customer.updated" do
|
|
34
|
+
let(:event) { StripeMock.mock_webhook_event('customer.updated', id: customer_id) }
|
|
35
|
+
|
|
36
|
+
it "is successful if Customer does not exist" do
|
|
37
|
+
callback_spy = Spy.on(PayMe::Customer, :updated_webhook!)
|
|
38
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
39
|
+
assert_equal 200, last_response.status
|
|
40
|
+
assert callback_spy.has_been_called?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "is successful if Customer does exist" do
|
|
44
|
+
PayMe::Customer.create(customer_id: customer_id)
|
|
45
|
+
callback_spy = Spy.on(PayMe::Customer, :updated_webhook!)
|
|
46
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
47
|
+
assert_equal 200, last_response.status
|
|
48
|
+
assert callback_spy.has_been_called?
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "customer.deleted" do
|
|
53
|
+
let(:event) { StripeMock.mock_webhook_event('customer.deleted', id: customer_id) }
|
|
54
|
+
|
|
55
|
+
it "is successful if plan does not exist" do
|
|
56
|
+
assert_equal 0, PayMe::Customer.count
|
|
57
|
+
callback_spy = Spy.on(PayMe::Customer, :deleted_webhook!)
|
|
58
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
59
|
+
assert_equal 200, last_response.status
|
|
60
|
+
assert_equal 0, PayMe::Customer.count
|
|
61
|
+
assert callback_spy.has_been_called?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "is successful if plan does exist" do
|
|
65
|
+
PayMe::Customer.create(customer_id: customer_id)
|
|
66
|
+
assert_equal 1, PayMe::Customer.count
|
|
67
|
+
callback_spy = Spy.on(PayMe::Customer, :deleted_webhook!)
|
|
68
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
69
|
+
assert_equal 200, last_response.status
|
|
70
|
+
assert_equal 0, PayMe::Customer.count
|
|
71
|
+
assert callback_spy.has_been_called?
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'webmock/minitest'
|
|
3
|
+
|
|
4
|
+
describe "Plan Events" do
|
|
5
|
+
include PayMe::Support::ApiTestHelper # Mixin get/post/etc... methods, see /test/test_helper.rb for details
|
|
6
|
+
before { StripeMock.start }
|
|
7
|
+
after { StripeMock.stop }
|
|
8
|
+
let(:plan_id) { 'test_plan' }
|
|
9
|
+
|
|
10
|
+
describe "plan.created" do
|
|
11
|
+
let(:event) { StripeMock.mock_webhook_event('plan.created', id: plan_id) }
|
|
12
|
+
|
|
13
|
+
it "is successful if plan does not exist" do
|
|
14
|
+
assert_equal 0, PayMe::Plan.count
|
|
15
|
+
callback_spy = Spy.on(PayMe::Plan, :created_webhook!)
|
|
16
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
17
|
+
assert_equal 200, last_response.status
|
|
18
|
+
assert_equal 1, PayMe::Plan.count
|
|
19
|
+
assert callback_spy.has_been_called?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "is successful if plan does exist" do
|
|
23
|
+
PayMe::Plan.create(plan_id: plan_id)
|
|
24
|
+
assert_equal 1, PayMe::Plan.count
|
|
25
|
+
callback_spy = Spy.on(PayMe::Plan, :created_webhook!)
|
|
26
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
27
|
+
assert_equal 200, last_response.status
|
|
28
|
+
assert_equal 1, PayMe::Plan.count
|
|
29
|
+
assert callback_spy.has_been_called?
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "plan.updated" do
|
|
34
|
+
let(:event) { StripeMock.mock_webhook_event('plan.updated', id: plan_id) }
|
|
35
|
+
|
|
36
|
+
it "is successful if plan does not exist" do
|
|
37
|
+
callback_spy = Spy.on(PayMe::Plan, :updated_webhook!)
|
|
38
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
39
|
+
assert_equal 200, last_response.status
|
|
40
|
+
assert callback_spy.has_been_called?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "is successful if plan does exist" do
|
|
44
|
+
PayMe::Plan.create(plan_id: plan_id)
|
|
45
|
+
callback_spy = Spy.on(PayMe::Plan, :updated_webhook!)
|
|
46
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
47
|
+
assert_equal 200, last_response.status
|
|
48
|
+
assert callback_spy.has_been_called?
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "plan.deleted" do
|
|
53
|
+
let(:event) { StripeMock.mock_webhook_event('plan.deleted', id: plan_id) }
|
|
54
|
+
|
|
55
|
+
it "is successful if plan does not exist" do
|
|
56
|
+
assert_equal 0, PayMe::Plan.count
|
|
57
|
+
callback_spy = Spy.on(PayMe::Plan, :deleted_webhook!)
|
|
58
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
59
|
+
assert_equal 200, last_response.status
|
|
60
|
+
assert_equal 0, PayMe::Plan.count
|
|
61
|
+
assert callback_spy.has_been_called?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "is successful if plan does exist" do
|
|
65
|
+
PayMe::Plan.create(plan_id: plan_id)
|
|
66
|
+
assert_equal 1, PayMe::Plan.count
|
|
67
|
+
callback_spy = Spy.on(PayMe::Plan, :deleted_webhook!)
|
|
68
|
+
post "/pay_me/stripe_webhooks", id: event.id
|
|
69
|
+
assert_equal 200, last_response.status
|
|
70
|
+
assert_equal 0, PayMe::Plan.count
|
|
71
|
+
assert callback_spy.has_been_called?
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|