Merge branch 'master' into 3889-functional-testing
[arvados.git] / services / api / test / functional / arvados / v1 / groups_controller_test.rb
index 6fa1d16770e683bd53b809e6d00ed659cfede58a..59dcd2b5721ff0f44ff3bf666c7e81e0a50b7fe5 100644 (file)
@@ -31,11 +31,11 @@ class Arvados::V1::GroupsControllerTest < ActionController::TestCase
 
   test "get list of groups that are not projects" do
     authorize_with :active
-    get :index, filters: [['group_class', '=', nil]], format: :json
+    get :index, filters: [['group_class', '!=', 'project']], format: :json
     assert_response :success
     group_uuids = []
     json_response['items'].each do |group|
-      assert_equal nil, group['group_class']
+      assert_not_equal 'project', group['group_class']
       group_uuids << group['uuid']
     end
     assert_not_includes group_uuids, groups(:aproject).uuid
@@ -239,16 +239,14 @@ class Arvados::V1::GroupsControllerTest < ActionController::TestCase
     assert_equal 0, json_response['items_available']
   end
 
-  test "get all pages of group-owned objects" do
-    authorize_with :active
-    limit = 5
-    offset = 0
-    items_available = nil
-    uuid_received = {}
-    owner_received = {}
-    while true
-      # Behaving badly here, using the same controller multiple
-      # times within a test.
+  [0, 5, 10, 15, 20].each do |offset|
+    test "get pages of group-owned objects with offset #{offset}" do
+      authorize_with :active
+      limit = 5
+      items_available = nil
+      uuid_received = {}
+      owner_received = {}
+
       @json_response = nil
       get :contents, {
         id: groups(:aproject).uuid,
@@ -257,23 +255,28 @@ class Arvados::V1::GroupsControllerTest < ActionController::TestCase
         format: :json,
       }
       assert_response :success
-      assert_operator(0, :<, json_response['items'].count,
-                      "items_available=#{items_available} but received 0 "\
-                      "items with offset=#{offset}")
       items_available ||= json_response['items_available']
-      assert_equal(items_available, json_response['items_available'],
-                   "items_available changed between page #{offset/limit} "\
-                   "and page #{1+offset/limit}")
-      json_response['items'].each do |item|
-        uuid = item['uuid']
-        assert_equal(nil, uuid_received[uuid],
-                     "Received '#{uuid}' again on page #{1+offset/limit}")
-        uuid_received[uuid] = true
-        owner_received[item['owner_uuid']] = true
-        offset += 1
-        assert_equal groups(:aproject).uuid, item['owner_uuid']
+      if offset >= items_available
+        assert_equal(0, json_response['items'].count,
+                      "items_available=#{items_available} but received #{json_response['items']} "\
+                      "items with offset=#{offset}")
+      else
+        assert_operator(0, :<, json_response['items'].count,
+                        "items_available=#{items_available} but received  "\
+                        "items with offset=#{offset}")
+        assert_equal(items_available, json_response['items_available'],
+                     "items_available changed between page #{offset/limit} "\
+                     "and page #{1+offset/limit}")
+        json_response['items'].each do |item|
+          uuid = item['uuid']
+          assert_equal(nil, uuid_received[uuid],
+                       "Received '#{uuid}' again on page #{1+offset/limit}")
+          uuid_received[uuid] = true
+          owner_received[item['owner_uuid']] = true
+          offset += 1
+          assert_equal groups(:aproject).uuid, item['owner_uuid']
+        end
       end
-      break if offset >= items_available
     end
   end
 
@@ -311,8 +314,9 @@ class Arvados::V1::GroupsControllerTest < ActionController::TestCase
       format: :json
     }
     assert_response :success
-    assert_nil(json_response['writable_by'],
-               "Should not receive uuid list in 'writable_by' field")
+    assert_equal([json_response['owner_uuid']],
+                 json_response['writable_by'],
+                 "Should only see owner_uuid in 'writable_by' field")
   end
 
   test 'get writable_by list by admin user' do