1package internal 2 3import ( 4 "encoding/json" 5 "io" 6 "io/ioutil" 7 "net/http" 8 "os" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13) 14 15func TestTxtRecordService_Create(t *testing.T) { 16 client, handler, tearDown := setupAPIMock() 17 defer tearDown() 18 19 handler.HandleFunc("/v1/domains/12345/records/txt", func(rw http.ResponseWriter, req *http.Request) { 20 if req.Method != http.MethodPost { 21 http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest) 22 return 23 } 24 25 file, err := os.Open("./fixtures/records-Create.json") 26 if err != nil { 27 http.Error(rw, err.Error(), http.StatusInternalServerError) 28 return 29 } 30 defer func() { _ = file.Close() }() 31 32 _, err = io.Copy(rw, file) 33 if err != nil { 34 http.Error(rw, err.Error(), http.StatusInternalServerError) 35 return 36 } 37 }) 38 39 records, err := client.TxtRecords.Create(12345, RecordRequest{}) 40 require.NoError(t, err) 41 42 recordsJSON, err := json.Marshal(records) 43 require.NoError(t, err) 44 45 expectedContent, err := ioutil.ReadFile("./fixtures/records-Create.json") 46 require.NoError(t, err) 47 48 assert.JSONEq(t, string(expectedContent), string(recordsJSON)) 49} 50 51func TestTxtRecordService_GetAll(t *testing.T) { 52 client, handler, tearDown := setupAPIMock() 53 defer tearDown() 54 55 handler.HandleFunc("/v1/domains/12345/records/txt", func(rw http.ResponseWriter, req *http.Request) { 56 if req.Method != http.MethodGet { 57 http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest) 58 return 59 } 60 61 file, err := os.Open("./fixtures/records-GetAll.json") 62 if err != nil { 63 http.Error(rw, err.Error(), http.StatusInternalServerError) 64 return 65 } 66 defer func() { _ = file.Close() }() 67 68 _, err = io.Copy(rw, file) 69 if err != nil { 70 http.Error(rw, err.Error(), http.StatusInternalServerError) 71 return 72 } 73 }) 74 75 records, err := client.TxtRecords.GetAll(12345) 76 require.NoError(t, err) 77 78 recordsJSON, err := json.Marshal(records) 79 require.NoError(t, err) 80 81 expectedContent, err := ioutil.ReadFile("./fixtures/records-GetAll.json") 82 require.NoError(t, err) 83 84 assert.JSONEq(t, string(expectedContent), string(recordsJSON)) 85} 86 87func TestTxtRecordService_Get(t *testing.T) { 88 client, handler, tearDown := setupAPIMock() 89 defer tearDown() 90 91 handler.HandleFunc("/v1/domains/12345/records/txt/6789", func(rw http.ResponseWriter, req *http.Request) { 92 if req.Method != http.MethodGet { 93 http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest) 94 return 95 } 96 97 file, err := os.Open("./fixtures/records-Get.json") 98 if err != nil { 99 http.Error(rw, err.Error(), http.StatusInternalServerError) 100 return 101 } 102 defer func() { _ = file.Close() }() 103 104 _, err = io.Copy(rw, file) 105 if err != nil { 106 http.Error(rw, err.Error(), http.StatusInternalServerError) 107 return 108 } 109 }) 110 111 record, err := client.TxtRecords.Get(12345, 6789) 112 require.NoError(t, err) 113 114 expected := &Record{ 115 ID: 3557066, 116 Type: "TXT", 117 RecordType: "txt", 118 Name: "test", 119 TTL: 300, 120 RecordOption: "roundRobin", 121 GtdRegion: 1, 122 ParentID: 273302, 123 Parent: "domain", 124 Source: "Domain", 125 ModifiedTs: 1580908547863, 126 Value: []RecordValue{{ 127 Value: `"test"`, 128 }}, 129 RoundRobin: []RecordValue{{ 130 Value: `"test"`, 131 }}, 132 } 133 assert.Equal(t, expected, record) 134} 135 136func TestTxtRecordService_Update(t *testing.T) { 137 client, handler, tearDown := setupAPIMock() 138 defer tearDown() 139 140 handler.HandleFunc("/v1/domains/12345/records/txt/6789", func(rw http.ResponseWriter, req *http.Request) { 141 if req.Method != http.MethodPut { 142 http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest) 143 return 144 } 145 146 _, err := rw.Write([]byte(`{"success":"Record updated successfully"}`)) 147 if err != nil { 148 http.Error(rw, err.Error(), http.StatusInternalServerError) 149 return 150 } 151 }) 152 153 msg, err := client.TxtRecords.Update(12345, 6789, RecordRequest{}) 154 require.NoError(t, err) 155 156 expected := &SuccessMessage{Success: "Record updated successfully"} 157 assert.Equal(t, expected, msg) 158} 159 160func TestTxtRecordService_Delete(t *testing.T) { 161 client, handler, tearDown := setupAPIMock() 162 defer tearDown() 163 164 handler.HandleFunc("/v1/domains/12345/records/txt/6789", func(rw http.ResponseWriter, req *http.Request) { 165 if req.Method != http.MethodDelete { 166 http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest) 167 return 168 } 169 170 _, err := rw.Write([]byte(`{"success":"Record deleted successfully"}`)) 171 if err != nil { 172 http.Error(rw, err.Error(), http.StatusInternalServerError) 173 return 174 } 175 }) 176 177 msg, err := client.TxtRecords.Delete(12345, 6789) 178 require.NoError(t, err) 179 180 expected := &SuccessMessage{Success: "Record deleted successfully"} 181 assert.Equal(t, expected, msg) 182} 183 184func TestTxtRecordService_Search(t *testing.T) { 185 client, handler, tearDown := setupAPIMock() 186 defer tearDown() 187 188 handler.HandleFunc("/v1/domains/12345/records/txt/search", func(rw http.ResponseWriter, req *http.Request) { 189 if req.Method != http.MethodGet { 190 http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest) 191 return 192 } 193 194 file, err := os.Open("./fixtures/records-Search.json") 195 if err != nil { 196 http.Error(rw, err.Error(), http.StatusInternalServerError) 197 return 198 } 199 defer func() { _ = file.Close() }() 200 201 _, err = io.Copy(rw, file) 202 if err != nil { 203 http.Error(rw, err.Error(), http.StatusInternalServerError) 204 return 205 } 206 }) 207 208 records, err := client.TxtRecords.Search(12345, Exact, "test") 209 require.NoError(t, err) 210 211 recordsJSON, err := json.Marshal(records) 212 require.NoError(t, err) 213 214 expectedContent, err := ioutil.ReadFile("./fixtures/records-Search.json") 215 require.NoError(t, err) 216 217 assert.JSONEq(t, string(expectedContent), string(recordsJSON)) 218} 219