1package vps
2
3import (
4	"github.com/stretchr/testify/assert"
5	"github.com/stretchr/testify/require"
6	"github.com/transip/gotransip/v6"
7	"testing"
8)
9
10func TestPrivateNetworkRepository_GetPrivateNetworks(t *testing.T) {
11	const apiResponse = `{ "privateNetworks": [ { "name": "example-privatenetwork", "description": "FilesharingNetwork", "isBlocked": false, "isLocked": false, "vpsNames": [ "example-vps", "example-vps2" ] } ] } `
12	server := mockServer{t: t, expectedURL: "/private-networks", expectedMethod: "GET", statusCode: 200, response: apiResponse}
13	client, tearDown := server.getClient()
14	defer tearDown()
15	repo := PrivateNetworkRepository{Client: *client}
16
17	all, err := repo.GetAll()
18	require.NoError(t, err)
19	require.Equal(t, 1, len(all))
20
21	assert.Equal(t, "example-privatenetwork", all[0].Name)
22	assert.Equal(t, "FilesharingNetwork", all[0].Description)
23	assert.Equal(t, false, all[0].IsBlocked)
24	assert.Equal(t, false, all[0].IsLocked)
25
26	assert.Equal(t, []string{"example-vps", "example-vps2"}, all[0].VpsNames)
27}
28
29func TestPrivateNetworkRepository_GetSelection(t *testing.T) {
30	const apiResponse = `{ "privateNetworks": [ { "name": "example-privatenetwork", "description": "FilesharingNetwork", "isBlocked": false, "isLocked": false, "vpsNames": [ "example-vps", "example-vps2" ] } ] } `
31	server := mockServer{t: t, expectedURL: "/private-networks?page=1&pageSize=25", expectedMethod: "GET", statusCode: 200, response: apiResponse}
32	client, tearDown := server.getClient()
33	defer tearDown()
34	repo := PrivateNetworkRepository{Client: *client}
35
36	all, err := repo.GetSelection(1, 25)
37	require.NoError(t, err)
38	require.Equal(t, 1, len(all))
39
40	assert.Equal(t, "example-privatenetwork", all[0].Name)
41	assert.Equal(t, "FilesharingNetwork", all[0].Description)
42	assert.Equal(t, false, all[0].IsBlocked)
43	assert.Equal(t, false, all[0].IsLocked)
44
45	assert.Equal(t, []string{"example-vps", "example-vps2"}, all[0].VpsNames)
46}
47
48func TestPrivateNetworkRepository_GetPrivateNetworkByName(t *testing.T) {
49	const apiResponse = `{ "privateNetwork": { "name": "example-privatenetwork", "description": "FilesharingNetwork", "isBlocked": false, "isLocked": false, "vpsNames": [ "example-vps", "example-vps2" ] } } `
50	server := mockServer{t: t, expectedURL: "/private-networks/example-privatenetwork", expectedMethod: "GET", statusCode: 200, response: apiResponse}
51	client, tearDown := server.getClient()
52	defer tearDown()
53	repo := PrivateNetworkRepository{Client: *client}
54
55	privateNetwork, err := repo.GetByName("example-privatenetwork")
56	require.NoError(t, err)
57	assert.Equal(t, "example-privatenetwork", privateNetwork.Name)
58	assert.Equal(t, "FilesharingNetwork", privateNetwork.Description)
59	assert.Equal(t, false, privateNetwork.IsBlocked)
60	assert.Equal(t, false, privateNetwork.IsLocked)
61
62	assert.Equal(t, []string{"example-vps", "example-vps2"}, privateNetwork.VpsNames)
63}
64
65func TestPrivateNetworkRepository_OrderPrivateNetwork(t *testing.T) {
66	const expectedRequest = `{"description":"test123"}`
67	server := mockServer{t: t, expectedURL: "/private-networks", expectedMethod: "POST", statusCode: 201, expectedRequest: expectedRequest}
68	client, tearDown := server.getClient()
69	defer tearDown()
70	repo := PrivateNetworkRepository{Client: *client}
71
72	err := repo.Order("test123")
73	require.NoError(t, err)
74}
75
76func TestPrivateNetworkRepository_UpdatePrivateNetwork(t *testing.T) {
77	const expectedRequest = `{"privateNetwork":{"name":"example-privatenetwork","description":"einnetwork","isBlocked":false,"isLocked":false,"vpsNames":["example-vps","example-vps2"]}}`
78	server := mockServer{t: t, expectedURL: "/private-networks/example-privatenetwork", expectedMethod: "PUT", statusCode: 204, expectedRequest: expectedRequest}
79	client, tearDown := server.getClient()
80	defer tearDown()
81	repo := PrivateNetworkRepository{Client: *client}
82
83	privateNetwork := PrivateNetwork{
84		Name:        "example-privatenetwork",
85		Description: "einnetwork",
86		IsBlocked:   false,
87		IsLocked:    false,
88		VpsNames:    []string{"example-vps", "example-vps2"},
89	}
90
91	err := repo.Update(privateNetwork)
92	require.NoError(t, err)
93}
94
95func TestPrivateNetworkRepository_AttachVpsToPrivateNetwork(t *testing.T) {
96	const expectedRequest = `{"action":"attachvps","vpsName":"example-vps"}`
97	server := mockServer{t: t, expectedURL: "/private-networks/example-privatenetwork", expectedMethod: "PATCH", statusCode: 204, expectedRequest: expectedRequest}
98	client, tearDown := server.getClient()
99	defer tearDown()
100	repo := PrivateNetworkRepository{Client: *client}
101
102	err := repo.AttachVps("example-vps", "example-privatenetwork")
103	require.NoError(t, err)
104}
105
106func TestPrivateNetworkRepository_DetachVpsFromPrivateNetwork(t *testing.T) {
107	const expectedRequest = `{"action":"detachvps","vpsName":"example-vps"}`
108	server := mockServer{t: t, expectedURL: "/private-networks/example-privatenetwork", expectedMethod: "PATCH", statusCode: 204, expectedRequest: expectedRequest}
109	client, tearDown := server.getClient()
110	defer tearDown()
111	repo := PrivateNetworkRepository{Client: *client}
112
113	err := repo.DetachVps("example-vps", "example-privatenetwork")
114	require.NoError(t, err)
115}
116
117func TestPrivateNetworkRepository_CancelPrivateNetwork(t *testing.T) {
118	const expectedRequest = `{"endTime":"end"}`
119	server := mockServer{t: t, expectedURL: "/private-networks/example-privatenetwork", expectedMethod: "DELETE", statusCode: 204, expectedRequest: expectedRequest}
120	client, tearDown := server.getClient()
121	defer tearDown()
122	repo := PrivateNetworkRepository{Client: *client}
123
124	err := repo.Cancel("example-privatenetwork", gotransip.CancellationTimeEnd)
125	require.NoError(t, err)
126}
127