diff --git a/lib/netbox_client_ruby/api/dcim/site.rb b/lib/netbox_client_ruby/api/dcim/site.rb index a1aa2b3..2cfe6a0 100644 --- a/lib/netbox_client_ruby/api/dcim/site.rb +++ b/lib/netbox_client_ruby/api/dcim/site.rb @@ -19,6 +19,7 @@ class Site path 'dcim/sites/:id/' creation_path 'dcim/sites/' object_fields( + tenant: proc { |raw_region| Tenancy::Tenant.new raw_region['id'] }, region: proc { |raw_region| DCIM::Region.new raw_region['id'] }, status: proc do |raw_status| STATUS_VALUES.key(raw_status['value']) || raw_status['value'] diff --git a/spec/fixtures/dcim/site_1.json b/spec/fixtures/dcim/site_1.json index 58fce46..dc0eb10 100644 --- a/spec/fixtures/dcim/site_1.json +++ b/spec/fixtures/dcim/site_1.json @@ -2,8 +2,25 @@ "id": 1, "name": "test", "slug": "test", - "region": null, - "tenant": null, + "region": { + "id": 1, + "name": "region1", + "slug": "region1", + "parent": null + }, + "tenant": { + "id": 1, + "name": "tenant1", + "slug": "tenant1", + "group": null, + "description": "", + "comments": "", + "custom_fields": {} + }, + "status": { + "value": 1, + "label": "Active" + }, "facility": "", "asn": null, "physical_address": "", diff --git a/spec/netbox_client_ruby/api/dcim/site_spec.rb b/spec/netbox_client_ruby/api/dcim/site_spec.rb index a7ce4c5..18805ec 100644 --- a/spec/netbox_client_ruby/api/dcim/site_spec.rb +++ b/spec/netbox_client_ruby/api/dcim/site_spec.rb @@ -3,15 +3,15 @@ require 'spec_helper' RSpec.describe NetboxClientRuby::DCIM::Site, faraday_stub: true do - let(:site_id) { 1 } - let(:response) { File.read("spec/fixtures/dcim/site_#{site_id}.json") } - let(:request_url) { "/api/dcim/sites/#{site_id}/" } + let(:entity_id) { 1 } + let(:response) { File.read("spec/fixtures/dcim/site_#{entity_id}.json") } + let(:request_url) { "/api/dcim/sites/#{entity_id}/" } - subject { NetboxClientRuby::DCIM::Site.new site_id } + subject { described_class.new entity_id } describe '#id' do it 'shall be the expected id' do - expect(subject.id).to eq(site_id) + expect(subject.id).to eq(entity_id) end end @@ -37,6 +37,24 @@ end end + { + region: NetboxClientRuby::DCIM::Region, + tenant: NetboxClientRuby::Tenancy::Tenant, + status: Symbol + }.each_pair do |method_name, expected_type| + describe ".#{method_name}" do + it 'should fetch the data' do + expect(faraday).to receive(:get).and_call_original + + expect(subject.public_send(method_name)).to_not be_nil + end + + it 'shall return the expected type' do + expect(subject.public_send(method_name)).to be_a(expected_type) + end + end + end + describe '.delete' do let(:request_method) { :delete } let(:response_status) { 204 } @@ -76,10 +94,10 @@ let(:request_method) { :patch } subject do - site = NetboxClientRuby::DCIM::Site.new site_id - site.name = name - site.slug = slug - site + entity = described_class.new entity_id + entity.name = name + entity.slug = slug + entity end it 'does not call PATCH until save is called' do @@ -110,10 +128,10 @@ let(:request_url) { '/api/dcim/sites/' } subject do - site = NetboxClientRuby::DCIM::Site.new - site.name = name - site.slug = slug - site + entity = described_class.new + entity.name = name + entity.slug = slug + entity end it 'does not POST until save is called' do