(t *testing.T)
| 78 | } |
| 79 | |
| 80 | func TestCreateAccountWithExternalGenerator(t *testing.T) { |
| 81 | // Initialize the mock HTTP responder |
| 82 | httpmock.Activate() |
| 83 | defer httpmock.DeactivateAndReset() |
| 84 | |
| 85 | datasource, mock, err := newTestDataSource() |
| 86 | assert.NoError(t, err) |
| 87 | |
| 88 | d, err := NewLedgerForge(datasource) |
| 89 | assert.NoError(t, err) |
| 90 | |
| 91 | // Mock the external account generator response |
| 92 | httpmock.RegisterResponder("GET", "http://example.com/generateAccount", |
| 93 | httpmock.NewStringResponder(200, `{"account_number": "123456789", "bank_name": "LedgerForge Bank"}`)) |
| 94 | |
| 95 | account := model.Account{ |
| 96 | Name: "Test Account", |
| 97 | BankName: "LedgerForge Bank", |
| 98 | Number: "123456789", |
| 99 | Currency: "NGN", |
| 100 | LedgerID: "ledger_123", |
| 101 | IdentityID: gofakeit.UUID(), |
| 102 | BalanceID: gofakeit.UUID(), |
| 103 | MetaData: map[string]interface{}{"key": "value"}, |
| 104 | } |
| 105 | metaDataJSON, _ := json.Marshal(account.MetaData) |
| 106 | |
| 107 | rows := sqlmock.NewRows([]string{"balance_id", "indicator", "currency", "currency_multiplier", "ledger_id", "balance", "credit_balance", "debit_balance", "inflight_balance", "inflight_credit_balance", "inflight_debit_balance", "created_at", "version", "track_fund_lineage", "allocation_strategy", "identity_id"}). |
| 108 | AddRow(account.BalanceID, "", "NGN", 1, account.LedgerID, 100, 50, 50, 0, 0, 0, time.Now(), 0, false, "FIFO", "") |
| 109 | |
| 110 | mock.ExpectQuery("SELECT .* FROM ledgerforge.balances WHERE balance_id ="). |
| 111 | WithArgs(account.BalanceID). |
| 112 | WillReturnRows(rows) |
| 113 | |
| 114 | mock.ExpectExec("INSERT INTO ledgerforge.accounts"). |
| 115 | WithArgs(sqlmock.AnyArg(), account.Name, account.Number, account.BankName, account.Currency, account.LedgerID, account.IdentityID, account.BalanceID, sqlmock.AnyArg(), metaDataJSON). |
| 116 | WillReturnResult(sqlmock.NewResult(1, 1)) |
| 117 | |
| 118 | result, err := d.CreateAccount(account) |
| 119 | assert.NoError(t, err) |
| 120 | assert.Equal(t, "123456789", result.Number) |
| 121 | assert.Equal(t, "LedgerForge Bank", result.BankName) |
| 122 | assert.WithinDuration(t, time.Now(), result.CreatedAt, time.Second) |
| 123 | |
| 124 | if err := mock.ExpectationsWereMet(); err != nil { |
| 125 | t.Errorf("there were unfulfilled expectations: %s", err) |
| 126 | } |
| 127 | } |
| 128 | |
| 129 | func TestGetAccountByID(t *testing.T) { |
| 130 | cnf := &config.Configuration{ |
nothing calls this directly
no test coverage detected