Fix extra row left behind after deleting a pipeline instance. closes #2929
[arvados.git] / apps / workbench / test / functional / projects_controller_test.rb
1 require 'test_helper'
2
3 class ProjectsControllerTest < ActionController::TestCase
4   test "inactive user is asked to sign user agreements on front page" do
5     get :index, {}, session_for(:inactive)
6     assert_response :success
7     assert_not_empty assigns(:required_user_agreements),
8     "Inactive user did not have required_user_agreements"
9     assert_template 'user_agreements/index',
10     "Inactive user was not presented with a user agreement at the front page"
11   end
12
13   [[:active, true],
14    [:project_viewer, false]].each do |which_user, should_show|
15     test "create subproject button #{'not ' unless should_show} shown to #{which_user}" do
16       readonly_project_uuid = api_fixture('groups')['aproject']['uuid']
17       get :show, {
18         id: readonly_project_uuid
19       }, session_for(which_user)
20       buttons = css_select('[data-method=post]').select do |el|
21         el.attributes['href'].match /project.*owner_uuid.*#{readonly_project_uuid}/
22       end
23       if should_show
24         assert_not_empty(buttons, "did not offer to create a subproject")
25       else
26         assert_empty(buttons.collect(&:to_s),
27                      "offered to create a subproject in a non-writable project")
28       end
29     end
30   end
31
32   test "sharing a project with a user and group" do
33     uuid_list = [api_fixture("groups")["future_project_viewing_group"]["uuid"],
34                  api_fixture("users")["future_project_user"]["uuid"]]
35     post(:share_with, {
36            id: api_fixture("groups")["asubproject"]["uuid"],
37            uuids: uuid_list,
38            format: "json"},
39          session_for(:active))
40     assert_response :success
41     json_response = Oj.load(@response.body)
42     assert_equal(uuid_list, json_response["success"])
43   end
44
45   test "user with project read permission can't add permissions" do
46     post(:share_with, {
47            id: api_fixture("groups")["aproject"]["uuid"],
48            uuids: [api_fixture("users")["spectator"]["uuid"]],
49            format: "json"},
50          session_for(:project_viewer))
51     assert_response 422
52   end
53
54   def user_can_manage(user_sym, group_key)
55     get(:show, {id: api_fixture("groups")[group_key]["uuid"]},
56         session_for(user_sym))
57     is_manager = assigns(:user_is_manager)
58     assert_not_nil(is_manager, "user_is_manager flag not set")
59     if not is_manager
60       assert_empty(assigns(:share_links),
61                    "non-manager has share links set")
62     end
63     is_manager
64   end
65
66   test "admin can_manage aproject" do
67     assert user_can_manage(:admin, "aproject")
68   end
69
70   test "owner can_manage aproject" do
71     assert user_can_manage(:active, "aproject")
72   end
73
74   test "owner can_manage asubproject" do
75     assert user_can_manage(:active, "asubproject")
76   end
77
78   test "viewer can't manage aproject" do
79     refute user_can_manage(:project_viewer, "aproject")
80   end
81
82   test "viewer can't manage asubproject" do
83     refute user_can_manage(:project_viewer, "asubproject")
84   end
85 end