Rspec-rails: рдкрд░реАрдХреНрд╖рдг рдПрдирд╡реА рдореЗрдВ рдкреЛрд╕реНрдЯ рдХреЙрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдЬреЗрдПрд╕рдУрдПрди рдмреВрд▓рд┐рдпрди рддрд╛рд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдирд╡ре░ 2016  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rspec/rspec-rails

рдореИрдВ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ JSON рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ JSON рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ JSON рдХреЗ рднреАрддрд░ рд╕рднреА рдмреВрд▓рд┐рдпрди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рддрд╣рдд рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ RAILS_ENV=development bundle exec guard рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХреЛрдИ рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ), рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ RAILS_ENV=test bundle exec guard рд╕рднреА рдмреВрд▓рд┐рдпрди рдХреЛ string рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИред

рдирдХрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдпрд╣ рдореЗрд░рд╛ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рд╣реИред

  it 'create proration item' do
    # guess need to create a dummy account with stripe_customer_id
    account = create(:account, stripe_customer_id: 'cus_00000000000000')
    invoice = create(:invoice, stripe_invoice_id: 'in_00000000000000' )

    # create a plan
    plan = create(:plan)
    stripe_helper.create_plan(id: plan.stripe_plan_id)

    Stripe::InvoiceItem.create(
      amount: 300,
      currency: 'jpy',
      description: "#{300} charged",
      proration: true,
      type: 'invoiceitem'
    )
    item_objs = Stripe::InvoiceItem.list(:limit => 10)

    # create a event mock based on objs above
    event = StripeMock.mock_webhook_event('invoice.payment_succeeded', {
      id: invoice.stripe_invoice_id,
      lines: item_objs,
      customer: account.stripe_customer_id
    })

    # Mocking up private method :fetch_invoice_details
    balance_txn = Stripe::BalanceTransaction.retrieve('txn_05RsQX2eZvKYlo2C0FRTGSSA')
    allow_any_instance_of(InvoicePaymentSucceeded).to receive(:fetch_invoice_details).and_return(balance_txn)

    # when it's false (This should be changed depending on cases). Here we don't test private method.
    allow_any_instance_of(InvoicePaymentSucceeded).to receive(:initial_invoice?).and_return(false)

    post '/stripe-events', event.as_json
    expect(response.status).to eq 200
  end

рдЕрдВрдд рдмрд┐рдВрджреБ рд╣реИрдВрдбрд▓рд░ рдХреЗ рднреАрддрд░, рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдорд╛рди рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ред

**test environment** рдХреЗ рддрд╣рдд,

#<Stripe::Event:0x3fe2ea57e95c id=test_evt_2> JSON: {
  "id": "test_evt_2",
  "created": "1326853478",
  "livemode": "false",
  "type": "invoice.payment_succeeded",
  "object": "event",
  "data": {"object":{"id":"in_00000000000000","date":"1394018368","period_start":"1394018368","period_end":"1394018368","lines":{"object":"list","data":[{"id":"test_ii_1","object":"invoiceitem","date":"1349738920","amount":"300","livemode":"false","proration":"true","currency":"jpy","customer":"cus_test","description":"300 charged","invoice":null,"subscription":null,"type":"invoiceitem"}],"url":"/v1/hashs","has_more":"false"},"subtotal":"30000","total":"30000","customer":"cus_00000000000000","object":"invoice","attempted":"true","closed":"true","paid":"true","livemode":"false","attempt_count":"1","amount_due":"0","currency":"usd","starting_balance":"0","ending_balance":"0","next_payment_attempt":null,"charge":"ch_00000000000000","discount":null,"application_fee":null,"subscription":"su_00000000000000","description":null}},
  "controller": "stripe_event/webhook",
  "action": "event"
}

**development environment** рдХреЗ рддрд╣рдд,

#<Stripe::Event:0x3fce66d141f0 id=test_evt_2> JSON: {
  "id": "test_evt_2",
  "created": 1326853478,
  "livemode": false,
  "type": "invoice.payment_succeeded",
  "object": "event",
  "data": {"object":{"id":"in_00000000000000","date":1394018368,"period_start":1394018368,"period_end":1394018368,"lines":{"object":"list","data":[{"id":"test_ii_1","object":"invoiceitem","date":1349738920,"amount":300,"livemode":false,"proration":true,"currency":"jpy","customer":"cus_test","description":"300 charged","metadata":{},"invoice":null,"subscription":null,"type":"invoiceitem"}],"url":"/v1/hashs","has_more":false},"subtotal":30000,"total":30000,"customer":"cus_00000000000000","object":"invoice","attempted":true,"closed":true,"paid":true,"livemode":false,"attempt_count":1,"amount_due":0,"currency":"usd","starting_balance":0,"ending_balance":0,"next_payment_attempt":null,"charge":"ch_00000000000000","discount":null,"application_fee":null,"subscription":"su_00000000000000","metadata":{},"description":null}}
}

рдкрд░реАрдХреНрд╖рдг рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдзрдиреНрдпрд╡рд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рд╕рдордЭ рдЧрдпрд╛ рд╣реВрдБ,
рддреЛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЯреЗрд╕реНрдЯрдХреЗрд╕ рдореЗрдВ рд╣реИрд╢ рд╣рдореЗрд╢рд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рдХреЗрд╡рд▓ development рдХреЗ рддрд╣рдд рдЗрд╕реЗ рд╣реИрд╢ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ test рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

as_json рдПрдХ рд╣реИрд╢ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рд░реЗрд▓ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ (рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ), рдЗрд╕рдХреЗ рдмрдЬрд╛рдп to_json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

@JonRowe рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ test рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рддрд╣рдд рдХреНрдпреЛрдВ рд╣реБрдЖред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреА рдкреЛрд╕реНрдЯрд┐рдВрдЧ Json рджреЗрд╡ рдореЗрдВ рд╣реИрд╢ рдирд╣реАрдВ рд╣реИ

рд╢реБрдХреНрд░, 25 рдирд╡рдВрдмрд░ 2016 рдХреЛ 12:55 рдмрдЬреЗ, рддреЛрд╢рд┐рдХреА рдЗрдирд╛рдореА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@JonRowe https://github.com/JonRowe рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реБрдЖ
рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рддрд╣рддред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rspec/rspec-rails/issues/1755#issuecomment-262865864 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAJ8oFzIiZC0o1j1fZqUeNvrf4q4o4Ruks5rBkAHgaJpZM4K7muV
.

рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБтАж
рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рддрд╣рдд рд╣реА рдпрд╣ рд╣реИрд╢ рдореЗрдВ рдХреНрдпреЛрдВ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд░реЗрд▓ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?
(рджреЛрдиреЛрдВ рдЯреЗрд╕реНрдЯрдХреЗрд╕ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИрдВред)

event.as_json рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди test , рдФрд░ development рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИрдВред

рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдкрд░реАрдХреНрд╖рдг рдПрдХ рд╣реИрд╢ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ / js json рднреЗрдЬрддрд╛ рд╣реИ

рд╢реБрдХреНрд░, 25 рдирд╡рдВрдмрд░ 2016 рдХреЛ 14:02 рдмрдЬреЗ, рддреЛрд╢рд┐рдХреА рдЗрдирд╛рдореА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБтАж
рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рддрд╣рдд рд╣реА рдпрд╣ рд╣реИрд╢ рдореЗрдВ рдХреНрдпреЛрдВ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ
рд░реЗрд▓ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rspec/rspec-rails/issues/1755#issuecomment-262872045 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAJ8oGL2BlWnFdwoFiun5ifa8AvQ2-DUks5rBk_fgaJpZM4K7muV
.

рдзрдиреНрдпрд╡рд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рд╕рдордЭ рдЧрдпрд╛ рд╣реВрдБ,
рддреЛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЯреЗрд╕реНрдЯрдХреЗрд╕ рдореЗрдВ рд╣реИрд╢ рд╣рдореЗрд╢рд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рдХреЗрд╡рд▓ development рдХреЗ рддрд╣рдд рдЗрд╕реЗ рд╣реИрд╢ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ test рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jaredbeck picture jaredbeck  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

a-leung picture a-leung  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mhenrixon picture mhenrixon  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kaka-ruto picture kaka-ruto  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jiggneshhgohel picture jiggneshhgohel  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ