From 324eb9960d988b643c0dba2d7631106aadd23a16 Mon Sep 17 00:00:00 2001 From: Brian French Date: Sun, 2 Mar 2025 18:39:35 -0500 Subject: [PATCH 1/3] Adds tenant as an object_field to site. --- lib/netbox_client_ruby/api/dcim/site.rb | 1 + 1 file changed, 1 insertion(+) 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'] From 5337d265959a4deec7997f259701178cca01b7f1 Mon Sep 17 00:00:00 2001 From: Brian French Date: Sun, 2 Mar 2025 19:22:37 -0500 Subject: [PATCH 2/3] Adding tests for object_fields. --- spec/fixtures/dcim/site_1.json | 21 ++++++++- spec/netbox_client_ruby/api/dcim/site_spec.rb | 45 +++++++++++++------ 2 files changed, 51 insertions(+), 15 deletions(-) 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..dbc3a51 100644 --- a/spec/netbox_client_ruby/api/dcim/site_spec.rb +++ b/spec/netbox_client_ruby/api/dcim/site_spec.rb @@ -3,15 +3,16 @@ 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(:class_under_test) { NetboxClientRuby::DCIM::Site } + 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 { class_under_test.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 +38,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 +95,10 @@ let(:request_method) { :patch } subject do - site = NetboxClientRuby::DCIM::Site.new site_id - site.name = name - site.slug = slug - site + entity = class_under_test.new entity_id + entity.name = name + entity.slug = slug + entity end it 'does not call PATCH until save is called' do @@ -110,10 +129,10 @@ let(:request_url) { '/api/dcim/sites/' } subject do - site = NetboxClientRuby::DCIM::Site.new - site.name = name - site.slug = slug - site + entity = class_under_test.new + entity.name = name + entity.slug = slug + entity end it 'does not POST until save is called' do From 71bcf417981cd41dfb2b8a75082c8988e2e2424e Mon Sep 17 00:00:00 2001 From: Brian French Date: Sun, 2 Mar 2025 19:24:33 -0500 Subject: [PATCH 3/3] use the described_class builtin --- spec/netbox_client_ruby/api/dcim/site_spec.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spec/netbox_client_ruby/api/dcim/site_spec.rb b/spec/netbox_client_ruby/api/dcim/site_spec.rb index dbc3a51..18805ec 100644 --- a/spec/netbox_client_ruby/api/dcim/site_spec.rb +++ b/spec/netbox_client_ruby/api/dcim/site_spec.rb @@ -3,12 +3,11 @@ require 'spec_helper' RSpec.describe NetboxClientRuby::DCIM::Site, faraday_stub: true do - let(:class_under_test) { NetboxClientRuby::DCIM::Site } let(:entity_id) { 1 } let(:response) { File.read("spec/fixtures/dcim/site_#{entity_id}.json") } let(:request_url) { "/api/dcim/sites/#{entity_id}/" } - subject { class_under_test.new entity_id } + subject { described_class.new entity_id } describe '#id' do it 'shall be the expected id' do @@ -95,7 +94,7 @@ let(:request_method) { :patch } subject do - entity = class_under_test.new entity_id + entity = described_class.new entity_id entity.name = name entity.slug = slug entity @@ -129,7 +128,7 @@ let(:request_url) { '/api/dcim/sites/' } subject do - entity = class_under_test.new + entity = described_class.new entity.name = name entity.slug = slug entity