Skip to content

Commit

Permalink
chore: Add unit test to the subgraph
Browse files Browse the repository at this point in the history
  • Loading branch information
alainncls committed Oct 20, 2023
1 parent c877819 commit f6cd610
Show file tree
Hide file tree
Showing 9 changed files with 227 additions and 32 deletions.
64 changes: 64 additions & 0 deletions .github/workflows/subgraph.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Subgraph

on:
pull_request:
branches:
- main
- dev
- release/*
push:
branches:
- main
- dev
- release/*

jobs:
test:
runs-on: ubuntu-latest

defaults:
run:
working-directory: subgraph

steps:
- name: Check out the repo
uses: actions/checkout@v3

- name: Install Pnpm
uses: pnpm/action-setup@v2
with:
version: 8
run_install: false

- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 18
cache: pnpm

- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build the subgraph
run: pnpm run build:goerli

- name: Run the unit tests
run: pnpm run test

- name: Add test summary
run: |
echo "## Unit tests result" >> $GITHUB_STEP_SUMMARY
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ typechain-types
build
generated
subgraph.yaml
.bin
.latest.json

# Misc
.DS_Store
43 changes: 30 additions & 13 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 6 additions & 3 deletions subgraph/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@
"deploy": "source .env && cp subgraph.mainnet.yaml subgraph.yaml && pnpm run build && graph deploy --network linea-mainnet --node $DEPLOY_ENDPOINT_MAINNET --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.1 Consensys/linea-attestation-registry",
"deploy:goerli": "source .env && cp subgraph.goerli.yaml subgraph.yaml && pnpm run build:goerli && graph deploy --network linea-goerli --node $DEPLOY_ENDPOINT_GOERLI --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.5 Consensys/linea-attestation-registry",
"remove": "source .env && graph remove --node $DEPLOY_ENDPOINT_MAINNET Consensys/linea-attestation-registry",
"remove:goerli": "source .env && graph remove --node $DEPLOY_ENDPOINT_GOERLI Consensys/linea-attestation-registry"
"remove:goerli": "source .env && graph remove --node $DEPLOY_ENDPOINT_GOERLI Consensys/linea-attestation-registry",
"test": "graph test -v 0.5.2"
},
"devDependencies": {
"@graphprotocol/graph-cli": "0.58.0",
"@graphprotocol/graph-ts": "0.31.0"
"@graphprotocol/graph-cli": "0.59.0",
"@graphprotocol/graph-ts": "0.30.0",
"matchstick-as": "0.5.2",
"assemblyscript": "0.19.10"
}
}
12 changes: 5 additions & 7 deletions subgraph/src/module-registry.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import { ModuleRegistered as ModuleRegisteredEvent, ModuleRegistry } from "../generated/ModuleRegistry/ModuleRegistry";
import { ModuleRegistered as ModuleRegisteredEvent } from "../generated/ModuleRegistry/ModuleRegistry";
import { Counter, Module } from "../generated/schema";

export function handleModuleRegistered(event: ModuleRegisteredEvent): void {
const contract = ModuleRegistry.bind(event.address);
const moduleData = contract.modules(event.params.moduleAddress);
const module = new Module(event.params.moduleAddress.toHex());
const module = new Module(event.params.moduleAddress.toHexString());

incrementModulesCount();

module.moduleAddress = moduleData.getModuleAddress();
module.name = moduleData.getName();
module.description = moduleData.getDescription();
module.moduleAddress = event.params.moduleAddress;
module.name = event.params.name;
module.description = event.params.description;

module.save();
}
Expand Down
14 changes: 6 additions & 8 deletions subgraph/src/schema-registry.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import { SchemaCreated as SchemaCreatedEvent, SchemaRegistry } from "../generated/SchemaRegistry/SchemaRegistry";
import { SchemaCreated as SchemaCreatedEvent } from "../generated/SchemaRegistry/SchemaRegistry";
import { Counter, Schema } from "../generated/schema";

export function handleSchemaCreated(event: SchemaCreatedEvent): void {
const contract = SchemaRegistry.bind(event.address);
const schemaData = contract.getSchema(event.params.id);
const schema = new Schema(event.params.id.toHex());
const schema = new Schema(event.params.id.toString());

incrementSchemasCount();

schema.name = schemaData.name;
schema.description = schemaData.description;
schema.context = schemaData.context;
schema.schema = schemaData.schema;
schema.name = event.params.name;
schema.description = event.params.description;
schema.context = event.params.context;
schema.schema = event.params.schemaString;

schema.save();
}
Expand Down
51 changes: 51 additions & 0 deletions subgraph/tests/module-registry.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { afterEach, assert, clearStore, describe, log, test } from "matchstick-as";
import {
ModuleRegistered as ModuleRegisteredEvent,
ModuleRegistered,
} from "../generated/ModuleRegistry/ModuleRegistry";
import { Address, ethereum } from "@graphprotocol/graph-ts";
import { newTypedMockEvent } from "matchstick-as/assembly/defaults";
import { handleModuleRegistered } from "../src/module-registry";

describe("handleModuleRegistered()", () => {
const moduleAddress = "0xF75BE6f9418710fd516fA82Afb3AAD07e11a0f1b";
const moduleName = "module name";
const moduleDescription = "module description";

afterEach(() => {
clearStore();
});

test("Should create a new Module entity", () => {
assert.entityCount("Module", 0);

const moduleRegisteredEvent = createModuleRegisteredEvent(moduleAddress, moduleName, moduleDescription);

handleModuleRegistered(moduleRegisteredEvent);

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);
});
});

function createModuleRegisteredEvent(
moduleAddress: string,
moduleName: string,
moduleDescription: string,
): ModuleRegistered {
const moduleRegisteredEvent = newTypedMockEvent<ModuleRegisteredEvent>();

moduleRegisteredEvent.parameters.push(
new ethereum.EventParam("moduleAddress", ethereum.Value.fromAddress(Address.fromString(moduleAddress))),
);
moduleRegisteredEvent.parameters.push(new ethereum.EventParam("moduleName", ethereum.Value.fromString(moduleName)));
moduleRegisteredEvent.parameters.push(
new ethereum.EventParam("moduleDescription", ethereum.Value.fromString(moduleDescription)),
);

return moduleRegisteredEvent;
}
61 changes: 61 additions & 0 deletions subgraph/tests/schema-registry.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { afterEach, assert, clearStore, describe, test } from "matchstick-as";
import { BigInt, 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";

describe("handleSchemaCreated()", () => {
const schemaId = "0x7930a5ebfabdd4ef76bbb8cdcbc2225b6256d9511d9cf5ff0d6514c1bdb4d7dc";
const schemaName = "module name";
const schemaDescription = "module description";
const schemaContext = "schema context";
const schemaString = "(bool isBuilder)";

afterEach(() => {
clearStore();
});

test("Should create a new Schema entity", () => {
assert.entityCount("Schema", 0);

const schemaCreatedEvent = createSchemaCreatedEvent(
schemaId,
schemaName,
schemaDescription,
schemaContext,
schemaString,
);

handleSchemaCreated(schemaCreatedEvent);

assert.entityCount("Schema", 1);

assert.fieldEquals("Schema", schemaId, "id", schemaId);
assert.fieldEquals("Schema", schemaId, "name", schemaName);
assert.fieldEquals("Schema", schemaId, "description", schemaDescription);
assert.fieldEquals("Schema", schemaId, "context", schemaContext);
assert.fieldEquals("Schema", schemaId, "schema", schemaString);
});
});

function createSchemaCreatedEvent(
schemaId: string,
schemaName: string,
schemaDescription: string,
schemaContext: string,
schemaString: string,
): SchemaCreated {
const schemaCreatedEvent = newTypedMockEvent<SchemaCreatedEvent>();

schemaCreatedEvent.parameters.push(
new ethereum.EventParam("id", ethereum.Value.fromI32(BigInt.fromString(schemaId).toI32())),
);
schemaCreatedEvent.parameters.push(new ethereum.EventParam("name", ethereum.Value.fromString(schemaName)));
schemaCreatedEvent.parameters.push(
new ethereum.EventParam("description", ethereum.Value.fromString(schemaDescription)),
);
schemaCreatedEvent.parameters.push(new ethereum.EventParam("context", ethereum.Value.fromString(schemaContext)));
schemaCreatedEvent.parameters.push(new ethereum.EventParam("schemaString", ethereum.Value.fromString(schemaString)));

return schemaCreatedEvent;
}
3 changes: 2 additions & 1 deletion subgraph/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"extends": "@graphprotocol/graph-ts/types/tsconfig.base.json"
"extends": "@graphprotocol/graph-ts/types/tsconfig.base.json",
"include": ["src", "tests"]
}

0 comments on commit f6cd610

Please sign in to comment.