diff --git a/lib/droplet_kit/resources/project_resource.rb b/lib/droplet_kit/resources/project_resource.rb index 32fc4af1..3b98fcec 100644 --- a/lib/droplet_kit/resources/project_resource.rb +++ b/lib/droplet_kit/resources/project_resource.rb @@ -49,7 +49,7 @@ def to_urn(resources) resources.to_a.map do |resource| if resource.is_a?(String) && DropletKit::BaseModel.valid_urn?(resource) resource - elsif resource.try(:urn) && DropletKit::BaseModel.valid_urn?(resource.urn) + elsif resource.respond_to?(:urn) && resource.urn && DropletKit::BaseModel.valid_urn?(resource.urn) resource.urn else raise DropletKit::Error.new("cannot assign resource without valid urn: #{resource}") diff --git a/spec/lib/droplet_kit/resources/project_resource_spec.rb b/spec/lib/droplet_kit/resources/project_resource_spec.rb index a2683d6c..7d8fdcf8 100644 --- a/spec/lib/droplet_kit/resources/project_resource_spec.rb +++ b/spec/lib/droplet_kit/resources/project_resource_spec.rb @@ -127,4 +127,28 @@ let(:api_path) { '/v2/projects/c177dc8c-12c1-4483-af1c-877eed0f14cb/resources' } end end + + describe '#assign_resources' do + it 'calls the api when passing a valid urn' do + request = stub_do_api('/v2/projects/:id/resources', :post) + .to_return(body: '', status: 201) + + resource.assign_resources(['do:droplet:123']) + expect(request).to have_been_made + end + + it 'calls the api when passing a model than can be converted to urn' do + request = stub_do_api('/v2/projects/:id/resources', :post) + .to_return(body: '', status: 201) + + resource.assign_resources([DropletKit::Droplet.new(id: 123)]) + expect(request).to have_been_made + end + + it 'raises an error when the resouce cannot be assigned' do + expect { + resource.assign_resources(['invalid']) + }.to raise_error(DropletKit::Error, 'cannot assign resource without valid urn: invalid') + end + end end