X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/55b94087ff4590c54cf1f43d941c6cb24153dded..40df5992d4d8071a6e10a20ecdeb0470a80764cc:/apps/workbench/test/functional/application_controller_test.rb diff --git a/apps/workbench/test/functional/application_controller_test.rb b/apps/workbench/test/functional/application_controller_test.rb index 8b6270da3f..f3dbcb523b 100644 --- a/apps/workbench/test/functional/application_controller_test.rb +++ b/apps/workbench/test/functional/application_controller_test.rb @@ -2,6 +2,10 @@ require 'test_helper' class ApplicationControllerTest < ActionController::TestCase + setup do + @user_dataclass = ArvadosBase.resource_class_for_uuid(api_fixture('users')['active']['uuid']) + end + test "links for object" do use_token :active @@ -17,37 +21,7 @@ class ApplicationControllerTest < ActionController::TestCase assert links[0][:uuid], 'Expected uuid for the head_link' end - test "links for no such object" do - use_token :active - - ac = ApplicationController.new - - links = ac.send :links_for_object, "no-such-uuid" - - assert links, 'Expected links' - assert links.is_a?(Array), 'Expected an array' - assert links.size == 0, 'Expected no links' - end - - test "preload links for given uuids" do - use_token :active - - ac = ApplicationController.new - - link_head_uuid1 = api_fixture('links')['foo_file_readable_by_active']['head_uuid'] - link_head_uuid2 = api_fixture('links')['bar_file_readable_by_active']['head_uuid'] - - uuids = [link_head_uuid1, link_head_uuid2] - links = ac.send :preload_links_for_objects, uuids - - assert links, 'Expected links' - assert links.is_a?(Hash), 'Expected a hash' - assert links.size == 2, 'Expected two objects in the preloaded links hash' - assert links[link_head_uuid1], 'Expected links for the passed in head_uuid' - assert links[link_head_uuid2], 'Expected links for the passed in head_uuid' - end - - test "preload links for object and uuids" do + test "preload links for objects and uuids" do use_token :active ac = ApplicationController.new @@ -68,38 +42,87 @@ class ApplicationControllerTest < ActionController::TestCase assert links[link1_head_uuid], 'Expected links for the passed in link head_uuid' assert links[link2_object_uuid], 'Expected links for the passed in object uuid' assert links[link3_head_uuid], 'Expected links for the passed in link head_uuid' - end - - test "preload links for wrong typed input" do - use_token :active - ac = ApplicationController.new + # invoke again for this same input. this time, the preloaded data will be returned + links = ac.send :preload_links_for_objects, uuids + assert links, 'Expected links' + assert links.is_a?(Hash), 'Expected a hash' + assert links.size == 3, 'Expected two objects in the preloaded links hash' + assert links[link1_head_uuid], 'Expected links for the passed in link head_uuid' + end - assert_raise ArgumentError do - ac.send :preload_links_for_objects, 'input not an array' + [ [:preload_links_for_objects, [] ], + [:preload_collections_for_objects, [] ], + [:preload_log_collections_for_objects, [] ], + [:preload_objects_for_dataclass, [] ], + ].each do |input| + test "preload data for empty array input #{input}" do + use_token :active + + ac = ApplicationController.new + + if input[0] == :preload_objects_for_dataclass + objects = ac.send input[0], @user_dataclass, input[1] + else + objects = ac.send input[0], input[1] + end + + assert objects, 'Expected objects' + assert objects.is_a?(Hash), 'Expected a hash' + assert objects.size == 0, 'Expected no objects in the preloaded hash' end end - test "preload links for nil input" do - use_token :active - - ac = ApplicationController.new - - assert_raise ArgumentError do - ac.send :preload_links_for_objects, nil + [ [:preload_links_for_objects, 'input not an array'], + [:preload_links_for_objects, nil], + [:links_for_object, nil], + [:preload_collections_for_objects, 'input not an array'], + [:preload_collections_for_objects, nil], + [:collections_for_object, nil], + [:preload_log_collections_for_objects, 'input not an array'], + [:preload_log_collections_for_objects, nil], + [:log_collections_for_object, nil], + [:preload_objects_for_dataclass, 'input not an array'], + [:preload_objects_for_dataclass, nil], + [:object_for_dataclass, 'some_dataclass', nil], + [:object_for_dataclass, nil, 'some_uuid'], + ].each do |input| + test "preload data for wrong type input #{input}" do + use_token :active + + ac = ApplicationController.new + + if input[0] == :object_for_dataclass + assert_raise ArgumentError do + ac.send input[0], input[1], input[2] + end + else + assert_raise ArgumentError do + ac.send input[0], input[1] + end + end end end - test "preload links for empty array input" do - use_token :active - - ac = ApplicationController.new - - links = ac.send :preload_links_for_objects, [] - - assert links, 'Expected links' - assert links.is_a?(Hash), 'Expected a hash' - assert links.size == 0, 'Expected no objects in the preloaded links hash' + [ [:links_for_object, 'no-such-uuid' ], + [:collections_for_object, 'no-such-uuid' ], + [:log_collections_for_object, 'no-such-uuid' ], + [:object_for_dataclass, 'no-such-uuid' ], + ].each do |input| + test "get data for no such uuid #{input}" do + use_token :active + + ac = ApplicationController.new + + if input[0] == :object_for_dataclass + object = ac.send input[0], @user_dataclass, input[1] + assert_not object, 'Expected no object' + else + objects = ac.send input[0], input[1] + assert objects, 'Expected objects' + assert objects.is_a?(Array), 'Expected a array' + end + end end test "get 10 objects of data class user" do @@ -107,10 +130,7 @@ class ApplicationControllerTest < ActionController::TestCase ac = ApplicationController.new - uuid = api_fixture('users')['active']['uuid'] - - dataclass = ArvadosBase.resource_class_for_uuid(uuid) - objects = ac.send :get_n_objects_of_class, dataclass, 10 + objects = ac.send :get_n_objects_of_class, @user_dataclass, 10 assert objects, 'Expected objects' assert objects.is_a?(ArvadosResourceList), 'Expected an ArvadosResourceList' @@ -120,65 +140,77 @@ class ApplicationControllerTest < ActionController::TestCase assert_equal 'User', first_object.class.name, 'Expected user object' # invoke it again. this time, the preloaded info will be returned - objects = ac.send :get_n_objects_of_class, dataclass, 10 + objects = ac.send :get_n_objects_of_class, @user_dataclass, 10 assert objects, 'Expected objects' assert_equal 'User', objects.first.class.name, 'Expected user object' end - test "get objects for incorrect input" do - use_token :active + [ ['User', 10], + [nil, 10], + [@user_dataclass, 0], + [@user_dataclass, -1], + [@user_dataclass, nil] ].each do |input| + test "get_n_objects for incorrect input #{input}" do + use_token :active - ac = ApplicationController.new + ac = ApplicationController.new - assert_raise ArgumentError do - ac.send :get_n_objects_of_class, 'User', 10 + assert_raise ArgumentError do + ac.send :get_n_objects_of_class, input[0], input[1] + end end end - test "get objects for nil data class" do + test "collections for object" do use_token :active ac = ApplicationController.new - assert_raise ArgumentError do - ac.send :get_n_objects_of_class, nil, 10 - end - end - - test "get objects of data class user with no limit specified" do - use_token :active - - ac = ApplicationController.new + uuid = api_fixture('collections')['foo_file']['uuid'] - uuid = api_fixture('users')['active']['uuid'] + collections = ac.send :collections_for_object, uuid - dataclass = ArvadosBase.resource_class_for_uuid(uuid) - assert_raise ArgumentError do - ac.send :get_n_objects_of_class, dataclass - end + assert collections, 'Expected collections' + assert collections.is_a?(Array), 'Expected an array' + assert collections.size == 1, 'Expected one collection object' + assert_equal collections[0][:uuid], uuid, 'Expected uuid not found in collections' end - test "get objects of data class user with incorrect limit size" do + test "preload collections for given uuids" do use_token :active ac = ApplicationController.new - uuid = api_fixture('users')['active']['uuid'] + uuid1 = api_fixture('collections')['foo_file']['uuid'] + uuid2 = api_fixture('collections')['bar_file']['uuid'] + + uuids = [uuid1, uuid2] + collections = ac.send :preload_collections_for_objects, uuids - dataclass = ArvadosBase.resource_class_for_uuid(uuid) - assert_raise ArgumentError do - ac.send :get_n_objects_of_class, dataclass, 0 - end + assert collections, 'Expected collection' + assert collections.is_a?(Hash), 'Expected a hash' + assert collections.size == 2, 'Expected two objects in the preloaded collection hash' + assert collections[uuid1], 'Expected collections for the passed in uuid' + assert_equal collections[uuid1].size, 1, 'Expected one collection for the passed in uuid' + assert collections[uuid2], 'Expected collections for the passed in uuid' + assert_equal collections[uuid2].size, 1, 'Expected one collection for the passed in uuid' + + # invoke again for this same input. this time, the preloaded data will be returned + collections = ac.send :preload_collections_for_objects, uuids + assert collections, 'Expected collection' + assert collections.is_a?(Hash), 'Expected a hash' + assert collections.size == 2, 'Expected two objects in the preloaded collection hash' + assert collections[uuid1], 'Expected collections for the passed in uuid' end - test "collections for object" do + test "log collections for object" do use_token :active ac = ApplicationController.new - uuid = api_fixture('collections')['foo_file']['uuid'] + uuid = api_fixture('logs')['log4']['object_uuid'] - collections = ac.send :collections_for_object, uuid + collections = ac.send :log_collections_for_object, uuid assert collections, 'Expected collections' assert collections.is_a?(Array), 'Expected an array' @@ -186,28 +218,16 @@ class ApplicationControllerTest < ActionController::TestCase assert_equal collections[0][:uuid], uuid, 'Expected uuid not found in collections' end - test "collections for no such object" do + test "preload log collections for given uuids" do use_token :active ac = ApplicationController.new - collections = ac.send :collections_for_object, "no-such-uuid" - - assert collections, 'Expected collections' - assert collections.is_a?(Array), 'Expected an array' - assert collections.size == 0, 'Expected no collection' - end - - test "preload collections for given uuids" do - use_token :active - - ac = ApplicationController.new - - uuid1 = api_fixture('collections')['foo_file']['uuid'] + uuid1 = api_fixture('logs')['log4']['object_uuid'] uuid2 = api_fixture('collections')['bar_file']['uuid'] uuids = [uuid1, uuid2] - collections = ac.send :preload_collections_for_objects, uuids + collections = ac.send :preload_log_collections_for_objects, uuids assert collections, 'Expected collection' assert collections.is_a?(Hash), 'Expected a hash' @@ -216,37 +236,64 @@ class ApplicationControllerTest < ActionController::TestCase assert_equal collections[uuid1].size, 1, 'Expected one collection for the passed in uuid' assert collections[uuid2], 'Expected collections for the passed in uuid' assert_equal collections[uuid2].size, 1, 'Expected one collection for the passed in uuid' + + # invoke again for this same input. this time, the preloaded data will be returned + collections = ac.send :preload_log_collections_for_objects, uuids + assert collections, 'Expected collection' + assert collections.is_a?(Hash), 'Expected a hash' + assert collections.size == 2, 'Expected two objects in the preloaded collection hash' + assert collections[uuid1], 'Expected collections for the passed in uuid' end - test "preload collections for wrong typed input" do + test "object for dataclass" do use_token :active ac = ApplicationController.new - assert_raise ArgumentError do - ac.send :preload_collections_for_objects, 'input not an array' - end - end - - test "preload collections for nil input" do - use_token :active + dataclass = ArvadosBase.resource_class_for_uuid(api_fixture('jobs')['running']['uuid']) + uuid = api_fixture('jobs')['running']['uuid'] - ac = ApplicationController.new + obj = ac.send :object_for_dataclass, dataclass, uuid - assert_raise ArgumentError do - ac.send :preload_collections_for_objects, nil - end + assert obj, 'Expected object' + assert 'Job', obj.class + assert_equal uuid, obj['uuid'], 'Expected uuid not found' + assert_equal api_fixture('jobs')['running']['script_version'], obj['script_version'], + 'Expected script_version not found' end - test "preload collections for empty array input" do + test "preload objects for dataclass" do use_token :active ac = ApplicationController.new - collections = ac.send :preload_links_for_objects, [] + dataclass = ArvadosBase.resource_class_for_uuid(api_fixture('jobs')['running']['uuid']) - assert collections, 'Expected collections' - assert collections.is_a?(Hash), 'Expected a hash' - assert collections.size == 0, 'Expected no objects in the preloaded collections hash' + uuid1 = api_fixture('jobs')['running']['uuid'] + uuid2 = api_fixture('jobs')['running_cancelled']['uuid'] + + uuids = [uuid1, uuid2] + users = ac.send :preload_objects_for_dataclass, dataclass, uuids + + assert users, 'Expected objects' + assert users.is_a?(Hash), 'Expected a hash' + + assert users.size == 2, 'Expected two objects in the preloaded hash' + assert users[uuid1], 'Expected user object for the passed in uuid' + assert users[uuid2], 'Expected user object for the passed in uuid' + + # invoke again for this same input. this time, the preloaded data will be returned + users = ac.send :preload_objects_for_dataclass, dataclass, uuids + assert users, 'Expected objects' + assert users.is_a?(Hash), 'Expected a hash' + assert users.size == 2, 'Expected two objects in the preloaded hash' + + # invoke again for this with one more uuid + uuids << api_fixture('jobs')['foobar']['uuid'] + users = ac.send :preload_objects_for_dataclass, dataclass, uuids + assert users, 'Expected objects' + assert users.is_a?(Hash), 'Expected a hash' + assert users.size == 3, 'Expected two objects in the preloaded hash' end + end