X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3a355673427cf352fd28adb7f6279cab125c42aa..e838828374ceed5ef6da260939251e86f72b6f27:/services/api/test/unit/collection_test.rb diff --git a/services/api/test/unit/collection_test.rb b/services/api/test/unit/collection_test.rb index 8cb5bbd590..08d5b1fb72 100644 --- a/services/api/test/unit/collection_test.rb +++ b/services/api/test/unit/collection_test.rb @@ -266,6 +266,67 @@ class CollectionTest < ActiveSupport::TestCase end end + # This test exposes a bug related to JSONB attributes, see #15725. + test "recently loaded collection shouldn't list changed attributes" do + col = Collection.where("properties != '{}'::jsonb").limit(1).first + refute col.properties_changed?, 'Properties field should not be seen as changed' + end + + [ + [ + true, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + {:foo=>:bar, :lst=>[1, 3, 5, 7], :hsh=>{'baz'=>'qux', :foobar=>true, 'hsh'=>{:nested=>true}}, :delete_at=>nil}, + ], + [ + true, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + {'delete_at'=>nil, 'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}}, + ], + [ + true, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + {'delete_at'=>nil, 'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'foobar'=>true, 'hsh'=>{'nested'=>true}, 'baz'=>'qux'}}, + ], + [ + false, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 42], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + ], + [ + false, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + {'foo'=>'bar', 'lst'=>[1, 3, 7, 5], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + ], + [ + false, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>false}}, 'delete_at'=>nil}, + ], + [ + false, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>nil}, + {'foo'=>'bar', 'lst'=>[1, 3, 5, 7], 'hsh'=>{'baz'=>'qux', 'foobar'=>true, 'hsh'=>{'nested'=>true}}, 'delete_at'=>1234567890}, + ], + ].each do |should_be_equal, value_1, value_2| + test "JSONB properties #{value_1} is#{should_be_equal ? '' : ' not'} equal to #{value_2}" do + act_as_user users(:active) do + # Set up initial collection + c = create_collection 'foo', Encoding::US_ASCII + assert c.valid? + c.update_attributes!({'properties' => value_1}) + c.reload + assert c.changes.keys.empty? + c.properties = value_2 + if should_be_equal + assert c.changes.keys.empty?, "Properties #{value_1.inspect} should be equal to #{value_2.inspect}" + else + refute c.changes.keys.empty?, "Properties #{value_1.inspect} should not be equal to #{value_2.inspect}" + end + end + end + end + test "older versions' modified_at indicate when they're created" do Rails.configuration.Collections.CollectionVersioning = true Rails.configuration.Collections.PreserveVersionIfIdle = 0 @@ -334,7 +395,6 @@ class CollectionTest < ActiveSupport::TestCase ['owner_uuid', 'zzzzz-tpzed-d9tiejq69daie8f', 'zzzzz-tpzed-xurymjxw79nv3jz'], ['replication_desired', 2, 3], ['storage_classes_desired', ['hot'], ['archive']], - ['is_trashed', true, false], ].each do |attr, first_val, second_val| test "sync #{attr} with older versions" do Rails.configuration.Collections.CollectionVersioning = true