Skip to content
This repository has been archived by the owner on Nov 6, 2021. It is now read-only.

Migrate Partners Controller Spec to Request Spec #180

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/controllers/partners_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class PartnersController < ApplicationController
before_action :set_partner, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!
before_action :set_partner, only: [:show, :edit, :update, :destroy]

def index
@partners = Partner.all
Expand Down
3 changes: 3 additions & 0 deletions spec/rails_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,12 @@

# sign_in helpers for feature specs
config.include Devise::Test::IntegrationHelpers, type: :feature
config.include Devise::Test::IntegrationHelpers, type: :request
config.include Devise::Test::ControllerHelpers, type: :controller
config.include Devise::Test::IntegrationHelpers, type: :request
config.extend ControllerMacros, type: :controller
config.extend LoginHelper, type: :request
config.include RequestSpecHelper, type: :request

config.include FactoryBot::Syntax::Methods
end
139 changes: 139 additions & 0 deletions spec/requests/partners_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
require "rails_helper"

RSpec.describe "Partners", type: :request, include_shared: true do
context "when authenticated" do
login_user

it "returns http success get#show" do
get partner_path(@partner)

expect(response).to have_http_status(200)
end

it "should redirect to partner get#approve" do
stub_partner_requst
get partner_approve_path(@partner)

expect(response).to redirect_to(@partner)
end

it "does not allow access to partner post#index" do
get partners_path

expect(response).to have_http_status(:redirect)
end

describe "PATCH #update" do
it "updates the partner" do
expect { patch partner_path(@partner, params: { partner: { name: "updated name" } }) }.to change { @partner.reload.name }.to("updated name")
end

it "redirects to #show" do
patch partner_path(@partner, params: { partner: { name: "updated name" } })

expect(response).to redirect_to(@partner)
end

it "Show message of details" do
patch partner_path(@partner, params: { partner: { name: "updated name" } })
follow_redirect!

expect(response.body).to include("Details were successfully updated.")
end
end

it "displays the partner form get#edit" do
get edit_partner_path(@partner)

expect(response).to have_http_status(200)
end

describe "DELETE #destroy" do
it "redirects the user" do
delete partner_path(@partner.id)

expect(response).to redirect_to(root_path)
end

it "does not delete partner" do
delete partner_path(@partner.id)

expect { subject }.to change(Partner, :count).by(0)
end
it "shows the message of not authorized" do
delete partner_path(@partner.id)
follow_redirect!
follow_redirect!

expect(response.body).to include("You are not authorized to perform this action.")
end
end
end

context "when not authenticated" do
let!(:partner) { create(:partner) }

describe "GET #show" do
subject { get partner_path(partner) }

it_behaves_like "user is not logged in"
end

describe "Get #approve" do
subject { get partner_approve_path(partner) }

it_behaves_like "user is not logged in"
end

describe "GET #index" do
subject { get partners_path }

it_behaves_like "user is not logged in"
end

describe "GET #edit" do
subject { get edit_partner_path(partner) }

it_behaves_like "user is not logged in"
end

describe "PATCH #update" do
subject { patch partner_path(partner, params: { partner: { name: "updated name" } }) }

it_behaves_like "user is not logged in"

it "does not save the partner" do
expect { subject }.not_to(change { partner.reload.name })
end
end

describe "DELETE #destroy" do
subject { delete partner_path(partner.id) }

it_behaves_like "user is not logged in"

it "does not delete partner" do
expect { subject }.not_to change(Partner, :count)
end

it "returns a redirect" do
subject
expect(response).to have_http_status(:redirect)
end
end
end

def stub_partner_requst
stub_request(:post, diaperbank_routes.partner_approvals).with(
body: { partner: { diaper_partner_id: @partner.id } }.to_json,
headers: {
"Accept" => "*/*",
"Accept-Encoding" => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
"Content-Type" => "application/json",
"Host" => diaperbank_routes.partner_approvals.host,
"User-Agent" => "Ruby",
"X-Api-Key" => ENV["DIAPERBANK_KEY"]
}
).to_return(status: 200, body: "", headers: {})
end
end
9 changes: 9 additions & 0 deletions spec/support/login_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module LoginHelper
def login_user(options = {})
before(:each) do
@partner = create(:partner, options)
@user = create(:user, partner: @partner)
sign_in @user
end
end
end