Files
astuto/spec/system/likes_spec.rb

119 lines
3.3 KiB
Ruby

require 'rails_helper'
feature 'likes', type: :system, js: true do
let(:board) { FactoryBot.create(:board) }
let(:post1) { FactoryBot.create(:post, board: board) }
let(:post2) { FactoryBot.create(:post, board: board) }
let(:user) { FactoryBot.create(:user) }
let(:board_container) { '.boardContainer' }
let(:post_header_selector) { '.postHeader' }
let(:like_button_container_selector) { '.likeButtonContainer' }
let(:like_button_selector) { '.likeButton' }
let(:likes_count_label_selector) { '.likeCountLabel' }
let(:like_list_container_selector) { '.likeListContainer' }
before(:each) do
board
post1
post2
end
context 'in post list of Board component' do
it 'renders correctly for each post' do
visit board_path(board)
within board_container do
expect(page).to have_selector(like_button_container_selector, count: 2)
expect(page).to have_selector(like_button_selector, count: 2)
expect(page).to have_selector(likes_count_label_selector, count: 2)
end
end
it 'redirects when user not logged in' do
visit board_path(board)
within board_container do
find(like_button_selector, match: :first).click
expect(page.current_path).to eq(new_user_session_path)
end
end
it 'likes and unlikes' do
user.confirm
sign_in user
visit board_path(board)
within board_container do
first_like_button = find(like_button_selector, match: :first)
like_container = find(like_button_container_selector, match: :first)
# starts at zero likes
expect(like_container).to have_content(0)
# like
first_like_button.click
expect(like_container).to have_content(1)
# unlike
first_like_button.click
expect(like_container).to have_content(0)
end
end
end
context 'in Post component' do
it 'renders correctly' do
visit post_path(post1)
expect(page).to have_selector(like_button_container_selector)
expect(page).to have_selector(like_button_selector)
expect(page).to have_selector(likes_count_label_selector)
end
it 'likes and unlikes' do
user.confirm
sign_in user
visit post_path(post1)
like_button = find(like_button_selector)
like_container = find(like_button_container_selector)
# starts at zero likes
expect(like_container).to have_content(0)
within like_list_container_selector do
expect(page).not_to have_content(/#{user.full_name}/i)
end
# like
like_button.click
# expect(like_container).to have_content(1)
within like_list_container_selector do
expect(page).to have_content(/#{user.full_name}/i)
end
# unlike
like_button.click
expect(like_container).to have_content(0)
within like_list_container_selector do
expect(page).not_to have_content(/#{user.full_name}/i)
end
end
it 'renders list of likes' do
visit post_path(post1)
within like_list_container_selector do
expect(page).not_to have_content(/#{user.full_name}/i)
end
FactoryBot.create(:like, post: post1, user: user)
visit post_path(post1)
within like_list_container_selector do
expect(page).to have_content(/#{user.full_name}/i)
end
end
end
end