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