# -*- coding: utf-8 -*-



# This program is free software; you can redistribute it and/or modify it under

# the terms of the (LGPL) GNU Lesser General Public License as published by the

# Free Software Foundation; either version 3 of the License, or (at your

# option) any later version.

#

# This program is distributed in the hope that it will be useful, but WITHOUT

# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS

# FOR A PARTICULAR PURPOSE. See the GNU Library Lesser General Public License

# for more details at ( http://www.gnu.org/licenses/lgpl.html ).

#

# You should have received a copy of the GNU Lesser General Public License

# along with this program; if not, write to the Free Software Foundation, Inc.,

# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# written by: Jurko Gospodnetić ( jurko.gospodnetic@pke.hr )



"""

Suds library transport related unit tests.



Implemented using the 'pytest' testing framework.



"""



if __name__ == "__main__":

    from . import __init__

    __init__.runUsingPyTest(globals())





import suds

from suds.transport import Reply, Request



import pytest



import sys





@pytest.mark.parametrize("message", (

    "",

    "for a bitch it's haaaard...",

    "I'm here to kick ass,\nand chew bubble gum...\nand I'm all out of gum.",

    "šuć-muć pa ožeži.. za 100 €\n\nwith multiple\nlines...",

    "\n\n\n\n\n\n",

    "中原千军逐蒋"))

def test_reply_as_string(message):

    code = 17

    reply = Reply(code, {"aaa":1}, message)

    expected = """\

CODE: %s

HEADERS: %s

MESSAGE:

%s""" % (code, reply.headers, message)

    assert str(reply) == expected

    if sys.version_info < (3, 0):

        assert str(reply) == expected.encode("utf-8")





@pytest.mark.parametrize(("code", "headers", "message"), (

    (1, {}, "ola"),

    (2, {"semper":"fi"}, "中原千军逐蒋\n城楼万众检阅")))

def test_reply_constructor(code, headers, message):

    reply = Reply(code, headers, message)

    assert reply.code == code

    assert reply.headers == headers

    assert reply.message == message





@pytest.mark.parametrize("message", (

    "",

    "for a bitch it's haaaard...",

    "I'm here to kick ass,\nand chew bubble gum...\nand I'm all out of gum.",

    "šuć-muć pa ožeži.. za 100 €\n\nwith multiple\nlines...",

    "\n\n\n\n\n\n",

    "中原千军逐蒋"))

def test_request_as_string(message):

    request = Request("my url", message)

    request.headers["aaa"] = 1

    expected = """\

URL: my url

HEADERS: %s

MESSAGE:

%s""" % (request.headers, message)

    assert str(request) == expected

    if sys.version_info < (3, 0):

        assert str(request) == expected.encode("utf-8")





@pytest.mark.parametrize(("url", "message"), (

    ("for a bitch it's haaaard...", "it's hard out here..."),

    ("中原千军逐蒋", "城楼万众检阅")))

def test_request_constructor(url, message):

    request = Request(url, message)

    assert request.url == url

    assert request.message == message

    assert request.headers == {}





def test_request_without_message():

    request = Request("for a bitch it's haaaard...")

    assert request.url == "for a bitch it's haaaard..."

    assert request.message is None

    assert request.headers == {}

