|
|
@ -2,449 +2,53 @@ package ussd
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"encoding/json"
|
|
|
|
"testing"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"git.defalsify.org/vise.git/db"
|
|
|
|
"git.grassecon.net/urdt/ussd/internal/handlers/ussd/mocks"
|
|
|
|
"git.grassecon.net/urdt/ussd/internal/handlers/ussd/mocks"
|
|
|
|
|
|
|
|
"git.grassecon.net/urdt/ussd/internal/models"
|
|
|
|
|
|
|
|
"git.grassecon.net/urdt/ussd/internal/utils"
|
|
|
|
"github.com/alecthomas/assert/v2"
|
|
|
|
"github.com/alecthomas/assert/v2"
|
|
|
|
"github.com/stretchr/testify/mock"
|
|
|
|
"github.com/stretchr/testify/mock"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// MockDb is a mock implementation of the db.Db interface
|
|
|
|
func TestCreateAccount_Success(t *testing.T) {
|
|
|
|
//type MockDb struct {
|
|
|
|
mockCreateAccountService := new(mocks.MockAccountService)
|
|
|
|
// mock.Mock
|
|
|
|
mockUserDataStore := new(mocks.MockDb)
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) SetPrefix(prefix uint8) {
|
|
|
|
h := &Handlers{
|
|
|
|
// m.Called(prefix)
|
|
|
|
userdataStore: mockUserDataStore,
|
|
|
|
// }
|
|
|
|
accountService: mockCreateAccountService,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx := context.WithValue(context.Background(), "SessionId", "test-session-12345")
|
|
|
|
|
|
|
|
k := utils.PackKey(utils.DATA_ACCOUNT_CREATED, []byte("test-session-12345"))
|
|
|
|
|
|
|
|
mockUserDataStore.On("SetPrefix", uint8(0x20)).Return(nil)
|
|
|
|
|
|
|
|
mockUserDataStore.On("SetSession", "test-session-12345").Return(nil)
|
|
|
|
|
|
|
|
mockUserDataStore.On("Get", ctx, k).
|
|
|
|
|
|
|
|
Return(nil, db.ErrNotFound{})
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) Prefix() uint8 {
|
|
|
|
// Define expected account response after api call
|
|
|
|
// args := m.Called()
|
|
|
|
expectedAccountResp := &models.AccountResponse{
|
|
|
|
// return args.Get(0).(uint8)
|
|
|
|
Ok: true,
|
|
|
|
// }
|
|
|
|
Result: struct {
|
|
|
|
|
|
|
|
CustodialId json.Number `json:"custodialId"`
|
|
|
|
|
|
|
|
PublicKey string `json:"publicKey"`
|
|
|
|
|
|
|
|
TrackingId string `json:"trackingId"`
|
|
|
|
|
|
|
|
}{
|
|
|
|
|
|
|
|
CustodialId: "12",
|
|
|
|
|
|
|
|
PublicKey: "0x8E0XSCSVA",
|
|
|
|
|
|
|
|
TrackingId: "d95a7e83-196c-4fd0-866fSGAGA",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
mockCreateAccountService.On("CreateAccount").Return(expectedAccountResp, nil)
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) Safe() bool {
|
|
|
|
_, err := h.CreateAccount(ctx, "create_account", []byte("create_account"))
|
|
|
|
// args := m.Called()
|
|
|
|
|
|
|
|
// return args.Get(0).(bool)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) SetLanguage(language *lang.Language) {
|
|
|
|
// Assert results
|
|
|
|
// m.Called(language)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
// }
|
|
|
|
assert.Equal(t, expectedAccountResp.Ok, true)
|
|
|
|
|
|
|
|
}
|
|
|
|
// func (m *MockDb) SetLock(uint8, bool) error {
|
|
|
|
|
|
|
|
// args := m.Called()
|
|
|
|
|
|
|
|
// return args.Error(0)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) Connect(ctx context.Context, connectionStr string) error {
|
|
|
|
|
|
|
|
// args := m.Called(ctx, connectionStr)
|
|
|
|
|
|
|
|
// return args.Error(0)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) SetSession(sessionId string) {
|
|
|
|
|
|
|
|
// m.Called(sessionId)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) Put(ctx context.Context, key, value []byte) error {
|
|
|
|
|
|
|
|
// args := m.Called(ctx, key, value)
|
|
|
|
|
|
|
|
// return args.Error(0)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) Get(ctx context.Context, key []byte) ([]byte, error) {
|
|
|
|
|
|
|
|
// args := m.Called(ctx, key)
|
|
|
|
|
|
|
|
// return nil, args.Error(0)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func (m *MockDb) Close() error {
|
|
|
|
|
|
|
|
// args := m.Called(nil)
|
|
|
|
|
|
|
|
// return args.Error(0)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestCreateAccount(t *testing.T) {
|
|
|
|
|
|
|
|
// // Setup
|
|
|
|
|
|
|
|
// tempDir, err := os.MkdirTemp("", "test_create_account")
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to create temp directory: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// defer os.RemoveAll(tempDir) // Clean up after the test run
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// sessionID := "07xxxxxxxx"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Set up the data file path using the session ID
|
|
|
|
|
|
|
|
// accountFilePath := filepath.Join(tempDir, sessionID+"_data")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Initialize account file handler
|
|
|
|
|
|
|
|
// accountFileHandler := utils.NewAccountFileHandler(accountFilePath)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Create a mock account service
|
|
|
|
|
|
|
|
// mockAccountService := &MockAccountService{}
|
|
|
|
|
|
|
|
// mockAccountResponse := &models.AccountResponse{
|
|
|
|
|
|
|
|
// Ok: true,
|
|
|
|
|
|
|
|
// Result: struct {
|
|
|
|
|
|
|
|
// CustodialId json.Number `json:"custodialId"`
|
|
|
|
|
|
|
|
// PublicKey string `json:"publicKey"`
|
|
|
|
|
|
|
|
// TrackingId string `json:"trackingId"`
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// CustodialId: "test-custodial-id",
|
|
|
|
|
|
|
|
// PublicKey: "test-public-key",
|
|
|
|
|
|
|
|
// TrackingId: "test-tracking-id",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Set up expectations for the mock account service
|
|
|
|
|
|
|
|
// mockAccountService.On("CreateAccount").Return(mockAccountResponse, nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mockParser := new(MockFlagParser)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// flag_account_created := uint32(1)
|
|
|
|
|
|
|
|
// flag_account_creation_failed := uint32(2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mockParser.On("GetFlag", "flag_account_created").Return(flag_account_created, nil)
|
|
|
|
|
|
|
|
// mockParser.On("GetFlag", "flag_account_creation_failed").Return(flag_account_creation_failed, nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Initialize Handlers with mock account service
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// fs: &FSData{Path: accountFilePath},
|
|
|
|
|
|
|
|
// accountFileHandler: accountFileHandler,
|
|
|
|
|
|
|
|
// accountService: mockAccountService,
|
|
|
|
|
|
|
|
// parser: mockParser,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// existingData map[string]string
|
|
|
|
|
|
|
|
// expectedResult resource.Result
|
|
|
|
|
|
|
|
// expectedData map[string]string
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "New account creation",
|
|
|
|
|
|
|
|
// existingData: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{
|
|
|
|
|
|
|
|
// FlagSet: []uint32{flag_account_created},
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// expectedData: map[string]string{
|
|
|
|
|
|
|
|
// "TrackingId": "test-tracking-id",
|
|
|
|
|
|
|
|
// "PublicKey": "test-public-key",
|
|
|
|
|
|
|
|
// "CustodialId": "test-custodial-id",
|
|
|
|
|
|
|
|
// "Status": "PENDING",
|
|
|
|
|
|
|
|
// "Gender": "Not provided",
|
|
|
|
|
|
|
|
// "YOB": "Not provided",
|
|
|
|
|
|
|
|
// "Location": "Not provided",
|
|
|
|
|
|
|
|
// "Offerings": "Not provided",
|
|
|
|
|
|
|
|
// "FirstName": "Not provided",
|
|
|
|
|
|
|
|
// "FamilyName": "Not provided",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Existing account",
|
|
|
|
|
|
|
|
// existingData: map[string]string{
|
|
|
|
|
|
|
|
// "TrackingId": "test-tracking-id",
|
|
|
|
|
|
|
|
// "PublicKey": "test-public-key",
|
|
|
|
|
|
|
|
// "CustodialId": "test-custodial-id",
|
|
|
|
|
|
|
|
// "Status": "PENDING",
|
|
|
|
|
|
|
|
// "Gender": "Not provided",
|
|
|
|
|
|
|
|
// "YOB": "Not provided",
|
|
|
|
|
|
|
|
// "Location": "Not provided",
|
|
|
|
|
|
|
|
// "Offerings": "Not provided",
|
|
|
|
|
|
|
|
// "FirstName": "Not provided",
|
|
|
|
|
|
|
|
// "FamilyName": "Not provided",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedData: map[string]string{
|
|
|
|
|
|
|
|
// "TrackingId": "test-tracking-id",
|
|
|
|
|
|
|
|
// "PublicKey": "test-public-key",
|
|
|
|
|
|
|
|
// "CustodialId": "test-custodial-id",
|
|
|
|
|
|
|
|
// "Status": "PENDING",
|
|
|
|
|
|
|
|
// "Gender": "Not provided",
|
|
|
|
|
|
|
|
// "YOB": "Not provided",
|
|
|
|
|
|
|
|
// "Location": "Not provided",
|
|
|
|
|
|
|
|
// "Offerings": "Not provided",
|
|
|
|
|
|
|
|
// "FirstName": "Not provided",
|
|
|
|
|
|
|
|
// "FamilyName": "Not provided",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// // Set up the data file path using the session ID
|
|
|
|
|
|
|
|
// accountFilePath := filepath.Join(tempDir, sessionID+"_data")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Setup existing data if any
|
|
|
|
|
|
|
|
// if tt.existingData != nil {
|
|
|
|
|
|
|
|
// data, _ := json.Marshal(tt.existingData)
|
|
|
|
|
|
|
|
// err := os.WriteFile(accountFilePath, data, 0644)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to write existing data: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Call the function
|
|
|
|
|
|
|
|
// result, err := h.CreateAccount(context.Background(), "", nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Check for errors
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("CreateAccount returned an error: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Check the result
|
|
|
|
|
|
|
|
// if len(result.FlagSet) != len(tt.expectedResult.FlagSet) {
|
|
|
|
|
|
|
|
// t.Errorf("Expected %d flags, got %d", len(tt.expectedResult.FlagSet), len(result.FlagSet))
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// for i, flag := range tt.expectedResult.FlagSet {
|
|
|
|
|
|
|
|
// if result.FlagSet[i] != flag {
|
|
|
|
|
|
|
|
// t.Errorf("Expected flag %d, got %d", flag, result.FlagSet[i])
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Check the stored data
|
|
|
|
|
|
|
|
// data, err := os.ReadFile(accountFilePath)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to read account data file: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// var storedData map[string]string
|
|
|
|
|
|
|
|
// err = json.Unmarshal(data, &storedData)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to unmarshal stored data: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for key, expectedValue := range tt.expectedData {
|
|
|
|
|
|
|
|
// if storedValue, ok := storedData[key]; !ok || storedValue != expectedValue {
|
|
|
|
|
|
|
|
// t.Errorf("Expected %s to be %s, got %s", key, expectedValue, storedValue)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestCreateAccount_Success(t *testing.T) {
|
|
|
|
|
|
|
|
// mockAccountFileHandler := new(mocks.MockAccountFileHandler)
|
|
|
|
|
|
|
|
// mockCreateAccountService := new(mocks.MockAccountService)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mockAccountFileHandler.On("EnsureFileExists").Return(nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Mock that no account data exists
|
|
|
|
|
|
|
|
// mockAccountFileHandler.On("ReadAccountData").Return(nil, nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Define expected account response after api call
|
|
|
|
|
|
|
|
// expectedAccountResp := &models.AccountResponse{
|
|
|
|
|
|
|
|
// Ok: true,
|
|
|
|
|
|
|
|
// Result: struct {
|
|
|
|
|
|
|
|
// CustodialId json.Number `json:"custodialId"`
|
|
|
|
|
|
|
|
// PublicKey string `json:"publicKey"`
|
|
|
|
|
|
|
|
// TrackingId string `json:"trackingId"`
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// CustodialId: "12",
|
|
|
|
|
|
|
|
// PublicKey: "0x8E0XSCSVA",
|
|
|
|
|
|
|
|
// TrackingId: "d95a7e83-196c-4fd0-866fSGAGA",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// mockCreateAccountService.On("CreateAccount").Return(expectedAccountResp, nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Mock WriteAccountData to not error
|
|
|
|
|
|
|
|
// mockAccountFileHandler.On("WriteAccountData", mock.Anything).Return(nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// handlers := &Handlers{
|
|
|
|
|
|
|
|
// accountService: mockCreateAccountService,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// actualResponse, err := handlers.accountService.CreateAccount()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert results
|
|
|
|
|
|
|
|
// assert.NoError(t, err)
|
|
|
|
|
|
|
|
// assert.Equal(t, expectedAccountResp.Ok, true)
|
|
|
|
|
|
|
|
// assert.Equal(t, expectedAccountResp, actualResponse)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestSavePin(t *testing.T) {
|
|
|
|
|
|
|
|
// // Setup
|
|
|
|
|
|
|
|
// tempDir, err := os.MkdirTemp("", "test_save_pin")
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to create temp directory: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// defer os.RemoveAll(tempDir)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// sessionID := "07xxxxxxxx"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Set up the data file path using the session ID
|
|
|
|
|
|
|
|
// accountFilePath := filepath.Join(tempDir, sessionID+"_data")
|
|
|
|
|
|
|
|
// initialAccountData := map[string]string{
|
|
|
|
|
|
|
|
// "TrackingId": "test-tracking-id",
|
|
|
|
|
|
|
|
// "PublicKey": "test-public-key",
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// data, _ := json.Marshal(initialAccountData)
|
|
|
|
|
|
|
|
// err = os.WriteFile(accountFilePath, data, 0644)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to write initial account data: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Create a new AccountFileHandler and set it in the Handlers struct
|
|
|
|
|
|
|
|
// accountFileHandler := utils.NewAccountFileHandler(accountFilePath)
|
|
|
|
|
|
|
|
// mockParser := new(MockFlagParser)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// accountFileHandler: accountFileHandler,
|
|
|
|
|
|
|
|
// parser: mockParser,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// flag_incorrect_pin := uint32(1)
|
|
|
|
|
|
|
|
// mockParser.On("GetFlag", "flag_incorrect_pin").Return(flag_incorrect_pin, nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// input []byte
|
|
|
|
|
|
|
|
// expectedFlags []uint32
|
|
|
|
|
|
|
|
// expectedData map[string]string
|
|
|
|
|
|
|
|
// expectedErrors bool
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Valid PIN",
|
|
|
|
|
|
|
|
// input: []byte("1234"),
|
|
|
|
|
|
|
|
// expectedFlags: []uint32{},
|
|
|
|
|
|
|
|
// expectedData: map[string]string{
|
|
|
|
|
|
|
|
// "TrackingId": "test-tracking-id",
|
|
|
|
|
|
|
|
// "PublicKey": "test-public-key",
|
|
|
|
|
|
|
|
// "AccountPIN": "1234",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Invalid PIN - non-numeric",
|
|
|
|
|
|
|
|
// input: []byte("12ab"),
|
|
|
|
|
|
|
|
// expectedFlags: []uint32{flag_incorrect_pin},
|
|
|
|
|
|
|
|
// expectedData: initialAccountData, // No changes expected
|
|
|
|
|
|
|
|
// expectedErrors: false,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Invalid PIN - less than 4 digits",
|
|
|
|
|
|
|
|
// input: []byte("123"),
|
|
|
|
|
|
|
|
// expectedFlags: []uint32{flag_incorrect_pin},
|
|
|
|
|
|
|
|
// expectedData: initialAccountData, // No changes expected
|
|
|
|
|
|
|
|
// expectedErrors: false,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Invalid PIN - more than 4 digits",
|
|
|
|
|
|
|
|
// input: []byte("12345"),
|
|
|
|
|
|
|
|
// expectedFlags: []uint32{flag_incorrect_pin},
|
|
|
|
|
|
|
|
// expectedData: initialAccountData, // No changes expected
|
|
|
|
|
|
|
|
// expectedErrors: false,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// err := accountFileHandler.EnsureFileExists()
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to ensure account file exists: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// result, err := h.SavePin(context.Background(), "", tt.input)
|
|
|
|
|
|
|
|
// if err != nil && !tt.expectedErrors {
|
|
|
|
|
|
|
|
// t.Fatalf("SavePin returned an unexpected error: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if len(result.FlagSet) != len(tt.expectedFlags) {
|
|
|
|
|
|
|
|
// t.Errorf("Expected %d flags, got %d", len(tt.expectedFlags), len(result.FlagSet))
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// for i, flag := range tt.expectedFlags {
|
|
|
|
|
|
|
|
// if result.FlagSet[i] != flag {
|
|
|
|
|
|
|
|
// t.Errorf("Expected flag %d, got %d", flag, result.FlagSet[i])
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// data, err := os.ReadFile(accountFilePath)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to read account data file: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// var storedData map[string]string
|
|
|
|
|
|
|
|
// err = json.Unmarshal(data, &storedData)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to unmarshal stored data: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for key, expectedValue := range tt.expectedData {
|
|
|
|
|
|
|
|
// if storedValue, ok := storedData[key]; !ok || storedValue != expectedValue {
|
|
|
|
|
|
|
|
// t.Errorf("Expected %s to be %s, got %s", key, expectedValue, storedValue)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestSaveLocation(t *testing.T) {
|
|
|
|
|
|
|
|
// // Create a new instance of MockAccountFileHandler
|
|
|
|
|
|
|
|
// mockFileHandler := new(mocks.MockAccountFileHandler)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Define test cases
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// input []byte
|
|
|
|
|
|
|
|
// existingData map[string]string
|
|
|
|
|
|
|
|
// writeError error
|
|
|
|
|
|
|
|
// expectedResult resource.Result
|
|
|
|
|
|
|
|
// expectedError error
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Successful Save",
|
|
|
|
|
|
|
|
// input: []byte("Mombasa"),
|
|
|
|
|
|
|
|
// existingData: map[string]string{"Location": "Mombasa"},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Empty location input",
|
|
|
|
|
|
|
|
// input: []byte{},
|
|
|
|
|
|
|
|
// existingData: map[string]string{"OtherKey": "OtherValue"},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// // Set up the mock expectations
|
|
|
|
|
|
|
|
// mockFileHandler.On("ReadAccountData").Return(tt.existingData, tt.expectedError)
|
|
|
|
|
|
|
|
// if tt.expectedError == nil && len(tt.input) > 0 {
|
|
|
|
|
|
|
|
// mockFileHandler.On("WriteAccountData", mock.MatchedBy(func(data map[string]string) bool {
|
|
|
|
|
|
|
|
// return data["Location"] == string(tt.input)
|
|
|
|
|
|
|
|
// })).Return(tt.writeError)
|
|
|
|
|
|
|
|
// } else if len(tt.input) == 0 {
|
|
|
|
|
|
|
|
// // For empty input, no WriteAccountData call should be made
|
|
|
|
|
|
|
|
// mockFileHandler.On("WriteAccountData", mock.Anything).Maybe().Return(tt.writeError)
|
|
|
|
|
|
|
|
// return
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Create the Handlers instance with the mock file handler
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// accountFileHandler: mockFileHandler,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Call Save Location
|
|
|
|
|
|
|
|
// result, err := h.SaveLocation(context.Background(), "save_location", tt.input)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to save location with error: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// savedData, err := h.accountFileHandler.ReadAccountData()
|
|
|
|
|
|
|
|
// if err == nil {
|
|
|
|
|
|
|
|
// //Assert that the input provided is what was saved into the file
|
|
|
|
|
|
|
|
// assert.Equal(t, string(tt.input), savedData["Location"])
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert the results
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedResult, result)
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedError, err)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert all expectations were met
|
|
|
|
|
|
|
|
// mockFileHandler.AssertExpectations(t)
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestSaveFirstname(t *testing.T) {
|
|
|
|
func TestSaveFirstname(t *testing.T) {
|
|
|
|
// Create a mock database
|
|
|
|
// Create a mock database
|
|
|
@ -561,423 +165,3 @@ func TestSaveFamilyname(t *testing.T) {
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// func TestSaveYOB(t *testing.T) {
|
|
|
|
|
|
|
|
// // Create a new instance of MockAccountFileHandler
|
|
|
|
|
|
|
|
// mockFileHandler := new(mocks.MockAccountFileHandler)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Define test cases
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// input []byte
|
|
|
|
|
|
|
|
// existingData map[string]string
|
|
|
|
|
|
|
|
// writeError error
|
|
|
|
|
|
|
|
// expectedResult resource.Result
|
|
|
|
|
|
|
|
// expectedError error
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Successful Save",
|
|
|
|
|
|
|
|
// input: []byte("2006"),
|
|
|
|
|
|
|
|
// existingData: map[string]string{"": ""},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "YOB less than 4 digits(invalid date entry)",
|
|
|
|
|
|
|
|
// input: []byte{},
|
|
|
|
|
|
|
|
// existingData: map[string]string{"": ""},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// // Set up the mock expectations
|
|
|
|
|
|
|
|
// mockFileHandler.On("ReadAccountData").Return(tt.existingData, tt.expectedError)
|
|
|
|
|
|
|
|
// if tt.expectedError == nil && len(tt.input) > 0 {
|
|
|
|
|
|
|
|
// mockFileHandler.On("WriteAccountData", mock.MatchedBy(func(data map[string]string) bool {
|
|
|
|
|
|
|
|
// return data["YOB"] == string(tt.input)
|
|
|
|
|
|
|
|
// })).Return(tt.writeError)
|
|
|
|
|
|
|
|
// } else if len(tt.input) != 4 {
|
|
|
|
|
|
|
|
// // For input whose input is not a valid yob, no WriteAccountData call should be made
|
|
|
|
|
|
|
|
// mockFileHandler.On("WriteAccountData", mock.Anything).Maybe().Return(tt.writeError)
|
|
|
|
|
|
|
|
// return
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Create the Handlers instance with the mock file handler
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// accountFileHandler: mockFileHandler,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Call save yob
|
|
|
|
|
|
|
|
// result, err := h.SaveYob(context.Background(), "save_yob", tt.input)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to save family name with error: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// savedData, err := h.accountFileHandler.ReadAccountData()
|
|
|
|
|
|
|
|
// if err == nil {
|
|
|
|
|
|
|
|
// //Assert that the input provided is what was saved into the file
|
|
|
|
|
|
|
|
// assert.Equal(t, string(tt.input), savedData["YOB"])
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert the results
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedResult, result)
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedError, err)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert all expectations were met
|
|
|
|
|
|
|
|
// mockFileHandler.AssertExpectations(t)
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestSaveOfferings(t *testing.T) {
|
|
|
|
|
|
|
|
// // Create a new instance of MockAccountFileHandler
|
|
|
|
|
|
|
|
// mockFileHandler := new(mocks.MockAccountFileHandler)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Define test cases
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// input []byte
|
|
|
|
|
|
|
|
// existingData map[string]string
|
|
|
|
|
|
|
|
// writeError error
|
|
|
|
|
|
|
|
// expectedResult resource.Result
|
|
|
|
|
|
|
|
// expectedError error
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Successful Save",
|
|
|
|
|
|
|
|
// input: []byte("Bananas"),
|
|
|
|
|
|
|
|
// existingData: map[string]string{"": ""},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Empty input",
|
|
|
|
|
|
|
|
// input: []byte{},
|
|
|
|
|
|
|
|
// existingData: map[string]string{"": ""},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// // Set up the mock expectations
|
|
|
|
|
|
|
|
// mockFileHandler.On("ReadAccountData").Return(tt.existingData, tt.expectedError)
|
|
|
|
|
|
|
|
// if tt.expectedError == nil && len(tt.input) > 0 {
|
|
|
|
|
|
|
|
// mockFileHandler.On("WriteAccountData", mock.MatchedBy(func(data map[string]string) bool {
|
|
|
|
|
|
|
|
// return data["Offerings"] == string(tt.input)
|
|
|
|
|
|
|
|
// })).Return(tt.writeError)
|
|
|
|
|
|
|
|
// } else if len(tt.input) != 4 {
|
|
|
|
|
|
|
|
// // For input whose input is not a valid yob, no WriteAccountData call should be made
|
|
|
|
|
|
|
|
// mockFileHandler.On("WriteAccountData", mock.Anything).Maybe().Return(tt.writeError)
|
|
|
|
|
|
|
|
// return
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Create the Handlers instance with the mock file handler
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// accountFileHandler: mockFileHandler,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Call save yob
|
|
|
|
|
|
|
|
// result, err := h.SaveOfferings(context.Background(), "save_offerings", tt.input)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Failed to save offerings with error: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// savedData, err := h.accountFileHandler.ReadAccountData()
|
|
|
|
|
|
|
|
// if err == nil {
|
|
|
|
|
|
|
|
// //Assert that the input provided is what was saved into the file
|
|
|
|
|
|
|
|
// assert.Equal(t, string(tt.input), savedData["Offerings"])
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert the results
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedResult, result)
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedError, err)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert all expectations were met
|
|
|
|
|
|
|
|
// mockFileHandler.AssertExpectations(t)
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestSaveGender(t *testing.T) {
|
|
|
|
|
|
|
|
// // Create a new instance of MockAccountFileHandler
|
|
|
|
|
|
|
|
// mockFileHandler := new(mocks.MockAccountFileHandler)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Define test cases
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// input []byte
|
|
|
|
|
|
|
|
// existingData map[string]string
|
|
|
|
|
|
|
|
// writeError error
|
|
|
|
|
|
|
|
// expectedResult resource.Result
|
|
|
|
|
|
|
|
// expectedError error
|
|
|
|
|
|
|
|
// expectedGender string
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Successful Save - Male",
|
|
|
|
|
|
|
|
// input: []byte("1"),
|
|
|
|
|
|
|
|
// existingData: map[string]string{"OtherKey": "OtherValue"},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// expectedGender: "Male",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Successful Save - Female",
|
|
|
|
|
|
|
|
// input: []byte("2"),
|
|
|
|
|
|
|
|
// existingData: map[string]string{"OtherKey": "OtherValue"},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// expectedGender: "Female",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Successful Save - Unspecified",
|
|
|
|
|
|
|
|
// input: []byte("3"),
|
|
|
|
|
|
|
|
// existingData: map[string]string{"OtherKey": "OtherValue"},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// expectedGender: "Unspecified",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Empty Input",
|
|
|
|
|
|
|
|
// input: []byte{},
|
|
|
|
|
|
|
|
// existingData: map[string]string{"OtherKey": "OtherValue"},
|
|
|
|
|
|
|
|
// writeError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// expectedGender: "",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// // Set up the mock expectations
|
|
|
|
|
|
|
|
// mockFileHandler.On("ReadAccountData").Return(tt.existingData, tt.expectedError)
|
|
|
|
|
|
|
|
// if tt.expectedError == nil && len(tt.input) > 0 {
|
|
|
|
|
|
|
|
// mockFileHandler.On("WriteAccountData", mock.MatchedBy(func(data map[string]string) bool {
|
|
|
|
|
|
|
|
// return data["Gender"] == tt.expectedGender
|
|
|
|
|
|
|
|
// })).Return(tt.writeError)
|
|
|
|
|
|
|
|
// } else if len(tt.input) == 0 {
|
|
|
|
|
|
|
|
// // For empty input, no WriteAccountData call should be made
|
|
|
|
|
|
|
|
// mockFileHandler.On("WriteAccountData", mock.Anything).Maybe().Return(tt.writeError)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Create the Handlers instance with the mock file handler
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// accountFileHandler: mockFileHandler,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Call the method
|
|
|
|
|
|
|
|
// result, err := h.SaveGender(context.Background(), "save_gender", tt.input)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert the results
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedResult, result)
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedError, err)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Verify WriteAccountData was called with the expected data
|
|
|
|
|
|
|
|
// if len(tt.input) > 0 && tt.expectedError == nil {
|
|
|
|
|
|
|
|
// mockFileHandler.AssertCalled(t, "WriteAccountData", mock.MatchedBy(func(data map[string]string) bool {
|
|
|
|
|
|
|
|
// return data["Gender"] == tt.expectedGender
|
|
|
|
|
|
|
|
// }))
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert all expectations were met
|
|
|
|
|
|
|
|
// mockFileHandler.AssertExpectations(t)
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestGetSender(t *testing.T) {
|
|
|
|
|
|
|
|
// mockAccountFileHandler := new(mocks.MockAccountFileHandler)
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// accountFileHandler: mockAccountFileHandler,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// expectedResult resource.Result
|
|
|
|
|
|
|
|
// accountData map[string]string
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Valid public key",
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{
|
|
|
|
|
|
|
|
// Content: "test-public-key",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// accountData: map[string]string{
|
|
|
|
|
|
|
|
// "PublicKey": "test-public-key",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Missing public key",
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{
|
|
|
|
|
|
|
|
// Content: "",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// accountData: map[string]string{},
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// // Reset the mock state
|
|
|
|
|
|
|
|
// mockAccountFileHandler.Mock = mock.Mock{}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mockAccountFileHandler.On("ReadAccountData").Return(tt.accountData, nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// result, err := h.GetSender(context.Background(), "", nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
|
|
|
|
// t.Fatalf("Error occurred: %v", err)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedResult.Content, result.Content)
|
|
|
|
|
|
|
|
// mockAccountFileHandler.AssertCalled(t, "ReadAccountData")
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestGetAmount(t *testing.T) {
|
|
|
|
|
|
|
|
// mockAccountFileHandler := new(mocks.MockAccountFileHandler)
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// accountFileHandler: mockAccountFileHandler,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// expectedResult resource.Result
|
|
|
|
|
|
|
|
// accountData map[string]string
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Valid amount",
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{
|
|
|
|
|
|
|
|
// Content: "0.003",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// accountData: map[string]string{
|
|
|
|
|
|
|
|
// "Amount": "0.003",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Missing amount",
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{},
|
|
|
|
|
|
|
|
// accountData: map[string]string{
|
|
|
|
|
|
|
|
// "Amount": "",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// // Reset the mock state
|
|
|
|
|
|
|
|
// mockAccountFileHandler.Mock = mock.Mock{}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mockAccountFileHandler.On("ReadAccountData").Return(tt.accountData, nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// result, err := h.GetAmount(context.Background(), "", nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// assert.NoError(t, err)
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedResult.Content, result.Content)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mockAccountFileHandler.AssertCalled(t, "ReadAccountData")
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// func TestGetProfileInfo(t *testing.T) {
|
|
|
|
|
|
|
|
// tests := []struct {
|
|
|
|
|
|
|
|
// name string
|
|
|
|
|
|
|
|
// accountData map[string]string
|
|
|
|
|
|
|
|
// readError error
|
|
|
|
|
|
|
|
// expectedResult resource.Result
|
|
|
|
|
|
|
|
// expectedError error
|
|
|
|
|
|
|
|
// }{
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Complete Profile",
|
|
|
|
|
|
|
|
// accountData: map[string]string{
|
|
|
|
|
|
|
|
// "FirstName": "John",
|
|
|
|
|
|
|
|
// "FamilyName": "Doe",
|
|
|
|
|
|
|
|
// "Gender": "Male",
|
|
|
|
|
|
|
|
// "YOB": "1980",
|
|
|
|
|
|
|
|
// "Location": "Mombasa",
|
|
|
|
|
|
|
|
// "Offerings": "Product A",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// readError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{
|
|
|
|
|
|
|
|
// Content: fmt.Sprintf(
|
|
|
|
|
|
|
|
// "Name: %s %s\nGender: %s\nAge: %d\nLocation: %s\nYou provide: %s\n",
|
|
|
|
|
|
|
|
// "John", "Doe", "Male", 44, "Mombasa", "Product A",
|
|
|
|
|
|
|
|
// ),
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Profile with Not Provided Fields",
|
|
|
|
|
|
|
|
// accountData: map[string]string{
|
|
|
|
|
|
|
|
// "FirstName": "Not provided",
|
|
|
|
|
|
|
|
// "FamilyName": "Doe",
|
|
|
|
|
|
|
|
// "Gender": "Female",
|
|
|
|
|
|
|
|
// "YOB": "1995",
|
|
|
|
|
|
|
|
// "Location": "Not provided",
|
|
|
|
|
|
|
|
// "Offerings": "Service B",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// readError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{
|
|
|
|
|
|
|
|
// Content: fmt.Sprintf(
|
|
|
|
|
|
|
|
// "Name: %s\nGender: %s\nAge: %d\nLocation: %s\nYou provide: %s\n",
|
|
|
|
|
|
|
|
// "Not provided", "Female", 29, "Not provided", "Service B",
|
|
|
|
|
|
|
|
// ),
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "Profile with YOB as Not provided",
|
|
|
|
|
|
|
|
// accountData: map[string]string{
|
|
|
|
|
|
|
|
// "FirstName": "Not provided",
|
|
|
|
|
|
|
|
// "FamilyName": "Doe",
|
|
|
|
|
|
|
|
// "Gender": "Female",
|
|
|
|
|
|
|
|
// "YOB": "Not provided",
|
|
|
|
|
|
|
|
// "Location": "Not provided",
|
|
|
|
|
|
|
|
// "Offerings": "Service B",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// readError: nil,
|
|
|
|
|
|
|
|
// expectedResult: resource.Result{
|
|
|
|
|
|
|
|
// Content: fmt.Sprintf(
|
|
|
|
|
|
|
|
// "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\n",
|
|
|
|
|
|
|
|
// "Not provided", "Female", "Not provided", "Not provided", "Service B",
|
|
|
|
|
|
|
|
// ),
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// expectedError: nil,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for _, tt := range tests {
|
|
|
|
|
|
|
|
// t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
// // Create a new instance of MockAccountFileHandler
|
|
|
|
|
|
|
|
// mockFileHandler := new(mocks.MockAccountFileHandler)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Set up the mock expectations
|
|
|
|
|
|
|
|
// mockFileHandler.On("ReadAccountData").Return(tt.accountData, tt.readError)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Create the Handlers instance with the mock file handler
|
|
|
|
|
|
|
|
// h := &Handlers{
|
|
|
|
|
|
|
|
// accountFileHandler: mockFileHandler,
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Call the method
|
|
|
|
|
|
|
|
// result, err := h.GetProfileInfo(context.Background(), "get_profile_info", nil)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert the results
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedResult, result)
|
|
|
|
|
|
|
|
// assert.Equal(t, tt.expectedError, err)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Assert all expectations were met
|
|
|
|
|
|
|
|
// mockFileHandler.AssertExpectations(t)
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|