From d4bfaaa7e4d3db92d602bfbb8b4dd45b965adeb6 Mon Sep 17 00:00:00 2001 From: Romain Neil Date: Thu, 23 Oct 2025 18:02:19 +0200 Subject: [PATCH 1/3] feat: add tests for Message model --- model/message_test.go | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 model/message_test.go diff --git a/model/message_test.go b/model/message_test.go new file mode 100644 index 0000000..5a33d61 --- /dev/null +++ b/model/message_test.go @@ -0,0 +1,50 @@ +package model + +import "testing" + +func TestMessage_GetHostname(t *testing.T) { + m := Message{Hostname: "vm-ABC-123", IpAddress: "10.0.0.1"} + + if m.Hostname != "vm-ABC-123" { + t.Fatalf("expected hostname to be %q, got %q", "vm-ABC-123", m.Hostname) + } + + // Ensure calling GetSerial does not mutate Hostname + _ = m.GetSerial() + if m.Hostname != "vm-ABC-123" { + t.Fatalf("hostname was mutated by GetSerial: got %q", m.Hostname) + } +} + +func TestMessage_GetSerial(t *testing.T) { + tests := []struct { + name string + hostname string + want string + }{ + {"no_dash", "vm", ""}, + {"single_dash", "vm-12345", "12345"}, + {"multi_dash", "vm-123-456", "123-456"}, + {"leading_dash", "-SERIAL", "SERIAL"}, + {"empty_hostname", "", ""}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + m := Message{Hostname: tt.hostname} + got := m.GetSerial() + if got != tt.want { + t.Fatalf("GetSerial() for hostname %q = %q, want %q", tt.hostname, got, tt.want) + } + + // Ensure result is cached in m.serial after first call, but only when non-empty + original := got + m.Hostname = "vm-CHANGED-999" + if original != "" { + if cached := m.GetSerial(); cached != original { + t.Fatalf("expected cached serial %q after hostname change, got %q", original, cached) + } + } + }) + } +} From 805c00641f17fd8831cbca936f7bd863cb833741 Mon Sep 17 00:00:00 2001 From: Romain Neil Date: Thu, 23 Oct 2025 18:02:29 +0200 Subject: [PATCH 2/3] feat: add some tests for VirtualMachine model --- model/virtualmachine_test.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 model/virtualmachine_test.go diff --git a/model/virtualmachine_test.go b/model/virtualmachine_test.go new file mode 100644 index 0000000..0cda530 --- /dev/null +++ b/model/virtualmachine_test.go @@ -0,0 +1,32 @@ +package model + +import "testing" + +func TestVirtualMachine_NewVM(t *testing.T) { + netbox := &Netbox{} + msg := Message{ + Hostname: "vm-12345", + } + + vm := NewVM(netbox, msg) + if vm.Serial != "12345" { + t.Fatalf("expected serial to be %q, got %q", "12345", vm.Serial) + } + +} + +func TestVirtualMachine_Exists(t *testing.T) { + // When VM has no Netbox client and no NetboxId, Exists should early-return (false, 0, nil) + vm := &VirtualMachine{} + + exists, id, err := vm.Exists("some-host", "some-serial") + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if exists { + t.Fatalf("expected exists to be false, got true") + } + if id != 0 { + t.Fatalf("expected id to be 0, got %d", id) + } +} From eec9170770779be0fdc6f60e02bdf7faaddf062a Mon Sep 17 00:00:00 2001 From: Romain Neil Date: Thu, 23 Oct 2025 18:02:47 +0200 Subject: [PATCH 3/3] feat(doc): add some explain on how run tests --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 4e641b4..8cc9e19 100644 --- a/README.md +++ b/README.md @@ -1 +1,6 @@ # RoutheOS API + +## 🐛 Testing + +The project can be testing with the command: +> go test -v ./... \ No newline at end of file