Skip to content

Commit

Permalink
feat: check for deleted Identities; wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Milena-Czierlinski committed Dec 11, 2024
1 parent b9f1749 commit 5671fd3
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 3 deletions.
13 changes: 11 additions & 2 deletions packages/app-runtime/src/AppRuntime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,10 +305,19 @@ export class AppRuntime extends Runtime<AppConfig> {

for (const account of accounts) {
const session = await this.selectAccount(account.id.toString());
const syncResult = await session.transportServices.account.syncDatawallet();

const syncResult = await session.transportServices.account.syncDatawallet();
if (syncResult.isSuccess) continue;
// TODO: can I check whether the error is a 400?
// TODO: should we log the syncResult error?

session.accountController.authenticator.clear();
try {
await session.accountController.authenticator.getToken();
continue;
} catch (error) {
this.logger.error(error);
// if (!(error.status === 400)) continue;
}

const checkDeletionResult = await session.transportServices.account.checkDeletionOfIdentity();

Expand Down
25 changes: 25 additions & 0 deletions packages/app-runtime/test/lib/TestUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ import {
SyncEverythingResponse
} from "@nmshd/runtime";
import { IConfigOverwrite, TransportLoggerFactory } from "@nmshd/transport";
import fs from "fs";
import path from "path";
import { GenericContainer, Wait } from "testcontainers";
import { LogLevel } from "typescript-logging";
import { AppConfig, AppRuntime, IUIBridge, LocalAccountDTO, LocalAccountSession, createAppConfig as runtime_createAppConfig } from "../../src";
import { FakeUIBridge } from "./FakeUIBridge";
Expand Down Expand Up @@ -262,4 +265,26 @@ export class TestUtil {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
expect(result.isSuccess, `${result.error?.code} | ${result.error?.message}`).toBe(true);
}

public static async runDeletionJob(): Promise<void> {
const backboneVersion = this.getBackboneEnvVar("BACKBONE_VERSION");

await new GenericContainer(`ghcr.io/nmshd/backbone-identity-deletion-jobs:${backboneVersion}`)
.withWaitStrategy(Wait.forOneShotStartup())
.withCommand(["--Worker", "ActualDeletionWorker"])
.withNetworkMode("backbone")
.withCopyFilesToContainer([{ source: `${__dirname}/../../../../.dev/appsettings.override.json`, target: "/app/appsettings.override.json" }])
.start();
}

private static getBackboneEnvVar(name: string) {
const envFile = fs.readFileSync(path.resolve(`${__dirname}/../../../../.dev/compose.backbone.env`));
const env = envFile
.toString()
.split("\n")
.map((line) => line.split("="))
.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {} as Record<string, string>);

return env[name];
}
}
40 changes: 39 additions & 1 deletion packages/app-runtime/test/runtime/Startup.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AppRuntime, LocalAccountDTO } from "../../src";
import { AppRuntime, LocalAccountDTO, LocalAccountSession } from "../../src";
import { EventListener, TestUtil } from "../lib";

describe("Runtime Startup", function () {
Expand Down Expand Up @@ -64,3 +64,41 @@ describe("Runtime Startup", function () {
expect(selectedAccount.account.id.toString()).toBe(localAccount.id.toString());
});
});

describe("Start Accounts", function () {
let runtime: AppRuntime;

let sessionA: LocalAccountSession;

let errorSpy: jest.SpyInstance<void, [message?: any, ...optionalParams: any[]], any>;

beforeAll(async function () {
runtime = await TestUtil.createRuntime();
await runtime.start();

const accounts = await TestUtil.provideAccounts(runtime, 1);
sessionA = await runtime.selectAccount(accounts[0].id);

errorSpy = jest.spyOn(console, "error").mockImplementation(() => {});
});

afterEach(() => errorSpy.mockRestore());

afterAll(async () => await runtime.stop());

test("should run startAccounts", async function () {
await runtime["startAccounts"]();
expect(errorSpy).not.toHaveBeenCalled();
});

test.only("should run startAccounts for one deleted Account", async function () {
await sessionA.transportServices.identityDeletionProcesses["initiateIdentityDeletionProcessUseCase"]["identityDeletionProcessController"].initiateIdentityDeletionProcess(
0
);
await TestUtil.runDeletionJob();

await runtime["startAccounts"]();
// TODO: check for error message
expect(errorSpy).toHaveBeenCalled();
});
});

0 comments on commit 5671fd3

Please sign in to comment.