X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/83304d43227dce877cc86d87f8f25463a4fac096..f7e3001b53e9f26fd1d413308093bb9700bb9287:/services/api/test/unit/arvados_model_test.rb?ds=sidebyside diff --git a/services/api/test/unit/arvados_model_test.rb b/services/api/test/unit/arvados_model_test.rb index f7db88c7b8..ca9198fd98 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,14 +23,33 @@ 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]}}, @@ -68,4 +86,62 @@ class ArvadosModelTest < ActiveSupport::TestCase properties: {'foo' => 'bar'}.with_indifferent_access) end end + + test "unique uuid index exists on all models with the column uuid" do + tables = ActiveRecord::Base.connection.tables + tables.each do |table| + columns = ActiveRecord::Base.connection.columns(table) + + uuid_column = columns.select do |column| + column.name == 'uuid' + end + + if !uuid_column.empty? + indexes = ActiveRecord::Base.connection.indexes(table) + uuid_index = indexes.select do |index| + index.columns == ['uuid'] and index.unique == true + end + + assert !uuid_index.empty?, "#{table} does not have unique uuid index" + end + end + end + + test "owner uuid index exists on all models with the owner_uuid column" do + all_tables = ActiveRecord::Base.connection.tables + + all_tables.each do |table| + columns = ActiveRecord::Base.connection.columns(table) + + uuid_column = columns.select do |column| + column.name == 'owner_uuid' + end + + if !uuid_column.empty? + indexes = ActiveRecord::Base.connection.indexes(table) + owner_uuid_index = indexes.select do |index| + index.columns == ['owner_uuid'] + end + assert !owner_uuid_index.empty?, "#{table} does not have owner_uuid index" + end + end + end + + test "search index exists on models that go into projects" do + all_tables = ActiveRecord::Base.connection.tables + all_tables.delete 'schema_migrations' + + all_tables.each do |table| + table_class = table.classify.constantize + if table_class.respond_to?('searchable_columns') + search_index_columns = table_class.searchable_columns('ilike') + + indexes = ActiveRecord::Base.connection.indexes(table) + search_index = indexes.select do |index| + index.columns == search_index_columns + end + assert !search_index.empty?, "#{table} does not have search index with all searchable columns #{search_index_columns}" + end + end + end end