14287: Merge branch 'master'
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 27 Jun 2019 14:50:58 +0000 (10:50 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Thu, 27 Jun 2019 14:50:58 +0000 (10:50 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

1  2 
build/run-tests.sh
lib/config/config.default.yml
lib/config/export.go
lib/config/generated_config.go
sdk/go/arvados/config.go
services/api/app/models/collection.rb
services/api/test/unit/collection_test.rb

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index e75ad5d7731ebf9c88f5f1946852f22f5f7abf12,c2bf94fe73a2d85f45c23ca1dbc7a8dcda25a8c9..2dd6eedcfbc4b20c9a386d2473f6d90e0a415fbe
@@@ -1013,20 -1013,64 +1013,81 @@@ class CollectionTest < ActiveSupport::T
      assert_empty Collection.where(uuid: uuid)
    end
  
 +  test "empty names are exempt from name uniqueness" do
 +    act_as_user users(:active) do
 +      c1 = Collection.new(name: nil, manifest_text: '', owner_uuid: groups(:aproject).uuid)
 +      assert c1.save
 +      c2 = Collection.new(name: '', manifest_text: '', owner_uuid: groups(:aproject).uuid)
 +      assert c2.save
 +      c3 = Collection.new(name: '', manifest_text: '', owner_uuid: groups(:aproject).uuid)
 +      assert c3.save
 +      c4 = Collection.new(name: 'c4', manifest_text: '', owner_uuid: groups(:aproject).uuid)
 +      assert c4.save
 +      c5 = Collection.new(name: 'c4', manifest_text: '', owner_uuid: groups(:aproject).uuid)
 +      assert_raises(ActiveRecord::RecordNotUnique) do
 +        c5.save
 +      end
 +    end
 +  end
++
+   test "create collections with managed properties" do
+     Rails.configuration.Collections.ManagedProperties = {
+       'default_prop1' => {'Value' => 'prop1_value'},
+       'responsible_person_uuid' => {'Function' => 'original_owner'}
+     }
+     # Test collection without initial properties
+     act_as_user users(:active) do
+       c = create_collection 'foo', Encoding::US_ASCII
+       assert c.valid?
+       assert_not_empty c.properties
+       assert_equal 'prop1_value', c.properties['default_prop1']
+       assert_equal users(:active).uuid, c.properties['responsible_person_uuid']
+     end
+     # Test collection with default_prop1 property already set
+     act_as_user users(:active) do
+       c = Collection.create(manifest_text: ". d41d8cd98f00b204e9800998ecf8427e 0:34:foo.txt\n",
+                             properties: {'default_prop1' => 'custom_value'})
+       assert c.valid?
+       assert_not_empty c.properties
+       assert_equal 'custom_value', c.properties['default_prop1']
+       assert_equal users(:active).uuid, c.properties['responsible_person_uuid']
+     end
+     # Test collection inside a sub project
+     act_as_user users(:active) do
+       c = Collection.create(manifest_text: ". d41d8cd98f00b204e9800998ecf8427e 0:34:foo.txt\n",
+                             owner_uuid: groups(:asubproject).uuid)
+       assert c.valid?
+       assert_not_empty c.properties
+       assert_equal users(:active).uuid, c.properties['responsible_person_uuid']
+     end
+   end
+   test "update collection with protected managed properties" do
+     Rails.configuration.Collections.ManagedProperties = {
+       'default_prop1' => {'Value' => 'prop1_value', 'Protected' => true},
+     }
+     act_as_user users(:active) do
+       c = create_collection 'foo', Encoding::US_ASCII
+       assert c.valid?
+       assert_not_empty c.properties
+       assert_equal 'prop1_value', c.properties['default_prop1']
+       # Add new property
+       c.properties['prop2'] = 'value2'
+       c.save!
+       c.reload
+       assert_equal 'value2', c.properties['prop2']
+       # Try to change protected property's value
+       c.properties['default_prop1'] = 'new_value'
+       assert_raises(ArvadosModel::PermissionDeniedError) do
+         c.save!
+       end
+       # Admins are allowed to change protected properties
+       act_as_system_user do
+         c.properties['default_prop1'] = 'new_value'
+         c.save!
+         c.reload
+         assert_equal 'new_value', c.properties['default_prop1']
+       end
+     end
+   end
  end