1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
import os
from unittest import TestCase, mock
import pytest
from click.testing import CliRunner
from tests import fixtures_dir, root
from tests.fixtures.hello import (
GetHelloAsStringResponse,
HelloError,
HelloGetHelloAsString,
HelloGetHelloAsStringOutput,
)
from xsdata.cli import cli
from xsdata.formats.dataclass.client import Client, Config
from xsdata.formats.dataclass.serializers import XmlSerializer
from xsdata.formats.dataclass.serializers.config import SerializerConfig
from xsdata.formats.dataclass.transports import DefaultTransport
from xsdata.utils.testing import load_class
os.chdir(root)
class HelloRpcServiceTests(TestCase):
def test_wsdl_codegen(self):
schema = fixtures_dir.joinpath("hello/hello.wsdl")
package = "tests.fixtures.hello"
runner = CliRunner()
result = runner.invoke(cli, [str(schema), "--package", package])
if result.exception:
raise result.exception
clazz = load_class(result.output, "HelloGetHelloAsStringOutput")
self.assertEqual("Envelope", clazz.Meta.name)
@mock.patch.object(DefaultTransport, "post")
def test_client(self, mock_most):
url = "http://localhost:9999/ws/hello"
request = fixtures_dir.joinpath("hello/HelloRQ.xml").read_text()
response = fixtures_dir.joinpath("hello/HelloRS.xml").read_bytes()
headers = {"content-type": "text/xml"}
mock_most.return_value = response
config = Config.from_service(HelloGetHelloAsString)
serializer = XmlSerializer(config=SerializerConfig(pretty_print=True))
client = Client(config=config, serializer=serializer)
result = client.send({"Body": {"getHelloAsString": {"arg0": "chris"}}})
self.assertIsInstance(result, HelloGetHelloAsString.output)
body = HelloGetHelloAsStringOutput.Body(
get_hello_as_string_response=GetHelloAsStringResponse(
return_value="Hello chris"
)
)
self.assertEqual(body, result.body)
mock_most.assert_called_once_with(url, data=request, headers=headers)
@mock.patch.object(DefaultTransport, "post")
def test_client_with_soap_fault(self, mock_most):
url = "http://localhost:9999/ws/hello"
request = fixtures_dir.joinpath("hello/HelloRQ.xml").read_text()
response = fixtures_dir.joinpath("hello/HelloRS_SoapFault.xml").read_bytes()
headers = {"content-type": "text/xml"}
mock_most.return_value = response
config = Config.from_service(HelloGetHelloAsString)
serializer = XmlSerializer(config=SerializerConfig(pretty_print=True))
client = Client(config=config, serializer=serializer)
result = client.send({"Body": {"getHelloAsString": {"arg0": "chris"}}})
self.assertIsInstance(result, HelloGetHelloAsString.output)
fault = HelloGetHelloAsStringOutput.Body.Fault(
faultcode="S:Server",
faultstring="foobar",
detail=HelloGetHelloAsStringOutput.Body.Fault.Detail(
hello_error=HelloError(message="foobar")
),
)
self.assertEqual(fault, result.body.fault)
mock_most.assert_called_once_with(url, data=request, headers=headers)
@pytest.mark.skip
def test_live(self):
config = Config.from_service(HelloGetHelloAsString)
serializer = XmlSerializer(config=SerializerConfig(pretty_print=True))
client = Client(config=config, serializer=serializer)
result = client.send({"Body": {"getHelloAsString": {"arg0": "chris"}}})
print(result)
|