reorganize code
This commit is contained in:
75
main_test.go
75
main_test.go
@@ -1,14 +1,85 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"go-nkode/core/api"
|
||||
"go-nkode/core/model"
|
||||
"go-nkode/core/nkode"
|
||||
"io"
|
||||
"net/http"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMain(t *testing.T) {
|
||||
func TestApi(t *testing.T) {
|
||||
base := "http://localhost:8080"
|
||||
newCustomerBody := model.NewCustomerPost{
|
||||
KeypadSize: model.KeypadSize{NumbOfKeys: 5, AttrsPerKey: 10},
|
||||
NKodePolicy: model.NewDefaultNKodePolicy(),
|
||||
}
|
||||
|
||||
resp, err := http.Post(base+api.CreateNewCustomer, "application/json")
|
||||
var customerResp model.CreateNewCustomerResp
|
||||
testApiCall(t, base+api.CreateNewCustomer, newCustomerBody, &customerResp)
|
||||
|
||||
signupInterfaceBody := model.GetLoginInterfacePost{CustomerId: customerResp.CustomerId}
|
||||
var signupInterfaceResp model.GenerateSignupInterfaceResp
|
||||
testApiCall(t, base+api.GenerateSignupInterface, signupInterfaceBody, &signupInterfaceResp)
|
||||
|
||||
username := "test_username"
|
||||
passcodeLen := 4
|
||||
setInterface := signupInterfaceResp.UserInterface
|
||||
userPasscode := setInterface[:passcodeLen]
|
||||
keypadSize := model.KeypadSize{NumbOfKeys: 5, AttrsPerKey: 5}
|
||||
setKeySelection, err := nkode.SelectKeyByAttrIdx(setInterface, userPasscode, keypadSize)
|
||||
assert.NoError(t, err)
|
||||
setNKodeBody := model.SetNKodePost{
|
||||
CustomerId: customerResp.CustomerId,
|
||||
Username: username,
|
||||
SessionId: signupInterfaceResp.SessionId,
|
||||
KeySelection: setKeySelection,
|
||||
}
|
||||
var setNKodeResp model.SetNKodeResp
|
||||
testApiCall(t, base+api.SetNKode, setNKodeBody, &setNKodeResp)
|
||||
confirmInterface := setNKodeResp.UserInterface
|
||||
confirmKeySelection, err := nkode.SelectKeyByAttrIdx(confirmInterface, userPasscode, keypadSize)
|
||||
assert.NoError(t, err)
|
||||
confirmNKodeBody := model.ConfirmNKodePost{
|
||||
CustomerId: customerResp.CustomerId,
|
||||
KeySelection: confirmKeySelection,
|
||||
SessionId: signupInterfaceResp.SessionId,
|
||||
}
|
||||
testApiCall(t, base+api.ConfirmNKode, confirmNKodeBody, nil)
|
||||
|
||||
loginInterfaceBody := model.GetLoginInterfacePost{
|
||||
CustomerId: customerResp.CustomerId,
|
||||
Username: username,
|
||||
}
|
||||
|
||||
keypadSize = model.KeypadSize{NumbOfKeys: 5, AttrsPerKey: 10}
|
||||
|
||||
}
|
||||
|
||||
func Unmarshal(t *testing.T, resp *http.Response, data any) {
|
||||
responseBody, err := io.ReadAll(resp.Body)
|
||||
assert.NoError(t, err)
|
||||
err = json.Unmarshal(responseBody, data)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func Marshal(t *testing.T, data any) *bytes.Reader {
|
||||
jsonBytes, err := json.Marshal(data)
|
||||
assert.NoError(t, err)
|
||||
reader := bytes.NewReader(jsonBytes)
|
||||
return reader
|
||||
}
|
||||
|
||||
func testApiCall(t *testing.T, endpointStr string, postBody any, respBody any) {
|
||||
reader := Marshal(t, postBody)
|
||||
resp, err := http.Post(endpointStr, "application/json", reader)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, resp.StatusCode, http.StatusOK)
|
||||
if respBody != nil {
|
||||
Unmarshal(t, resp, respBody)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user