rspec-stripe 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: faa5490d004c1911a1fdbf4844935a8664b78525
4
+ data.tar.gz: 8ea44304c4f8fcaf9123c5f489430a904eedd6fa
5
+ SHA512:
6
+ metadata.gz: 39e3817fe9e703b6d76ce4ecbd1e4934f1795acf60e167245e3ed0e20f764b73b0513ce9e16527999ca67c99a1da0ff2a1552579003e23e00a4a498637b28b78
7
+ data.tar.gz: 6ed0e1da5161634d259584c1f1a23ebdcde557a83beaa752d3f343fe348d8c2d91542a529e9d5429c6c7cc152ffc9ce8e4e8bdf2f23500ee3a0712728961bd23
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .env
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'stripe', git: 'https://github.com/stripe/stripe-ruby'
6
+ gem 'rspec', '~> 3.1'
7
+ gem 'dotenv'
data/Gemfile.lock ADDED
@@ -0,0 +1,48 @@
1
+ GIT
2
+ remote: https://github.com/stripe/stripe-ruby
3
+ revision: 2c6f4caa99916c33d3f9af57f66422ff5ea913cf
4
+ specs:
5
+ stripe (1.15.0)
6
+ json (~> 1.8.1)
7
+ mime-types (>= 1.25, < 3.0)
8
+ rest-client (~> 1.4)
9
+
10
+ PATH
11
+ remote: .
12
+ specs:
13
+ rspec-stripe (0.0.1)
14
+
15
+ GEM
16
+ remote: https://rubygems.org/
17
+ specs:
18
+ diff-lcs (1.2.5)
19
+ dotenv (0.11.1)
20
+ dotenv-deployment (~> 0.0.2)
21
+ dotenv-deployment (0.0.2)
22
+ json (1.8.1)
23
+ mime-types (2.3)
24
+ netrc (0.7.7)
25
+ rest-client (1.7.2)
26
+ mime-types (>= 1.16, < 3.0)
27
+ netrc (~> 0.7)
28
+ rspec (3.1.0)
29
+ rspec-core (~> 3.1.0)
30
+ rspec-expectations (~> 3.1.0)
31
+ rspec-mocks (~> 3.1.0)
32
+ rspec-core (3.1.4)
33
+ rspec-support (~> 3.1.0)
34
+ rspec-expectations (3.1.1)
35
+ diff-lcs (>= 1.2.0, < 2.0)
36
+ rspec-support (~> 3.1.0)
37
+ rspec-mocks (3.1.1)
38
+ rspec-support (~> 3.1.0)
39
+ rspec-support (3.1.0)
40
+
41
+ PLATFORMS
42
+ ruby
43
+
44
+ DEPENDENCIES
45
+ dotenv
46
+ rspec (~> 3.1)
47
+ rspec-stripe!
48
+ stripe!
@@ -0,0 +1,10 @@
1
+ module RSpecStripe
2
+ class Configuration
3
+ def configure_rspec_metadata!
4
+ unless @rspec_metadata_configured
5
+ RSpecStripe::RSpec::Metadata.configure!
6
+ @rspec_metadata_configured = true
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,29 @@
1
+ module RSpecStripe::Factory
2
+ class Card
3
+ attr_accessor :should_delete, :id, :customer
4
+
5
+ def initialize(id, customer)
6
+ @id = id || :visa
7
+ @customer = customer
8
+ end
9
+
10
+ def get
11
+ @id ||= :visa
12
+ @should_delete = true
13
+ customer.cards.create(card: recipes[id].merge(
14
+ exp_month: "01",
15
+ exp_year: "2025",
16
+ cvc: "111",
17
+ name: customer.id
18
+ ))
19
+ end
20
+
21
+ def recipes
22
+ {
23
+ visa: {
24
+ number: "4242424242424242"
25
+ }
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,15 @@
1
+ module RSpecStripe::Factory
2
+ Customer = Struct.new(:id) do
3
+ attr_accessor :should_delete
4
+
5
+ def get
6
+ if id == :new || id == true
7
+ @should_delete = true
8
+ Stripe::Customer.create
9
+ else
10
+ @should_delete = false
11
+ Stripe::Customer.retrieve(id)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module RSpecStripe::Factory
2
+ Plan = Struct.new(:id) do
3
+ attr_accessor :should_delete
4
+
5
+ def get
6
+ @should_delete = false
7
+ Stripe::Plan.retrieve(id)
8
+ rescue Stripe::InvalidRequestError
9
+ @should_delete = true
10
+ # Lookup the plan's details and then create it
11
+ Stripe::Plan.create(
12
+ amount: 2000,
13
+ interval: 'month',
14
+ name: 'Amazing Gold Plan',
15
+ currency: 'usd',
16
+ id: id
17
+ )
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ module RSpecStripe::Factory
2
+ Subscription = Struct.new(:id, :customer) do
3
+ attr_accessor :should_delete
4
+
5
+ def get
6
+ @should_delete = true
7
+ cancel_subscriptions
8
+ customer.subscriptions.create(plan: id)
9
+ end
10
+
11
+ private
12
+
13
+ def cancel_subscriptions
14
+ customer.subscriptions.all.each do |sub|
15
+ sub.delete
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,45 @@
1
+ module RSpecStripe
2
+ class Runner
3
+ attr_accessor :recipes, :customer, :plan, :subscription, :card
4
+
5
+ def initialize(recipes)
6
+ @recipes = recipes
7
+ end
8
+
9
+ def call!
10
+ @customer = customer_factory.get if recipes[:customer]
11
+ @plan = plan_factory.get if recipes[:plan]
12
+ @card = card_factory.get if recipes[:card]
13
+
14
+ if recipes[:subscription]
15
+ @card ||= card_factory.get
16
+ @subscription = subscription_factory.get
17
+ end
18
+ end
19
+
20
+ def cleanup!
21
+ subscription.delete if subscription_factory.should_delete
22
+ plan.delete if plan_factory.should_delete
23
+ card.delete if card_factory.should_delete
24
+ customer.delete if customer_factory.should_delete
25
+ end
26
+
27
+ private
28
+
29
+ def customer_factory
30
+ @customer_factory ||= RSpecStripe::Factory::Customer.new(recipes[:customer])
31
+ end
32
+
33
+ def plan_factory
34
+ @plan_factory ||= RSpecStripe::Factory::Plan.new(recipes[:plan])
35
+ end
36
+
37
+ def subscription_factory
38
+ @subscription_factory ||= RSpecStripe::Factory::Subscription.new(recipes[:subscription], customer)
39
+ end
40
+
41
+ def card_factory
42
+ @card_factory ||= RSpecStripe::Factory::Card.new(recipes[:card], customer)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,39 @@
1
+ module RSpecStripe
2
+ module RSpec
3
+ module Metadata
4
+ extend self
5
+
6
+ def configure!
7
+ ::RSpec.configure do |config|
8
+ when_tagged_with_stripe = { stripe: lambda { |val| !!val } }
9
+
10
+ config.before(:each, when_tagged_with_stripe) do |ex|
11
+ example = ex.respond_to?(:metadata) ? ex : ex.example
12
+ recipes = example.metadata[:stripe]
13
+
14
+ @runner = RSpecStripe::Runner.new(recipes)
15
+ @runner.call!
16
+
17
+ def stripe_customer
18
+ @stripe_customer ||= @runner.customer
19
+ end
20
+
21
+ def stripe_plan
22
+ @stripe_plan ||= @runner.plan
23
+ end
24
+
25
+ def stripe_subscription
26
+ @stripe_subscription ||= @runner.subscription
27
+ end
28
+ end
29
+
30
+ config.after(:each, when_tagged_with_stripe) do |ex|
31
+ example = ex.respond_to?(:metadata) ? ex : ex.example
32
+
33
+ @runner.cleanup!
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,22 @@
1
+ require 'rspec-stripe/configuration'
2
+ require 'rspec-stripe/runner'
3
+ require 'rspec-stripe/factories/customer'
4
+ require 'rspec-stripe/factories/plan'
5
+ require 'rspec-stripe/factories/subscription'
6
+ require 'rspec-stripe/factories/card'
7
+
8
+ module RSpecStripe
9
+ extend self
10
+
11
+ module RSpec
12
+ autoload :Metadata, "rspec-stripe/test_frameworks/rspec"
13
+ end
14
+
15
+ def configure
16
+ yield configuration
17
+ end
18
+
19
+ def configuration
20
+ @configuration ||= Configuration.new
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "rspec-stripe"
3
+ s.license = "MIT"
4
+ s.date = %q{2014-09-26}
5
+ s.authors = ["Stephen Bussey"]
6
+ s.email = %q{steve.bussey@salesloft.com}
7
+ s.homepage = %q{https://github.com/sb8244/rspec-stripe}
8
+
9
+ s.summary = %q{Setup Stripe for specs easily and reliably}
10
+ s.description = %q{Setup the Stripe World for your rspec tests}
11
+
12
+ s.require_paths = ["lib"]
13
+ s.files = `git ls-files`.split("\n")
14
+
15
+ s.version = "0.0.1"
16
+ s.required_ruby_version = '>= 2.0.0'
17
+ s.required_rubygems_version = '>= 1.6.2'
18
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ Stripe.api_key = ENV['STRIPE_TEST_KEY']
4
+
5
+ describe 'Basic' do
6
+ it "gives me a customer", stripe: { customer: :new } do
7
+ expect {
8
+ Stripe::Customer.retrieve(stripe_customer.id)
9
+ }.not_to raise_error
10
+ end
11
+
12
+ it "gives a plan", stripe: { plan: "test" } do
13
+ expect(stripe_plan).not_to eq(nil)
14
+ end
15
+
16
+ it "gives me a subscription", stripe: { customer: :new, plan: "test", subscription: "test" } do
17
+ expect(stripe_customer).not_to eq(nil)
18
+ expect(stripe_plan).not_to eq(nil)
19
+ expect(stripe_subscription).not_to eq(nil)
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'stripe'
3
+ require 'dotenv'
4
+ require 'rspec-stripe'
5
+
6
+ Dotenv.load
7
+
8
+ RSpecStripe.configure do |config|
9
+ config.configure_rspec_metadata!
10
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rspec-stripe
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Stephen Bussey
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Setup the Stripe World for your rspec tests
14
+ email: steve.bussey@salesloft.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - ".gitignore"
20
+ - Gemfile
21
+ - Gemfile.lock
22
+ - lib/rspec-stripe.rb
23
+ - lib/rspec-stripe/configuration.rb
24
+ - lib/rspec-stripe/factories/card.rb
25
+ - lib/rspec-stripe/factories/customer.rb
26
+ - lib/rspec-stripe/factories/plan.rb
27
+ - lib/rspec-stripe/factories/subscription.rb
28
+ - lib/rspec-stripe/runner.rb
29
+ - lib/rspec-stripe/test_frameworks/rspec.rb
30
+ - rspec-stripe.gemspec
31
+ - spec/basic_rspec.rb
32
+ - spec/spec_helper.rb
33
+ homepage: https://github.com/sb8244/rspec-stripe
34
+ licenses:
35
+ - MIT
36
+ metadata: {}
37
+ post_install_message:
38
+ rdoc_options: []
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 2.0.0
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 1.6.2
51
+ requirements: []
52
+ rubyforge_project:
53
+ rubygems_version: 2.2.2
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: Setup Stripe for specs easily and reliably
57
+ test_files: []