X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f8743ac8fa1ed9dc8c7c4f7a23803ffe8721cfa6..6741a2db39cab991efd28d742071170fdbe908f2:/services/api/test/unit/arvados_model_test.rb diff --git a/services/api/test/unit/arvados_model_test.rb b/services/api/test/unit/arvados_model_test.rb index e9e872f04e..e47aa3b892 100644 --- a/services/api/test/unit/arvados_model_test.rb +++ b/services/api/test/unit/arvados_model_test.rb @@ -12,8 +12,7 @@ class ArvadosModelTest < ActiveSupport::TestCase set_user_from_auth :active_trustedclient want_uuid = Specimen.generate_uuid a = create_with_attrs(uuid: want_uuid) - assert_not_equal want_uuid, a.uuid, "Non-admin should not assign uuid." - assert a.uuid.length==27, "Auto assigned uuid length is wrong." + assert_nil a, "Non-admin should not assign uuid." end test 'admin can assign valid uuid' do @@ -24,11 +23,67 @@ class ArvadosModelTest < ActiveSupport::TestCase assert a.uuid.length==27, "Auto assigned uuid length is wrong." end + test 'admin cannot assign uuid with wrong object type' do + set_user_from_auth :admin_trustedclient + want_uuid = Human.generate_uuid + a = create_with_attrs(uuid: want_uuid) + assert_nil a, "Admin should not be able to assign invalid uuid." + end + + test 'admin cannot assign badly formed uuid' do + set_user_from_auth :admin_trustedclient + a = create_with_attrs(uuid: "ntoheunthaoesunhasoeuhtnsaoeunhtsth") + assert_nil a, "Admin should not be able to assign invalid uuid." + end + test 'admin cannot assign empty uuid' do set_user_from_auth :admin_trustedclient a = create_with_attrs(uuid: "") - assert_not_equal "", a.uuid, "Admin should not assign empty uuid." - assert a.uuid.length==27, "Auto assigned uuid length is wrong." + assert_nil a, "Admin cannot assign empty uuid." + end + + [ {:a => 'foo'}, + {'a' => :foo}, + {:a => ['foo', 'bar']}, + {'a' => [:foo, 'bar']}, + {'a' => ['foo', :bar]}, + {:a => [:foo, :bar]}, + {:a => {'foo' => {'bar' => 'baz'}}}, + {'a' => {:foo => {'bar' => 'baz'}}}, + {'a' => {'foo' => {:bar => 'baz'}}}, + {'a' => {'foo' => {'bar' => :baz}}}, + {'a' => {'foo' => ['bar', :baz]}}, + {'a' => {['foo', :foo] => ['bar', 'baz']}}, + ].each do |x| + test "refuse symbol keys in serialized attribute: #{x.inspect}" do + set_user_from_auth :admin_trustedclient + assert_nothing_raised do + Link.create!(link_class: 'test', + properties: {}) + end + assert_raises ActiveRecord::RecordInvalid do + Link.create!(link_class: 'test', + properties: x) + end + end + end + + test "Stringify symbols coming from serialized attribute in database" do + set_user_from_auth :admin_trustedclient + fixed = Link.find_by_uuid(links(:has_symbol_keys_in_database_somehow).uuid) + assert_equal(["baz", "foo"], fixed.properties.keys.sort, + "Hash symbol keys from DB did not get stringified.") + assert_equal(['waz', 'waz', 'waz', 1, nil, false, true], + fixed.properties['baz'], + "Array symbol values from DB did not get stringified.") + assert_equal true, fixed.save, "Failed to save fixed model back to db." end + test "No HashWithIndifferentAccess in database" do + set_user_from_auth :admin_trustedclient + assert_raises ActiveRecord::RecordInvalid do + Link.create!(link_class: 'test', + properties: {'foo' => 'bar'}.with_indifferent_access) + end + end end