pin-reset #139
							
								
								
									
										9
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								go.mod
									
									
									
									
									
								
							| @ -7,19 +7,17 @@ toolchain go1.23.2 | |||||||
| require ( | require ( | ||||||
| 	git.defalsify.org/vise.git v0.2.1-0.20241017112704-307fa6fcdc6b | 	git.defalsify.org/vise.git v0.2.1-0.20241017112704-307fa6fcdc6b | ||||||
| 	github.com/alecthomas/assert/v2 v2.2.2 | 	github.com/alecthomas/assert/v2 v2.2.2 | ||||||
|  | 	github.com/grassrootseconomics/eth-custodial v1.3.0-beta | ||||||
| 	github.com/peteole/testdata-loader v0.3.0 | 	github.com/peteole/testdata-loader v0.3.0 | ||||||
| 	gopkg.in/leonelquinteros/gotext.v1 v1.3.1 | 	gopkg.in/leonelquinteros/gotext.v1 v1.3.1 | ||||||
| 
 |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| require github.com/joho/godotenv v1.5.1 |  | ||||||
| 
 |  | ||||||
| require ( | require ( | ||||||
| 	github.com/grassrootseconomics/eth-custodial v1.3.0-beta |  | ||||||
| 	github.com/jackc/pgpassfile v1.0.0 // indirect | 	github.com/jackc/pgpassfile v1.0.0 // indirect | ||||||
| 	github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect | 	github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect | ||||||
| 	github.com/jackc/pgx/v5 v5.7.1 // indirect | 	github.com/jackc/pgx/v5 v5.7.1 // indirect | ||||||
| 	github.com/jackc/puddle/v2 v2.2.2 // indirect | 	github.com/jackc/puddle/v2 v2.2.2 // indirect | ||||||
|  | 	github.com/joho/godotenv v1.5.1 | ||||||
| 	github.com/kr/text v0.2.0 // indirect | 	github.com/kr/text v0.2.0 // indirect | ||||||
| 	github.com/rogpeppe/go-internal v1.13.1 // indirect | 	github.com/rogpeppe/go-internal v1.13.1 // indirect | ||||||
| 	golang.org/x/crypto v0.27.0 // indirect | 	golang.org/x/crypto v0.27.0 // indirect | ||||||
| @ -42,7 +40,4 @@ require ( | |||||||
| 	github.com/stretchr/testify v1.9.0 | 	github.com/stretchr/testify v1.9.0 | ||||||
| 	github.com/x448/float16 v0.8.4 // indirect | 	github.com/x448/float16 v0.8.4 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| 
 |  | ||||||
| ) | ) | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -8,7 +8,6 @@ import ( | |||||||
| 	"io" | 	"io" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
| 	"time" |  | ||||||
| 
 | 
 | ||||||
| 	"git.grassecon.net/urdt/ussd/config" | 	"git.grassecon.net/urdt/ussd/config" | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/models" | 	"git.grassecon.net/urdt/ussd/internal/models" | ||||||
| @ -31,9 +30,6 @@ type AccountServiceInterface interface { | |||||||
| type AccountService struct { | type AccountService struct { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type TestAccountService struct { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Parameters:
 | // Parameters:
 | ||||||
| //   - trackingId: A unique identifier for the account.This should be obtained from a previous call to
 | //   - trackingId: A unique identifier for the account.This should be obtained from a previous call to
 | ||||||
| //     CreateAccount or a similar function that returns an AccountResponse. The `trackingId` field in the
 | //     CreateAccount or a similar function that returns an AccountResponse. The `trackingId` field in the
 | ||||||
| @ -187,88 +183,3 @@ func (as *AccountService) FetchVouchers(ctx context.Context, publicKey string) ( | |||||||
| 	} | 	} | ||||||
| 	return &holdings, nil | 	return &holdings, nil | ||||||
| } | } | ||||||
| 
 |  | ||||||
| func (tas *TestAccountService) CreateAccount(ctx context.Context) (*api.OKResponse, error) { |  | ||||||
| 	return &api.OKResponse{ |  | ||||||
| 		Ok:          true, |  | ||||||
| 		Description: "Account creation request received successfully", |  | ||||||
| 		Result:      map[string]any{"publicKey": "0x48ADca309b5085852207FAaf2816eD72B52F527C", "trackingId": "28ebe84d-b925-472c-87ae-bbdfa1fb97be"}, |  | ||||||
| 	}, nil |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (tas *TestAccountService) CheckBalance(ctx context.Context, publicKey string) (*models.BalanceResponse, error) { |  | ||||||
| 	balanceResponse := &models.BalanceResponse{ |  | ||||||
| 		Ok: true, |  | ||||||
| 		Result: struct { |  | ||||||
| 			Balance string      `json:"balance"` |  | ||||||
| 			Nonce   json.Number `json:"nonce"` |  | ||||||
| 		}{ |  | ||||||
| 			Balance: "0.003 CELO", |  | ||||||
| 			Nonce:   json.Number("0"), |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 	return balanceResponse, nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (tas *TestAccountService) TrackAccountStatus(ctx context.Context, publicKey string) (*api.OKResponse, error) { |  | ||||||
| 	return &api.OKResponse{ |  | ||||||
| 		Ok:          true, |  | ||||||
| 		Description: "Account creation succeeded", |  | ||||||
| 		Result: map[string]any{ |  | ||||||
| 			"active": true, |  | ||||||
| 		}, |  | ||||||
| 	}, nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (tas *TestAccountService) CheckAccountStatus(ctx context.Context, trackingId string) (*models.TrackStatusResponse, error) { |  | ||||||
| 	trackResponse := &models.TrackStatusResponse{ |  | ||||||
| 		Ok: true, |  | ||||||
| 		Result: struct { |  | ||||||
| 			Transaction struct { |  | ||||||
| 				CreatedAt     time.Time   "json:\"createdAt\"" |  | ||||||
| 				Status        string      "json:\"status\"" |  | ||||||
| 				TransferValue json.Number "json:\"transferValue\"" |  | ||||||
| 				TxHash        string      "json:\"txHash\"" |  | ||||||
| 				TxType        string      "json:\"txType\"" |  | ||||||
| 			} |  | ||||||
| 		}{ |  | ||||||
| 			Transaction: models.Transaction{ |  | ||||||
| 				CreatedAt:     time.Now(), |  | ||||||
| 				Status:        "SUCCESS", |  | ||||||
| 				TransferValue: json.Number("0.5"), |  | ||||||
| 				TxHash:        "0x123abc456def", |  | ||||||
| 				TxType:        "transfer", |  | ||||||
| 			}, |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 	return trackResponse, nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (tas *TestAccountService) FetchVouchers(ctx context.Context, publicKey string) (*models.VoucherHoldingResponse, error) { |  | ||||||
| 	return &models.VoucherHoldingResponse{ |  | ||||||
| 		Ok: true, |  | ||||||
| 		Result: struct { |  | ||||||
| 			Holdings []struct { |  | ||||||
| 				ContractAddress string `json:"contractAddress"` |  | ||||||
| 				TokenSymbol     string `json:"tokenSymbol"` |  | ||||||
| 				TokenDecimals   string `json:"tokenDecimals"` |  | ||||||
| 				Balance         string `json:"balance"` |  | ||||||
| 			} `json:"holdings"` |  | ||||||
| 		}{ |  | ||||||
| 			Holdings: []struct { |  | ||||||
| 				ContractAddress string `json:"contractAddress"` |  | ||||||
| 				TokenSymbol     string `json:"tokenSymbol"` |  | ||||||
| 				TokenDecimals   string `json:"tokenDecimals"` |  | ||||||
| 				Balance         string `json:"balance"` |  | ||||||
| 			}{ |  | ||||||
| 				{ |  | ||||||
| 					ContractAddress: "0x6CC75A06ac72eB4Db2eE22F781F5D100d8ec03ee", |  | ||||||
| 					TokenSymbol:     "SRF", |  | ||||||
| 					TokenDecimals:   "6", |  | ||||||
| 					Balance:         "2745987", |  | ||||||
| 				}, |  | ||||||
| 			}, |  | ||||||
| 		}, |  | ||||||
| 	}, nil |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -27,12 +27,12 @@ import ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| 	logg                    = logging.NewVanilla().WithDomain("ussdmenuhandler") | 	logg           = logging.NewVanilla().WithDomain("ussdmenuhandler") | ||||||
| 	scriptDir               = path.Join("services", "registration") | 	scriptDir      = path.Join("services", "registration") | ||||||
| 	translationDir          = path.Join(scriptDir, "locale") | 	translationDir = path.Join(scriptDir, "locale") | ||||||
| 	PINChangePrivilege byte = 1 | 	okResponse     *api.OKResponse | ||||||
| 	okResponse         *api.OKResponse | 	errResponse    *api.ErrResponse | ||||||
| 	errResponse        *api.ErrResponse | 	backOption     = []byte("0") | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // FlagManager handles centralized flag management
 | // FlagManager handles centralized flag management
 | ||||||
| @ -354,6 +354,9 @@ func (h *Handlers) SaveFirstname(ctx context.Context, sym string, input []byte) | |||||||
| 		return res, fmt.Errorf("missing session") | 		return res, fmt.Errorf("missing session") | ||||||
| 	} | 	} | ||||||
| 	if len(input) > 0 { | 	if len(input) > 0 { | ||||||
|  | 		if bytes.Equal(input, backOption) { | ||||||
|  | 			return res, nil | ||||||
|  | 		} | ||||||
| 		firstName := string(input) | 		firstName := string(input) | ||||||
| 		store := h.userdataStore | 		store := h.userdataStore | ||||||
| 		err = store.WriteEntry(ctx, sessionId, utils.DATA_FIRST_NAME, []byte(firstName)) | 		err = store.WriteEntry(ctx, sessionId, utils.DATA_FIRST_NAME, []byte(firstName)) | ||||||
| @ -373,8 +376,10 @@ func (h *Handlers) SaveFamilyname(ctx context.Context, sym string, input []byte) | |||||||
| 	if !ok { | 	if !ok { | ||||||
| 		return res, fmt.Errorf("missing session") | 		return res, fmt.Errorf("missing session") | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	if len(input) > 0 { | 	if len(input) > 0 { | ||||||
|  | 		if bytes.Equal(input, backOption) { | ||||||
|  | 			return res, nil | ||||||
|  | 		} | ||||||
| 		familyName := string(input) | 		familyName := string(input) | ||||||
| 		store := h.userdataStore | 		store := h.userdataStore | ||||||
| 		err = store.WriteEntry(ctx, sessionId, utils.DATA_FAMILY_NAME, []byte(familyName)) | 		err = store.WriteEntry(ctx, sessionId, utils.DATA_FAMILY_NAME, []byte(familyName)) | ||||||
| @ -417,8 +422,10 @@ func (h *Handlers) SaveLocation(ctx context.Context, sym string, input []byte) ( | |||||||
| 	if !ok { | 	if !ok { | ||||||
| 		return res, fmt.Errorf("missing session") | 		return res, fmt.Errorf("missing session") | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	if len(input) > 0 { | 	if len(input) > 0 { | ||||||
|  | 		if bytes.Equal(input, backOption) { | ||||||
|  | 			return res, nil | ||||||
|  | 		} | ||||||
| 		location := string(input) | 		location := string(input) | ||||||
| 		store := h.userdataStore | 		store := h.userdataStore | ||||||
| 		err = store.WriteEntry(ctx, sessionId, utils.DATA_LOCATION, []byte(location)) | 		err = store.WriteEntry(ctx, sessionId, utils.DATA_LOCATION, []byte(location)) | ||||||
| @ -439,6 +446,9 @@ func (h *Handlers) SaveGender(ctx context.Context, sym string, input []byte) (re | |||||||
| 	if !ok { | 	if !ok { | ||||||
| 		return res, fmt.Errorf("missing session") | 		return res, fmt.Errorf("missing session") | ||||||
| 	} | 	} | ||||||
|  | 	if bytes.Equal(input, backOption) { | ||||||
|  | 		return res, nil | ||||||
|  | 	} | ||||||
| 	gender := strings.Split(symbol, "_")[1] | 	gender := strings.Split(symbol, "_")[1] | ||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	err = store.WriteEntry(ctx, sessionId, utils.DATA_GENDER, []byte(gender)) | 	err = store.WriteEntry(ctx, sessionId, utils.DATA_GENDER, []byte(gender)) | ||||||
|  | |||||||
| @ -15,9 +15,10 @@ import ( | |||||||
| 	"git.defalsify.org/vise.git/persist" | 	"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/handlers/server" |  | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/mocks" |  | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/models" | 	"git.grassecon.net/urdt/ussd/internal/models" | ||||||
|  | 	"git.grassecon.net/urdt/ussd/internal/testutil/mocks" | ||||||
|  | 	"git.grassecon.net/urdt/ussd/internal/testutil/testservice" | ||||||
|  | 
 | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/utils" | 	"git.grassecon.net/urdt/ussd/internal/utils" | ||||||
| 	"github.com/alecthomas/assert/v2" | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/grassrootseconomics/eth-custodial/pkg/api" | 	"github.com/grassrootseconomics/eth-custodial/pkg/api" | ||||||
| @ -32,7 +33,7 @@ var ( | |||||||
| 
 | 
 | ||||||
| func TestNewHandlers(t *testing.T) { | func TestNewHandlers(t *testing.T) { | ||||||
| 	fm, err := NewFlagManager(flagsPath) | 	fm, err := NewFlagManager(flagsPath) | ||||||
| 	accountService := server.TestAccountService{} | 	accountService := testservice.TestAccountService{} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Logf(err.Error()) | 		t.Logf(err.Error()) | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ import ( | |||||||
| 
 | 
 | ||||||
| 	"git.defalsify.org/vise.git/engine" | 	"git.defalsify.org/vise.git/engine" | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/handlers" | 	"git.grassecon.net/urdt/ussd/internal/handlers" | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/mocks/httpmocks" | 	"git.grassecon.net/urdt/ussd/internal/testutil/mocks/httpmocks" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // invalidRequestType is a custom type to test invalid request scenarios
 | // invalidRequestType is a custom type to test invalid request scenarios
 | ||||||
|  | |||||||
| @ -13,6 +13,8 @@ import ( | |||||||
| 	"git.grassecon.net/urdt/ussd/internal/handlers" | 	"git.grassecon.net/urdt/ussd/internal/handlers" | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/handlers/server" | 	"git.grassecon.net/urdt/ussd/internal/handlers/server" | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/storage" | 	"git.grassecon.net/urdt/ussd/internal/storage" | ||||||
|  | 	"git.grassecon.net/urdt/ussd/internal/testutil/testservice" | ||||||
|  | 	"git.grassecon.net/urdt/ussd/internal/testutil/testtag" | ||||||
| 	testdataloader "github.com/peteole/testdata-loader" | 	testdataloader "github.com/peteole/testdata-loader" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @ -80,12 +82,12 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { | |||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if AccountService == nil { | 	if testtag.AccountService == nil { | ||||||
| 		AccountService = &server.AccountService{} | 		testtag.AccountService = &server.AccountService{} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	switch AccountService.(type) { | 	switch testtag.AccountService.(type) { | ||||||
| 	case *server.TestAccountService: | 	case *testservice.TestAccountService: | ||||||
| 		go func() { | 		go func() { | ||||||
| 			eventChannel <- false | 			eventChannel <- false | ||||||
| 		}() | 		}() | ||||||
| @ -98,7 +100,7 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { | |||||||
| 		panic("Unknown account service type") | 		panic("Unknown account service type") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	hl, err := lhs.GetHandler(AccountService) | 	hl, err := lhs.GetHandler(testtag.AccountService) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Fprintf(os.Stderr, err.Error()) | 		fmt.Fprintf(os.Stderr, err.Error()) | ||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
|  | |||||||
| @ -1,11 +0,0 @@ | |||||||
| // +build !online
 |  | ||||||
| 
 |  | ||||||
| package testutil |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/handlers/server" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| var ( |  | ||||||
| 	AccountService server.AccountServiceInterface = &server.TestAccountService{} |  | ||||||
| ) |  | ||||||
							
								
								
									
										101
									
								
								internal/testutil/testservice/TestAccountService.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								internal/testutil/testservice/TestAccountService.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,101 @@ | |||||||
|  | package testservice | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"time" | ||||||
|  | 
 | ||||||
|  | 	"git.grassecon.net/urdt/ussd/internal/models" | ||||||
|  | 	"github.com/grassrootseconomics/eth-custodial/pkg/api" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type TestAccountService struct { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (tas *TestAccountService) CreateAccount(ctx context.Context) (*api.OKResponse, error) { | ||||||
|  | 	return &api.OKResponse{ | ||||||
|  | 		Ok:          true, | ||||||
|  | 		Description: "Account creation succeeded", | ||||||
|  | 		Result: map[string]any{ | ||||||
|  | 			"trackingId": "075ccc86-f6ef-4d33-97d5-e91cfb37aa0d", | ||||||
|  | 			"publicKey":  "0x623EFAFa8868df4B934dd12a8B26CB3Dd75A7AdD", | ||||||
|  | 		}, | ||||||
|  | 	}, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (tas *TestAccountService) CheckBalance(ctx context.Context, publicKey string) (*models.BalanceResponse, error) { | ||||||
|  | 	balanceResponse := &models.BalanceResponse{ | ||||||
|  | 		Ok: true, | ||||||
|  | 		Result: struct { | ||||||
|  | 			Balance string      `json:"balance"` | ||||||
|  | 			Nonce   json.Number `json:"nonce"` | ||||||
|  | 		}{ | ||||||
|  | 			Balance: "0.003 CELO", | ||||||
|  | 			Nonce:   json.Number("0"), | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return balanceResponse, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (tas *TestAccountService) CheckAccountStatus(ctx context.Context, trackingId string) (*models.TrackStatusResponse, error) { | ||||||
|  | 	trackResponse := &models.TrackStatusResponse{ | ||||||
|  | 		Ok: true, | ||||||
|  | 		Result: struct { | ||||||
|  | 			Transaction struct { | ||||||
|  | 				CreatedAt     time.Time   "json:\"createdAt\"" | ||||||
|  | 				Status        string      "json:\"status\"" | ||||||
|  | 				TransferValue json.Number "json:\"transferValue\"" | ||||||
|  | 				TxHash        string      "json:\"txHash\"" | ||||||
|  | 				TxType        string      "json:\"txType\"" | ||||||
|  | 			} | ||||||
|  | 		}{ | ||||||
|  | 			Transaction: models.Transaction{ | ||||||
|  | 				CreatedAt:     time.Now(), | ||||||
|  | 				Status:        "SUCCESS", | ||||||
|  | 				TransferValue: json.Number("0.5"), | ||||||
|  | 				TxHash:        "0x123abc456def", | ||||||
|  | 				TxType:        "transfer", | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	return trackResponse, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (tas *TestAccountService) TrackAccountStatus(ctx context.Context, publicKey string) (*api.OKResponse, error) { | ||||||
|  | 	return &api.OKResponse{ | ||||||
|  | 		Ok:          true, | ||||||
|  | 		Description: "Account creation succeeded", | ||||||
|  | 		Result: map[string]any{ | ||||||
|  | 			"active": true, | ||||||
|  | 		}, | ||||||
|  | 	}, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (tas *TestAccountService) FetchVouchers(ctx context.Context, publicKey string) (*models.VoucherHoldingResponse, error) { | ||||||
|  | 	return &models.VoucherHoldingResponse{ | ||||||
|  | 		Ok: true, | ||||||
|  | 		Result: struct { | ||||||
|  | 			Holdings []struct { | ||||||
|  | 				ContractAddress string `json:"contractAddress"` | ||||||
|  | 				TokenSymbol     string `json:"tokenSymbol"` | ||||||
|  | 				TokenDecimals   string `json:"tokenDecimals"` | ||||||
|  | 				Balance         string `json:"balance"` | ||||||
|  | 			} `json:"holdings"` | ||||||
|  | 		}{ | ||||||
|  | 			Holdings: []struct { | ||||||
|  | 				ContractAddress string `json:"contractAddress"` | ||||||
|  | 				TokenSymbol     string `json:"tokenSymbol"` | ||||||
|  | 				TokenDecimals   string `json:"tokenDecimals"` | ||||||
|  | 				Balance         string `json:"balance"` | ||||||
|  | 			}{ | ||||||
|  | 				{ | ||||||
|  | 					ContractAddress: "0x6CC75A06ac72eB4Db2eE22F781F5D100d8ec03ee", | ||||||
|  | 					TokenSymbol:     "SRF", | ||||||
|  | 					TokenDecimals:   "6", | ||||||
|  | 					Balance:         "2745987", | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	}, nil | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								internal/testutil/testtag/offlinetest.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								internal/testutil/testtag/offlinetest.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | // +build !online
 | ||||||
|  | 
 | ||||||
|  | package testtag | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"git.grassecon.net/urdt/ussd/internal/handlers/server" | ||||||
|  | 	accountservice "git.grassecon.net/urdt/ussd/internal/testutil/testservice" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var ( | ||||||
|  | 	AccountService server.AccountServiceInterface = &accountservice.TestAccountService{} | ||||||
|  | ) | ||||||
| @ -1,6 +1,6 @@ | |||||||
| // +build online
 | // +build online
 | ||||||
| 
 | 
 | ||||||
| package testutil | package testtag | ||||||
| 
 | 
 | ||||||
| import "git.grassecon.net/urdt/ussd/internal/handlers/server" | import "git.grassecon.net/urdt/ussd/internal/handlers/server" | ||||||
| 
 | 
 | ||||||
| @ -9,8 +9,8 @@ import ( | |||||||
| 	"regexp" | 	"regexp" | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	"git.grassecon.net/urdt/ussd/driver" |  | ||||||
| 	"git.grassecon.net/urdt/ussd/internal/testutil" | 	"git.grassecon.net/urdt/ussd/internal/testutil" | ||||||
|  | 	"git.grassecon.net/urdt/ussd/internal/testutil/driver" | ||||||
| 	"github.com/gofrs/uuid" | 	"github.com/gofrs/uuid" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| CATCH incorrect_pin flag_incorrect_pin 1 | CATCH incorrect_pin flag_incorrect_pin 1 | ||||||
| CATCH profile_update_success flag_allow_update 1 | CATCH profile_update_success flag_allow_update 1 | ||||||
| LOAD save_location 0 |  | ||||||
| MOUT back 0 | MOUT back 0 | ||||||
| HALT | HALT | ||||||
|  | LOAD save_location 0 | ||||||
| RELOAD save_location | RELOAD save_location | ||||||
| INCMP _ 0 | INCMP _ 0 | ||||||
| INCMP pin_entry * | INCMP pin_entry * | ||||||
|  | |||||||
| @ -1,12 +1,8 @@ | |||||||
| CATCH incorrect_pin flag_incorrect_pin 1 | CATCH incorrect_pin flag_incorrect_pin 1 | ||||||
| CATCH profile_update_success flag_allow_update 1 | CATCH profile_update_success flag_allow_update 1 | ||||||
| LOAD save_firstname 0 |  | ||||||
| RELOAD save_firstname  |  | ||||||
| MOUT back 0 | MOUT back 0 | ||||||
| HALT | HALT | ||||||
|  | LOAD save_firstname 0 | ||||||
| RELOAD save_firstname | RELOAD save_firstname | ||||||
| INCMP _ 0 | INCMP _ 0 | ||||||
| INCMP pin_entry * | INCMP pin_entry * | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user