This way it won't be possible to browse all user URLs by just going to /users/1, /users/2, /users/3, ... and collect usernames, which might not be desirable in some cases. Note we could use the username as a URL parameter and just find the user with `@user = User.find_by!(id: id, username: username)`, but since usernames might contain strange characters, this might lead to strange/ugly URLs. Finally, note we're using `username.to_s` in order to cover the case where the username is `nil` (as is the case with erased users).
63 lines
1.9 KiB
Ruby
63 lines
1.9 KiB
Ruby
require "rails_helper"
|
|
|
|
describe DirectMessagesController do
|
|
before { sign_in(create :user, :level_two) }
|
|
|
|
describe "GET new" do
|
|
let!(:user) { create(:user, username: "James Jameson") }
|
|
|
|
it "finds a user by ID and slug" do
|
|
get :new, params: { user_id: "#{user.id}-james-jameson" }
|
|
|
|
expect(response).to be_successful
|
|
end
|
|
|
|
it "does not find a user by just an ID" do
|
|
expect do
|
|
get :new, params: { user_id: user.id }
|
|
end.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "does not find a user by just a slug" do
|
|
expect do
|
|
get :new, params: { user_id: "james-jameson" }
|
|
end.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "does not find a user with the wrong slug" do
|
|
expect do
|
|
get :new, params: { user_id: "#{user.id}-James Jameson" }
|
|
end.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
|
|
describe "POST create" do
|
|
let!(:user) { create(:user, username: "James Jameson") }
|
|
let(:message_params) { { direct_message: { title: "Hello!", message: "How are you doing?" }} }
|
|
|
|
it "finds a user by ID and slug" do
|
|
post :create, params: message_params.merge(user_id: "#{user.id}-james-jameson")
|
|
|
|
expect(response).to be_successful
|
|
end
|
|
|
|
it "does not find a user by just an ID" do
|
|
expect do
|
|
post :create, params: message_params.merge(user_id: user.id)
|
|
end.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "does not find a user by just a slug" do
|
|
expect do
|
|
post :create, params: message_params.merge(user_id: "james-jameson")
|
|
end.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "does not find a user with the wrong slug" do
|
|
expect do
|
|
post :create, params: message_params.merge(user_id: "#{user.id}-James Jameson")
|
|
end.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
end
|