[:preload_collections_for_objects, [] ],
[:preload_log_collections_for_objects, [] ],
[:preload_objects_for_dataclass, [] ],
+ [:preload_for_pdhs, [] ],
].each do |input|
test "preload data for empty array input #{input}" do
use_token :active
[:preload_objects_for_dataclass, nil],
[:object_for_dataclass, 'some_dataclass', nil],
[:object_for_dataclass, nil, 'some_uuid'],
+ [:preload_for_pdhs, 'input not an array'],
+ [:preload_for_pdhs, nil],
].each do |input|
test "preload data for wrong type input #{input}" do
use_token :active
[:collections_for_object, 'no-such-uuid' ],
[:log_collections_for_object, 'no-such-uuid' ],
[:object_for_dataclass, 'no-such-uuid' ],
+ [:collection_for_pdh, 'no-such-pdh' ],
].each do |input|
test "get data for no such uuid #{input}" do
use_token :active
objects = ac.send input[0], input[1]
assert objects, 'Expected objects'
assert objects.is_a?(Array), 'Expected a array'
+ assert_empty objects
end
end
end
assert users.size == 3, 'Expected two objects in the preloaded hash'
end
+ test "preload one collection each for given portable_data_hash list" do
+ use_token :active
+
+ ac = ApplicationController.new
+
+ pdh1 = api_fixture('collections')['foo_file']['portable_data_hash']
+ pdh2 = api_fixture('collections')['bar_file']['portable_data_hash']
+
+ pdhs = [pdh1, pdh2]
+ collections = ac.send :preload_for_pdhs, pdhs
+
+ assert collections, 'Expected collections map'
+ assert collections.is_a?(Hash), 'Expected a hash'
+ # Each pdh has more than one collection; however, we should get only one for each
+ assert collections.size == 2, 'Expected two objects in the preloaded collection hash'
+ assert collections[pdh1], 'Expected collections for the passed in pdh #{pdh1}'
+ assert_equal collections[pdh1].size, 1, 'Expected one collection for the passed in pdh #{pdh1}'
+ assert collections[pdh2], 'Expected collections for the passed in pdh #{pdh2}'
+ assert_equal collections[pdh2].size, 1, 'Expected one collection for the passed in pdh #{pdh2}'
+ end
+
test "requesting a nonexistent object returns 404" do
# We're really testing ApplicationController's find_object_by_uuid.
# It's easiest to do that by instantiating a concrete controller.
assert_response 404
end
+ [".navbar .login-menu a",
+ ".navbar .login-menu .dropdown-menu a"
+ ].each do |css_selector|
+ test "login link at #{css_selector.inspect} includes return_to param" do
+ # Without an anonymous token, we're immediately redirected to login.
+ Rails.configuration.anonymous_user_token =
+ api_fixture("api_client_authorizations", "anonymous", "api_token")
+ @controller = ProjectsController.new
+ test_uuid = "zzzzz-j7d0g-zzzzzzzzzzzzzzz"
+ get(:show, {id: test_uuid})
+ login_link = css_select(css_selector).first
+ assert_not_nil(login_link, "failed to select login link")
+ login_href = URI.unescape(login_link.attributes["href"])
+ # The parameter needs to include the full URL to work.
+ assert_includes(login_href, "://")
+ assert_match(/[\?&]return_to=[^&]*\/projects\/#{test_uuid}(&|$)/,
+ login_href)
+ end
+ end
+
test "Workbench returns 4xx when API server is unreachable" do
# We're really testing ApplicationController's render_exception.
# Our primary concern is that it doesn't raise an error and
end
end
end
+
+ [
+ true,
+ false,
+ ].each do |config|
+ test "invoke show with include_accept_encoding_header config #{config}" do
+ Rails.configuration.include_accept_encoding_header_in_api_requests = config
+
+ @controller = CollectionsController.new
+ get(:show, {id: api_fixture('collections')['foo_file']['uuid']}, session_for(:admin))
+
+ assert_equal([['.', 'foo', 3]], assigns(:object).files)
+ end
+ end
+
+ test 'Edit name and verify that a duplicate is not created' do
+ @controller = ProjectsController.new
+ project = api_fixture("groups")["aproject"]
+ post :update, {
+ id: project["uuid"],
+ project: {
+ name: 'test name'
+ },
+ format: :json
+ }, session_for(:active)
+ assert_includes @response.body, 'test name'
+ updated = assigns(:object)
+ assert_equal updated.uuid, project["uuid"]
+ assert_equal 'test name', updated.name
+ end
+
+ [
+ [VirtualMachinesController.new, 'hostname', false],
+ [UsersController.new, 'first_name', true],
+ ].each do |controller, expect_str, expect_home_link|
+ test "access #{controller.controller_name} index as admin and verify Home link is#{' not' if !expect_home_link} shown" do
+ @controller = controller
+
+ get :index, {}, session_for(:admin)
+
+ assert_response 200
+ assert_includes @response.body, expect_str
+
+ home_link = "/projects/#{api_fixture('users')['active']['uuid']}"
+
+ if expect_home_link
+ refute_empty css_select("[href=\"/projects/#{api_fixture('users')['active']['uuid']}\"]")
+ else
+ assert_empty css_select("[href=\"/projects/#{api_fixture('users')['active']['uuid']}\"]")
+ end
+ end
+ end
+
+ [
+ [VirtualMachinesController.new, 'hostname', true],
+ [UsersController.new, 'first_name', false],
+ ].each do |controller, expect_str, expect_delete_link|
+ test "access #{controller.controller_name} index as admin and verify Delete option is#{' not' if !expect_delete_link} shown" do
+ @controller = controller
+
+ get :index, {}, session_for(:admin)
+
+ assert_response 200
+ assert_includes @response.body, expect_str
+ if expect_delete_link
+ refute_empty css_select('[data-method=delete]')
+ else
+ assert_empty css_select('[data-method=delete]')
+ end
+ end
+ end
end