From 9c29ff7a217fce968dab68bf0bbacad866a98506 Mon Sep 17 00:00:00 2001
From: meskio <meskio@sindominio.net>
Date: Sun, 4 Oct 2020 19:20:04 +0200
Subject: [PATCH] Use to members for test

---
 api/api_test.go      | 36 +++++++++++++++++++++++++++---------
 api/auth_test.go     | 10 +++++-----
 api/member_test.go   | 39 +++++++++++++++++++++++++++++----------
 api/product_test.go  |  6 +++---
 api/purchase_test.go |  2 +-
 api/topup_test.go    |  6 +++---
 6 files changed, 68 insertions(+), 31 deletions(-)

diff --git a/api/api_test.go b/api/api_test.go
index 97378a6..f2c6403 100644
--- a/api/api_test.go
+++ b/api/api_test.go
@@ -30,12 +30,13 @@ func TestInit(t *testing.T) {
 }
 
 type testAPI struct {
-	t        *testing.T
-	baseURL  string
-	client   *http.Client
-	server   *httptest.Server
-	testPath string
-	token    string
+	t          *testing.T
+	baseURL    string
+	client     *http.Client
+	server     *httptest.Server
+	testPath   string
+	token      string
+	tokenAdmin string
 }
 
 func newTestAPI(t *testing.T) *testAPI {
@@ -54,18 +55,35 @@ func newTestAPI(t *testing.T) *testAPI {
 
 	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
 		"num":  testMember.Num,
-		"role": "admin",
+		"role": "",
 		"exp":  time.Now().Add(time.Hour * 24).Unix(),
 	})
 	tokenString, err := token.SignedString([]byte(signKey))
 	if err != nil {
 		t.Fatal("Can't generate token:", err)
 	}
+	tokenAdmin := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
+		"num":  testMemberAdmin.Num,
+		"role": "admin",
+		"exp":  time.Now().Add(time.Hour * 24).Unix(),
+	})
+	tokenAdminString, err := tokenAdmin.SignedString([]byte(signKey))
+	if err != nil {
+		t.Fatal("Can't generate token:", err)
+	}
 
-	return &testAPI{t, server.URL, &http.Client{}, server, testPath, tokenString}
+	return &testAPI{t, server.URL, &http.Client{}, server, testPath, tokenString, tokenAdminString}
 }
 
 func (ta *testAPI) do(method string, url string, body interface{}, respBody interface{}) *http.Response {
+	return ta.doToken(ta.token, method, url, body, respBody)
+}
+
+func (ta *testAPI) doAdmin(method string, url string, body interface{}, respBody interface{}) *http.Response {
+	return ta.doToken(ta.tokenAdmin, method, url, body, respBody)
+}
+
+func (ta *testAPI) doToken(token string, method string, url string, body interface{}, respBody interface{}) *http.Response {
 	var reader io.Reader
 	if body != nil {
 		var w io.WriteCloser
@@ -79,7 +97,7 @@ func (ta *testAPI) do(method string, url string, body interface{}, respBody inte
 	if err != nil {
 		ta.t.Fatal("Can't build request", method, url, err)
 	}
-	req.Header.Add("x-authentication", ta.token)
+	req.Header.Add("x-authentication", token)
 	resp, err := ta.client.Do(req)
 	if err != nil {
 		ta.t.Fatal("HTTP query failed", method, url, err)
diff --git a/api/auth_test.go b/api/auth_test.go
index a7a9d36..6f70a08 100644
--- a/api/auth_test.go
+++ b/api/auth_test.go
@@ -21,14 +21,14 @@ func TestSignIn(t *testing.T) {
 		Member Member `json:"member"`
 	}
 	jsonAuth := creds{
-		Name:     testMember.Name,
-		Password: testMember.Password,
+		Name:     testMemberAdmin.Name,
+		Password: testMemberAdmin.Password,
 	}
 	resp = tapi.do("POST", "/signin", jsonAuth, &respMember)
 	if resp.StatusCode != http.StatusOK {
 		t.Fatal("Can't sign in:", resp.Status)
 	}
-	if respMember.Member.Name != testMember.Name {
+	if respMember.Member.Name != testMemberAdmin.Name {
 		t.Fatal("Unexpected member:", respMember)
 	}
 	tapi.token = respMember.Token
@@ -52,8 +52,8 @@ func TestGetToken(t *testing.T) {
 	}
 
 	tapi.token = body.Token
-	resp = tapi.do("GET", "/member", nil, nil)
+	resp = tapi.do("GET", "/transaction/mine", nil, nil)
 	if resp.StatusCode != http.StatusOK {
-		t.Fatal("Can't get members:", resp.Status)
+		t.Fatal("Can't get transaction:", resp.Status)
 	}
 }
diff --git a/api/member_test.go b/api/member_test.go
index 7ef260d..b58cfe1 100644
--- a/api/member_test.go
+++ b/api/member_test.go
@@ -13,24 +13,38 @@ var testMember = struct {
 		Num:     10,
 		Name:    "foo",
 		Email:   "foo@example.com",
-		Role:    "admin",
+		Role:    "",
 		Balance: 10000,
 	},
 	Password: "password",
 }
 
+var testMemberAdmin = struct {
+	Member
+	Password string `json:"password"`
+}{
+	Member: Member{
+		Num:     20,
+		Name:    "bar",
+		Email:   "bar@example.com",
+		Role:    "admin",
+		Balance: 5000,
+	},
+	Password: "password",
+}
+
 func TestMemberAddList(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 
 	tapi.addTestMember()
 	var members []Member
-	resp := tapi.do("GET", "/member", nil, &members)
+	resp := tapi.doAdmin("GET", "/member", nil, &members)
 	if resp.StatusCode != http.StatusOK {
 		t.Fatal("Can't get members:", resp.Status)
 	}
 
-	if len(members) != 1 {
+	if len(members) != 2 {
 		t.Fatal("Wrong number of members", len(members), members)
 	}
 	if members[0].Name != "foo" {
@@ -45,26 +59,26 @@ func TestMemberGetDelete(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 
-	resp := tapi.do("GET", "/member/10", nil, nil)
+	resp := tapi.doAdmin("GET", "/member/10", nil, nil)
 	if resp.StatusCode != http.StatusNotFound {
 		t.Error("Expected not found:", resp.Status, resp.Body)
 	}
 	tapi.addTestMember()
 
 	var gotMember Member
-	resp = tapi.do("GET", "/member/10", nil, &gotMember)
+	resp = tapi.doAdmin("GET", "/member/10", nil, &gotMember)
 	if resp.StatusCode != http.StatusOK {
 		t.Error("Can't find the member:", resp.Status)
 	}
 	if gotMember.Num != 10 {
 		t.Error("Wrong member:", gotMember.Num)
 	}
-	resp = tapi.do("DELETE", "/member/10", nil, nil)
+	resp = tapi.doAdmin("DELETE", "/member/10", nil, nil)
 	if resp.StatusCode != http.StatusOK {
 		t.Error("Can't find the member:", resp.Status)
 	}
 
-	resp = tapi.do("GET", "/member/10", nil, nil)
+	resp = tapi.doAdmin("GET", "/member/10", nil, nil)
 	if resp.StatusCode != http.StatusNotFound {
 		t.Error("Expected not found after delete:", resp.Status, resp.Body)
 	}
@@ -77,13 +91,13 @@ func TestMemberUpdate(t *testing.T) {
 	tapi.addTestMember()
 	member := testMember
 	member.Balance = 1000
-	resp := tapi.do("PUT", "/member/10", member, nil)
+	resp := tapi.doAdmin("PUT", "/member/10", member, nil)
 	if resp.StatusCode != http.StatusAccepted {
 		t.Fatal("Can't update member:", resp.Status)
 	}
 
 	var gotMember Member
-	resp = tapi.do("GET", "/member/10", nil, &gotMember)
+	resp = tapi.doAdmin("GET", "/member/10", nil, &gotMember)
 	if resp.StatusCode != http.StatusOK {
 		t.Error("Can't find the member:", resp.Status)
 	}
@@ -93,7 +107,12 @@ func TestMemberUpdate(t *testing.T) {
 }
 
 func (tapi *testAPI) addTestMember() {
-	resp := tapi.do("POST", "/member", testMember, nil)
+	resp := tapi.doAdmin("POST", "/member", testMember, nil)
+	if resp.StatusCode != http.StatusCreated {
+		tapi.t.Fatal("Can't create member:", resp.Status)
+	}
+
+	resp = tapi.doAdmin("POST", "/member", testMemberAdmin, nil)
 	if resp.StatusCode != http.StatusCreated {
 		tapi.t.Fatal("Can't create member:", resp.Status)
 	}
diff --git a/api/product_test.go b/api/product_test.go
index dbf7411..024a39d 100644
--- a/api/product_test.go
+++ b/api/product_test.go
@@ -52,7 +52,7 @@ func TestProductGetDelete(t *testing.T) {
 	if gotProduct.Code != testProduct.Code {
 		t.Error("Wrong product:", gotProduct.Code)
 	}
-	resp = tapi.do("DELETE", "/product/234", nil, nil)
+	resp = tapi.doAdmin("DELETE", "/product/234", nil, nil)
 	if resp.StatusCode != http.StatusOK {
 		t.Error("Can't find the product:", resp.Status)
 	}
@@ -70,7 +70,7 @@ func TestProductUpdate(t *testing.T) {
 
 	product := testProduct
 	product.Stock = testProduct.Stock - 5
-	resp := tapi.do("PUT", "/product/234", product, nil)
+	resp := tapi.doAdmin("PUT", "/product/234", product, nil)
 	if resp.StatusCode != http.StatusAccepted {
 		t.Fatal("Can't update product:", resp.Status)
 	}
@@ -86,7 +86,7 @@ func TestProductUpdate(t *testing.T) {
 }
 
 func (tapi *testAPI) addTestProducts() {
-	resp := tapi.do("POST", "/product", testProduct, nil)
+	resp := tapi.doAdmin("POST", "/product", testProduct, nil)
 	if resp.StatusCode != http.StatusCreated {
 		tapi.t.Fatal("Can't create product:", resp.Status)
 	}
diff --git a/api/purchase_test.go b/api/purchase_test.go
index 3e979cb..92a4a42 100644
--- a/api/purchase_test.go
+++ b/api/purchase_test.go
@@ -53,7 +53,7 @@ func TestPurchaseAddListMine(t *testing.T) {
 	}
 
 	var member Member
-	resp = tapi.do("GET", "/member/10", nil, &member)
+	resp = tapi.do("GET", "/member/me", nil, &member)
 	if resp.StatusCode != http.StatusOK {
 		t.Error("Can't find the member:", resp.Status)
 	}
diff --git a/api/topup_test.go b/api/topup_test.go
index e58883f..1801df5 100644
--- a/api/topup_test.go
+++ b/api/topup_test.go
@@ -16,7 +16,7 @@ func TestTopupAddListMine(t *testing.T) {
 		"comment": "my topup",
 		"ammount": 20,
 	}
-	resp := tapi.do("POST", "/topup", topup, nil)
+	resp := tapi.doAdmin("POST", "/topup", topup, nil)
 	if resp.StatusCode != http.StatusCreated {
 		t.Fatal("Can't create topup:", resp.Status)
 	}
@@ -32,7 +32,7 @@ func TestTopupAddListMine(t *testing.T) {
 	if transactions[0].Total != 20 {
 		t.Error("Wrong total:", transactions[0].Total)
 	}
-	if transactions[0].Topup.MemberNum != testMember.Num {
+	if transactions[0].Topup.MemberNum != testMemberAdmin.Num {
 		t.Error("Wrong topup member:", transactions[0].Topup.MemberNum)
 	}
 	if transactions[0].Topup.Comment != "my topup" {
@@ -40,7 +40,7 @@ func TestTopupAddListMine(t *testing.T) {
 	}
 
 	var member Member
-	resp = tapi.do("GET", "/member/10", nil, &member)
+	resp = tapi.do("GET", "/member/me", nil, &member)
 	if resp.StatusCode != http.StatusOK {
 		t.Error("Can't find the member:", resp.Status)
 	}
-- 
GitLab