Skip to content

Commit

Permalink
redirect_to spec matcher
Browse files Browse the repository at this point in the history
  • Loading branch information
veelenga committed Jul 27, 2017
1 parent a1321cf commit e9b90f5
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 1 deletion.
15 changes: 15 additions & 0 deletions spec/controllers/announcement_controller_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@ describe AnnouncementController do
expect(response.status_code).to eq 302
expect(Announcement.all.size).to eq 0
end

it "redirects to /" do
post "/announcements", body: "title=test-title&description=test-description&type=0"
expect(response).to redirect_to "/announcements/new"
end
end
end

Expand All @@ -93,6 +98,7 @@ describe AnnouncementController do
it "redirects to root_url" do
get "/announcements/#{announcement.id}/edit"
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end
end

Expand All @@ -113,6 +119,7 @@ describe AnnouncementController do
it "redirects to root url" do
get "/announcements/#{announcement.id}/edit"
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end
end

Expand Down Expand Up @@ -148,6 +155,7 @@ describe AnnouncementController do
it "redirects to root url" do
patch "/announcements/#{announcement.id}", body: HTTP::Params.encode(valid_params)
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end

it "does not update announcement" do
Expand All @@ -171,6 +179,7 @@ describe AnnouncementController do
it "redirects to announcement#show page if params are valid" do
patch "/announcements/#{announcement.id}", body: HTTP::Params.encode(valid_params)
expect(response.status_code).to eq 302
expect(response).to redirect_to "/announcements/#{announcement.id}"
end

it "does not update announcement if params are not valid" do
Expand Down Expand Up @@ -201,6 +210,7 @@ describe AnnouncementController do
it "redirects to root url" do
patch "/announcements/#{announcement.id}", body: HTTP::Params.encode(valid_params)
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end
end

Expand All @@ -218,6 +228,7 @@ describe AnnouncementController do
it "redirects to announcement#show page if params are valid" do
patch "/announcements/#{announcement.id}", body: HTTP::Params.encode(valid_params)
expect(response.status_code).to eq 302
expect(response).to redirect_to "/announcements/#{announcement.id}"
end
end
end
Expand All @@ -228,6 +239,7 @@ describe AnnouncementController do
it "redirects to root url" do
delete "/announcements/#{announcement.id}"
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end

it "does not delete announcement" do
Expand All @@ -248,6 +260,7 @@ describe AnnouncementController do
it "redirects to root url" do
delete "/announcements/#{announcement.id}"
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end
end

Expand All @@ -262,6 +275,7 @@ describe AnnouncementController do
it "redirects to root url" do
delete "/announcements/#{announcement.id}"
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end
end

Expand All @@ -276,6 +290,7 @@ describe AnnouncementController do
it "redirects to root url" do
delete "/announcements/#{announcement.id}"
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end
end
end
Expand Down
4 changes: 3 additions & 1 deletion spec/controllers/sessions_controller_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,10 @@ describe SessionsController do
expect(session["user_id"]).to eq u.not_nil!.id.to_s
end

it "redirects to root url" do
it "redirects to announcements#new" do
get "/github/auth", body: "code=#{code}"
expect(response.status_code).to eq 302
expect(response).to redirect_to "/announcements/new"
end

it "can find existed user and update attributes" do
Expand Down Expand Up @@ -100,6 +101,7 @@ describe SessionsController do
it "redirects to root url" do
delete "/sessions"
expect(response.status_code).to eq 302
expect(response).to redirect_to "/"
end
end
end
41 changes: 41 additions & 0 deletions spec/support/matchers.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
require "spec2"
require "http/client/response"

struct RedirectToMatcher
include Spec2::Matcher

getter expected : String
getter actual : String?

def initialize(@expected : String)
end

def match(response : HTTP::Client::Response?)
@actual = response.try &.headers["Location"]?
@expected == @actual && response.try &.status_code >= 300
end

def failure_message
<<-MSG
bad redirect
\t\t expected to redirect to: "#{expected}"
\t\t but redirects to: "#{actual}"
MSG
end

def failure_message_when_negated
<<-MSG
bad redirect
\t\t expected not to redirect to: "#{expected}"
\t\t but redirects to: "#{actual}"
MSG
end

def description
"(should redirect to #{expected_to})"
end
end

Spec2.register_matcher redirect_to do |url|
RedirectToMatcher.new url
end

0 comments on commit e9b90f5

Please sign in to comment.