github.com/fanux/shipyard@v0.0.0-20161009071005-6515ce223235/controller/api/accounts_test.go (about)

     1  package api
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"fmt"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"testing"
    10  
    11  	"github.com/shipyard/shipyard/auth"
    12  	"github.com/shipyard/shipyard/controller/mock_test"
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  func TestApiGetAccounts(t *testing.T) {
    17  	api, err := getTestApi()
    18  	if err != nil {
    19  		t.Fatal(err)
    20  	}
    21  
    22  	ts := httptest.NewServer(http.HandlerFunc(api.accounts))
    23  	defer ts.Close()
    24  
    25  	res, err := http.Get(ts.URL)
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  
    30  	assert.Equal(t, res.StatusCode, 200, "expected response code 200")
    31  	accts := []*auth.Account{}
    32  	if err := json.NewDecoder(res.Body).Decode(&accts); err != nil {
    33  		t.Fatal(err)
    34  	}
    35  
    36  	assert.NotEqual(t, len(accts), 0, "expected accounts; received none")
    37  
    38  	acct := accts[0]
    39  
    40  	assert.Equal(t, acct.ID, mock_test.TestAccount.ID, fmt.Sprintf("expected ID %s; got %s", mock_test.TestAccount.ID, acct.ID))
    41  }
    42  
    43  func TestApiPostAccounts(t *testing.T) {
    44  	api, err := getTestApi()
    45  	if err != nil {
    46  		t.Fatal(err)
    47  	}
    48  
    49  	ts := httptest.NewServer(http.HandlerFunc(api.saveAccount))
    50  	defer ts.Close()
    51  
    52  	data := []byte(`{"username": "testuser", "password": "foo"}`)
    53  
    54  	res, err := http.Post(ts.URL, "application/json", bytes.NewBuffer(data))
    55  	if err != nil {
    56  		t.Fatal(err)
    57  	}
    58  
    59  	assert.Equal(t, res.StatusCode, 204, "expected response code 204")
    60  }
    61  
    62  func TestApiDeleteAccount(t *testing.T) {
    63  	api, err := getTestApi()
    64  	if err != nil {
    65  		t.Fatal(err)
    66  	}
    67  
    68  	transport := &http.Transport{}
    69  	client := &http.Client{Transport: transport}
    70  
    71  	ts := httptest.NewServer(http.HandlerFunc(api.saveAccount))
    72  	defer ts.Close()
    73  
    74  	data := []byte(`{"username": "testuser", "password": "foo"}`)
    75  
    76  	req, err := http.NewRequest("DELETE", ts.URL, bytes.NewBuffer(data))
    77  	if err != nil {
    78  		t.Fatal(err)
    79  	}
    80  
    81  	res, err := client.Do(req)
    82  	if err != nil {
    83  		t.Fatal(err)
    84  	}
    85  
    86  	assert.Equal(t, res.StatusCode, 204, "expected response code 204")
    87  }