110 lines
3.4 KiB
Go
110 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"github.com/stretchr/testify/assert"
|
|
"go-nkode/core/api"
|
|
m "go-nkode/core/model"
|
|
"go-nkode/core/nkode"
|
|
"io"
|
|
"net/http"
|
|
"testing"
|
|
)
|
|
|
|
func TestApi(t *testing.T) {
|
|
base := "http://localhost:8080"
|
|
newCustomerBody := m.NewCustomerPost{
|
|
KeypadSize: m.KeypadSize{NumbOfKeys: 5, AttrsPerKey: 10},
|
|
NKodePolicy: m.NewDefaultNKodePolicy(),
|
|
}
|
|
|
|
var customerResp m.CreateNewCustomerResp
|
|
testApiCall(t, base+api.CreateNewCustomer, newCustomerBody, &customerResp)
|
|
|
|
signupInterfaceBody := m.GetLoginInterfacePost{CustomerId: customerResp.CustomerId}
|
|
var signupInterfaceResp m.GenerateSignupInterfaceResp
|
|
testApiCall(t, base+api.GenerateSignupInterface, signupInterfaceBody, &signupInterfaceResp)
|
|
|
|
username := m.Username("test_username")
|
|
passcodeLen := 4
|
|
setInterface := signupInterfaceResp.UserInterface
|
|
userPasscode := setInterface[:passcodeLen]
|
|
keypadSize := m.KeypadSize{NumbOfKeys: 5, AttrsPerKey: 5}
|
|
setKeySelection, err := nkode.SelectKeyByAttrIdx(setInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
setNKodeBody := m.SetNKodePost{
|
|
CustomerId: customerResp.CustomerId,
|
|
Username: username,
|
|
SessionId: signupInterfaceResp.SessionId,
|
|
KeySelection: setKeySelection,
|
|
}
|
|
var setNKodeResp m.SetNKodeResp
|
|
testApiCall(t, base+api.SetNKode, setNKodeBody, &setNKodeResp)
|
|
confirmInterface := setNKodeResp.UserInterface
|
|
confirmKeySelection, err := nkode.SelectKeyByAttrIdx(confirmInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
confirmNKodeBody := m.ConfirmNKodePost{
|
|
CustomerId: customerResp.CustomerId,
|
|
KeySelection: confirmKeySelection,
|
|
SessionId: signupInterfaceResp.SessionId,
|
|
}
|
|
testApiCall(t, base+api.ConfirmNKode, confirmNKodeBody, nil)
|
|
|
|
loginInterfaceBody := m.GetLoginInterfacePost{
|
|
CustomerId: customerResp.CustomerId,
|
|
Username: username,
|
|
}
|
|
|
|
var loginInterfaceResp m.GetLoginInterfaceResp
|
|
testApiCall(t, base+api.GetLoginInterface, loginInterfaceBody, &loginInterfaceResp)
|
|
|
|
keypadSize = m.KeypadSize{NumbOfKeys: 5, AttrsPerKey: 10}
|
|
loginKeySelection, err := nkode.SelectKeyByAttrIdx(loginInterfaceResp.UserInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
loginBody := m.LoginPost{
|
|
CustomerId: customerResp.CustomerId,
|
|
Username: username,
|
|
KeySelection: loginKeySelection,
|
|
}
|
|
|
|
testApiCall(t, base+api.Login, loginBody, nil)
|
|
|
|
renewBody := m.RenewAttributesPost{CustomerId: customerResp.CustomerId}
|
|
testApiCall(t, base+api.RenewAttributes, renewBody, nil)
|
|
|
|
loginKeySelection, err = nkode.SelectKeyByAttrIdx(loginInterfaceResp.UserInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
loginBody = m.LoginPost{
|
|
CustomerId: customerResp.CustomerId,
|
|
Username: username,
|
|
KeySelection: loginKeySelection,
|
|
}
|
|
|
|
testApiCall(t, base+api.Login, loginBody, nil)
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|