diff --git a/test/unit/fixtures/nodebalancer_config_create.json b/test/unit/fixtures/nodebalancer_config_create.json new file mode 100644 index 000000000..1ad0ce21f --- /dev/null +++ b/test/unit/fixtures/nodebalancer_config_create.json @@ -0,0 +1,25 @@ +{ + "id": 456, + "port": 80, + "protocol": "http", + "algorithm": "roundrobin", + "stickiness": "table", + "check": "connection", + "check_interval": 5, + "check_attempts": 3, + "check_path": "/", + "check_body": "", + "check_passive": true, + "check_timeout": 30, + "cipher_suite": "recommended", + "nodebalancer_id": 123, + "ssl_commonname": "", + "ssl_fingerprint": "", + "ssl_cert": "", + "ssl_key": "", + "nodes_status": { + "up": 2, + "down": 1 + } +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_config_get.json b/test/unit/fixtures/nodebalancer_config_get.json new file mode 100644 index 000000000..1ad0ce21f --- /dev/null +++ b/test/unit/fixtures/nodebalancer_config_get.json @@ -0,0 +1,25 @@ +{ + "id": 456, + "port": 80, + "protocol": "http", + "algorithm": "roundrobin", + "stickiness": "table", + "check": "connection", + "check_interval": 5, + "check_attempts": 3, + "check_path": "/", + "check_body": "", + "check_passive": true, + "check_timeout": 30, + "cipher_suite": "recommended", + "nodebalancer_id": 123, + "ssl_commonname": "", + "ssl_fingerprint": "", + "ssl_cert": "", + "ssl_key": "", + "nodes_status": { + "up": 2, + "down": 1 + } +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_config_list.json b/test/unit/fixtures/nodebalancer_config_list.json new file mode 100644 index 000000000..560836644 --- /dev/null +++ b/test/unit/fixtures/nodebalancer_config_list.json @@ -0,0 +1,31 @@ +{ + "data": [ + { + "id": 456, + "address": "192.168.1.1", + "label": "Test Node", + "status": "UP", + "weight": 50, + "mode": "accept", + "config_id": 456, + "nodebalancer_id": 123, + "port": 80, + "protocol": "http" + }, + { + "id": 457, + "address": "192.168.1.2", + "label": "Backup Node", + "status": "UP", + "weight": 40, + "mode": "backup", + "config_id": 456, + "nodebalancer_id": 123, + "port": 80, + "protocol": "http" + } + ], + "page": 1, + "pages": 1, + "results": 2 +} diff --git a/test/unit/fixtures/nodebalancer_config_rebuild.json b/test/unit/fixtures/nodebalancer_config_rebuild.json new file mode 100644 index 000000000..c9b41bd28 --- /dev/null +++ b/test/unit/fixtures/nodebalancer_config_rebuild.json @@ -0,0 +1,25 @@ +{ + "id": 456, + "port": 443, + "protocol": "https", + "algorithm": "roundrobin", + "stickiness": "none", + "check": "connection", + "check_interval": 5, + "check_attempts": 3, + "check_path": "/", + "check_body": "", + "check_passive": true, + "check_timeout": 30, + "cipher_suite": "recommended", + "nodebalancer_id": 123, + "ssl_commonname": "", + "ssl_fingerprint": "", + "ssl_cert": "", + "ssl_key": "", + "nodes_status": { + "up": 2, + "down": 1 + } +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_config_update.json b/test/unit/fixtures/nodebalancer_config_update.json new file mode 100644 index 000000000..c9b41bd28 --- /dev/null +++ b/test/unit/fixtures/nodebalancer_config_update.json @@ -0,0 +1,25 @@ +{ + "id": 456, + "port": 443, + "protocol": "https", + "algorithm": "roundrobin", + "stickiness": "none", + "check": "connection", + "check_interval": 5, + "check_attempts": 3, + "check_path": "/", + "check_body": "", + "check_passive": true, + "check_timeout": 30, + "cipher_suite": "recommended", + "nodebalancer_id": 123, + "ssl_commonname": "", + "ssl_fingerprint": "", + "ssl_cert": "", + "ssl_key": "", + "nodes_status": { + "up": 2, + "down": 1 + } +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_create.json b/test/unit/fixtures/nodebalancer_create.json new file mode 100644 index 000000000..8bf362fb1 --- /dev/null +++ b/test/unit/fixtures/nodebalancer_create.json @@ -0,0 +1,18 @@ +{ + "id": 123, + "label": "Test NodeBalancer", + "region": "us-east", + "hostname": "test.nodebalancer.linode.com", + "ipv4": "192.0.2.1", + "ipv6": "2600:3c03::f03c:91ff:fe24:9dcf", + "client_conn_throttle": 10, + "transfer": { + "total": 1000.5, + "in": 500.3, + "out": 500.2 + }, + "tags": ["test", "example"], + "created": "2025-02-01T10:00:00", + "updated": "2025-02-06T10:00:00" +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_firewall_list.json b/test/unit/fixtures/nodebalancer_firewall_list.json new file mode 100644 index 000000000..913b1cbe1 --- /dev/null +++ b/test/unit/fixtures/nodebalancer_firewall_list.json @@ -0,0 +1,18 @@ +{ + "data": [ + { + "id": 789, + "label": "firewall-1", + "status": "enabled" + }, + { + "id": 790, + "label": "firewall-2", + "status": "disabled" + } + ], + "page": 1, + "pages": 1, + "results": 2 +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_get.json b/test/unit/fixtures/nodebalancer_get.json new file mode 100644 index 000000000..fcac919ce --- /dev/null +++ b/test/unit/fixtures/nodebalancer_get.json @@ -0,0 +1,18 @@ +{ + "id": 123, + "label": "Existing NodeBalancer", + "region": "us-west", + "hostname": "existing.nodebalancer.linode.com", + "ipv4": "192.0.2.2", + "ipv6": "2600:3c03::f03c:91ff:fe24:abcd", + "client_conn_throttle": 20, + "transfer": { + "total": 2000.0, + "in": 1000.0, + "out": 1000.0 + }, + "tags": ["production"], + "created": "2025-01-15T08:00:00", + "updated": "2025-02-05T12:00:00" +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_node_create.json b/test/unit/fixtures/nodebalancer_node_create.json new file mode 100644 index 000000000..9590260cf --- /dev/null +++ b/test/unit/fixtures/nodebalancer_node_create.json @@ -0,0 +1,11 @@ +{ + "id": 789, + "address": "192.168.1.1", + "label": "Test Node", + "status": "UP", + "weight": 50, + "mode": "accept", + "config_id": 456, + "nodebalancer_id": 123 +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_node_list.json b/test/unit/fixtures/nodebalancer_node_list.json new file mode 100644 index 000000000..fc71ab69e --- /dev/null +++ b/test/unit/fixtures/nodebalancer_node_list.json @@ -0,0 +1,27 @@ +{ + "data": [ + { + "id": 789, + "address": "192.168.1.1", + "label": "Test Node", + "status": "UP", + "weight": 50, + "mode": "accept", + "config_id": 456, + "nodebalancer_id": 123 + }, + { + "id": 790, + "address": "192.168.1.2", + "label": "Backup Node", + "status": "UP", + "weight": 40, + "mode": "backup", + "config_id": 456, + "nodebalancer_id": 123 + } + ], + "page": 1, + "pages": 1, + "results": 2 +} diff --git a/test/unit/fixtures/nodebalancer_node_update.json b/test/unit/fixtures/nodebalancer_node_update.json new file mode 100644 index 000000000..b6ced30e4 --- /dev/null +++ b/test/unit/fixtures/nodebalancer_node_update.json @@ -0,0 +1,11 @@ +{ + "id": 789, + "address": "192.168.1.2", + "label": "Updated Node", + "status": "UP", + "weight": 60, + "mode": "drain", + "config_id": 456, + "nodebalancer_id": 123 +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_stats_get.json b/test/unit/fixtures/nodebalancer_stats_get.json new file mode 100644 index 000000000..9103b086a --- /dev/null +++ b/test/unit/fixtures/nodebalancer_stats_get.json @@ -0,0 +1,20 @@ +{ + "title": "NodeBalancer Stats", + "data": { + "connections": [ + [1000.0, 2000.0], + [3000.0, 4000.0] + ], + "traffic": { + "in": [ + [1000.0, 2000.0], + [3000.0, 4000.0] + ], + "out": [ + [500.0, 1000.0], + [1500.0, 2000.0] + ] + } + } +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancer_update.json b/test/unit/fixtures/nodebalancer_update.json new file mode 100644 index 000000000..23fd4d7dc --- /dev/null +++ b/test/unit/fixtures/nodebalancer_update.json @@ -0,0 +1,18 @@ +{ + "id": 456, + "label": "Updated NodeBalancer", + "region": "us-west", + "hostname": "updated.nodebalancer.linode.com", + "ipv4": "192.0.2.5", + "ipv6": "2600:3c03::f03c:91ff:fe24:3333", + "client_conn_throttle": 5, + "transfer": { + "total": 1500.0, + "in": 750.0, + "out": 750.0 + }, + "tags": ["updated", "production"], + "created": "2025-01-15T08:00:00", + "updated": "2025-02-06T15:00:00" +} + \ No newline at end of file diff --git a/test/unit/fixtures/nodebalancers_list.json b/test/unit/fixtures/nodebalancers_list.json new file mode 100644 index 000000000..24dfd16bb --- /dev/null +++ b/test/unit/fixtures/nodebalancers_list.json @@ -0,0 +1,19 @@ +{ + "data": [ + { + "id": 123, + "label": "NodeBalancer A", + "region": "us-east", + "tags": ["tag1", "tag2"] + }, + { + "id": 456, + "label": "NodeBalancer B", + "region": "us-west", + "tags": ["tag3"] + } + ], + "page": 1, + "pages": 1, + "results": 2 +} diff --git a/test/unit/fixtures/nodebalancers_types_list.json b/test/unit/fixtures/nodebalancers_types_list.json new file mode 100644 index 000000000..6ff83db94 --- /dev/null +++ b/test/unit/fixtures/nodebalancers_types_list.json @@ -0,0 +1,27 @@ +{ + "data": [ + { + "id": "123", + "label": "NodeBalancer A", + "region": "us-east", + "tags": ["tag1", "tag2"], + "price": { + "hourly": 0.10, + "monthly": 10.00 + } + }, + { + "id": "456", + "label": "NodeBalancer B", + "region": "us-west", + "tags": ["tag3"], + "price": { + "hourly": 0.15, + "monthly": 15.00 + } + } + ], + "page": 1, + "pages": 1, + "results": 2 +} diff --git a/test/unit/nodebalancer_config_test.go b/test/unit/nodebalancer_config_test.go new file mode 100644 index 000000000..951546554 --- /dev/null +++ b/test/unit/nodebalancer_config_test.go @@ -0,0 +1,128 @@ +package unit + +import ( + "context" + "testing" + + "github.com/linode/linodego" + "github.com/stretchr/testify/assert" +) + +func TestNodeBalancerConfig_List(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_config_list") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + base.MockGet("nodebalancers/123/configs", fixtureData) + + configs, err := base.Client.ListNodeBalancerConfigs(context.Background(), 123, nil) + assert.NoError(t, err) + assert.Len(t, configs, 2) + + assert.Equal(t, 456, configs[0].ID) + assert.Equal(t, 80, configs[0].Port) + assert.Equal(t, linodego.ProtocolHTTP, configs[0].Protocol) +} + +func TestNodeBalancerConfig_Get(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_config_get") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + base.MockGet("nodebalancers/123/configs/456", fixtureData) + + config, err := base.Client.GetNodeBalancerConfig(context.Background(), 123, 456) + assert.NoError(t, err) + assert.NotNil(t, config) + + assert.Equal(t, 456, config.ID) + assert.Equal(t, 80, config.Port) + assert.Equal(t, linodego.ProtocolHTTP, config.Protocol) +} + +func TestNodeBalancerConfig_Create(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_config_create") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + base.MockPost("nodebalancers/123/configs", fixtureData) + + createOpts := linodego.NodeBalancerConfigCreateOptions{ + Port: 80, + Protocol: linodego.ProtocolHTTP, + Algorithm: linodego.AlgorithmRoundRobin, + Stickiness: linodego.StickinessTable, + } + config, err := base.Client.CreateNodeBalancerConfig(context.Background(), 123, createOpts) + assert.NoError(t, err) + + assert.Equal(t, 456, config.ID) + assert.Equal(t, 80, config.Port) + assert.Equal(t, linodego.ProtocolHTTP, config.Protocol) +} + +func TestNodeBalancerConfig_Update(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_config_update") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + base.MockPut("nodebalancers/123/configs/456", fixtureData) + + updateOpts := linodego.NodeBalancerConfigUpdateOptions{ + Port: 443, + Protocol: linodego.ProtocolHTTPS, + Stickiness: linodego.StickinessNone, + } + config, err := base.Client.UpdateNodeBalancerConfig(context.Background(), 123, 456, updateOpts) + assert.NoError(t, err) + + assert.Equal(t, 456, config.ID) + assert.Equal(t, 443, config.Port) + assert.Equal(t, linodego.ProtocolHTTPS, config.Protocol) +} + +func TestNodeBalancerConfig_Delete(t *testing.T) { + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + base.MockDelete("nodebalancers/123/configs/456", nil) + + err := base.Client.DeleteNodeBalancerConfig(context.Background(), 123, 456) + assert.NoError(t, err) +} + +func TestNodeBalancerConfig_Rebuild(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_config_rebuild") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + base.MockPost("nodebalancers/123/configs/456/rebuild", fixtureData) + + rebuildOpts := linodego.NodeBalancerConfigRebuildOptions{ + Port: 443, + Protocol: linodego.ProtocolHTTPS, + Stickiness: linodego.StickinessNone, + } + config, err := base.Client.RebuildNodeBalancerConfig(context.Background(), 123, 456, rebuildOpts) + assert.NoError(t, err) + + assert.Equal(t, 456, config.ID) + assert.Equal(t, 443, config.Port) + assert.Equal(t, linodego.ProtocolHTTPS, config.Protocol) +} diff --git a/test/unit/nodebalancer_firewalls_test.go b/test/unit/nodebalancer_firewalls_test.go new file mode 100644 index 000000000..c63c76fca --- /dev/null +++ b/test/unit/nodebalancer_firewalls_test.go @@ -0,0 +1,36 @@ +package unit + +import ( + "context" + "testing" + + "github.com/linode/linodego" + "github.com/stretchr/testify/assert" +) + +func TestNodeBalancerFirewalls_List(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_firewall_list") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the API response for nodebalancer firewalls + base.MockGet("nodebalancers/123/firewalls", fixtureData) + + firewalls, err := base.Client.ListNodeBalancerFirewalls(context.Background(), 123, nil) + + assert.NoError(t, err) + assert.Len(t, firewalls, 2) + + // Check the details of the first firewall + assert.Equal(t, 789, firewalls[0].ID) + assert.Equal(t, "firewall-1", firewalls[0].Label) + assert.Equal(t, linodego.FirewallStatus("enabled"), firewalls[0].Status) + + // Check the details of the second firewall + assert.Equal(t, 790, firewalls[1].ID) + assert.Equal(t, "firewall-2", firewalls[1].Label) + assert.Equal(t, linodego.FirewallStatus("disabled"), firewalls[1].Status) +} diff --git a/test/unit/nodebalancer_node_test.go b/test/unit/nodebalancer_node_test.go new file mode 100644 index 000000000..6b1ecc0bc --- /dev/null +++ b/test/unit/nodebalancer_node_test.go @@ -0,0 +1,97 @@ +package unit + +import ( + "context" + "testing" + + "github.com/linode/linodego" + "github.com/stretchr/testify/assert" +) + +func TestNodeBalancerNode_Create(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_node_create") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the POST request with the fixture response + base.MockPost("nodebalancers/123/configs/456/nodes", fixtureData) + + createOpts := linodego.NodeBalancerNodeCreateOptions{ + Address: "192.168.1.1", + Label: "Test Node", + Weight: 50, + Mode: linodego.ModeAccept, + } + node, err := base.Client.CreateNodeBalancerNode(context.Background(), 123, 456, createOpts) + assert.NoError(t, err) + + assert.Equal(t, 789, node.ID) + assert.Equal(t, "192.168.1.1", node.Address) + assert.Equal(t, "Test Node", node.Label) + assert.Equal(t, 50, node.Weight) + assert.Equal(t, linodego.ModeAccept, node.Mode) +} + +func TestNodeBalancerNode_Update(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_node_update") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the PUT request with the fixture response + base.MockPut("nodebalancers/123/configs/456/nodes/789", fixtureData) + + updateOpts := linodego.NodeBalancerNodeUpdateOptions{ + Address: "192.168.1.2", + Label: "Updated Node", + Weight: 60, + Mode: linodego.ModeDrain, + } + node, err := base.Client.UpdateNodeBalancerNode(context.Background(), 123, 456, 789, updateOpts) + assert.NoError(t, err) + + assert.Equal(t, 789, node.ID) + assert.Equal(t, "192.168.1.2", node.Address) + assert.Equal(t, "Updated Node", node.Label) + assert.Equal(t, 60, node.Weight) + assert.Equal(t, linodego.ModeDrain, node.Mode) +} + +func TestNodeBalancerNode_List(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_node_list") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the GET request with the fixture response + base.MockGet("nodebalancers/123/configs/456/nodes", fixtureData) + + nodes, err := base.Client.ListNodeBalancerNodes(context.Background(), 123, 456, nil) + assert.NoError(t, err) + assert.Len(t, nodes, 2) + + assert.Equal(t, 789, nodes[0].ID) + assert.Equal(t, "192.168.1.1", nodes[0].Address) + assert.Equal(t, "Test Node", nodes[0].Label) + assert.Equal(t, 50, nodes[0].Weight) + assert.Equal(t, linodego.ModeAccept, nodes[0].Mode) +} + +func TestNodeBalancerNode_Delete(t *testing.T) { + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the DELETE request with the fixture response + base.MockDelete("nodebalancers/123/configs/456/nodes/789", nil) + + err := base.Client.DeleteNodeBalancerNode(context.Background(), 123, 456, 789) + assert.NoError(t, err) +} diff --git a/test/unit/nodebalancer_stats_test.go b/test/unit/nodebalancer_stats_test.go new file mode 100644 index 000000000..d0899447b --- /dev/null +++ b/test/unit/nodebalancer_stats_test.go @@ -0,0 +1,36 @@ +package unit + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNodeBalancerStats_Get(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_stats_get") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + base.MockGet("nodebalancers/123/stats", fixtureData) + + stats, err := base.Client.GetNodeBalancerStats(context.Background(), 123) + + // Assertions + assert.NoError(t, err) + assert.NotNil(t, stats) + + assert.Equal(t, "NodeBalancer Stats", stats.Title) + + assert.Len(t, stats.Data.Connections, 2) + assert.Len(t, stats.Data.Connections[0], 2) + + assert.Len(t, stats.Data.Traffic.In, 2) + assert.Len(t, stats.Data.Traffic.Out, 2) + + assert.Equal(t, 1000.0, stats.Data.Traffic.In[0][0]) + assert.Equal(t, 500.0, stats.Data.Traffic.Out[0][0]) +} diff --git a/test/unit/nodebalancer_test.go b/test/unit/nodebalancer_test.go new file mode 100644 index 000000000..5f18e0fcb --- /dev/null +++ b/test/unit/nodebalancer_test.go @@ -0,0 +1,119 @@ +package unit + +import ( + "context" + "testing" + + "github.com/linode/linodego" + "github.com/stretchr/testify/assert" +) + +func TestNodeBalancer_Create(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_create") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the POST request with the fixture response + base.MockPost("nodebalancers", fixtureData) + + label := "Test NodeBalancer" + createOpts := linodego.NodeBalancerCreateOptions{ + Label: &label, + Region: "us-east", + Tags: []string{"test", "example"}, + } + nodebalancer, err := base.Client.CreateNodeBalancer(context.Background(), createOpts) + assert.NoError(t, err) + + assert.Equal(t, 123, nodebalancer.ID) + assert.Equal(t, "Test NodeBalancer", *nodebalancer.Label) + assert.Equal(t, "us-east", nodebalancer.Region) + assert.Equal(t, []string{"test", "example"}, nodebalancer.Tags) +} + +func TestNodeBalancer_Get(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_get") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the GET request with the fixture response + base.MockGet("nodebalancers/123", fixtureData) + + nodebalancer, err := base.Client.GetNodeBalancer(context.Background(), 123) + assert.NoError(t, err) + + assert.Equal(t, 123, nodebalancer.ID, "Expected NodeBalancer ID to match") + assert.Equal(t, "Existing NodeBalancer", *nodebalancer.Label, "Expected NodeBalancer label to match") + assert.Equal(t, "us-west", nodebalancer.Region, "Expected NodeBalancer region to match") +} + +func TestNodeBalancer_List(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancers_list") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the GET request with the fixture response + base.MockGet("nodebalancers", fixtureData) + + nodebalancers, err := base.Client.ListNodeBalancers(context.Background(), &linodego.ListOptions{}) + assert.NoError(t, err) + + assert.Len(t, nodebalancers, 2, "Expected two NodeBalancers in the list") + + // Verify details of the first NodeBalancer + assert.Equal(t, 123, nodebalancers[0].ID, "Expected first NodeBalancer ID to match") + assert.Equal(t, "NodeBalancer A", *nodebalancers[0].Label, "Expected first NodeBalancer label to match") + assert.Equal(t, "us-east", nodebalancers[0].Region, "Expected first NodeBalancer region to match") + assert.Equal(t, []string{"tag1", "tag2"}, nodebalancers[0].Tags, "Expected first NodeBalancer tags to match") + + // Verify details of the second NodeBalancer + assert.Equal(t, 456, nodebalancers[1].ID, "Expected second NodeBalancer ID to match") + assert.Equal(t, "NodeBalancer B", *nodebalancers[1].Label, "Expected second NodeBalancer label to match") + assert.Equal(t, "us-west", nodebalancers[1].Region, "Expected second NodeBalancer region to match") + assert.Equal(t, []string{"tag3"}, nodebalancers[1].Tags, "Expected second NodeBalancer tags to match") +} + +func TestNodeBalancer_Update(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancer_update") + assert.NoError(t, err) + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the PUT request with the fixture response + base.MockPut("nodebalancers/123", fixtureData) + + label := "Updated NodeBalancer" + updateOpts := linodego.NodeBalancerUpdateOptions{ + Label: &label, + Tags: &[]string{"updated", "production"}, + } + nodebalancer, err := base.Client.UpdateNodeBalancer(context.Background(), 123, updateOpts) + assert.NoError(t, err) + + assert.Equal(t, 456, nodebalancer.ID) + assert.Equal(t, "Updated NodeBalancer", *nodebalancer.Label) + assert.Equal(t, []string{"updated", "production"}, nodebalancer.Tags) +} + +func TestNodeBalancer_Delete(t *testing.T) { + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the DELETE request + base.MockDelete("nodebalancers/123", nil) + + err := base.Client.DeleteNodeBalancer(context.Background(), 123) + assert.NoError(t, err, "Expected no error when deleting NodeBalancer") +} diff --git a/test/unit/nodebalancer_types_test.go b/test/unit/nodebalancer_types_test.go new file mode 100644 index 000000000..014ce76fd --- /dev/null +++ b/test/unit/nodebalancer_types_test.go @@ -0,0 +1,41 @@ +package unit + +import ( + "context" + "testing" + + "github.com/linode/linodego" + "github.com/stretchr/testify/assert" +) + +func TestNodeBalancerTypes_List(t *testing.T) { + fixtureData, err := fixtures.GetFixture("nodebalancers_types_list") + assert.NoError(t, err, "Expected no error when getting fixture") + + var base ClientBaseCase + base.SetUp(t) + defer base.TearDown(t) + + // Mock the GET request for the node balancer types endpoint (mock as an array instead of paginatedResponse) + base.MockGet("nodebalancers/types", fixtureData) + + // Call the ListNodeBalancerTypes method + nodebalancerTypes, err := base.Client.ListNodeBalancerTypes(context.Background(), &linodego.ListOptions{}) + assert.NoError(t, err, "Expected no error when listing node balancer types") + assert.NotEmpty(t, nodebalancerTypes, "Expected non-empty node balancer types list") + + // Validate the first node balancer type's details + assert.Equal(t, "123", nodebalancerTypes[0].ID, "Expected node balancer type ID to match") + assert.Equal(t, "NodeBalancer A", nodebalancerTypes[0].Label, "Expected node balancer type label to match") + assert.Equal(t, 0.10, nodebalancerTypes[0].Price.Hourly, "Expected hourly price to match") + assert.Equal(t, 10.00, nodebalancerTypes[0].Price.Monthly, "Expected monthly price to match") + + // Validate the second node balancer type's details + assert.Equal(t, "456", nodebalancerTypes[1].ID, "Expected node balancer type ID to match") + assert.Equal(t, "NodeBalancer B", nodebalancerTypes[1].Label, "Expected node balancer type label to match") + assert.Equal(t, 0.15, nodebalancerTypes[1].Price.Hourly, "Expected hourly price to match") + assert.Equal(t, 15.00, nodebalancerTypes[1].Price.Monthly, "Expected monthly price to match") + + // Access RegionPrice correctly from the embedded struct + assert.NotEmpty(t, nodebalancerTypes[1].Price, "Expected price to be non-empty") +}