reorganize code

This commit is contained in:
2024-08-23 10:18:39 -05:00
parent 6a56b2300a
commit dbc8ca3d29
20 changed files with 476 additions and 214 deletions

View File

@@ -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)
}
}