libeufin-tutorial test: up to key-letter generation

This commit is contained in:
MS 2021-02-04 14:38:47 +01:00
parent 5765c51b2e
commit 39723f6f97
No known key found for this signature in database
GPG Key ID: 8D526861953F4C0F
2 changed files with 209 additions and 3 deletions

View File

@ -51,6 +51,43 @@ export interface LibeufinCliDetails {
sandboxUrl: string; sandboxUrl: string;
nexusDatabaseUri: string; nexusDatabaseUri: string;
sandboxDatabaseUri: string; sandboxDatabaseUri: string;
user: LibeufinNexusUser;
}
export interface LibeufinEbicsSubscriberDetails {
hostId: string;
partnerId: string;
userId: string;
}
export interface LibeufinEbicsConnectionDetails {
subscriberDetails: LibeufinEbicsSubscriberDetails;
ebicsUrl: string;
connectionName: string;
}
export interface LibeufinBankAccountDetails {
currency: string;
iban: string;
bic: string;
personName: string;
accountName: string;
}
export interface LibeufinNexusUser {
username: string;
password: string;
}
export interface LibeufinBackupFileDetails {
passphrase: string;
outputFile: string;
connectionName: string;
}
export interface LibeufinKeyLetterDetails {
outputFile: string;
connectionName: string;
} }
export class LibeufinSandboxService implements LibeufinSandboxServiceInterface { export class LibeufinSandboxService implements LibeufinSandboxServiceInterface {
@ -136,6 +173,20 @@ export class LibeufinNexusService {
const url = `${this.baseUrl}config`; const url = `${this.baseUrl}config`;
await pingProc(this.nexusProc, url, "libeufin-nexus"); await pingProc(this.nexusProc, url, "libeufin-nexus");
} }
async createNexusSuperuser(
details: LibeufinNexusUser,
): Promise<void> {
const stdout = await sh(
this.globalTestState,
"libeufin-nexus",
`libeufin-nexus superuser ${details.username} --password=${details.password}`,
extendEnv({ LIBEUFIN_NEXUS_DB_CONNECTION: this.nexusConfig.databaseJdbcUri }),
);
console.log(stdout);
}
} }
export interface CreateEbicsSubscriberRequest { export interface CreateEbicsSubscriberRequest {
@ -207,6 +258,130 @@ export class LibeufinCli {
); );
console.log(stdout); console.log(stdout);
} }
async createEbicsSubscriber(
details: LibeufinEbicsSubscriberDetails,
): Promise<void> {
const stdout = await sh(
this.globalTestState,
"libeufin-cli-createebicssubscriber",
"libeufin-cli sandbox ebicssubscriber create" +
` --host-id=${details.hostId}` +
` --partner-id=${details.partnerId}` +
` --user-id=${details.userId}`,
extendEnv({ LIBEUFIN_SANDBOX_URL: this.cliDetails.sandboxUrl }),
);
console.log(stdout);
}
async createEbicsBankAccount(
sd: LibeufinEbicsSubscriberDetails,
bankAccountDetails: LibeufinBankAccountDetails,
): Promise<void> {
const stdout = await sh(
this.globalTestState,
"libeufin-cli-createebicsbankaccount",
"libeufin-cli sandbox ebicsbankaccount create" +
` --currency=${bankAccountDetails.currency}` +
` --iban=${bankAccountDetails.iban}` +
` --bic=${bankAccountDetails.bic}` +
` --person-name='${bankAccountDetails.personName}'` +
` --account-name=${bankAccountDetails.accountName}` +
` --ebics-host-id=${sd.hostId}` +
` --ebics-partner-id=${sd.partnerId}` +
` --ebics-user-id=${sd.userId}`,
extendEnv({ LIBEUFIN_SANDBOX_URL: this.cliDetails.sandboxUrl }),
);
console.log(stdout);
}
async generateTransactions(
accountName: string,
): Promise<void> {
const stdout = await sh(
this.globalTestState,
"libeufin-cli-generatetransactions",
`libeufin-cli sandbox bankaccount generate-transactions ${accountName}`,
extendEnv({ LIBEUFIN_SANDBOX_URL: this.cliDetails.sandboxUrl }),
);
console.log(stdout);
}
async showSandboxTransactions(
accountName: string,
): Promise<void> {
const stdout = await sh(
this.globalTestState,
"libeufin-cli-showsandboxtransactions",
`libeufin-cli sandbox bankaccount transactions ${accountName}`,
extendEnv({ LIBEUFIN_SANDBOX_URL: this.cliDetails.sandboxUrl }),
);
console.log(stdout);
}
async createEbicsConnection(
connectionDetails: LibeufinEbicsConnectionDetails,
): Promise<void> {
const stdout = await sh(
this.globalTestState,
"libeufin-cli-createebicsconnection",
`libeufin-cli connections new-ebics-connection` +
` --ebics-url=${connectionDetails.ebicsUrl}` +
` --host-id=${connectionDetails.subscriberDetails.hostId}` +
` --partner-id=${connectionDetails.subscriberDetails.partnerId}` +
` --ebics-user-id=${connectionDetails.subscriberDetails.partnerId}` +
` ${connectionDetails.connectionName}`,
extendEnv({
LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username,
LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password,
}),
);
console.log(stdout);
}
async createBackupFile(
details: LibeufinBackupFileDetails,
): Promise<void> {
const stdout = await sh(
this.globalTestState,
"libeufin-cli-createbackupfile",
`libeufin-cli connections export-backup` +
` --passphrase=${details.passphrase}` +
` --output-file=${details.outputFile}` +
` ${details.connectionName}`,
extendEnv({
LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username,
LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password,
}),
);
console.log(stdout);
}
async createKeyLetter(
details: LibeufinKeyLetterDetails,
): Promise<void> {
const stdout = await sh(
this.globalTestState,
"libeufin-cli-createkeyletter",
`libeufin-cli connections get-key-letter` +
` ${details.connectionName} ${details.outputFile}`,
extendEnv({
LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username,
LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password,
}),
);
console.log(stdout);
}
} }
export namespace LibeufinSandboxApi { export namespace LibeufinSandboxApi {

View File

@ -47,16 +47,47 @@ export async function runLibeufinTutorialTest(t: GlobalTestState) {
databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`, databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
}); });
await libeufinNexus.start(); const nexusUser = {username: "foo", password: "secret"};
await libeufinNexus.pingUntilAvailable();
const libeufinCli = new LibeufinCli(t, { const libeufinCli = new LibeufinCli(t, {
sandboxUrl: libeufinSandbox.baseUrl, sandboxUrl: libeufinSandbox.baseUrl,
nexusUrl: libeufinNexus.baseUrl, nexusUrl: libeufinNexus.baseUrl,
sandboxDatabaseUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`, sandboxDatabaseUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
nexusDatabaseUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`, nexusDatabaseUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
user: nexusUser,
}); });
const ebicsDetails = {
hostId: "testhost", partnerId: "partner01", userId: "user01"
}
const bankAccountDetails = {
currency: "EUR", iban: "DE18500105172929531888", bic: "INGDDEFFXXX",
personName: "Jane Normal", accountName: "testacct01"
}
await libeufinCli.checkSandbox(); await libeufinCli.checkSandbox();
await libeufinCli.createEbicsHost("testhost"); await libeufinCli.createEbicsHost("testhost");
await libeufinCli.createEbicsSubscriber(ebicsDetails);
await libeufinCli.createEbicsBankAccount(ebicsDetails, bankAccountDetails);
await libeufinCli.generateTransactions(bankAccountDetails.accountName);
await libeufinNexus.start();
await libeufinNexus.pingUntilAvailable();
await libeufinNexus.createNexusSuperuser(nexusUser);
const connectionDetails = {
subscriberDetails: ebicsDetails,
ebicsUrl: `${libeufinSandbox.baseUrl}ebicsweb`, // FIXME: need appropriate URL concatenation
connectionName: "my-ebics-conn",
}
await libeufinCli.createEbicsConnection(connectionDetails);
await libeufinCli.createBackupFile({
passphrase: "secret",
outputFile: `${t.testDir}/connection-backup.json`,
connectionName: connectionDetails.connectionName,
})
await libeufinCli.createKeyLetter({
outputFile: `${t.testDir}/letter.pdf`,
connectionName: connectionDetails.connectionName,
});
} }