1package godo
2
3import (
4	"fmt"
5	"net/http"
6	"reflect"
7	"testing"
8)
9
10func TestSizes_List(t *testing.T) {
11	setup()
12	defer teardown()
13
14	mux.HandleFunc("/v2/sizes", func(w http.ResponseWriter, r *http.Request) {
15		testMethod(t, r, http.MethodGet)
16		fmt.Fprint(w, `{"sizes":[{"slug":"1"},{"slug":"2"}]}`)
17	})
18
19	sizes, _, err := client.Sizes.List(ctx, nil)
20	if err != nil {
21		t.Errorf("Sizes.List returned error: %v", err)
22	}
23
24	expected := []Size{{Slug: "1"}, {Slug: "2"}}
25	if !reflect.DeepEqual(sizes, expected) {
26		t.Errorf("Sizes.List returned %+v, expected %+v", sizes, expected)
27	}
28}
29
30func TestSizes_ListSizesMultiplePages(t *testing.T) {
31	setup()
32	defer teardown()
33
34	mux.HandleFunc("/v2/sizes", func(w http.ResponseWriter, r *http.Request) {
35		testMethod(t, r, http.MethodGet)
36		fmt.Fprint(w, `{"sizes": [{"id":1},{"id":2}], "links":{"pages":{"next":"http://example.com/v2/sizes/?page=2"}}}`)
37	})
38
39	_, resp, err := client.Sizes.List(ctx, nil)
40	if err != nil {
41		t.Fatal(err)
42	}
43
44	checkCurrentPage(t, resp, 1)
45}
46
47func TestSizes_RetrievePageByNumber(t *testing.T) {
48	setup()
49	defer teardown()
50
51	jBlob := `
52	{
53		"sizes": [{"id":1},{"id":2}],
54		"links":{
55			"pages":{
56				"next":"http://example.com/v2/sizes/?page=3",
57				"prev":"http://example.com/v2/sizes/?page=1",
58				"last":"http://example.com/v2/sizes/?page=3",
59				"first":"http://example.com/v2/sizes/?page=1"
60			}
61		}
62	}`
63
64	mux.HandleFunc("/v2/sizes", func(w http.ResponseWriter, r *http.Request) {
65		testMethod(t, r, http.MethodGet)
66		fmt.Fprint(w, jBlob)
67	})
68
69	opt := &ListOptions{Page: 2}
70	_, resp, err := client.Sizes.List(ctx, opt)
71	if err != nil {
72		t.Fatal(err)
73	}
74
75	checkCurrentPage(t, resp, 2)
76}
77
78func TestSize_String(t *testing.T) {
79	size := &Size{
80		Slug:         "slize",
81		Memory:       123,
82		Vcpus:        456,
83		Disk:         789,
84		PriceMonthly: 123,
85		PriceHourly:  456,
86		Regions:      []string{"1", "2"},
87		Available:    true,
88		Transfer:     789,
89	}
90
91	stringified := size.String()
92	expected := `godo.Size{Slug:"slize", Memory:123, Vcpus:456, Disk:789, PriceMonthly:123, PriceHourly:456, Regions:["1" "2"], Available:true, Transfer:789}`
93	if expected != stringified {
94		t.Errorf("Size.String returned %+v, expected %+v", stringified, expected)
95	}
96}
97