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

3
describe 'Projects > Files > User browses files' do
4 5 6 7
  let(:fork_message) do
    "You're not allowed to make changes to this project directly. "\
    "A fork of this project has been created that you can make changes in, so you can submit a merge request."
  end
8
  let(:project) { create(:project, :repository, name: 'Shop') }
9 10 11 12
  let(:project2) { create(:project, :repository, name: 'Another Project', path: 'another-project') }
  let(:project2_tree_path_root_ref) { project_tree_path(project2, project2.repository.root_ref) }
  let(:tree_path_ref_6d39438) { project_tree_path(project, '6d39438') }
  let(:tree_path_root_ref) { project_tree_path(project, project.repository.root_ref) }
13
  let(:user) { project.creator }
14 15

  before do
16
    project.add_master(user)
17 18 19
    sign_in(user)
  end

20 21 22 23 24 25 26 27 28 29 30 31
  it 'shows last commit for current directory' do
    visit(tree_path_root_ref)

    click_link 'files'

    last_commit = project.repository.last_commit_for_path(project.default_branch, 'files')
    page.within('.blob-commit-info') do
      expect(page).to have_content last_commit.short_id
      expect(page).to have_content last_commit.author_name
    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 60
  context 'when browsing the master branch' do
    before do
      visit(tree_path_root_ref)
    end

    it 'shows files from a repository' do
      expect(page).to have_content('VERSION')
      expect(page).to have_content('.gitignore')
      expect(page).to have_content('LICENSE')
    end

    it 'shows the "Browse Directory" link' do
      click_link('files')
      click_link('History')

      expect(page).to have_link('Browse Directory')
      expect(page).not_to have_link('Browse Code')
    end

    it 'shows the "Browse File" link' do
      page.within('.tree-table') do
        click_link('README.md')
      end
      click_link('History')

      expect(page).to have_link('Browse File')
      expect(page).not_to have_link('Browse Files')
    end

61
    it 'shows the "Browse Files" link' do
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
      click_link('History')

      expect(page).to have_link('Browse Files')
      expect(page).not_to have_link('Browse Directory')
    end

    it 'redirects to the permalink URL' do
      click_link('.gitignore')
      click_link('Permalink')

      permalink_path = project_blob_path(project, "#{project.repository.commit.sha}/.gitignore")

      expect(current_path).to eq(permalink_path)
    end
  end

  context 'when browsing a specific ref' do
    before do
      visit(tree_path_ref_6d39438)
    end

    it 'shows files from a repository for "6d39438"' do
      expect(current_path).to eq(tree_path_ref_6d39438)
      expect(page).to have_content('.gitignore')
      expect(page).to have_content('LICENSE')
    end

89
    it 'shows files from a repository with apostroph in its name', :js do
90 91 92 93 94 95 96 97 98 99 100 101 102 103
      first('.js-project-refs-dropdown').click

      page.within('.project-refs-form') do
        click_link("'test'")
      end

      expect(page).to have_selector('.dropdown-toggle-text', text: "'test'")

      visit(project_tree_path(project, "'test'"))

      expect(page).to have_css('.tree-commit-link', visible: true)
      expect(page).not_to have_content('Loading commit data...')
    end

104
    it 'shows the code with a leading dot in the directory', :js do
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
      first('.js-project-refs-dropdown').click

      page.within('.project-refs-form') do
        click_link('fix')
      end

      visit(project_tree_path(project, 'fix/.testdir'))

      expect(page).to have_css('.tree-commit-link', visible: true)
      expect(page).not_to have_content('Loading commit data...')
    end

    it 'does not show the permalink link' do
      click_link('.gitignore')

      expect(page).not_to have_link('permalink')
    end
  end

  context 'when browsing a file content' do
    before do
      visit(tree_path_root_ref)
      click_link('.gitignore')
    end

130
    it 'shows a file content', :js do
131 132 133
      wait_for_requests
      expect(page).to have_content('*.rbc')
    end
134 135 136 137 138 139 140 141

    it 'is possible to blame' do
      click_link 'Blame'

      expect(page).to have_content "*.rb"
      expect(page).to have_content "Dmitriy Zaporozhets"
      expect(page).to have_content "Initial commit"
    end
142 143 144 145 146 147 148 149 150 151 152 153 154
  end

  context 'when browsing a raw file' do
    before do
      visit(project_blob_path(project, File.join(RepoHelpers.sample_commit.id, RepoHelpers.sample_blob.path)))
    end

    it 'shows a raw file content' do
      click_link('Open raw')
      expect(source).to eq('') # Body is filled in by gitlab-workhorse
    end
  end
end