pay_me 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|