+
+ NON_ADMIN_USER_DATA = ["uuid", "kind", "is_active", "email", "first_name",
+ "last_name"].sort
+
+ def check_non_admin_index
+ assert_response :success
+ response_items = json_response["items"]
+ assert_not_nil response_items
+ response_items.each do |user_data|
+ check_non_admin_item user_data
+ assert(user_data["is_active"], "non-admin index returned inactive user")
+ end
+ end
+
+ def check_non_admin_show
+ assert_response :success
+ check_non_admin_item json_response
+ end
+
+ def check_non_admin_item user_data
+ assert_equal(NON_ADMIN_USER_DATA, user_data.keys.sort,
+ "data in response had missing or extra attributes")
+ assert_equal("arvados#user", user_data["kind"])
+ end
+
+
+ def check_readable_users_index expect_present, expect_missing
+ response_uuids = json_response["items"].map { |u| u["uuid"] }
+ expect_present.each do |user_key|
+ assert_includes(response_uuids, users(user_key).uuid,
+ "#{user_key} missing from index")
+ end
+ expect_missing.each do |user_key|
+ refute_includes(response_uuids, users(user_key).uuid,
+ "#{user_key} included in index")
+ end
+ end
+
+ def check_inactive_user_findable(params={})
+ inactive_user = users(:inactive)
+ get(:index, params.merge(filters: [["email", "=", inactive_user.email]]))
+ assert_response :success
+ user_list = json_response["items"]
+ assert_equal(1, user_list.andand.count)
+ # This test needs to check a column non-admins have no access to,
+ # to ensure that admins see all user information.
+ assert_equal(inactive_user.identity_url, user_list.first["identity_url"],
+ "admin's filtered index did not return inactive user")
+ end
+
+ def verify_num_links (original_links, expected_additional_links)
+ links_now = Link.all
+ assert_equal expected_additional_links, Link.all.size-original_links.size,
+ "Expected #{expected_additional_links.inspect} more links"
+ end
+
+ def find_obj_in_resp (response_items, object_type, head_kind=nil)
+ return_obj = nil
+ response_items
+ response_items.each { |x|
+ if !x
+ next
+ end
+
+ if object_type == 'User'
+ if ArvadosModel::resource_class_for_uuid(x['uuid']) == User
+ return_obj = x
+ break
+ end
+ else # looking for a link
+ if x['head_uuid'] and ArvadosModel::resource_class_for_uuid(x['head_uuid']).kind == head_kind
+ return_obj = x
+ break
+ end
+ end
+ }
+ return return_obj
+ end