This commit is contained in:
89
test/controllers/books_controller_test.rb
Normal file
89
test/controllers/books_controller_test.rb
Normal file
@@ -0,0 +1,89 @@
|
||||
require "test_helper"
|
||||
|
||||
class BooksControllerTest < ActionDispatch::IntegrationTest
|
||||
setup do
|
||||
sign_in :kevin
|
||||
end
|
||||
|
||||
test "index lists the current user's books" do
|
||||
get root_url
|
||||
|
||||
assert_response :success
|
||||
assert_select "h2", text: "Handbook"
|
||||
assert_select "h2", text: "Manual", count: 0
|
||||
end
|
||||
|
||||
test "index includes published books, even when the user does not have access" do
|
||||
books(:manual).update!(published: true)
|
||||
|
||||
get root_url
|
||||
|
||||
assert_response :success
|
||||
assert_select "h2", text: "Handbook"
|
||||
assert_select "h2", text: "Manual"
|
||||
end
|
||||
|
||||
test "index shows published books when not logged in" do
|
||||
books(:manual).update!(published: true)
|
||||
|
||||
sign_out
|
||||
get root_url
|
||||
|
||||
assert_response :success
|
||||
assert_select "h2", text: "Handbook", count: 0
|
||||
assert_select "h2", text: "Manual"
|
||||
end
|
||||
|
||||
test "index redirects to login if not signed in and no published books exist" do
|
||||
sign_out
|
||||
get root_url
|
||||
|
||||
assert_redirected_to new_session_url
|
||||
end
|
||||
|
||||
test "create makes the current user an editor" do
|
||||
assert_difference -> { Book.count }, +1 do
|
||||
post books_url, params: { book: { title: "New Book", everyone_access: false } }
|
||||
end
|
||||
|
||||
assert_redirected_to book_slug_url(Book.last)
|
||||
|
||||
book = Book.last
|
||||
assert_equal "New Book", book.title
|
||||
assert_equal 1, Book.last.accesses.count
|
||||
|
||||
assert book.editable?(user: users(:kevin))
|
||||
end
|
||||
|
||||
test "create sets additional accesses" do
|
||||
sign_in :jason
|
||||
assert_difference -> { Book.count }, +1 do
|
||||
post books_url, params: { book: { title: "New Book", everyone_access: false }, "editor_ids[]": users(:jz).id, "reader_ids[]": users(:kevin).id }
|
||||
end
|
||||
|
||||
book = Book.last
|
||||
assert_equal "New Book", book.title
|
||||
assert_equal 3, Book.last.accesses.count
|
||||
|
||||
assert book.editable?(user: users(:jz))
|
||||
|
||||
assert book.accessable?(user: users(:kevin))
|
||||
assert_not book.editable?(user: users(:kevin))
|
||||
end
|
||||
|
||||
test "show only shows books the current user can access" do
|
||||
get book_slug_url(books(:manual))
|
||||
assert_response :not_found
|
||||
|
||||
get book_slug_url(books(:handbook))
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
test "show includes OG metadata for public access" do
|
||||
get book_slug_url(books(:handbook))
|
||||
assert_response :success
|
||||
|
||||
assert_select "meta[property='og:title'][content='Handbook']"
|
||||
assert_select "meta[property='og:url'][content='#{book_slug_url(books(:handbook))}']"
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user