projects_spec.rb 5.5 KB
Newer Older
1 2
require 'spec_helper'

3
describe 'Dashboard Projects' do
4
  let(:user) { create(:user) }
5
  let(:project) { create(:project, :repository, name: 'awesome stuff') }
6
  let(:project2) { create(:project, :public, name: 'Community project') }
7

8
  before do
9
    project.add_developer(user)
10 11 12
    sign_in(user)
  end

13
  it_behaves_like "an autodiscoverable RSS feed with current_user's feed token" do
14 15 16
    before do
      visit dashboard_projects_path
    end
17
  end
18 19 20 21 22 23

  it 'shows the project the user in a member of in the list' do
    visit dashboard_projects_path
    expect(page).to have_content('awesome stuff')
  end

24 25 26 27 28 29 30 31
  it 'shows "New project" button' do
    visit dashboard_projects_path

    page.within '#content-body' do
      expect(page).to have_link('New project')
    end
  end

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
  context 'when user has access to the project' do
    it 'shows role badge' do
      visit dashboard_projects_path

      page.within '.user-access-role' do
        expect(page).to have_content('Developer')
      end
    end

    context 'when role changes', :use_clean_rails_memory_store_fragment_caching do
      it 'displays the right role' do
        visit dashboard_projects_path

        page.within '.user-access-role' do
          expect(page).to have_content('Developer')
        end

        project.members.last.update(access_level: 40)

        visit dashboard_projects_path

        page.within '.user-access-role' do
          expect(page).to have_content('Maintainer')
        end
      end
    end
  end

60 61
  context 'when last_repository_updated_at, last_activity_at and update_at are present' do
    it 'shows the last_repository_updated_at attribute as the update date' do
L
Lin Jen-Shin 已提交
62
      project.update!(last_repository_updated_at: Time.now, last_activity_at: 1.hour.ago)
63

64 65 66 67
      visit dashboard_projects_path

      expect(page).to have_xpath("//time[@datetime='#{project.last_repository_updated_at.getutc.iso8601}']")
    end
68 69

    it 'shows the last_activity_at attribute as the update date' do
L
Lin Jen-Shin 已提交
70
      project.update!(last_repository_updated_at: 1.hour.ago, last_activity_at: Time.now)
71 72 73 74 75

      visit dashboard_projects_path

      expect(page).to have_xpath("//time[@datetime='#{project.last_activity_at.getutc.iso8601}']")
    end
76
  end
77

78 79
  context 'when last_repository_updated_at and last_activity_at are missing' do
    it 'shows the updated_at attribute as the update date' do
L
Lin Jen-Shin 已提交
80
      project.update!(last_repository_updated_at: nil, last_activity_at: nil)
81 82 83 84 85 86
      project.touch

      visit dashboard_projects_path

      expect(page).to have_xpath("//time[@datetime='#{project.updated_at.getutc.iso8601}']")
    end
87 88
  end

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
  context 'when on Your projects tab' do
    it 'shows all projects by default' do
      visit dashboard_projects_path

      expect(page).to have_content(project.name)
    end

    it 'shows personal projects on personal projects tab', :js do
      project3 = create(:project, namespace: user.namespace)

      visit dashboard_projects_path

      click_link 'Personal'

      expect(page).not_to have_content(project.name)
      expect(page).to have_content(project3.name)
    end
106 107 108 109 110 111 112 113

    it 'sorts projects by most stars when sorting by most stars' do
      project_with_most_stars = create(:project, namespace: user.namespace, star_count: 10)

      visit dashboard_projects_path(sort: :stars_desc)

      expect(first('.project-row')).to have_content(project_with_most_stars.title)
    end
114 115
  end

116 117 118 119 120 121 122 123 124 125 126
  context 'when on Starred projects tab' do
    it 'shows only starred projects' do
      user.toggle_star(project2)

      visit(starred_dashboard_projects_path)

      expect(page).not_to have_content(project.name)
      expect(page).to have_content(project2.name)
    end
  end

127
  describe 'with a pipeline', :clean_gitlab_redis_shared_state do
128
    let(:pipeline) { create(:ci_pipeline, project: project, sha: project.commit.sha, ref: project.default_branch) }
129 130

    before do
131 132 133 134
      # Since the cache isn't updated when a new pipeline is created
      # we need the pipeline to advance in the pipeline since the cache was created
      # by visiting the login page.
      pipeline.succeed
135 136 137 138
    end

    it 'shows that the last pipeline passed' do
      visit dashboard_projects_path
139

140
      page.within('.controls') do
141
        expect(page).to have_xpath("//a[@href='#{pipelines_project_commit_path(project, project.commit, ref: pipeline.ref)}']")
142 143 144 145 146 147 148
        expect(page).to have_css('.ci-status-link')
        expect(page).to have_css('.ci-status-icon-success')
        expect(page).to have_link('Commit: passed')
      end
    end
  end

149
  context 'last push widget', :use_clean_rails_memory_store_caching do
B
blackst0ne 已提交
150 151
    let(:ref) { "feature" }

152
    before do
153 154
      event = create(:push_event, project: project, author: user)

B
blackst0ne 已提交
155
      create(:push_event_payload, event: event, ref: ref, action: :created)
156

157 158
      Users::LastPushEventService.new(user).cache_last_push_event(event)

159 160 161
      visit dashboard_projects_path
    end

162
    it 'shows "Create merge request" button' do
163 164 165 166 167 168 169
      expect(page).to have_content 'You pushed to feature'

      within('#content-body') do
        find_link('Create merge request', visible: false).click
      end

      expect(page).to have_selector('.merge-request-form')
B
blackst0ne 已提交
170
      expect(current_path).to eq project_new_merge_request_path(project, merge_request_source_branch: ref)
171
      expect(find('#merge_request_target_project_id', visible: false).value).to eq project.id.to_s
B
blackst0ne 已提交
172
      expect(find('input#merge_request_source_branch', visible: false).value).to eq ref
173
      expect(find('input#merge_request_target_branch', visible: false).value).to eq 'master'
174 175
    end
  end
176
end