projects_spec.rb 3.9 KB
Newer Older
G
gitlabhq 已提交
1 2
require 'spec_helper'

Z
Z.J. van de Weg 已提交
3
feature 'Project' do
4 5 6 7 8 9 10 11 12
  describe 'creating from template' do
    let(:user)    { create(:user) }
    let(:template) { Gitlab::ProjectTemplate.find(:rails) }

    before do
      sign_in user
      visit new_project_path
    end

13
    it "allows creation from templates" do
14
      page.choose(template.name)
15 16 17 18 19 20
      fill_in("project_path", with: template.name)

      page.within '#content-body' do
        click_button "Create project"
      end

21
      expect(page).to have_content template.name
22 23 24
    end
  end

25
  describe 'description' do
26
    let(:project) { create(:project, :repository) }
27
    let(:path)    { project_path(project) }
G
gitlabhq 已提交
28

R
randx 已提交
29
    before do
30
      sign_in(create(:admin))
R
randx 已提交
31 32
    end

33 34 35 36 37 38 39 40 41
    it 'parses Markdown' do
      project.update_attribute(:description, 'This is **my** project')
      visit path
      expect(page).to have_css('.project-home-desc > p > strong')
    end

    it 'passes through html-pipeline' do
      project.update_attribute(:description, 'This project is the :poop:')
      visit path
E
Eric Eastwood 已提交
42
      expect(page).to have_css('.project-home-desc > p > gl-emoji')
43 44 45
    end

    it 'sanitizes unwanted tags' do
D
Douwe Maan 已提交
46
      project.update_attribute(:description, "```\ncode\n```")
47
      visit path
D
Douwe Maan 已提交
48
      expect(page).not_to have_css('.project-home-desc code')
49 50 51 52 53 54 55 56 57
    end

    it 'permits `rel` attribute on links' do
      project.update_attribute(:description, 'https://google.com/')
      visit path
      expect(page).to have_css('.project-home-desc a[rel]')
    end
  end

58 59
  describe 'remove forked relationship', js: true do
    let(:user)    { create(:user) }
60
    let(:project) { create(:project, namespace: user.namespace) }
61 62

    before do
63
      sign_in user
64
      create(:forked_project_link, forked_to_project: project)
65
      visit edit_project_path(project)
66 67
    end

68
    it 'removes fork' do
69
      expect(page).to have_content 'Remove fork relationship'
70

71
      remove_with_confirm('Remove fork relationship', project.path)
72

D
Douwe Maan 已提交
73
      expect(page).to have_content 'The fork relationship has been removed.'
74
      expect(project.forked?).to be_falsey
75
      expect(page).not_to have_content 'Remove fork relationship'
76 77 78
    end
  end

79
  describe 'removal', js: true do
80
    let(:user)    { create(:user, username: 'test', name: 'test') }
81
    let(:project) { create(:project, namespace: user.namespace, name: 'project1') }
82 83

    before do
84
      sign_in(user)
85
      project.team << [user, :master]
86
      visit edit_project_path(project)
87 88
    end

U
ubudzisz 已提交
89
    it 'removes a project' do
90
      expect { remove_with_confirm('Remove project', project.path) }.to change {Project.count}.by(-1)
91
      expect(page).to have_content "Project 'test / project1' will be deleted."
U
ubudzisz 已提交
92 93 94
      expect(Project.all.count).to be_zero
      expect(project.issues).to be_empty
      expect(project.merge_requests).to be_empty
R
randx 已提交
95 96
    end
  end
D
Dmitriy Zaporozhets 已提交
97

98 99 100 101 102 103
  describe 'tree view (default view is set to Files)' do
    let(:user) { create(:user, project_view: 'files') }
    let(:project) { create(:forked_project_with_submodules) }

    before do
      project.team << [user, :master]
104
      sign_in user
105
      visit project_path(project)
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
    end

    it 'has working links to files' do
      click_link('PROCESS.md')

      expect(page.status_code).to eq(200)
    end

    it 'has working links to directories' do
      click_link('encoding')

      expect(page.status_code).to eq(200)
    end

    it 'has working links to submodules' do
      click_link('645f6c4c')

      expect(page.status_code).to eq(200)
    end
  end

127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
  describe 'activity view' do
    let(:user) { create(:user, project_view: 'activity') }
    let(:project) { create(:project, :repository) }

    before do
      project.team << [user, :master]
      sign_in user
      visit project_path(project)
    end

    it 'loads activity', :js do
      expect(page).to have_selector('.event-item')
    end
  end

142 143 144
  def remove_with_confirm(button_text, confirm_with)
    click_button button_text
    fill_in 'confirm_name_input', with: confirm_with
D
Dmitriy Zaporozhets 已提交
145 146
    click_button 'Confirm'
  end
G
gitlabhq 已提交
147
end