package main import ( "errors" "fmt" "github.com/stretchr/testify/assert" "go-nkode/models" "go-nkode/util" "testing" ) func SelectKeyByAttrIdx(interfaceUser []int, passcodeIdxs []int, keypadSize models.KeypadSize) ([]int, error) { selectedKeys := make([]int, len(passcodeIdxs)) for idx := range passcodeIdxs { attrIdx := util.IndexOf[int](interfaceUser, passcodeIdxs[idx]) keyNumb := attrIdx / keypadSize.AttrsPerKey if keyNumb < 0 || keyNumb >= keypadSize.NumbOfKeys { return nil, errors.New(fmt.Sprintf("index key number: %d out of range 0-%d", keyNumb, keypadSize.NumbOfKeys-1)) } selectedKeys[idx] = keyNumb } return selectedKeys, nil } func TestNewCustomerAttributes(t *testing.T) { keypad := models.KeypadSize{AttrsPerKey: 10, NumbOfKeys: 5} _, nil := NewCustomerAttributes(keypad) assert.NoError(t, nil) } func TestCustomer_ValidKeyEntry(t *testing.T) { keypadSize := models.KeypadSize{AttrsPerKey: 10, NumbOfKeys: 7} nkodePolicy := models.NewDefaultNKodePolicy() customer, err := NewCustomer(keypadSize, nkodePolicy) assert.NoError(t, err) newUserInterface, err := NewUserInterface(customer.Attributes.KeypadSize) assert.NoError(t, err) username := "testing123" passcodeIdx := []int{0, 1, 2, 3} err = customer.AddNewUser(username, passcodeIdx, *newUserInterface) assert.NoError(t, err) userLoginInterface, err := customer.GetLoginInterface(username) assert.NoError(t, err) selectedKeys, err := SelectKeyByAttrIdx(userLoginInterface, passcodeIdx, keypadSize) assert.NoError(t, err) validatedPasscode, err := customer.ValidKeyEntry(username, selectedKeys) assert.NoError(t, err) assert.Equal(t, len(validatedPasscode), len(passcodeIdx)) for idx := range validatedPasscode { assert.Equal(t, validatedPasscode[idx], passcodeIdx[idx]) } } func TestCustomer_IsValidNKode(t *testing.T) { keypadSize := models.KeypadSize{AttrsPerKey: 10, NumbOfKeys: 7} nkodePolicy := models.NewDefaultNKodePolicy() customer, err := NewCustomer(keypadSize, nkodePolicy) assert.NoError(t, err) newUserInterface, err := NewUserInterface(customer.Attributes.KeypadSize) assert.NoError(t, err) username := "testing123" passcodeIdx := []int{0, 1, 2, 3} err = customer.AddNewUser(username, passcodeIdx, *newUserInterface) assert.NoError(t, err) err = customer.IsValidNKode(passcodeIdx) assert.NoError(t, err) }