Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "rails_helper"
- RSpec.describe WordPressRegistrationsController, :vcr, type: :controller do
- # you need a valid vertical code with translations in config/locales here
- let(:vertical) { FactoryGirl.create(:vertical, :code => "ct") }
- let(:response_json) { JSON.parse(response.body) }
- render_views
- before(:each) do
- request.env["X-Api-Version"] = "3"
- request.host = "api.#{vertical.domain}.#{vertical.top_level_domain}"
- end
- it "gets a list of industries do" do
- process(:options, {format: :json}, {}, {}, "OPTIONS")
- expect(response).to be_success
- expect(response_json["industries"]).to be_a(Array)
- response_json["industries"].each do |industry|
- expect(industry).to be_a(Array)
- expect(industry.length).to eq 2
- expect(industry.first).to be_a(String)
- expect(industry.last).to be_a(String)
- end
- end
- it "gets the plans for a subscription" do
- process(:options, {format: :json}, {}, {}, "OPTIONS")
- expect(response).to be_success
- expect(assigns(:vertical)).to eq vertical
- expect(response_json["subscription_plans"]).to be_a(Array)
- expect(response_json["subscription_plans"].length).to eq vertical.subscription_plans.length
- response_json["subscription_plans"].each do |subscription_plan|
- returned_plan = vertical.subscription_plans.detect { |plan| plan["id"] == subscription_plan["id"] }
- expect(subscription_plan.keys.length).to eq 3
- expect(subscription_plan["id"]).to eq returned_plan["id"]
- expect(subscription_plan["description"]).to eq returned_plan["description"]
- expect(subscription_plan["amount"]).to eq returned_plan["amount"]
- end
- end
- describe "create" do
- let(:vertical) { FactoryGirl.create(:vertical, requires_payment: false) }
- let(:subscription_attributes) do
- {
- planID: "MONTHLY",
- state: "WA",
- pap_custom: "pap_dx8vc2s5",
- email: "jdoe@mailinator.com",
- name: "John Doe",
- cell: "1234567890",
- subdomain: "jdoe",
- password: "secret"
- }
- end
- before(:each) do
- request.host = "api.#{vertical.domain}.local"
- request.env["X-Api-Secret-Key"] = "secret"
- end
- after(:each) do
- if response.redirect?
- user = User.find_by(subdomain: URI.parse(response.redirect_url).host.split(".")[0])
- # Cleanup Stripe
- customer = StripeApi.new.retrieve_customer user.subscription.stripe_customer_token if user.subscription.stripe_customer_token
- customer.delete if customer
- # Cleanup the Salesforce user.
- contact = SalesforceApi.new.find(:contact, user.salesforce_id) if user
- contact.delete if contact
- end
- end
- context "not authenticated request" do
- it "returns forbidden if the secret isn't sent" do
- request.env.delete("X-Api-Secret-Key")
- post :create, mm_registration: subscription_attributes, format: :json
- expect(response).to be_forbidden
- end
- it "returns forbidden if an invalid secret is sent" do
- request.env["X-Api-Secret-Key"] = "not a secret"
- post :create, mm_registration: subscription_attributes, format: :json
- expect(response).to be_forbidden
- end
- end
- context "authenticated request" do
- before do
- allow(Rails).to receive_message_chain(:configuration, :api_secret_keys).and_return("secret")
- # Rails.configuration.api_secret_keys = "secret"
- end
- context "within a non-paid vertical" do
- describe "create" do
- it "succeeds" do
- form = SignUpForm.new(vertical, subscription_attributes)
- expect(SignUpForm).to receive(:new).and_return form
- expect(form).to receive(:save).and_call_original
- expect(Resque).
- to receive(:enqueue).
- with(SalesforceUserSubscribeJob, instance_of(String), {}).
- and_return nil
- post :create, mm_registration: subscription_attributes, format: :json
- expect(response).to be_success
- expect(response_json["redirect"]).to eq first_login_url(subdomain: "jdoe")
- end
- it "uses the template" do
- template = FactoryGirl.create(:user_template, name: "template", tinyid: "custom")
- post :create, mm_registration: subscription_attributes.merge(template: "custom"), format: :json
- user = User.find(response_json["user_id"])
- expect(User.find_by(template_id: template.id)).to eq user
- end
- it "returns an error if invalid" do
- post :create, mm_registration: subscription_attributes.merge(email: nil), format: :json
- expect(response).not_to be_success
- expect(response_json["errors"].length).to eq 1
- expect(response_json["errors"]["email"]).to be_include("can't be blank")
- end
- end
- end
- context "within a paid vertical" do
- let(:token) { FactoryGirl.create(:stripe_token) }
- let(:vertical) { FactoryGirl.create(:vertical, requires_payment: true) }
- let(:subscription_attributes) do
- {
- planID: "MONTHLY",
- state: "WA",
- pap_custom: "pap_dx8vc2s5",
- email: "jdoe@mailinator.com",
- name: "John Doe",
- cell: "1234567890",
- subdomain: "jdoe",
- password: "secret",
- stripe_card_token: token.id
- }
- end
- describe "create" do
- it "succeeds" do
- form = PaidSignUpForm.new(vertical, subscription_attributes)
- expect(PaidSignUpForm).to receive(:new).and_return form
- expect(form).to receive(:save).and_call_original
- expect(Resque).
- to receive(:enqueue).
- with(SalesforceUserSubscribeJob, instance_of(String), {}).
- and_return nil
- post :create, mm_registration: subscription_attributes, format: :json
- expect(response).to be_success
- expect(response_json["redirect"]).to eq first_login_url(subdomain: "jdoe")
- end
- it "uses the template" do
- template = FactoryGirl.create(:user_template, name: "template", tinyid: "custom")
- post :create, mm_registration: subscription_attributes.merge(template: "custom"), format: :json
- user = User.find(response_json["user_id"])
- expect(User.find_by(template_id: template.id)).to eq user
- end
- it "returns a json with errors if it fails" do
- post :create, mm_registration: subscription_attributes.merge(email: nil), format: :json
- expect(response).not_to be_success
- expect(response_json["errors"].length).to eq 1
- expect(response_json["errors"]["email"]).to be_include("can't be blank")
- end
- it "should reject payment declined" do
- token = FactoryGirl.create(:declined_stripe_token)
- post :create, mm_registration: subscription_attributes.merge(stripe_card_token: token.id), format: :json
- expect(response).not_to be_success
- expect(response_json["errors"].length).to eq 1
- expect(response_json["errors"]["base"][0]).to match(/Your card was declined/)
- end
- it "should reject payment declined (fraudulent)" do
- token = FactoryGirl.create(:fraudulent_stripe_token)
- post :create, mm_registration: subscription_attributes.merge(stripe_card_token: token.id), format: :json
- expect(response).not_to be_success
- expect(response_json["errors"].length).to eq 1
- expect(response_json["errors"]["base"][0]).to match(/Your card was declined/)
- end
- it "should reject payment declined (incorrect cvc code)" do
- token = FactoryGirl.create(:incorrect_cvc_stripe_token)
- post :create, mm_registration: subscription_attributes.merge(stripe_card_token: token.id), format: :json
- expect(response).not_to be_success
- expect(response_json["errors"].length).to eq 1
- expect(response_json["errors"]["base"][0]).to match(/Your card's security code is incorrect/)
- end
- it "should reject payment declined (expired card)" do
- token = FactoryGirl.create(:expired_stripe_token)
- post :create, mm_registration: subscription_attributes.merge(stripe_card_token: token.id), format: :json
- expect(response).not_to be_success
- expect(response_json["errors"].length).to eq 1
- expect(response_json["errors"]["base"][0]).to match(/Your card has expired/)
- end
- it "should reject payment declined (processing error)" do
- token = FactoryGirl.create(:processing_error_stripe_token)
- post :create, mm_registration: subscription_attributes.merge(stripe_card_token: token.id), format: :json
- expect(response).not_to be_success
- expect(response_json["errors"].length).to eq 1
- expect(response_json["errors"]["base"][0]).to match(/Try again in a little bit/)
- end
- end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement