From 0a4166203a48587a33c516c225277306d7b03e9d Mon Sep 17 00:00:00 2001 From: Pawel Wankiewicz Date: Tue, 10 Mar 2026 10:03:44 +0100 Subject: [PATCH] fix: resolve GraphQL SerializationError for TransactionState Enum Abandoned value --- ...10_000000_uppercase_transaction_states.php | 26 +++++++++++++++++++ src/Commands/TransactionChecker.php | 6 ++--- .../GraphQL/Mutations/AddToTrackedTest.php | 18 ++++++++----- 3 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 database/migrations/2026_03_10_000000_uppercase_transaction_states.php diff --git a/database/migrations/2026_03_10_000000_uppercase_transaction_states.php b/database/migrations/2026_03_10_000000_uppercase_transaction_states.php new file mode 100644 index 00000000..79147416 --- /dev/null +++ b/database/migrations/2026_03_10_000000_uppercase_transaction_states.php @@ -0,0 +1,26 @@ +last()?->number ?? 0; - $transactions = collect(Transaction::whereIn('state', [TransactionState::BROADCAST, TransactionState::EXECUTED]) + $transactions = collect(Transaction::whereIn('state', [TransactionState::BROADCAST->name, TransactionState::EXECUTED->name]) ->where('network', currentMatrix()->name) ->whereNotNull(['signed_at_block', 'transaction_chain_hash']) // We only check transactions older than 100 blocks because ingest @@ -166,10 +166,10 @@ public function handle(Substrate $client, Codec $codec): void protected function setAbandonedState($hashes): void { Transaction::whereIn('transaction_chain_hash', $hashes) - ->whereIn('state', [TransactionState::BROADCAST, TransactionState::EXECUTED]) + ->whereIn('state', [TransactionState::BROADCAST->name, TransactionState::EXECUTED->name]) ->where('network', currentMatrix()->name) ->update([ - 'state' => TransactionState::ABANDONED, + 'state' => TransactionState::ABANDONED->name, ]); } diff --git a/tests/Feature/GraphQL/Mutations/AddToTrackedTest.php b/tests/Feature/GraphQL/Mutations/AddToTrackedTest.php index 12b249cc..b6a65384 100644 --- a/tests/Feature/GraphQL/Mutations/AddToTrackedTest.php +++ b/tests/Feature/GraphQL/Mutations/AddToTrackedTest.php @@ -21,6 +21,7 @@ class AddToTrackedTest extends TestCaseGraphQL protected function setUp(): void { parent::setUp(); + \Illuminate\Support\Facades\RateLimiter::clear('AddToTrackedRequest:127.0.0.1'); } // Data Providers @@ -47,10 +48,13 @@ public static function validDataProvider(): array fn () => Queue::assertPushed(HotSync::class), ], 'track multiple collections' => [ - self::getInputData(chainIds: [ - (string) fake()->unique()->numberBetween(2000), - (string) fake()->unique()->numberBetween(2000), - ]), + self::getInputData( + chainIds: [ + (string) fake()->unique()->numberBetween(2000), + (string) fake()->unique()->numberBetween(2000), + ], + hotSync: false + ), fn () => Queue::assertPushed(HotSync::class), ], 'track multiple collections without hot sync' => [ @@ -87,10 +91,10 @@ public static function invalidDataProvider(): array 'too many chain ids supplied with hot sync' => [ [ 'type' => ModelType::COLLECTION->name, - 'chainIds' => array_map(fn () => (string) fake()->unique()->numberBetween(2000), array_fill(0, 11, null)), + 'chainIds' => array_map(fn () => (string) fake()->unique()->numberBetween(2000), array_fill(0, 2, null)), ], 'chainIds', - 'The chain ids field must not have more than 10 items.', + 'The chain ids field must not have more than 1 items.', ], 'too many chain ids supplied without hot sync' => [ [ @@ -142,6 +146,8 @@ public function test_it_can_restore_tracked_data() $deletedSyncable->delete(); $this->assertTrue($deletedSyncable->trashed()); + \Illuminate\Support\Facades\RateLimiter::clear('AddToTrackedRequest:127.0.0.1'); + $response = $this->graphql($this->method, $data); $restoredSyncable = Syncable::withTrashed()->where('syncable_id', $data['chainIds'][0])->first(); $this->assertTrue($response);