github.com/gophercloud/gophercloud@v1.11.0/openstack/orchestration/v1/apiversions/testing/requests_test.go (about)

     1  package testing
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"testing"
     7  
     8  	"github.com/gophercloud/gophercloud"
     9  	"github.com/gophercloud/gophercloud/openstack/orchestration/v1/apiversions"
    10  	"github.com/gophercloud/gophercloud/pagination"
    11  	th "github.com/gophercloud/gophercloud/testhelper"
    12  	fake "github.com/gophercloud/gophercloud/testhelper/client"
    13  )
    14  
    15  func TestListVersions(t *testing.T) {
    16  	th.SetupHTTP()
    17  	defer th.TeardownHTTP()
    18  
    19  	th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    20  		th.TestMethod(t, r, "GET")
    21  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    22  
    23  		w.Header().Add("Content-Type", "application/json")
    24  		w.WriteHeader(http.StatusOK)
    25  
    26  		fmt.Fprintf(w, `
    27  {
    28      "versions": [
    29          {
    30              "status": "CURRENT",
    31              "id": "v1.0",
    32              "links": [
    33                  {
    34                      "href": "http://23.253.228.211:8000/v1",
    35                      "rel": "self"
    36                  }
    37              ]
    38          }
    39      ]
    40  }`)
    41  	})
    42  
    43  	count := 0
    44  
    45  	apiversions.ListVersions(fake.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
    46  		count++
    47  		actual, err := apiversions.ExtractAPIVersions(page)
    48  		if err != nil {
    49  			t.Errorf("Failed to extract API versions: %v", err)
    50  			return false, err
    51  		}
    52  
    53  		expected := []apiversions.APIVersion{
    54  			{
    55  				Status: "CURRENT",
    56  				ID:     "v1.0",
    57  				Links: []gophercloud.Link{
    58  					{
    59  						Href: "http://23.253.228.211:8000/v1",
    60  						Rel:  "self",
    61  					},
    62  				},
    63  			},
    64  		}
    65  
    66  		th.AssertDeepEquals(t, expected, actual)
    67  
    68  		return true, nil
    69  	})
    70  
    71  	if count != 1 {
    72  		t.Errorf("Expected 1 page, got %d", count)
    73  	}
    74  }
    75  
    76  func TestNonJSONCannotBeExtractedIntoAPIVersions(t *testing.T) {
    77  	th.SetupHTTP()
    78  	defer th.TeardownHTTP()
    79  
    80  	th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    81  		w.WriteHeader(http.StatusOK)
    82  	})
    83  
    84  	apiversions.ListVersions(fake.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
    85  		if _, err := apiversions.ExtractAPIVersions(page); err == nil {
    86  			t.Fatalf("Expected error, got nil")
    87  		}
    88  		return true, nil
    89  	})
    90  }