Skip to content

Commit

Permalink
feat(core-test-framework): implement block factory
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Faust committed Nov 22, 2019
1 parent de75e6e commit 5a5b3d7
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import "jest-extended";

import { FactoryBuilder, Factories } from "@packages/core-test-framework/src/factories";
import { Interfaces } from "@arkecosystem/crypto";

let factory: FactoryBuilder;

beforeEach(() => {
factory = new FactoryBuilder();

Factories.registerBlockFactory(factory);
});

describe("BlockFactory", () => {
it("should create a single block", () => {
const entity: Interfaces.IBlockJson = factory.get("Block").make();

expect(entity).toContainAllKeys([
"blockSignature",
"generatorPublicKey",
"height",
"id",
"idHex",
"numberOfTransactions",
"payloadHash",
"payloadLength",
"previousBlock",
"previousBlockHex",
"reward",
"serialized",
"timestamp",
"totalAmount",
"totalFee",
"transactions",
"version",
]);

expect(entity.blockSignature).toBeString();
expect(entity.generatorPublicKey).toBeString();
expect(entity.height).toBeNumber();
expect(entity.id).toBeString();
expect(entity.idHex).toBeString();
expect(entity.numberOfTransactions).toBeNumber();
expect(entity.payloadHash).toBeString();
expect(entity.payloadLength).toBeNumber();
expect(entity.previousBlock).toBeString();
expect(entity.previousBlockHex).toBeString();
expect(entity.reward).toBeString();
expect(entity.serialized).toBeString();
expect(entity.timestamp).toBeNumber();
expect(entity.totalAmount).toBeString();
expect(entity.totalFee).toBeString();
expect(entity.transactions).toBeArray();
expect(entity.version).toBeNumber();
});
});
25 changes: 24 additions & 1 deletion packages/core-test-framework/src/factories/factories/block.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,26 @@
import { Delegate } from "@arkecosystem/core-forger";
import { Crypto, Managers } from "@arkecosystem/crypto";

import { FactoryBuilder } from "../factory-builder";

export const registerBlockFactory = (factory: FactoryBuilder): void => {};
import secrets from "../../internal/secrets.json";

export const registerBlockFactory = (factory: FactoryBuilder): void => {
factory.set("Block", ({ options }) => {
const previousBlock = Managers.configManager.get("genesisBlock");

const { blocktime, reward } = Managers.configManager.getMilestone(previousBlock.height);

// todo: support transactions via factory calls
const newBlock = new Delegate(
options.passphrase || secrets[0],
Managers.configManager.get("network.pubKeyHash"),
).forge([], {
previousBlock,
timestamp: Crypto.Slots.getSlotNumber(Crypto.Slots.getTime()) * options.blocktime || blocktime,
reward: options.reward || reward,
})!;

return { ...newBlock.toJson(), ...{ serialized: newBlock.serialized } };
});
};

0 comments on commit 5a5b3d7

Please sign in to comment.