tree_controller_spec.rb 3.27 KB
Newer Older
1 2
require 'spec_helper'

3
describe Projects::TreeController do
4
  let(:project) { create(:project, :repository) }
5 6 7 8 9
  let(:user)    { create(:user) }

  before do
    sign_in(user)

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
10
    project.team << [user, :master]
11 12 13 14 15 16 17
    controller.instance_variable_set(:@project, project)
  end

  describe "GET show" do
    # Make sure any errors accessing the tree in our views bubble up to this spec
    render_views

Vinnie Okada's avatar
Vinnie Okada committed
18
    before do
19 20
      get(:show,
          namespace_id: project.namespace.to_param,
21
          project_id: project,
22
          id: id)
Vinnie Okada's avatar
Vinnie Okada committed
23
    end
24 25 26

    context "valid branch, no path" do
      let(:id) { 'master' }
27
      it { is_expected.to respond_with(:success) }
28 29 30
    end

    context "valid branch, valid path" do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
31
      let(:id) { 'master/encoding/' }
32
      it { is_expected.to respond_with(:success) }
33 34 35
    end

    context "valid branch, invalid path" do
36
      let(:id) { 'master/invalid-path/' }
37
      it { is_expected.to respond_with(:not_found) }
38 39 40
    end

    context "invalid branch, valid path" do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
41
      let(:id) { 'invalid-branch/encoding/' }
42
      it { is_expected.to respond_with(:not_found) }
43
    end
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

    context "valid empty branch, invalid path" do
      let(:id) { 'empty-branch/invalid-path/' }
      it { is_expected.to respond_with(:not_found) }
    end

    context "valid empty branch" do
      let(:id) { 'empty-branch' }
      it { is_expected.to respond_with(:success) }
    end

    context "invalid SHA commit ID" do
      let(:id) { 'ff39438/.gitignore' }
      it { is_expected.to respond_with(:not_found) }
    end

    context "valid SHA commit ID" do
      let(:id) { '6d39438' }
      it { is_expected.to respond_with(:success) }
    end

    context "valid SHA commit ID with path" do
      let(:id) { '6d39438/.gitignore' }
67
      it { expect(response).to have_http_status(302) }
68
    end
69
  end
Marin Jankovski's avatar
Marin Jankovski committed
70 71 72 73 74

  describe 'GET show with blob path' do
    render_views

    before do
75 76
      get(:show,
          namespace_id: project.namespace.to_param,
77
          project_id: project,
78
          id: id)
Marin Jankovski's avatar
Marin Jankovski committed
79 80 81 82
    end

    context 'redirect to blob' do
      let(:id) { 'master/README.md' }
Jeroen van Baarsen's avatar
Jeroen van Baarsen committed
83 84 85 86 87
      it 'redirects' do
        redirect_url = "/#{project.path_with_namespace}/blob/master/README.md"
        expect(subject).
          to redirect_to(redirect_url)
      end
Marin Jankovski's avatar
Marin Jankovski committed
88 89
    end
  end
Stan Hu's avatar
Stan Hu committed
90 91 92 93 94 95 96

  describe '#create_dir' do
    render_views

    before do
      post(:create_dir,
           namespace_id: project.namespace.to_param,
97
           project_id: project,
Stan Hu's avatar
Stan Hu committed
98 99
           id: 'master',
           dir_name: path,
100
           branch_name: branch_name,
Stan Hu's avatar
Stan Hu committed
101 102 103 104 105
           commit_message: 'Test commit message')
    end

    context 'successful creation' do
      let(:path) { 'files/new_dir'}
106
      let(:branch_name) { 'master-test'}
Stan Hu's avatar
Stan Hu committed
107 108 109

      it 'redirects to the new directory' do
        expect(subject).
110
            to redirect_to("/#{project.path_with_namespace}/tree/#{branch_name}/#{path}")
111
        expect(flash[:notice]).to eq('The directory has been successfully created.')
Stan Hu's avatar
Stan Hu committed
112 113 114 115 116
      end
    end

    context 'unsuccessful creation' do
      let(:path) { 'README.md' }
117
      let(:branch_name) { 'master'}
Stan Hu's avatar
Stan Hu committed
118 119 120

      it 'does not allow overwriting of existing files' do
        expect(subject).
Douwe Maan's avatar
Douwe Maan committed
121
            to redirect_to("/#{project.path_with_namespace}/tree/master")
122
        expect(flash[:alert]).to eq('A file with this name already exists')
Stan Hu's avatar
Stan Hu committed
123 124 125
      end
    end
  end
126
end