207 lines
7.9 KiB
Ruby
207 lines
7.9 KiB
Ruby
require "spec_helper"
|
|
|
|
describe ReadingsController do
|
|
include LoginMacros
|
|
include RedirectExpectationHelper
|
|
|
|
let(:user) { create(:user) }
|
|
|
|
describe "GET #index" do
|
|
context "with user params" do
|
|
context "when logged in as admin" do
|
|
it "redirects to login page with error" do
|
|
fake_login_admin(create(:admin))
|
|
get :index, params: { user_id: user }
|
|
it_redirects_to_with_error(new_user_session_path, "Sorry, you don't have permission to access the page you were trying to reach. Please log in.")
|
|
end
|
|
end
|
|
|
|
context "when logged out" do
|
|
it "redirects to login page with error" do
|
|
get :index, params: { user_id: user }
|
|
it_redirects_to_with_error(new_user_session_path, "Sorry, you don't have permission to access the page you were trying to reach. Please log in.")
|
|
end
|
|
end
|
|
|
|
context "when logged in as another user" do
|
|
it "redirects to requested user's dashboard with error" do
|
|
fake_login
|
|
get :index, params: { user_id: user }
|
|
it_redirects_to_with_error(user_path(user), "Sorry, you don't have permission to access the page you were trying to reach.")
|
|
end
|
|
end
|
|
|
|
context "when logged in as the user" do
|
|
it "includes user's readings sorted by last_viewed" do
|
|
reading1 = create(:reading, user: user, last_viewed: 2.days.ago)
|
|
reading2 = create(:reading, user: user, last_viewed: 1.hour.ago)
|
|
reading3 = create(:reading, user: user, last_viewed: 5.hours.ago)
|
|
reading4 = create(:reading)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user }
|
|
expect(assigns(:readings)).to eq([reading2, reading3, reading1])
|
|
expect(assigns(:readings)).not_to include(reading4)
|
|
end
|
|
|
|
it "includes user's readings for restricted works" do
|
|
work = create(:work, restricted: true)
|
|
reading1 = create(:reading, user: user, work: work)
|
|
reading2 = create(:reading, work: work)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user }
|
|
expect(assigns(:readings)).to include(reading1)
|
|
expect(assigns(:readings)).not_to include(reading2)
|
|
end
|
|
|
|
it "includes user's readings for deleted works" do
|
|
reading1 = create(:reading, :deleted_work, user: user)
|
|
reading2 = create(:reading, :deleted_work)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user }
|
|
expect(assigns(:readings)).to include(reading1)
|
|
expect(assigns(:readings)).not_to include(reading2)
|
|
end
|
|
|
|
it "excludes user's readings for hidden works" do
|
|
work = create(:work, hidden_by_admin: true)
|
|
reading1 = create(:reading, user: user, work: work)
|
|
reading2 = create(:reading, work: work)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user }
|
|
expect(assigns(:readings)).not_to include(reading1)
|
|
expect(assigns(:readings)).not_to include(reading2)
|
|
end
|
|
|
|
it "excludes user's readings for draft works" do
|
|
work = create(:draft)
|
|
reading1 = create(:reading, user: user, work: work)
|
|
reading2 = create(:reading, work: work)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user }
|
|
expect(assigns(:readings)).not_to include(reading1)
|
|
expect(assigns(:readings)).not_to include(reading2)
|
|
end
|
|
|
|
context "with show=to-read params" do
|
|
it "includes user's toread readings sorted by last_viewed" do
|
|
reading1 = create(:reading, user: user, last_viewed: 2.days.ago, toread: true)
|
|
reading2 = create(:reading, user: user, last_viewed: 1.hour.ago, toread: true)
|
|
reading3 = create(:reading, user: user, last_viewed: 12.hours.ago)
|
|
reading4 = create(:reading, toread: true)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user, show: "to-read" }
|
|
expect(assigns(:readings)).to eq([reading2, reading1])
|
|
expect(assigns(:readings)).not_to include(reading3)
|
|
expect(assigns(:readings)).not_to include(reading4)
|
|
end
|
|
|
|
it "includes user's toread readings for restricted works" do
|
|
work = create(:work, restricted: true)
|
|
reading1 = create(:reading, user: user, work: work, toread: true)
|
|
reading2 = create(:reading, work: work, toread: true)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user, show: "to-read" }
|
|
expect(assigns(:readings)).to include(reading1)
|
|
expect(assigns(:readings)).not_to include(reading2)
|
|
end
|
|
|
|
it "includes user's toread readings for deleted works" do
|
|
reading1 = create(:reading, :deleted_work, user: user, toread: true)
|
|
reading2 = create(:reading, :deleted_work, toread: true)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user, show: "to-read" }
|
|
expect(assigns(:readings)).to include(reading1)
|
|
expect(assigns(:readings)).not_to include(reading2)
|
|
end
|
|
|
|
it "excludes user's toread readings for hidden works" do
|
|
work = create(:work, hidden_by_admin: true)
|
|
reading1 = create(:reading, user: user, work: work, toread: true)
|
|
reading2 = create(:reading, work: work, toread: true)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user, show: "to-read" }
|
|
expect(assigns(:readings)).not_to include(reading1)
|
|
expect(assigns(:readings)).not_to include(reading2)
|
|
end
|
|
|
|
it "excludes user's toread readings for draft works" do
|
|
work = create(:draft)
|
|
reading1 = create(:reading, user: user, work: work, toread: true)
|
|
reading2 = create(:reading, work: work, toread: true)
|
|
|
|
fake_login_known_user(user)
|
|
get :index, params: { user_id: user, show: "to-read" }
|
|
expect(assigns(:readings)).not_to include(reading1)
|
|
expect(assigns(:readings)).not_to include(reading2)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "POST #clear" do
|
|
context "when logged in as the user" do
|
|
let!(:reading1) { create(:reading, user: user) }
|
|
let!(:reading2) { create(:reading, user: user) }
|
|
|
|
before do
|
|
fake_login_known_user(user)
|
|
end
|
|
|
|
it "clears all readings and redirects with success notice" do
|
|
post :clear, params: { user_id: user }
|
|
|
|
it_redirects_to_with_notice(
|
|
user_readings_path(user),
|
|
"Your history is now cleared."
|
|
)
|
|
|
|
expect do
|
|
reading1.reload
|
|
end.to raise_error(ActiveRecord::RecordNotFound)
|
|
|
|
expect do
|
|
reading2.reload
|
|
end.to raise_error(ActiveRecord::RecordNotFound)
|
|
end
|
|
|
|
it "failure to clear readings sets flash error" do
|
|
allow_any_instance_of(Reading).to receive(:destroy!).and_raise(ActiveRecord::RecordNotDestroyed)
|
|
|
|
post :clear, params: { user_id: user }
|
|
|
|
it_redirects_to_with_error(
|
|
user_readings_path(user),
|
|
"There were problems deleting your history. Please try again later."
|
|
)
|
|
end
|
|
end
|
|
|
|
context "when logged out" do
|
|
it "redirects to login page with error" do
|
|
post :clear, params: { user_id: user }
|
|
|
|
it_redirects_to_with_error(new_user_session_path, "Sorry, you don't have permission to access the page you were trying to reach. Please log in.")
|
|
end
|
|
end
|
|
|
|
context "when logged in as another user" do
|
|
it "redirects to requested user's dashboard with error" do
|
|
fake_login
|
|
|
|
post :clear, params: { user_id: user }
|
|
|
|
it_redirects_to_with_error(user_path(user), "Sorry, you don't have permission to access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
end
|