From c9c28ddfa83a72e87638bc2af4e4795e98308cf1 Mon Sep 17 00:00:00 2001 From: Dmitriy Derepko Date: Tue, 13 Jan 2026 20:24:55 +0400 Subject: [PATCH] test: add implement encoder interceptor for activity --- .../Extra/Interceptors/EncoderTest.php | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 tests/Acceptance/Extra/Interceptors/EncoderTest.php diff --git a/tests/Acceptance/Extra/Interceptors/EncoderTest.php b/tests/Acceptance/Extra/Interceptors/EncoderTest.php new file mode 100644 index 000000000..fcd949ab8 --- /dev/null +++ b/tests/Acceptance/Extra/Interceptors/EncoderTest.php @@ -0,0 +1,107 @@ +getResult('array'); + + self::assertArrayHasKey('input', $result); + self::assertEquals('hello world', $result['input']); + + self::assertArrayHasKey('modified', $result); + self::assertEquals('true', $result['modified']); + } +} + +class WorkerServices +{ + public static function pipelineProvider(): PipelineProvider + { + return new SimplePipelineProvider([ + new ActivityInboundInterceptor(), + ]); + } +} + +#[WorkflowInterface] +class TestWorkflow +{ + #[WorkflowMethod(name: "Extra_Interceptors_Encoder")] + public function handle(string $input) + { + $newInput = ['input' => $input]; + $encodedInput = CoolEncoder::encode($newInput); + + $encodedResult = yield Workflow::executeActivity( + 'Extra_Interceptors_Encoder.handler', + [$encodedInput], + Activity\ActivityOptions::new()->withScheduleToCloseTimeout('10 seconds'), + ); + $decodedResult = CoolEncoder::decode($encodedResult); + + return $decodedResult; + } +} + +#[Activity\ActivityInterface(prefix: 'Extra_Interceptors_Encoder.')] +class TestActivity +{ + #[Activity\ActivityMethod] + public function handler(array $result): array + { + return [...$result, 'modified' => 'true']; + } +} + +final class ActivityInboundInterceptor implements \Temporal\Interceptor\ActivityInboundInterceptor +{ + use ActivityInboundInterceptorTrait; + + public function handleActivityInbound(ActivityInput $input, callable $next): mixed + { + $encodedInputValue = $input->arguments->getValue(0); + $decodedInputValue = CoolEncoder::decode($encodedInputValue); + + $newInput = $input->with(arguments: EncodedValues::fromValues([$decodedInputValue])); + $rawResult = $next($newInput); + $encodedResult = CoolEncoder::encode($rawResult); + + return $encodedResult; + } +} + +final class CoolEncoder +{ + public static function encode(array $value): string + { + return \json_encode($value); + } + + public static function decode(string $value): array + { + return \json_decode($value, true); + } +}