From a496d9367c3ed256daf4f42968fdbe9e51241baa Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Fri, 20 Oct 2023 16:17:06 +0200 Subject: [PATCH] chore: Add unit test to the subgraph --- subgraph/src/portal-registry.ts | 6 +- subgraph/src/schema-registry.ts | 2 +- subgraph/tests/module-registry.test.ts | 39 +++++++++--- subgraph/tests/portal-registry.test.ts | 87 ++++++++++++++++++++++++++ subgraph/tests/schema-registry.test.ts | 37 ++++++++++- 5 files changed, 156 insertions(+), 15 deletions(-) create mode 100644 subgraph/tests/portal-registry.test.ts diff --git a/subgraph/src/portal-registry.ts b/subgraph/src/portal-registry.ts index f8b3ae22..811700c3 100644 --- a/subgraph/src/portal-registry.ts +++ b/subgraph/src/portal-registry.ts @@ -5,15 +5,15 @@ import { Counter, Portal } from "../generated/schema"; export function handlePortalRegistered(event: PortalRegisteredEvent): void { const contract = PortalRegistry.bind(event.address); const portalData = contract.getPortalByAddress(event.params.portalAddress); - const portal = new Portal(event.params.portalAddress.toHex()); + const portal = new Portal(event.params.portalAddress.toHexString()); incrementPortalsCount(); + portal.name = event.params.name; + portal.description = event.params.description; portal.ownerAddress = portalData.ownerAddress; portal.modules = changetype(portalData.modules); portal.isRevocable = portalData.isRevocable; - portal.name = portalData.name; - portal.description = portalData.description; portal.ownerName = portalData.ownerName; portal.save(); diff --git a/subgraph/src/schema-registry.ts b/subgraph/src/schema-registry.ts index 373fcaf5..cc2069bd 100644 --- a/subgraph/src/schema-registry.ts +++ b/subgraph/src/schema-registry.ts @@ -2,7 +2,7 @@ import { SchemaCreated as SchemaCreatedEvent } from "../generated/SchemaRegistry import { Counter, Schema } from "../generated/schema"; export function handleSchemaCreated(event: SchemaCreatedEvent): void { - const schema = new Schema(event.params.id.toString()); + const schema = new Schema(event.params.id.toHexString()); incrementSchemasCount(); diff --git a/subgraph/tests/module-registry.test.ts b/subgraph/tests/module-registry.test.ts index e788bec8..3ca7796a 100644 --- a/subgraph/tests/module-registry.test.ts +++ b/subgraph/tests/module-registry.test.ts @@ -1,4 +1,4 @@ -import { afterEach, assert, clearStore, describe, log, test } from "matchstick-as"; +import { afterEach, assert, clearStore, describe, test } from "matchstick-as"; import { ModuleRegistered as ModuleRegisteredEvent, ModuleRegistered, @@ -8,7 +8,7 @@ import { newTypedMockEvent } from "matchstick-as/assembly/defaults"; import { handleModuleRegistered } from "../src/module-registry"; describe("handleModuleRegistered()", () => { - const moduleAddress = "0xF75BE6f9418710fd516fA82Afb3AAD07e11a0f1b"; + const moduleAddress = "f75be6f9418710fd516fa82afb3aad07e11a0f1b"; const moduleName = "module name"; const moduleDescription = "module description"; @@ -25,10 +25,31 @@ describe("handleModuleRegistered()", () => { assert.entityCount("Module", 1); - assert.fieldEquals("Module", moduleAddress, "id", moduleAddress); - assert.fieldEquals("Module", moduleAddress, "name", moduleName); - assert.fieldEquals("Module", moduleAddress, "description", moduleDescription); - assert.fieldEquals("Module", moduleAddress, "moduleAddress", moduleAddress); + assert.fieldEquals("Module", "0x" + moduleAddress, "id", "0x" + moduleAddress); + assert.fieldEquals("Module", "0x" + moduleAddress, "name", moduleName); + assert.fieldEquals("Module", "0x" + moduleAddress, "description", moduleDescription); + assert.fieldEquals("Module", "0x" + moduleAddress, "moduleAddress", "0x" + moduleAddress); + }); + + test("Should increment the modules Counter", () => { + assert.entityCount("Module", 0); + + const moduleAddress1 = "f75be6f9418710fd516fa82afb3aad07e11a0f1b"; + const moduleAddress2 = "e75be6f9418710fd516fa82afb3aad07e11a0f1b"; + + const moduleRegisteredEvent1 = createModuleRegisteredEvent(moduleAddress1, moduleName, moduleDescription); + + handleModuleRegistered(moduleRegisteredEvent1); + + assert.entityCount("Module", 1); + assert.fieldEquals("Counter", "counter", "modules", "1"); + + const moduleRegisteredEvent2 = createModuleRegisteredEvent(moduleAddress2, moduleName, moduleDescription); + + handleModuleRegistered(moduleRegisteredEvent2); + + assert.entityCount("Module", 2); + assert.fieldEquals("Counter", "counter", "modules", "2"); }); }); @@ -39,12 +60,12 @@ function createModuleRegisteredEvent( ): ModuleRegistered { const moduleRegisteredEvent = newTypedMockEvent(); + moduleRegisteredEvent.parameters.push(new ethereum.EventParam("name", ethereum.Value.fromString(moduleName))); moduleRegisteredEvent.parameters.push( - new ethereum.EventParam("moduleAddress", ethereum.Value.fromAddress(Address.fromString(moduleAddress))), + new ethereum.EventParam("description", ethereum.Value.fromString(moduleDescription)), ); - moduleRegisteredEvent.parameters.push(new ethereum.EventParam("moduleName", ethereum.Value.fromString(moduleName))); moduleRegisteredEvent.parameters.push( - new ethereum.EventParam("moduleDescription", ethereum.Value.fromString(moduleDescription)), + new ethereum.EventParam("moduleAddress", ethereum.Value.fromAddress(Address.fromString(moduleAddress))), ); return moduleRegisteredEvent; diff --git a/subgraph/tests/portal-registry.test.ts b/subgraph/tests/portal-registry.test.ts new file mode 100644 index 00000000..e61a17d2 --- /dev/null +++ b/subgraph/tests/portal-registry.test.ts @@ -0,0 +1,87 @@ +import { afterEach, assert, beforeAll, clearStore, createMockedFunction, describe, test } from "matchstick-as"; +import { Address, ethereum } from "@graphprotocol/graph-ts"; +import { newTypedMockEvent } from "matchstick-as/assembly/defaults"; +import { handlePortalRegistered } from "../src/portal-registry"; +import { PortalRegistered as PortalRegisteredEvent } from "../generated/PortalRegistry/PortalRegistry"; + +describe("handlePortalRegistered()", () => { + const portalAddress = "f75be6f9418710fd516fa82afb3aad07e11a0f1b"; + const ownerAddress = "e75be6f9418710fd516fa82afb3aad07e11a0f1b"; + const ownerName = "Verax"; + const portalName = "portal name"; + const portalDescription = "portal description"; + + beforeAll(() => { + const contractAddress = Address.fromString("0xf75be6f9418710fd516fa82afb3aad07e11a0f1b"); + createMockedFunction(contractAddress, "getPortalByAddress", "getPortalByAddress(address):(struct Portal)") + .withArgs([ethereum.Value.fromAddress(Address.fromString(portalAddress))]) + .returns([ + ethereum.Value.fromTuple([ + ethereum.Value.fromAddress(Address.fromString(portalAddress)), + ethereum.Value.fromAddress(Address.fromString(ownerAddress)), + ethereum.Value.fromAddressArray([Address.zero()]), + ethereum.Value.fromBoolean(true), + ethereum.Value.fromString(portalName), + ethereum.Value.fromString(portalDescription), + ethereum.Value.fromString(ownerName), + ] as ethereum.Tuple), + ]); + }); + + afterEach(() => { + clearStore(); + }); + + test("Should create a new Portal entity", () => { + assert.entityCount("Portal", 0); + + const portalRegisteredEvent = createPortalRegisteredEvent(portalAddress, portalName, portalDescription); + + handlePortalRegistered(portalRegisteredEvent); + + assert.entityCount("Portal", 1); + + assert.fieldEquals("Portal", "0x" + portalAddress, "id", "0x" + portalAddress); + assert.fieldEquals("Portal", "0x" + portalAddress, "name", portalName); + assert.fieldEquals("Portal", "0x" + portalAddress, "description", portalDescription); + }); + + test("Should increment the portals Counter", () => { + assert.entityCount("Portal", 0); + + const portalAddress1 = "f75be6f9418710fd516fa82afb3aad07e11a0f1b"; + const portalAddress2 = "e75be6f9418710fd516fa82afb3aad07e11a0f1b"; + + const portalRegisteredEvent1 = createPortalRegisteredEvent(portalAddress1, portalName, portalDescription); + + handlePortalRegistered(portalRegisteredEvent1); + + assert.entityCount("Portal", 1); + assert.fieldEquals("Counter", "counter", "portals", "1"); + + const portalRegisteredEvent2 = createPortalRegisteredEvent(portalAddress2, portalName, portalDescription); + + handlePortalRegistered(portalRegisteredEvent2); + + assert.entityCount("Portal", 2); + assert.fieldEquals("Counter", "counter", "portals", "2"); + }); +}); + +function createPortalRegisteredEvent( + portalAddress: string, + portalName: string, + portalDescription: string, +): PortalRegisteredEvent { + const portalRegisteredEvent = newTypedMockEvent(); + + portalRegisteredEvent.parameters.push(new ethereum.EventParam("name", ethereum.Value.fromString(portalName))); + portalRegisteredEvent.parameters.push( + new ethereum.EventParam("description", ethereum.Value.fromString(portalDescription)), + ); + portalRegisteredEvent.parameters.push( + new ethereum.EventParam("portalAddress", ethereum.Value.fromAddress(Address.fromString(portalAddress))), + ); + + return portalRegisteredEvent; +} diff --git a/subgraph/tests/schema-registry.test.ts b/subgraph/tests/schema-registry.test.ts index e7b28ee4..7362c056 100644 --- a/subgraph/tests/schema-registry.test.ts +++ b/subgraph/tests/schema-registry.test.ts @@ -1,5 +1,5 @@ import { afterEach, assert, clearStore, describe, test } from "matchstick-as"; -import { BigInt, ethereum } from "@graphprotocol/graph-ts"; +import { Bytes, ethereum } from "@graphprotocol/graph-ts"; import { newTypedMockEvent } from "matchstick-as/assembly/defaults"; import { handleSchemaCreated } from "../src/schema-registry"; import { SchemaCreated, SchemaCreated as SchemaCreatedEvent } from "../generated/SchemaRegistry/SchemaRegistry"; @@ -36,6 +36,39 @@ describe("handleSchemaCreated()", () => { assert.fieldEquals("Schema", schemaId, "context", schemaContext); assert.fieldEquals("Schema", schemaId, "schema", schemaString); }); + + test("Should increment the schemas Counter", () => { + assert.entityCount("Schema", 0); + + const schemaId1 = "0x7930a5ebfabdd4ef76bbb8cdcbc2225b6256d9511d9cf5ff0d6514c1bdb4d7dc"; + const schemaId2 = "0x8930a5ebfabdd4ef76bbb8cdcbc2225b6256d9511d9cf5ff0d6514c1bdb4d7dc"; + + const schemaCreatedEvent1 = createSchemaCreatedEvent( + schemaId1, + schemaName, + schemaDescription, + schemaContext, + schemaString, + ); + + handleSchemaCreated(schemaCreatedEvent1); + + assert.entityCount("Schema", 1); + assert.fieldEquals("Counter", "counter", "schemas", "1"); + + const schemaCreatedEvent2 = createSchemaCreatedEvent( + schemaId2, + schemaName, + schemaDescription, + schemaContext, + schemaString, + ); + + handleSchemaCreated(schemaCreatedEvent2); + + assert.entityCount("Schema", 2); + assert.fieldEquals("Counter", "counter", "schemas", "2"); + }); }); function createSchemaCreatedEvent( @@ -48,7 +81,7 @@ function createSchemaCreatedEvent( const schemaCreatedEvent = newTypedMockEvent(); schemaCreatedEvent.parameters.push( - new ethereum.EventParam("id", ethereum.Value.fromI32(BigInt.fromString(schemaId).toI32())), + new ethereum.EventParam("id", ethereum.Value.fromBytes(Bytes.fromHexString(schemaId))), ); schemaCreatedEvent.parameters.push(new ethereum.EventParam("name", ethereum.Value.fromString(schemaName))); schemaCreatedEvent.parameters.push(