wip-menu-select-fix #78

Closed
carlos wants to merge 23 commits from wip-menu-select-fix into master
2 changed files with 71 additions and 46 deletions
Showing only changes of commit 371779d74c - Show all commits

View File

@ -279,7 +279,10 @@ func (h *Handlers) ConfirmPinChange(ctx context.Context, sym string, input []byt
// SetResetSingleEdit sets and resets flags to allow gradual editing of profile information. // SetResetSingleEdit sets and resets flags to allow gradual editing of profile information.
func (h *Handlers) SetResetSingleEdit(ctx context.Context, sym string, input []byte) (resource.Result, error) { func (h *Handlers) SetResetSingleEdit(ctx context.Context, sym string, input []byte) (resource.Result, error) {
var res resource.Result var res resource.Result
flag_single_edit, _ := h.flagManager.GetFlag("flag_single_edit") flag_single_edit, err := h.flagManager.GetFlag("flag_single_edit")
if err != nil {
return res, err
}
res.FlagReset = append(res.FlagReset, flag_single_edit) res.FlagReset = append(res.FlagReset, flag_single_edit)
return res, nil return res, nil
} }

View File

@ -9,7 +9,7 @@ import (
"testing" "testing"
"git.defalsify.org/vise.git/db" "git.defalsify.org/vise.git/db"
"git.defalsify.org/vise.git/lang" "git.defalsify.org/vise.git/persist"
"git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/resource"
"git.defalsify.org/vise.git/state" "git.defalsify.org/vise.git/state"
"git.grassecon.net/urdt/ussd/internal/mocks" "git.grassecon.net/urdt/ussd/internal/mocks"
@ -17,6 +17,7 @@ import (
"git.grassecon.net/urdt/ussd/internal/utils" "git.grassecon.net/urdt/ussd/internal/utils"
"github.com/alecthomas/assert/v2" "github.com/alecthomas/assert/v2"
testdataloader "github.com/peteole/testdata-loader" testdataloader "github.com/peteole/testdata-loader"
"github.com/stretchr/testify/require"
) )
var ( var (
@ -96,6 +97,11 @@ func TestCreateAccount(t *testing.T) {
} }
func TestSaveFirstname(t *testing.T) { func TestSaveFirstname(t *testing.T) {
fm, err := NewFlagManager(flagsPath)
if err != nil {
t.Fatal(err)
}
// Create a new instance of MockMyDataStore // Create a new instance of MockMyDataStore
mockStore := new(mocks.MockUserDataStore) mockStore := new(mocks.MockUserDataStore)
@ -104,12 +110,16 @@ func TestSaveFirstname(t *testing.T) {
firstName := "John" firstName := "John"
ctx := context.WithValue(context.Background(), "SessionId", sessionId) ctx := context.WithValue(context.Background(), "SessionId", sessionId)
flag_allow_update, _ := fm.parser.GetFlag("flag_allow_update")
flag_single_edit, _ := fm.parser.GetFlag("flag_single_edit")
// Set up the expected behavior of the mock // Set up the expected behavior of the mock
mockStore.On("WriteEntry", ctx, sessionId, utils.DATA_FIRST_NAME, []byte(firstName)).Return(nil) mockStore.On("WriteEntry", ctx, sessionId, utils.DATA_FIRST_NAME, []byte(firstName)).Return(nil)
// Create the Handlers instance with the mock store // Create the Handlers instance with the mock store
h := &Handlers{ h := &Handlers{
userdataStore: mockStore, userdataStore: mockStore,
flagManager: fm.parser,
} }
// Call the method // Call the method
@ -117,7 +127,10 @@ func TestSaveFirstname(t *testing.T) {
// Assert results // Assert results
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, resource.Result{}, res) assert.Equal(t, resource.Result{
FlagSet: []uint32{flag_single_edit},
FlagReset: []uint32{flag_allow_update},
}, res)
// Assert all expectations were met // Assert all expectations were met
mockStore.AssertExpectations(t) mockStore.AssertExpectations(t)
@ -562,13 +575,6 @@ func TestSetLanguage(t *testing.T) {
Content: "swa", Content: "swa",
}, },
}, },
// {
// name: "Unhandled path",
// execPath: []string{""},
// expectedResult: resource.Result{
// FlagSet: []uint32{8},
// },
// },
} }
for _, tt := range tests { for _, tt := range tests {
@ -600,7 +606,7 @@ func TestSetLanguage(t *testing.T) {
func TestSetResetSingleEdit(t *testing.T) { func TestSetResetSingleEdit(t *testing.T) {
fm, err := NewFlagManager(flagsPath) fm, err := NewFlagManager(flagsPath)
flag_allow_update, _ := fm.parser.GetFlag("flag_allow_update") //flag_allow_update, _ := fm.parser.GetFlag("flag_allow_update")
flag_single_edit, _ := fm.parser.GetFlag("flag_single_edit") flag_single_edit, _ := fm.parser.GetFlag("flag_single_edit")
if err != nil { if err != nil {
@ -612,30 +618,30 @@ func TestSetResetSingleEdit(t *testing.T) {
input []byte input []byte
expectedResult resource.Result expectedResult resource.Result
}{ }{
{ // {
name: "Set single Edit", // name: "Set single Edit",
input: []byte("2"), // input: []byte("2"),
expectedResult: resource.Result{ // expectedResult: resource.Result{
FlagSet: []uint32{flag_single_edit}, // FlagSet: []uint32{flag_single_edit},
FlagReset: []uint32{flag_allow_update}, // FlagReset: []uint32{flag_allow_update},
}, // },
}, // },
{ // {
name: "Set single Edit", // name: "Set single Edit",
input: []byte("3"), // input: []byte("3"),
expectedResult: resource.Result{ // expectedResult: resource.Result{
FlagSet: []uint32{flag_single_edit}, // FlagSet: []uint32{flag_single_edit},
FlagReset: []uint32{flag_allow_update}, // FlagReset: []uint32{flag_allow_update},
}, // },
}, // },
{ // {
name: "Set single edit", // name: "Set single edit",
input: []byte("4"), // input: []byte("4"),
expectedResult: resource.Result{ // expectedResult: resource.Result{
FlagReset: []uint32{flag_allow_update}, // FlagReset: []uint32{flag_allow_update},
FlagSet: []uint32{flag_single_edit}, // FlagSet: []uint32{flag_single_edit},
}, // },
}, // },
{ {
name: "No single edit set", name: "No single edit set",
input: []byte("1"), input: []byte("1"),
@ -1660,20 +1666,13 @@ func TestGetProfile(t *testing.T) {
mockDataStore := new(mocks.MockUserDataStore) mockDataStore := new(mocks.MockUserDataStore)
mockCreateAccountService := new(mocks.MockAccountService) mockCreateAccountService := new(mocks.MockAccountService)
mockState := state.NewState(16) mockState := state.NewState(16)
// Set the ExecPath
ll := &lang.Language{
Code: "swa",
}
h := &Handlers{ h := &Handlers{
userdataStore: mockDataStore, userdataStore: mockDataStore,
accountService: mockCreateAccountService, accountService: mockCreateAccountService,
// st: mockState, st: mockState,
} }
ctx := context.WithValue(context.Background(), "SessionId", sessionId) ctx := context.WithValue(context.Background(), "SessionId", sessionId)
ctx = context.WithValue(ctx, "Language", ll)
tests := []struct { tests := []struct {
name string name string
@ -1710,10 +1709,10 @@ func TestGetProfile(t *testing.T) {
name: "Test with with profile information with language that is not yet supported", name: "Test with with profile information with language that is not yet supported",
keys: []utils.DataTyp{utils.DATA_FAMILY_NAME, utils.DATA_FIRST_NAME, utils.DATA_GENDER, utils.DATA_OFFERINGS, utils.DATA_LOCATION, utils.DATA_YOB}, keys: []utils.DataTyp{utils.DATA_FAMILY_NAME, utils.DATA_FIRST_NAME, utils.DATA_GENDER, utils.DATA_OFFERINGS, utils.DATA_LOCATION, utils.DATA_YOB},
profileInfo: []string{"Doee", "John", "Jinsia", "Bananas", "Kilifi", "1976"}, profileInfo: []string{"Doee", "John", "Jinsia", "Bananas", "Kilifi", "1976"},
languageCode: "kamba", languageCode: "nor",
result: resource.Result{ result: resource.Result{
Content: fmt.Sprintf( Content: fmt.Sprintf(
"Jina: %s\nJinsia: %s\nUmri: %s\nEneo: %s\nUnauza: %s\n", "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\n",
"John Doee", "Male", "48", "Kilifi", "Bananas", "John Doee", "Male", "48", "Kilifi", "Bananas",
), ),
}, },
@ -1725,8 +1724,12 @@ func TestGetProfile(t *testing.T) {
mockDataStore.On("ReadEntry", ctx, sessionId, key).Return([]byte(tt.profileInfo[index]), nil) mockDataStore.On("ReadEntry", ctx, sessionId, key).Return([]byte(tt.profileInfo[index]), nil)
} }
mockState.SetLanguage(tt.languageCode) err := mockState.SetLanguage(tt.languageCode)
if err != nil {
t.Fail()
}
h.st = mockState h.st = mockState
res, _ := h.GetProfileInfo(ctx, "get_profile_info", []byte("")) res, _ := h.GetProfileInfo(ctx, "get_profile_info", []byte(""))
// Assert that expectations were met // Assert that expectations were met
@ -1834,6 +1837,25 @@ func TestSaveTemporaryPIn(t *testing.T) {
mockStore.AssertExpectations(t) mockStore.AssertExpectations(t)
} }
func TestWithPersister(t *testing.T) {
// Test case: Setting a persister
h := &Handlers{}
p := &persist.Persister{}
result := h.WithPersister(p)
assert.Equal(t, p, h.pe, "The persister should be set correctly.")
assert.Equal(t, h, result, "The returned handler should be the same instance.")
}
func TestWithPersister_PanicWhenAlreadySet(t *testing.T) {
// Test case: Panic on multiple calls
h := &Handlers{pe: &persist.Persister{}}
require.Panics(t, func() {
h.WithPersister(&persist.Persister{})
}, "Should panic when trying to set a persister again.")
}
func TestConfirmPin(t *testing.T) { func TestConfirmPin(t *testing.T) {
sessionId := "session123" sessionId := "session123"