diff --git a/internal/handlers/ussd/menuhandler_test.go b/internal/handlers/ussd/menuhandler_test.go index cd0dda3..dd24b20 100644 --- a/internal/handlers/ussd/menuhandler_test.go +++ b/internal/handlers/ussd/menuhandler_test.go @@ -1688,3 +1688,148 @@ func TestGetProfile(t *testing.T) { }) } } + +func TestVerifyNewPin(t *testing.T) { + sessionId := "session123" + + fm, _ := NewFlagManager(flagsPath) + + flag_valid_pin, _ := fm.parser.GetFlag("flag_valid_pin") + mockDataStore := new(mocks.MockUserDataStore) + mockCreateAccountService := new(mocks.MockAccountService) + h := &Handlers{ + userdataStore: mockDataStore, + flagManager: fm.parser, + accountService: mockCreateAccountService, + } + ctx := context.WithValue(context.Background(), "SessionId", sessionId) + + tests := []struct { + name string + input []byte + expectedResult resource.Result + }{ + { + name: "Test with valid pin", + input: []byte("1234"), + expectedResult: resource.Result{ + FlagSet: []uint32{flag_valid_pin}, + }, + }, + { + name: "Test with invalid pin", + input: []byte("123"), + expectedResult: resource.Result{ + FlagReset: []uint32{flag_valid_pin}, + }, + }, + { + name: "Test with invalid pin", + input: []byte("12345"), + expectedResult: resource.Result{ + FlagReset: []uint32{flag_valid_pin}, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + + //Call the function under test + res, _ := h.VerifyNewPin(ctx, "verify_new_pin", tt.input) + + // Assert that expectations were met + mockDataStore.AssertExpectations(t) + + //Assert that the result set to content is what was expected + assert.Equal(t, res, tt.expectedResult, "Result should contain flags set according to user input") + + }) + } + +} + +func TestSaveTemporaryPIn(t *testing.T) { + + fm, err := NewFlagManager(flagsPath) + + if err != nil { + t.Logf(err.Error()) + } + + // Create a new instance of UserDataStore + mockStore := new(mocks.MockUserDataStore) + + // Define test data + sessionId := "session123" + PIN := "1234" + ctx := context.WithValue(context.Background(), "SessionId", sessionId) + + // Set up the expected behavior of the mock + mockStore.On("WriteEntry", ctx, sessionId, utils.DATA_TEMPORARY_PIN, []byte(PIN)).Return(nil) + + // Create the Handlers instance with the mock store + h := &Handlers{ + userdataStore: mockStore, + flagManager: fm.parser, + } + + // Call the method + res, err := h.SaveTemporaryPin(ctx, "save_temporary_pin", []byte(PIN)) + + // Assert results + assert.NoError(t, err) + assert.Equal(t, resource.Result{}, res) + + // Assert all expectations were met + mockStore.AssertExpectations(t) +} + +func TestConfirmPin(t *testing.T) { + sessionId := "session123" + + fm, _ := NewFlagManager(flagsPath) + flag_pin_mismatch, _ := fm.parser.GetFlag("flag_pin_mismatch") + mockDataStore := new(mocks.MockUserDataStore) + mockCreateAccountService := new(mocks.MockAccountService) + h := &Handlers{ + userdataStore: mockDataStore, + flagManager: fm.parser, + accountService: mockCreateAccountService, + } + ctx := context.WithValue(context.Background(), "SessionId", sessionId) + + tests := []struct { + name string + input []byte + temporarypin []byte + expectedResult resource.Result + }{ + { + name: "Test with correct pin confirmation", + input: []byte("1234"), + temporarypin: []byte("1234"), + expectedResult: resource.Result{ + FlagReset: []uint32{flag_pin_mismatch}, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Set up the expected behavior of the mock + mockDataStore.On("WriteEntry", ctx, sessionId, utils.DATA_ACCOUNT_PIN, []byte(tt.temporarypin)).Return(nil) + + mockDataStore.On("ReadEntry", ctx, sessionId, utils.DATA_TEMPORARY_PIN).Return(tt.temporarypin, nil) + + //Call the function under test + res, _ := h.ConfirmPinChange(ctx, "confirm_pin_change", tt.temporarypin) + + // Assert that expectations were met + mockDataStore.AssertExpectations(t) + + //Assert that the result set to content is what was expected + assert.Equal(t, res, tt.expectedResult, "Result should contain flags set according to user input") + + }) + } + +}