Merge branch 'master' into 3686-sharing-repositories
[arvados.git] / apps / workbench / test / controllers / repositories_controller_test.rb
index 15d28bfee65cab84c0966a199f288b05ee2f2660..e45095c64c2b7d4e865bf2b81bc5553aef854083 100644 (file)
@@ -1,4 +1,48 @@
 require 'test_helper'
+require 'helpers/share_object_helper'
 
 class RepositoriesControllerTest < ActionController::TestCase
+  include ShareObjectHelper
+
+  [
+    :active, #owner
+    :admin,
+  ].each do |user|
+    test "#{user} shares repository with a user and group" do
+      uuid_list = [api_fixture("groups")["future_project_viewing_group"]["uuid"],
+                   api_fixture("users")["future_project_user"]["uuid"]]
+      post(:share_with, {
+             id: api_fixture("repositories")["foo"]["uuid"],
+             uuids: uuid_list,
+             format: "json"},
+           session_for(user))
+      assert_response :success
+      assert_equal(uuid_list, json_response["success"])
+    end
+  end
+
+  test "user with repository read permission cannot add permissions" do
+    share_uuid = api_fixture("users")["project_viewer"]["uuid"]
+    post(:share_with, {
+           id: api_fixture("repositories")["arvados"]["uuid"],
+           uuids: [share_uuid],
+           format: "json"},
+         session_for(:spectator))
+    assert_response 422
+    assert(json_response["errors"].andand.
+             any? { |msg| msg.start_with?("#{share_uuid}: ") },
+           "JSON response missing properly formatted sharing error")
+  end
+
+  test "admin can_manage repository" do
+    assert user_can_manage(:admin, api_fixture("repositories")["foo"])
+  end
+
+  test "owner can_manage repository" do
+    assert user_can_manage(:active, api_fixture("repositories")["foo"])
+  end
+
+  test "viewer cannot manage repository" do
+    refute user_can_manage(:spectator, api_fixture("repositories")["arvados"])
+  end
 end