-
Notifications
You must be signed in to change notification settings - Fork 89
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: integration tests #2380
Merged
Merged
feat: integration tests #2380
Changes from 12 commits
Commits
Show all changes
68 commits
Select commit
Hold shift + click to select a range
9e3a707
feat: setup basic test env
BlairCurrey 11200cd
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey 5c6acb5
feat: seed integration environment
BlairCurrey aaa2103
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey 71b0257
refactor(localenv,integration): move graphql url to config from seed
BlairCurrey ec4fe8f
refactor: move testenv configuration into new dir
BlairCurrey 5ab8b67
refactor: cleanup env vars
BlairCurrey b64d369
feat: add webhook server, fix env vars
BlairCurrey b95aff8
chore: comment
BlairCurrey 322970e
feat: start grant request test
BlairCurrey c9096ec
fix: eslint errors
BlairCurrey 9a654a9
fix: docker compose env vars
BlairCurrey dcc156e
feat: add --build arg
BlairCurrey 83431e0
fix: incoming-payment grant initiation request
BlairCurrey 551ffc3
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey f02db32
fix: ts error
BlairCurrey 24a46f0
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey b7378f6
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey fb0d87f
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey a12910d
feat: implement tests through Create Quote
BlairCurrey f1f1c59
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey 3be48e1
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey afaa594
chore: upgrade op client
BlairCurrey 57f7d7f
feat: partially implemented grant request outgoing payment test
BlairCurrey 52f35b9
feat: rework to host.docker.internal
BlairCurrey 7702441
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey 83dc970
feat: add p2p flow test
BlairCurrey 716891e
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey cc93982
feat: add continuation step with consent mocking
BlairCurrey 9e1e215
fix: rm obsolete type cast to any and comment
BlairCurrey 51fc325
feat: add create ougoing payment test
BlairCurrey b845cd7
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey 09e1314
fix: bad pnpm-lock merge
BlairCurrey b94f452
feat: build deps in mock ase job
BlairCurrey 82e84d6
feat: get non existant wallet address test
BlairCurrey 7dd1f13
fix: update open payments pkg
BlairCurrey 53773cc
chore: fix lint warnings
BlairCurrey 4cd2646
feat: implement continuation polling
BlairCurrey b17465d
chore: test cleanup
BlairCurrey af0a038
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey 42ab964
refactor: generate gql in tests instead of import from lib
BlairCurrey e29b58c
chore: rm old comment
BlairCurrey 187df0b
chore: use latest http-singature-utils to match other deps
BlairCurrey d9a425e
chore: pnpm i
BlairCurrey 5c53d9c
chore: use latest koa-bodyparser
BlairCurrey d312900
chore: rm engine strict
BlairCurrey b33ca1f
chore: revert rm engine strict
BlairCurrey 36fd545
chore(integration): dont ignore env, rm example env
BlairCurrey 366d02f
refactor: use docker healthcheck for running tests
BlairCurrey f85a804
chore: move healthcheck to last started docker container
BlairCurrey 1320b98
feat: use latest open payments pkg, no body requird on continuation
BlairCurrey 2f587d8
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey 636832d
chore: pnpm i, fix broken lockfile (no apollo version)
BlairCurrey f4ad75c
refactor: move webhook event enum to types
BlairCurrey 9c19b9a
refactor: move run integration script to test/integration
BlairCurrey 12c4cb7
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey 6085663
Update packages/mock-account-servicing-lib/package.json
BlairCurrey 8994ead
refactor: simplify mock-account-servicing-entity ci step
BlairCurrey bb98b70
feat(integration): exit run-tests early if containers fail to start
BlairCurrey 0ab5844
feat: use pino logger
BlairCurrey 43d536b
refactor: rename mock account servicing lib
BlairCurrey a154e4c
Merge branch 'main' into bc/2049/rafiki-to-rafiki-test
BlairCurrey c4262bb
refactor: rename class files to camel case
BlairCurrey 7f39cd4
fix: import correct body parser
BlairCurrey a6b937e
refactor: poll instead of delay
BlairCurrey 53c3f30
refactor: simplify call to poll condition only
BlairCurrey ba612eb
fix: update filenames
BlairCurrey 20c135f
refactor: change filename name to kebab case
BlairCurrey File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,7 +3,10 @@ import type { EntryContext } from '@remix-run/node' | |
import { createReadableStreamFromReadable } from '@remix-run/node' | ||
import { RemixServer } from '@remix-run/react' | ||
import { renderToPipeableStream } from 'react-dom/server' | ||
import { runSeed } from './lib/run_seed.server' | ||
import { setupFromSeed } from 'mock-account-servicing-lib' | ||
import { CONFIG } from './lib/parse_config.server' | ||
import { apolloClient } from './lib/apolloClient' | ||
import { mockAccounts } from './lib/accounts.server' | ||
|
||
declare global { | ||
// eslint-disable-next-line no-var | ||
|
@@ -27,7 +30,10 @@ async function callWithRetry(fn: () => any, depth = 0): Promise<void> { | |
} | ||
|
||
if (!global.__seeded) { | ||
callWithRetry(runSeed) | ||
callWithRetry(async () => { | ||
console.log('setting up from seed...') | ||
return setupFromSeed(CONFIG, apolloClient, mockAccounts, { debug: true }) | ||
}) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same as it was before, but inlined |
||
.then(() => { | ||
global.__seeded = true | ||
}) | ||
|
272 changes: 1 addition & 271 deletions
272
localenv/mock-account-servicing-entity/app/lib/accounts.server.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,273 +1,3 @@ | ||
export interface Account { | ||
id: string | ||
name: string | ||
path: string | ||
walletAddressID: string | ||
walletAddress: string | ||
debitsPending: bigint | ||
debitsPosted: bigint | ||
creditsPending: bigint | ||
creditsPosted: bigint | ||
assetCode: string | ||
assetScale: number | ||
assetId: string | ||
} | ||
|
||
export interface AccountsServer { | ||
clearAccounts(): Promise<void> | ||
setWalletAddress( | ||
id: string, | ||
walletID: string, | ||
walletAddress: string | ||
): Promise<void> | ||
create( | ||
id: string, | ||
path: string, | ||
name: string, | ||
assetCode: string, | ||
assetScale: number, | ||
assetId: string | ||
): Promise<void> | ||
listAll(): Promise<Account[]> | ||
get(id: string): Promise<Account | undefined> | ||
getByWalletAddressId(walletAddressId: string): Promise<Account | undefined> | ||
getByPath(path: string): Promise<Account | undefined> | ||
getByWalletAddressUrl(walletAddressUrl: string): Promise<Account | undefined> | ||
voidPendingDebit(id: string, amount: bigint): Promise<void> | ||
voidPendingCredit(id: string, amount: bigint): Promise<void> | ||
pendingDebit(id: string, amount: bigint): Promise<void> | ||
pendingCredit(id: string, amount: bigint): Promise<void> | ||
debit(id: string, amount: bigint, clearPending: boolean): Promise<void> | ||
credit(id: string, amount: bigint, clearPending: boolean): Promise<void> | ||
} | ||
|
||
export class AccountProvider implements AccountsServer { | ||
accounts = new Map<string, Account>() | ||
|
||
async clearAccounts(): Promise<void> { | ||
this.accounts.clear() | ||
} | ||
|
||
async setWalletAddress( | ||
id: string, | ||
walletID: string, | ||
walletAddress: string | ||
): Promise<void> { | ||
if (!this.accounts.has(id)) { | ||
throw new Error('account already exists') | ||
} | ||
|
||
const acc = this.accounts.get(id) | ||
|
||
if (!acc) { | ||
throw new Error() | ||
} | ||
|
||
acc.walletAddress = walletAddress | ||
acc.walletAddressID = walletID | ||
} | ||
|
||
async create( | ||
id: string, | ||
path: string, | ||
name: string, | ||
assetCode: string, | ||
assetScale: number, | ||
assetId: string | ||
): Promise<void> { | ||
if (this.accounts.has(id)) { | ||
throw new Error('account already exists') | ||
} | ||
this.accounts.set(id, { | ||
id, | ||
name, | ||
path, | ||
walletAddress: '', | ||
walletAddressID: '', | ||
creditsPending: BigInt(0), | ||
creditsPosted: BigInt(0), | ||
debitsPending: BigInt(0), | ||
debitsPosted: BigInt(0), | ||
assetCode, | ||
assetScale, | ||
assetId | ||
}) | ||
} | ||
|
||
async listAll(): Promise<Account[]> { | ||
return [...this.accounts.values()] | ||
} | ||
|
||
async get(id: string): Promise<Account | undefined> { | ||
return this.accounts.get(id) | ||
} | ||
|
||
async getByWalletAddressId( | ||
walletAddressId: string | ||
): Promise<Account | undefined> { | ||
for (const acc of this.accounts.values()) { | ||
if (acc.walletAddressID == walletAddressId) { | ||
return acc | ||
} | ||
} | ||
} | ||
|
||
async getByWalletAddressUrl( | ||
walletAddressUrl: string | ||
): Promise<Account | undefined> { | ||
return (await this.listAll()).find( | ||
(acc) => acc.walletAddress === walletAddressUrl | ||
) | ||
} | ||
|
||
async getByPath(path: string): Promise<Account | undefined> { | ||
return (await this.listAll()).find((acc) => acc.path === path) | ||
} | ||
|
||
async credit( | ||
id: string, | ||
amount: bigint, | ||
clearPending: boolean | ||
): Promise<void> { | ||
if (!this.accounts.has(id)) { | ||
throw new Error('account does not exist') | ||
} | ||
if (amount < 0) { | ||
throw new Error('invalid credit amount') | ||
} | ||
|
||
const acc = this.accounts.get(id) | ||
|
||
if (!acc) { | ||
throw new Error() | ||
} | ||
|
||
if (clearPending && acc.creditsPending - amount < 0) { | ||
throw new Error('invalid amount, credits pending cannot be less than 0') | ||
} | ||
|
||
acc.creditsPosted += amount | ||
if (clearPending) { | ||
acc.creditsPending -= amount | ||
} | ||
} | ||
|
||
async debit( | ||
id: string, | ||
amount: bigint, | ||
clearPending: boolean | ||
): Promise<void> { | ||
if (!this.accounts.has(id)) { | ||
throw new Error('account does not exist') | ||
} | ||
if (amount < 0) { | ||
throw new Error('invalid debit amount') | ||
} | ||
|
||
const acc = this.accounts.get(id) | ||
|
||
if (!acc) { | ||
throw new Error() | ||
} | ||
|
||
if ( | ||
(clearPending && acc.debitsPending - amount < 0) || | ||
acc.debitsPosted + amount < 0 | ||
) { | ||
throw new Error('invalid amount, debits pending cannot be less than 0') | ||
} | ||
|
||
if ( | ||
!clearPending && | ||
acc.creditsPosted < acc.debitsPosted + acc.debitsPending + amount | ||
) { | ||
throw new Error('invalid debit, insufficient funds') | ||
} | ||
acc.debitsPosted += amount | ||
if (clearPending) { | ||
acc.debitsPending -= amount | ||
} | ||
} | ||
|
||
async pendingCredit(id: string, amount: bigint): Promise<void> { | ||
if (!this.accounts.has(id)) { | ||
throw new Error('account does not exist') | ||
} | ||
if (amount < 0) { | ||
throw new Error('invalid pending credit amount') | ||
} | ||
|
||
const acc = this.accounts.get(id) | ||
|
||
if (!acc) { | ||
throw new Error() | ||
} | ||
|
||
acc.creditsPending += amount | ||
} | ||
|
||
async pendingDebit(id: string, amount: bigint): Promise<void> { | ||
if (!this.accounts.has(id)) { | ||
throw new Error('account does not exist') | ||
} | ||
if (amount < 0) { | ||
throw new Error('invalid pending debit amount') | ||
} | ||
|
||
const acc = this.accounts.get(id) | ||
|
||
if (!acc) { | ||
throw new Error() | ||
} | ||
|
||
if (acc.creditsPosted < acc.debitsPosted + acc.debitsPending + amount) { | ||
throw new Error('invalid pending debit amount, insufficient funds') | ||
} | ||
|
||
acc.debitsPending += amount | ||
} | ||
|
||
async voidPendingDebit(id: string, amount: bigint): Promise<void> { | ||
if (!this.accounts.has(id)) { | ||
throw new Error('account does not exist') | ||
} | ||
if (amount < 0) { | ||
throw new Error('invalid void pending debit amount') | ||
} | ||
|
||
const acc = this.accounts.get(id) | ||
|
||
if (!acc) { | ||
throw new Error() | ||
} | ||
|
||
if (acc.debitsPending - amount < 0) { | ||
throw new Error('invalid amount, debits pending cannot be less than 0') | ||
} | ||
|
||
acc.debitsPending -= amount | ||
} | ||
|
||
async voidPendingCredit(id: string, amount: bigint): Promise<void> { | ||
if (!this.accounts.has(id)) { | ||
throw new Error('account does not exist') | ||
} | ||
if (amount < 0) { | ||
throw new Error('invalid void pending credit amount') | ||
} | ||
|
||
const acc = this.accounts.get(id) | ||
|
||
if (!acc) { | ||
throw new Error() | ||
} | ||
|
||
if (acc.debitsPending - amount < 0) { | ||
throw new Error('invalid amount, credits pending cannot be less than 0') | ||
} | ||
|
||
acc.creditsPending -= amount | ||
} | ||
} | ||
import { AccountProvider } from 'mock-account-servicing-lib' | ||
|
||
export const mockAccounts = new AccountProvider() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I moved the
graphqlUrl
to an environment variable and got rid ofself
because the other properties were not used. ditto forlocalenv/happy-life-bank/docker-compose.yml
. I could not track down the original intention of these unused properties - looks like they were never used. Just mentioning it in case someone knows something I dont.