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

3
feature '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 13 14 15 16
    sign_in(user)
  end

  it_behaves_like "an autodiscoverable RSS feed with current_user's RSS token" do
    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
  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
      project.update_attributes!(last_repository_updated_at: Time.now, last_activity_at: 1.hour.ago)
35

36 37 38 39
      visit dashboard_projects_path

      expect(page).to have_xpath("//time[@datetime='#{project.last_repository_updated_at.getutc.iso8601}']")
    end
40 41 42 43 44 45 46 47

    it 'shows the last_activity_at attribute as the update date' do
      project.update_attributes!(last_repository_updated_at: 1.hour.ago, last_activity_at: Time.now)

      visit dashboard_projects_path

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

50 51 52 53 54 55 56 57 58
  context 'when last_repository_updated_at and last_activity_at are missing' do
    it 'shows the updated_at attribute as the update date' do
      project.update_attributes!(last_repository_updated_at: nil, last_activity_at: nil)
      project.touch

      visit dashboard_projects_path

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

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
  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
  end

80 81 82 83 84 85 86 87 88 89 90
  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

91
  describe 'with a pipeline', :clean_gitlab_redis_shared_state do
92
    let(:pipeline) { create(:ci_pipeline, project: project, sha: project.commit.sha) }
93 94

    before do
95 96 97 98
      # 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
99 100 101 102
    end

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

104 105 106 107 108 109 110 111 112
      page.within('.controls') do
        expect(page).to have_xpath("//a[@href='#{pipelines_project_commit_path(project, project.commit)}']")
        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

113
  context 'last push widget', :use_clean_rails_memory_store_caching do
114
    before do
115 116 117 118
      event = create(:push_event, project: project, author: user)

      create(:push_event_payload, event: event, ref: 'feature', action: :created)

119 120
      Users::LastPushEventService.new(user).cache_last_push_event(event)

121 122 123 124 125 126 127 128 129 130 131 132
      visit dashboard_projects_path
    end

    scenario 'shows "Create merge request" button' do
      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')
      expect(current_path).to eq project_new_merge_request_path(project)
133 134 135
      expect(find('#merge_request_target_project_id', visible: false).value).to eq project.id.to_s
      expect(find('input#merge_request_source_branch', visible: false).value).to eq 'feature'
      expect(find('input#merge_request_target_branch', visible: false).value).to eq 'master'
136 137
    end
  end
138
end