Skip to content

Commit 2c43f6c

Browse files
authored
refactor(core-state): fire wallet events (#4076)
1 parent a13bf61 commit 2c43f6c

File tree

17 files changed

+259
-270
lines changed

17 files changed

+259
-270
lines changed

__tests__/integration/core-api/services/__support__/setup.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export const setUp = async (): Promise<Application> => {
77
const app = new Application(new Container.Container());
88

99
const triggersServiceProvider = app.resolve(Services.Triggers.ServiceProvider);
10+
const eventsServiceProvider = app.resolve(Services.Events.ServiceProvider);
1011
const searchServiceProvider = app.resolve(Services.Search.ServiceProvider);
1112
const stateServiceProvider = app.resolve(StateServiceProvider);
1213
const transactionsServiceProvider = app.resolve(TransactionsServiceProvider);
@@ -22,6 +23,7 @@ export const setUp = async (): Promise<Application> => {
2223
);
2324

2425
await triggersServiceProvider.register();
26+
await eventsServiceProvider.register();
2527
await searchServiceProvider.register();
2628
await stateServiceProvider.register();
2729
await transactionsServiceProvider.register();

__tests__/integration/core-magistrate-api/services/__support__/setup.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export const setUp = async (): Promise<Application> => {
99
const app = new Application(new Container.Container());
1010

1111
const triggersServiceProvider = app.resolve(Services.Triggers.ServiceProvider);
12+
const eventsServiceProvider = app.resolve(Services.Events.ServiceProvider);
1213
const searchServiceProvider = app.resolve(Services.Search.ServiceProvider);
1314
const stateServiceProvider = app.resolve(StateServiceProvider);
1415
const transactionsServiceProvider = app.resolve(TransactionsServiceProvider);
@@ -26,6 +27,7 @@ export const setUp = async (): Promise<Application> => {
2627
);
2728

2829
await triggersServiceProvider.register();
30+
await eventsServiceProvider.register();
2931
await searchServiceProvider.register();
3032
await stateServiceProvider.register();
3133
await transactionsServiceProvider.register();

__tests__/unit/core-manager/service-provider.test.ts

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { Application, Container, Providers } from "@packages/core-kernel";
44
import { defaults } from "@packages/core-manager/src/defaults";
55
import { Identifiers } from "@packages/core-manager/src/ioc";
66
import { ServiceProvider } from "@packages/core-manager/src/service-provider";
7-
import { WatcherWallet } from "@packages/core-manager/src/watcher-wallet";
87
import { cloneDeep } from "lodash";
98
import path from "path";
109
import { dirSync, setGracefulCleanup } from "tmp";
@@ -171,21 +170,4 @@ describe("ServiceProvider", () => {
171170
it("should not be required", async () => {
172171
await expect(serviceProvider.required()).resolves.toBeFalse();
173172
});
174-
175-
it("should create wallet", async () => {
176-
const usedDefaults = cloneDeep(defaults);
177-
178-
usedDefaults.watcher.enabled = true;
179-
usedDefaults.watcher.watch.wallets = true;
180-
181-
setPluginConfiguration(app, serviceProvider, usedDefaults);
182-
183-
await expect(serviceProvider.register()).toResolve();
184-
185-
// @ts-ignore
186-
const wallet = app.get(Container.Identifiers.WalletFactory)("123");
187-
expect(wallet).toBeInstanceOf(WatcherWallet);
188-
189-
await expect(serviceProvider.dispose()).toResolve();
190-
});
191173
});

__tests__/unit/core-manager/watcher-wallet.test.ts

Lines changed: 0 additions & 84 deletions
This file was deleted.

__tests__/unit/core-state/setup.ts

Lines changed: 69 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ import { StateBuilder } from "@packages/core-state/src/state-builder";
1212
import { StateStore } from "@packages/core-state/src/stores/state";
1313
import { TransactionValidator } from "@packages/core-state/src/transaction-validator";
1414
import { WalletRepository, WalletRepositoryClone, WalletRepositoryCopyOnWrite } from "@packages/core-state/src/wallets";
15-
import { registerFactories, registerIndexers } from "@packages/core-state/src/wallets/indexers";
15+
import { registerIndexers } from "@packages/core-state/src/wallets/indexers";
1616
import { Sandbox } from "@packages/core-test-framework/src";
1717
import { Factories, FactoryBuilder } from "@packages/core-test-framework/src/factories";
1818
import { Managers, Utils } from "@packages/crypto/src";
19+
import { walletFactory } from "@arkecosystem/core-state/src/wallets/wallet-factory";
1920

2021
export interface Spies {
2122
applySpy: jest.SpyInstance;
@@ -31,6 +32,7 @@ export interface Spies {
3132
getSentTransactionSpy: jest.SpyInstance;
3233
getRegisteredHandlersSpy: jest.SpyInstance;
3334
dispatchSpy: jest.SpyInstance;
35+
dispatchSyncSpy: jest.SpyInstance;
3436
}
3537

3638
export interface Setup {
@@ -145,7 +147,6 @@ export const setUp = async (setUpOptions = setUpDefaults, skipBoot = false): Pro
145147
// });
146148

147149
registerIndexers(sandbox.app);
148-
registerFactories(sandbox.app);
149150

150151
sandbox.app.bind(Container.Identifiers.PluginConfiguration).to(Providers.PluginConfiguration).inSingletonScope();
151152

@@ -166,42 +167,6 @@ export const setUp = async (setUpOptions = setUpDefaults, skipBoot = false): Pro
166167

167168
const stateStore: StateStore = sandbox.app.get(Container.Identifiers.StateStore);
168169

169-
sandbox.app
170-
.bind(Container.Identifiers.WalletRepository)
171-
.to(WalletRepository)
172-
.inSingletonScope()
173-
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "blockchain"));
174-
175-
sandbox.app
176-
.bind(Container.Identifiers.WalletRepository)
177-
.to(WalletRepositoryClone)
178-
.inRequestScope()
179-
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "clone"));
180-
181-
sandbox.app
182-
.bind(Container.Identifiers.WalletRepository)
183-
.to(WalletRepositoryCopyOnWrite)
184-
.inRequestScope()
185-
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "copy-on-write"));
186-
187-
const walletRepoClone: WalletRepositoryClone = sandbox.app.getTagged(
188-
Container.Identifiers.WalletRepository,
189-
"state",
190-
"clone",
191-
);
192-
193-
const walletRepo: WalletRepository = sandbox.app.getTagged(
194-
Container.Identifiers.WalletRepository,
195-
"state",
196-
"blockchain",
197-
);
198-
199-
const walletRepoCopyOnWrite: WalletRepositoryCopyOnWrite = sandbox.app.getTagged(
200-
Container.Identifiers.WalletRepository,
201-
"state",
202-
"copy-on-write",
203-
);
204-
205170
const applySpy: jest.SpyInstance = jest.fn();
206171
const revertSpy: jest.SpyInstance = jest.fn();
207172

@@ -244,18 +209,83 @@ export const setUp = async (setUpOptions = setUpDefaults, skipBoot = false): Pro
244209
}
245210

246211
const dispatchSpy = jest.fn();
212+
const dispatchSyncSpy = jest.fn();
247213

248214
@Container.injectable()
249215
class MockEventDispatcher {
250216
public dispatch(data) {
251217
return dispatchSpy(data);
252218
}
219+
220+
public dispatchSync(data) {
221+
return dispatchSyncSpy(data);
222+
}
253223
}
254224

255225
sandbox.app.container.bind(Container.Identifiers.DatabaseBlockRepository).to(MockBlockRepository);
256226
sandbox.app.container.bind(Container.Identifiers.DatabaseTransactionRepository).to(MockTransactionRepository);
257227
sandbox.app.container.bind(Container.Identifiers.EventDispatcherService).to(MockEventDispatcher);
258228

229+
sandbox.app
230+
.bind(Container.Identifiers.WalletRepository)
231+
.to(WalletRepository)
232+
.inSingletonScope()
233+
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "blockchain"));
234+
235+
sandbox.app
236+
.bind(Container.Identifiers.WalletFactory)
237+
.toFactory(({ container }) => {
238+
return walletFactory(
239+
container.get(Container.Identifiers.WalletAttributes),
240+
container.get(Container.Identifiers.EventDispatcherService),
241+
);
242+
})
243+
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "blockchain"));
244+
245+
sandbox.app
246+
.bind(Container.Identifiers.WalletRepository)
247+
.to(WalletRepositoryClone)
248+
.inRequestScope()
249+
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "clone"));
250+
251+
sandbox.app
252+
.bind(Container.Identifiers.WalletFactory)
253+
.toFactory(({ container }) => {
254+
return walletFactory(container.get(Container.Identifiers.WalletAttributes));
255+
})
256+
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "clone"));
257+
258+
sandbox.app
259+
.bind(Container.Identifiers.WalletRepository)
260+
.to(WalletRepositoryCopyOnWrite)
261+
.inRequestScope()
262+
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "copy-on-write"));
263+
264+
sandbox.app
265+
.bind(Container.Identifiers.WalletFactory)
266+
.toFactory(({ container }) => {
267+
return walletFactory(container.get(Container.Identifiers.WalletAttributes));
268+
})
269+
.when(Container.Selectors.anyAncestorOrTargetTaggedFirst("state", "copy-on-write"));
270+
271+
const walletRepoClone: WalletRepositoryClone = sandbox.app.getTagged(
272+
Container.Identifiers.WalletRepository,
273+
"state",
274+
"clone",
275+
);
276+
277+
const walletRepo: WalletRepository = sandbox.app.getTagged(
278+
Container.Identifiers.WalletRepository,
279+
"state",
280+
"blockchain",
281+
);
282+
283+
const walletRepoCopyOnWrite: WalletRepositoryCopyOnWrite = sandbox.app.getTagged(
284+
Container.Identifiers.WalletRepository,
285+
"state",
286+
"copy-on-write",
287+
);
288+
259289
sandbox.app.bind(Container.Identifiers.BlockState).to(BlockState);
260290

261291
sandbox.app
@@ -323,6 +353,7 @@ export const setUp = async (setUpOptions = setUpDefaults, skipBoot = false): Pro
323353
getSentTransactionSpy,
324354
getRegisteredHandlersSpy,
325355
dispatchSpy,
356+
dispatchSyncSpy,
326357
},
327358
};
328359
};

__tests__/unit/core-state/wallets/wallet-repository-copy-on-write.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,11 @@ describe("Wallet Repository Copy On Write", () => {
245245
const wallet = walletRepo.createWallet("abc");
246246
wallet.setAttribute("delegate", { username: "test" });
247247
walletRepo.index(wallet);
248+
const clone = walletRepoCopyOnWrite.findByIndex(Contracts.State.WalletIndexes.Usernames, "test");
248249

249-
expect(walletRepoCopyOnWrite.findByIndex(Contracts.State.WalletIndexes.Usernames, "test")).toEqual(wallet);
250+
expect(clone).not.toBe(wallet);
251+
expect(clone.address).toEqual(wallet.address);
252+
expect(clone.getAttribute("delegate.username")).toEqual(wallet.getAttribute("delegate.username"));
250253
});
251254
});
252255

0 commit comments

Comments
 (0)