diff --git a/.changeset/metal-lights-train.md b/.changeset/metal-lights-train.md new file mode 100644 index 000000000..7bffa549e --- /dev/null +++ b/.changeset/metal-lights-train.md @@ -0,0 +1,5 @@ +--- +'@graphprotocol/graph-cli': patch +--- + +Fixed entity id format in generated tests diff --git a/examples/ethereum-basic-event-handlers/build/schema.graphql b/examples/ethereum-basic-event-handlers/build/schema.graphql index cf8774f1b..928e5b915 100644 --- a/examples/ethereum-basic-event-handlers/build/schema.graphql +++ b/examples/ethereum-basic-event-handlers/build/schema.graphql @@ -1,11 +1,11 @@ -type NewGravatar @entity { +type NewGravatar @entity(immutable: false) { id: ID! owner: Bytes! displayName: String! imageUrl: String! } -type UpdatedGravatar @entity { +type UpdatedGravatar @entity(immutable: false) { id: ID! owner: Bytes! displayName: String! diff --git a/examples/ethereum-basic-event-handlers/build/subgraph.yaml b/examples/ethereum-basic-event-handlers/build/subgraph.yaml index 1510b16f9..84a75b498 100644 --- a/examples/ethereum-basic-event-handlers/build/subgraph.yaml +++ b/examples/ethereum-basic-event-handlers/build/subgraph.yaml @@ -8,7 +8,7 @@ dataSources: name: Gravity network: test source: - address: "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf" + address: "0x5FbDB2315678afecb367f032d93F642f64180aa3" abi: Gravity mapping: kind: ethereum/events diff --git a/examples/ethereum-basic-event-handlers/docker-compose.yml b/examples/ethereum-basic-event-handlers/docker-compose.yml index 2efe9fbc5..d5c9c497e 100644 --- a/examples/ethereum-basic-event-handlers/docker-compose.yml +++ b/examples/ethereum-basic-event-handlers/docker-compose.yml @@ -5,6 +5,7 @@ services: - '8545:8545' graph-node: image: graphprotocol/graph-node:latest + platform: linux/amd64 ports: - '8000:8000' - '8001:8001' @@ -12,9 +13,12 @@ services: - '8030:8030' - '8040:8040' depends_on: - - hardhat - - ipfs - - postgres + hardhat: + condition: service_started + ipfs: + condition: service_started + postgres: + condition: service_healthy environment: postgres_host: postgres postgres_user: graph-node @@ -24,6 +28,12 @@ services: ethereum: 'test:http://hardhat:8545' GRAPH_LOG: info GRAPH_ALLOW_NON_DETERMINISTIC_IPFS: 1 + healthcheck: + test: ['CMD-SHELL', 'nc -z localhost 8030 || exit 1'] + interval: 5s + timeout: 5s + retries: 30 + start_period: 10s ipfs: image: ipfs/kubo:v0.19.1 ports: @@ -31,10 +41,10 @@ services: volumes: - ipfs-data:/data/ipfs postgres: - image: postgres + image: postgres:17 ports: - '5432:5432' - command: ['postgres', '-cshared_preload_libraries=pg_stat_statements'] + command: ['postgres', '-c', 'shared_preload_libraries=pg_stat_statements'] environment: POSTGRES_USER: graph-node POSTGRES_PASSWORD: let-me-in @@ -42,6 +52,12 @@ services: POSTGRES_INITDB_ARGS: '-E UTF8 --locale=C' volumes: - postgres-data:/var/lib/postgresql/data + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U graph-node'] + interval: 5s + timeout: 5s + retries: 30 + start_period: 5s volumes: ipfs-data: diff --git a/examples/ethereum-basic-event-handlers/package.json b/examples/ethereum-basic-event-handlers/package.json index acebff4b9..b0556e120 100644 --- a/examples/ethereum-basic-event-handlers/package.json +++ b/examples/ethereum-basic-event-handlers/package.json @@ -13,7 +13,7 @@ "codegen": "graph codegen", "create-test": "graph create test/basic-event-handlers --node http://localhost:8020/", "deploy-test": "graph deploy test/basic-event-handlers --version-label v0.0.1 --ipfs http://localhost:5001 --node http://localhost:8020/", - "test": "docker compose up -d && sleep 30 && hardhat test --network localhost && docker compose down", + "test": "docker compose up -d --wait --wait-timeout 50 && hardhat test --network localhost && docker compose down", "test:hardhat": "hardhat test --network localhost" }, "dependencies": { diff --git a/examples/ethereum-basic-event-handlers/subgraph.yaml b/examples/ethereum-basic-event-handlers/subgraph.yaml index f74c2c4d2..22265d8cb 100644 --- a/examples/ethereum-basic-event-handlers/subgraph.yaml +++ b/examples/ethereum-basic-event-handlers/subgraph.yaml @@ -8,7 +8,7 @@ dataSources: name: Gravity network: test source: - address: '0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf' + address: '0x5FbDB2315678afecb367f032d93F642f64180aa3' abi: Gravity mapping: kind: ethereum/events diff --git a/packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap b/packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap index 30ccd7bae..c75d85ff9 100644 --- a/packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap +++ b/packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap @@ -315,34 +315,36 @@ describe("Describe entity assertions", () => { test("ExampleEvent created and stored", () => { assert.entityCount("ExampleEvent", 1) - // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function + // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default transaction hash used in newMockEvent() function + // When indexEvents is true, entity ID uses concatI32() which appends log index as little-endian bytes + // Default log index 1 becomes: 01000000 (4 bytes: 0x01 0x00 0x00 0x00) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "a", "234" ) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "b", "[1234567890]" ) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "param2", "Example string value" ) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "c", "ethereum.Tuple Not implemented" ) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "d", "Example string value" ) @@ -482,34 +484,36 @@ describe("Describe entity assertions", () => { test("ExampleEvent created and stored", () => { assert.entityCount("ExampleEvent", 1) - // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function + // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default transaction hash used in newMockEvent() function + // When indexEvents is true, entity ID uses concatI32() which appends log index as little-endian bytes + // Default log index 1 becomes: 01000000 (4 bytes: 0x01 0x00 0x00 0x00) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "a", "234" ) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "b", "[1234567890]" ) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "param2", "Example string value" ) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "c", "ethereum.Tuple Not implemented" ) assert.fieldEquals( "ExampleEvent", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a01000000", "d", "Example string value" ) diff --git a/packages/cli/src/scaffold/tests.ts b/packages/cli/src/scaffold/tests.ts index eb5497ad1..32d2edb3f 100644 --- a/packages/cli/src/scaffold/tests.ts +++ b/packages/cli/src/scaffold/tests.ts @@ -91,7 +91,7 @@ const generateFieldsAssertions = (entity: string, eventInputs: any[], indexEvent (input, index) => `assert.fieldEquals( "${entity}", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a${indexEvents ? '-1' : ''}", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a${indexEvents ? '01000000' : ''}", "${input.name || `param${index}`}", "${expectedValue(ascTypeForEthereum(input.type))}" )`, @@ -171,7 +171,9 @@ const generateExampleTest = ( test("${entity} created and stored", () => { assert.entityCount('${entity}', 1) - // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function + // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default transaction hash used in newMockEvent() function + // When indexEvents is true, entity ID uses concatI32() which appends log index as little-endian bytes + // Default log index 1 becomes: 01000000 (4 bytes: 0x01 0x00 0x00 0x00) ${generateFieldsAssertions(entity, eventInputs, indexEvents)} // More assert options: