1# frozen_string_literal: true
2
3require 'spec_helper'
4
5RSpec.describe 'Snippets tab on a user profile', :js do
6  context 'when the user has snippets' do
7    let(:user) { create(:user) }
8
9    context 'pagination' do
10      let!(:snippets) { create_list(:snippet, 2, :public, author: user) }
11
12      before do
13        allow(Snippet).to receive(:default_per_page).and_return(1)
14        visit user_path(user)
15        page.within('.user-profile-nav') { click_link 'Snippets' }
16        wait_for_requests
17      end
18
19      it_behaves_like 'paginated snippets', remote: true
20    end
21
22    context 'list content' do
23      let!(:public_snippet) { create(:snippet, :public, author: user) }
24      let!(:internal_snippet) { create(:snippet, :internal, author: user) }
25      let!(:private_snippet) { create(:snippet, :private, author: user) }
26      let!(:other_snippet) { create(:snippet, :public) }
27
28      it 'contains only internal and public snippets of a user when a user is logged in' do
29        sign_in(create(:user))
30        visit user_path(user)
31        page.within('.user-profile-nav') { click_link 'Snippets' }
32        wait_for_requests
33
34        expect(page).to have_selector('.snippet-row', count: 2)
35
36        expect(page).to have_content(public_snippet.title)
37        expect(page).to have_content(internal_snippet.title)
38      end
39
40      it 'contains only public snippets of a user when a user is not logged in' do
41        visit user_path(user)
42        page.within('.user-profile-nav') { click_link 'Snippets' }
43        wait_for_requests
44
45        expect(page).to have_selector('.snippet-row', count: 1)
46        expect(page).to have_content(public_snippet.title)
47      end
48    end
49  end
50end
51