diff --git a/tests/Client/LocalGenerator.php b/tests/Client/LocalGenerator.php new file mode 100644 index 0000000..107abb0 --- /dev/null +++ b/tests/Client/LocalGenerator.php @@ -0,0 +1,23 @@ +namingStrategy); + $soapConverter = new JmsSoapConverter($converter); + + $this->setNamespaces($converter); + $items = $converter->convert($schemas); + $items = array_merge($items, $soapConverter->visitServices($services)); + return $items; + } +} \ No newline at end of file diff --git a/tests/Client/LocalTest.php b/tests/Client/LocalTest.php new file mode 100644 index 0000000..f30f4df --- /dev/null +++ b/tests/Client/LocalTest.php @@ -0,0 +1,200 @@ + 'Example\Local' + ]; + /** + * @var Generator + */ + protected static $generator; + + /** + * @var \GuzzleHttp\Handler\MockHandler + */ + protected $responseMock; + + protected $requestResponseStack = []; + + /** + * @var ClientFactory + */ + private $factory; + + public static function setUpBeforeClass(): void + { + self::$generator = new LocalGenerator(self::$namespaces); + self::$generator->generate([__DIR__ . '/../Fixtures/Local/local.wsdl']); + self::$generator->registerAutoloader(); + } + + public static function tearDownAfterClass(): void + { + self::$generator->unRegisterAutoloader(); + //self::$generator->cleanDirectories(); + } + + public function setUp(): void + { + $ref = new \ReflectionClass(Fault::class); + $headerHandler = new HeaderHandler(); + $serializer = self::$generator->buildSerializer(function (HandlerRegistryInterface $h) use ($headerHandler) { + $h->registerSubscribingHandler($headerHandler); + $h->registerSubscribingHandler(new FaultHandler()); + }, [ + 'GoetasWebservices\SoapServices\SoapClient\Envelope\SoapEnvelope12' => dirname($ref->getFileName()) . '/../../../Resources/metadata/jms12', + 'GoetasWebservices\SoapServices\SoapClient\Envelope\SoapEnvelope' => dirname($ref->getFileName()) . '/../../../Resources/metadata/jms', + ]); + + $this->responseMock = new MockHandler(); + $history = Middleware::history($this->requestResponseStack); + + $handler = HandlerStack::create($this->responseMock); + $handler->push($history); + + $guzzle = new Client(['handler' => $handler]); + + + $naming = new ShortNamingStrategy(); + $dispatcher = new EventDispatcher(); + $wsdlReader = new DefinitionsReader(null, $dispatcher); + $soapReader = new SoapReader(); + $dispatcher->addSubscriber($soapReader); + + $metadataGenerator = new MetadataGenerator($naming, self::$namespaces); + $metadataLoader = new DevMetadataLoader($metadataGenerator, $soapReader, $wsdlReader); + + + $this->factory = new ClientFactory($metadataLoader, $serializer); + $this->factory->setHttpClient(new GuzzleAdapter($guzzle)); + $this->factory->setHeaderHandler($headerHandler); + } + + public function testLocalCheckOperation() + { + $httpResponse = new Response(200, ['Content-Type' => 'application/soap+xml'], ' + + + + + + 2 + + + +'); + + $this->responseMock->append($httpResponse); + + $client = $this->factory->getClient(__DIR__ . '/../Fixtures/Local/local.wsdl'); + $this->assertNull($client->__getLastRequestMessage()); + + $element1 = "Example\Local\Element1"; + $element2 = "Example\Local\Element2"; + $type2Type = "Example\Local\Type2Type"; + + $input = new $element1(); + $e2 = new $element2(); + + $data = new $type2Type(); + $data->setId(1); + $e2->setData($data); + $input->setElement2($e2); + + $response = $client->localCheckOperation($input); + + $this->assertXmlStringEqualsXmlString( + ' + + + + + + 1 + + + + +', + (string)$client->__getLastRequestMessage()->getBody()); + + $this->assertNotNull($response); + $this->assertNotNull($response->getData()); + $this->assertEquals(2, $response->getData()->getId()); + } + + public function testLocalCheckOperationReversed() + { + $httpResponse = new Response(200, ['Content-Type' => 'application/soap+xml'], ' + + + + + + + 4 + + + + +'); + + $this->responseMock->append($httpResponse); + + $client = $this->factory->getClient(__DIR__ . '/../Fixtures/Local/local.wsdl'); + $this->assertNull($client->__getLastRequestMessage()); + + $element2 = "Example\Local\Element2"; + $type2Type = "Example\Local\Type2Type"; + + $input = new $element2(); + $data = new $type2Type(); + $data->setId(3); + $input->setData($data); + + $response = $client->localCheckOperationReversed($input); + + $this->assertXmlStringEqualsXmlString( + ' + + + + + 3 + + + + +', + (string)$client->__getLastRequestMessage()->getBody()); + + $this->assertNotNull($response); + $this->assertNotNull($response->getElement2()); + $this->assertNotNull($response->getElement2()->getData()); + $this->assertEquals(4, $response->getElement2()->getData()->getId()); + } +} \ No newline at end of file diff --git a/tests/Fixtures/Local/local.wsdl b/tests/Fixtures/Local/local.wsdl new file mode 100644 index 0000000..c75fc44 --- /dev/null +++ b/tests/Fixtures/Local/local.wsdl @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Fixtures/Local/local.xsd b/tests/Fixtures/Local/local.xsd new file mode 100644 index 0000000..b9a3906 --- /dev/null +++ b/tests/Fixtures/Local/local.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + +