github.com/tommi2day/gomodules@v1.13.2-0.20240423190010-b7d55d252a27/hmlib/xmlapi_test.go (about) 1 package hmlib 2 3 import ( 4 "encoding/xml" 5 "testing" 6 7 "github.com/jarcoal/httpmock" 8 "github.com/stretchr/testify/assert" 9 "github.com/tommi2day/gomodules/test" 10 ) 11 12 const mockTestEndpoint = "/addons/xmlapi/test.cgi" 13 const mockTestResponse = `<test><status><message>Working</message><code>200</code></status></test>` 14 const mockInvalidEndpoint = "/addons/xmlapi/invalid.cgi" 15 16 type mockTest struct { 17 XMLName xml.Name `xml:"test"` 18 Status mockStatus `xml:"status"` 19 } 20 type mockStatus struct { 21 XMLName xml.Name `xml:"status"` 22 Message string `xml:"message"` 23 Code string `xml:"code"` 24 } 25 26 func TestQueryAPI(t *testing.T) { 27 var err error 28 var result mockTest 29 test.Testinit(t) 30 31 httpmock.ActivateNonDefault(httpClient.GetClient()) 32 defer httpmock.DeactivateAndReset() 33 t.Run("QueryAPI with empty token", func(t *testing.T) { 34 hmToken = "" 35 err = QueryAPI(mockTestEndpoint, &result, nil) 36 t.Log(err) 37 assert.Error(t, err, "QueryAPI should return an error") 38 }) 39 40 hmToken = MockToken 41 t.Run("QueryAPI with empty endpoint", func(t *testing.T) { 42 err = QueryAPI("", &result, nil) 43 t.Log(err) 44 assert.Error(t, err, "QueryAPI should return an error") 45 }) 46 t.Run("QueryAPI with empty url", func(t *testing.T) { 47 hmURL = "" 48 err = QueryAPI(mockTestEndpoint, &result, nil) 49 t.Log(err) 50 assert.Error(t, err, "QueryAPI should return an error") 51 }) 52 hmURL = MockURL 53 t.Run("QueryAPI with valid endpoint", func(t *testing.T) { 54 response := mockTestResponse 55 responder := httpmock.NewStringResponder(200, response) 56 fakeURL := MockURL + mockTestEndpoint 57 httpmock.RegisterResponder("GET", fakeURL, responder) 58 59 err = QueryAPI(mockTestEndpoint, &result, nil) 60 t.Log(result) 61 assert.NoErrorf(t, err, "QueryAPI should not return an error:%s", err) 62 assert.Equal(t, "Working", result.Status.Message, "QueryAPI should return a valid result") 63 }) 64 t.Run("QueryAPI with invalid endpoint", func(t *testing.T) { 65 response := "" 66 responder := httpmock.NewStringResponder(404, response) 67 fakeURL := MockURL + mockInvalidEndpoint 68 httpmock.RegisterResponder("GET", fakeURL, responder) 69 err = QueryAPI(mockInvalidEndpoint, &result, nil) 70 t.Log(err) 71 assert.Error(t, err, "QueryAPI should return an error") 72 assert.Contains(t, err.Error(), "invalid status code: 404", "QueryAPI should return an error") 73 }) 74 }