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  }