2 require 'helpers/repository_stub_helper'
3 require 'helpers/share_object_helper'
5 class RepositoriesControllerTest < ActionController::TestCase
6 include RepositoryStubHelper
7 include ShareObjectHelper
13 test "#{user} shares repository with a user and group" do
14 uuid_list = [api_fixture("groups")["future_project_viewing_group"]["uuid"],
15 api_fixture("users")["future_project_user"]["uuid"]]
17 id: api_fixture("repositories")["foo"]["uuid"],
21 assert_response :success
22 assert_equal(uuid_list, json_response["success"])
26 test "user with repository read permission cannot add permissions" do
27 share_uuid = api_fixture("users")["project_viewer"]["uuid"]
29 id: api_fixture("repositories")["arvados"]["uuid"],
32 session_for(:spectator))
34 assert(json_response["errors"].andand.
35 any? { |msg| msg.start_with?("#{share_uuid}: ") },
36 "JSON response missing properly formatted sharing error")
39 test "admin can_manage repository" do
40 assert user_can_manage(:admin, api_fixture("repositories")["foo"])
43 test "owner can_manage repository" do
44 assert user_can_manage(:active, api_fixture("repositories")["foo"])
47 test "viewer cannot manage repository" do
48 refute user_can_manage(:spectator, api_fixture("repositories")["arvados"])
52 [:active, ['#Sharing', '#Advanced']],
53 [:admin, ['#Attributes', '#Sharing', '#Advanced']],
54 ].each do |user, expected_panes|
55 test "#{user} sees panes #{expected_panes}" do
57 id: api_fixture('repositories')['foo']['uuid']
59 assert_response :success
61 panes = css_select('[data-toggle=tab]').each do |pane|
62 pane_name = pane.attributes['href']
63 assert_includes expected_panes, pane_name
68 ### Browse repository content
70 [:active, :spectator].each do |user|
71 test "show tree to #{user}" do
72 skip "git2 is unreliable" if Repository.disable_repository_browsing?
73 reset_api_fixtures_after_test false
74 sha1, _, _ = stub_repo_content
76 id: api_fixture('repositories')['foo']['uuid'],
79 assert_response :success
80 assert_select 'tr td a', 'COPYING'
81 assert_select 'tr td', '625 bytes'
82 assert_select 'tr td a', 'apps'
83 assert_select 'tr td a', 'workbench'
84 assert_select 'tr td a', 'Gemfile'
85 assert_select 'tr td', '33.7 KiB'
88 test "show commit to #{user}" do
89 skip "git2 is unreliable" if Repository.disable_repository_browsing?
90 reset_api_fixtures_after_test false
91 sha1, commit, _ = stub_repo_content
93 id: api_fixture('repositories')['foo']['uuid'],
96 assert_response :success
97 assert_select 'pre', h(commit)
100 test "show blob to #{user}" do
101 skip "git2 is unreliable" if Repository.disable_repository_browsing?
102 reset_api_fixtures_after_test false
103 sha1, _, filedata = stub_repo_content filename: 'COPYING'
105 id: api_fixture('repositories')['foo']['uuid'],
109 assert_response :success
110 assert_select 'pre', h(filedata)
114 ['', '/'].each do |path|
115 test "show tree with path '#{path}'" do
116 skip "git2 is unreliable" if Repository.disable_repository_browsing?
117 reset_api_fixtures_after_test false
118 sha1, _, _ = stub_repo_content filename: 'COPYING'
120 id: api_fixture('repositories')['foo']['uuid'],
123 }, session_for(:active)
124 assert_response :success
125 assert_select 'tr td', 'COPYING'