Testing harness.

No need to import modules dynamically, in order to
provide the euFin implementation of the BankServiceInterface.
This commit is contained in:
ms 2021-11-01 14:25:43 +01:00
parent 404c8c8a73
commit ea2acd1d3c
No known key found for this signature in database
GPG Key ID: 8D526861953F4C0F
2 changed files with 107 additions and 119 deletions

View File

@ -607,126 +607,114 @@ export namespace BankApi {
} }
} }
/** export class BankService implements BankServiceInterface {
* Method explained here: proc: ProcessWrapper | undefined;
* https://github.com/microsoft/TypeScript/issues/2552
*/ static async create(
module BankServices { gc: GlobalTestState,
export class PybankService implements BankServiceInterface { bc: BankConfig,
proc: ProcessWrapper | undefined; ): Promise<BankService> {
const config = new Configuration();
static fromExistingConfig(gc: GlobalTestState): BankService { setTalerPaths(config, gc.testDir + "/talerhome");
const cfgFilename = gc.testDir + "/bank.conf"; config.setString("taler", "currency", bc.currency);
console.log("reading bank config from", cfgFilename); config.setString("bank", "database", bc.database);
const config = Configuration.load(cfgFilename); config.setString("bank", "http_port", `${bc.httpPort}`);
const bc: BankConfig = { config.setString("bank", "serve", "http");
allowRegistrations: config config.setString("bank", "max_debt_bank", `${bc.currency}:999999`);
.getYesNo("bank", "allow_registrations") config.setString("bank", "max_debt", bc.maxDebt ?? `${bc.currency}:100`);
.required(), config.setString(
currency: config.getString("taler", "currency").required(), "bank",
database: config.getString("bank", "database").required(), "allow_registrations",
httpPort: config.getNumber("bank", "http_port").required(), bc.allowRegistrations ? "yes" : "no",
}; );
return new BankService(gc, bc, cfgFilename); const cfgFilename = gc.testDir + "/bank.conf";
} config.write(cfgFilename);
static async create( await sh(
gc: GlobalTestState, gc,
bc: BankConfig, "taler-bank-manage_django",
): Promise<BankService> { `taler-bank-manage -c '${cfgFilename}' django migrate`,
const config = new Configuration(); );
setTalerPaths(config, gc.testDir + "/talerhome"); await sh(
config.setString("taler", "currency", bc.currency); gc,
config.setString("bank", "database", bc.database); "taler-bank-manage_django",
config.setString("bank", "http_port", `${bc.httpPort}`); `taler-bank-manage -c '${cfgFilename}' django provide_accounts`,
config.setString("bank", "serve", "http"); );
config.setString("bank", "max_debt_bank", `${bc.currency}:999999`);
config.setString("bank", "max_debt", bc.maxDebt ?? `${bc.currency}:100`); return new BankService(gc, bc, cfgFilename);
config.setString( }
"bank",
"allow_registrations", setSuggestedExchange(e: ExchangeServiceInterface, exchangePayto: string) {
bc.allowRegistrations ? "yes" : "no", const config = Configuration.load(this.configFile);
); config.setString("bank", "suggested_exchange", e.baseUrl);
const cfgFilename = gc.testDir + "/bank.conf"; config.setString("bank", "suggested_exchange_payto", exchangePayto);
config.write(cfgFilename); }
await sh( get baseUrl(): string {
gc, return `http://localhost:${this.bankConfig.httpPort}/`;
"taler-bank-manage_django", }
`taler-bank-manage -c '${cfgFilename}' django migrate`,
); async createExchangeAccount(
await sh( accountName: string,
gc, password: string,
"taler-bank-manage_django", ): Promise<HarnessExchangeBankAccount> {
`taler-bank-manage -c '${cfgFilename}' django provide_accounts`, await sh(
); this.globalTestState,
"taler-bank-manage_django",
return new BankService(gc, bc, cfgFilename); `taler-bank-manage -c '${this.configFile}' django add_bank_account ${accountName}`,
} );
await sh(
setSuggestedExchange(e: ExchangeServiceInterface, exchangePayto: string) { this.globalTestState,
const config = Configuration.load(this.configFile); "taler-bank-manage_django",
config.setString("bank", "suggested_exchange", e.baseUrl); `taler-bank-manage -c '${this.configFile}' django changepassword_unsafe ${accountName} ${password}`,
config.setString("bank", "suggested_exchange_payto", exchangePayto); );
} await sh(
this.globalTestState,
get baseUrl(): string { "taler-bank-manage_django",
return `http://localhost:${this.bankConfig.httpPort}/`; `taler-bank-manage -c '${this.configFile}' django top_up ${accountName} ${this.bankConfig.currency}:100000`,
} );
return {
async createExchangeAccount( accountName: accountName,
accountName: string, accountPassword: password,
password: string, accountPaytoUri: `payto://x-taler-bank/${accountName}`,
): Promise<HarnessExchangeBankAccount> { wireGatewayApiBaseUrl: `http://localhost:${this.bankConfig.httpPort}/taler-wire-gateway/${accountName}/`,
await sh( };
this.globalTestState, }
"taler-bank-manage_django",
`taler-bank-manage -c '${this.configFile}' django add_bank_account ${accountName}`, get port() {
); return this.bankConfig.httpPort;
await sh( }
this.globalTestState,
"taler-bank-manage_django", private constructor(
`taler-bank-manage -c '${this.configFile}' django changepassword_unsafe ${accountName} ${password}`, private globalTestState: GlobalTestState,
); private bankConfig: BankConfig,
await sh( private configFile: string,
this.globalTestState, ) {}
"taler-bank-manage_django",
`taler-bank-manage -c '${this.configFile}' django top_up ${accountName} ${this.bankConfig.currency}:100000`, async start(): Promise<void> {
); this.proc = this.globalTestState.spawnService(
return { "taler-bank-manage",
accountName: accountName, ["-c", this.configFile, "serve"],
accountPassword: password, "bank",
accountPaytoUri: `payto://x-taler-bank/${accountName}`, );
wireGatewayApiBaseUrl: `http://localhost:${this.bankConfig.httpPort}/taler-wire-gateway/${accountName}/`, }
};
} async pingUntilAvailable(): Promise<void> {
const url = `http://localhost:${this.bankConfig.httpPort}/config`;
get port() { await pingProc(this.proc, url, "bank");
return this.bankConfig.httpPort;
}
private constructor(
private globalTestState: GlobalTestState,
private bankConfig: BankConfig,
private configFile: string,
) {}
async start(): Promise<void> {
this.proc = this.globalTestState.spawnService(
"taler-bank-manage",
["-c", this.configFile, "serve"],
"bank",
);
}
async pingUntilAvailable(): Promise<void> {
const url = `http://localhost:${this.bankConfig.httpPort}/config`;
await pingProc(this.proc, url, "bank");
}
} }
} }
import BankService = BankServices.PybankService;
export { BankService }; /**
* euFin migration:
*
* if (process.env.WALLET_HARNESS_WITH_EUFIN) {
* BankService.prototype = {
* // methods from euFin ..
* };
* }
*
*/
export class FakeBankService { export class FakeBankService {
proc: ProcessWrapper | undefined; proc: ProcessWrapper | undefined;

View File

@ -63,7 +63,7 @@ export interface SimpleTestEnvironment {
} }
export function getRandomIban(countryCode: string): string { export function getRandomIban(countryCode: string): string {
return `${countryCode}715001051796${Math.floor(Math.random() * 1000000)}`; return `${countryCode}715001051796${(Math.random().toString().substring(2, 8))}`
} }
export function getRandomString(): string { export function getRandomString(): string {