createMock(HttpClientInterface::class); $serializerMock ??= $this->createMock(SerializerInterface::class); $pricingStrategyMock ??= $this->createMock(PricingStrategy::class); $clientServiceMock ??= $this->createMock(ClientService::class); $validatorMock ??= $this->createMock(ValidatorInterface::class); return new OrderService($httpClientMock, $serializerMock, $pricingStrategyMock, $clientServiceMock, $validatorMock); } public function testCrmGetsCalledOnValidOrderRequest() { $httpClientMock = $this->createMock(HttpClientInterface::class); $httpClientMock->expects($this->once())->method('request')->with('POST', '/order'); $order = new AcceptOrderCommand( $this->createValidOrderDto(), $this->createClient(balance: 100_00) ); $sut = $this->createOrderService(httpClientMock: $httpClientMock); $sut->acceptOrder($order); } public function testClientIsUpdatedAfterPlacingOrder() { $command = new AcceptOrderCommand( $this->createValidOrderDto(), $client = $this->createClient(10000_00), ); $clientServiceMock = $this->createMock(ClientService::class); $clientServiceMock->expects($this->once())->method('deduceFromBalance'); $sut = $this->createOrderService(clientServiceMock: $clientServiceMock); $sut->acceptOrder($command); } }