summaryrefslogtreecommitdiff
path: root/spec/features/user_page_spec.rb
blob: 19c587e53c83cdae16e4aa931e0fa643ac9b9f38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
require 'spec_helper'

describe 'User page', :js do
  let!(:user) { create :user }
  let!(:private_project) do
    create :project, :private, name: 'private', namespace: user.namespace do |project|
      project.add_master(user)
    end
  end

  let!(:internal_project) do
    create :project, :internal, name: 'internal', namespace: user.namespace do |project|
      project.add_master(user)
    end
  end

  let!(:public_project) do
    create :project, :public, name: 'public', namespace: user.namespace do |project|
      project.add_master(user)
    end
  end

  def click_nav_link(name)
    page.within '.nav-links' do
      click_link name
    end
  end

  context 'when not signed in' do
    it 'renders user public project' do
      visit user_path(user)
      click_nav_link('Personal projects')

      expect(page).to have_css('.tab-content #projects.active')
      expect(title).to start_with(user.name)

      expect(page).to have_content(public_project.name)
      expect(page).not_to have_content(private_project.name)
      expect(page).not_to have_content(internal_project.name)
    end
  end

  context 'when signed in as another user' do
    let(:another_user) { create :user }

    before do
      sign_in(another_user)
    end

    it 'renders user public and internal projects' do
      visit user_path(user)
      click_nav_link('Personal projects')

      expect(title).to start_with(user.name)

      expect(page).not_to have_content(private_project.name)
      expect(page).to have_content(public_project.name)
      expect(page).to have_content(internal_project.name)
    end
  end

  context 'when signed in as user' do
    before do
      sign_in(user)
    end

    describe 'personal projects' do
      it 'renders all user projects' do
        visit user_path(user)
        click_nav_link('Personal projects')

        expect(title).to start_with(user.name)

        expect(page).to have_content(private_project.name)
        expect(page).to have_content(public_project.name)
        expect(page).to have_content(internal_project.name)
      end
    end

    describe 'contributed projects' do
      context 'when user has contributions' do
        let(:contributed_project) do
          create :project, :public, :empty_repo
        end

        before do
          Issues::CreateService.new(contributed_project, user, { title: 'Bug in old browser' }).execute
          event = create(:push_event, project: contributed_project, author: user)
          create(:push_event_payload, event: event, commit_count: 3)
        end

        it 'renders contributed project' do
          visit user_path(user)

          expect(title).to start_with(user.name)
          expect(page).to have_css('.js-contrib-calendar')

          click_nav_link('Contributed projects')

          page.within '#contributed' do
            expect(page).to have_content(contributed_project.name)
          end
        end
      end
    end
  end
end