Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PyOTRS
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
External wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Coopdevs
Som Connexió
OTRS
PyOTRS
Commits
603bcb51
Commit
603bcb51
authored
8 years ago
by
Robert Habermann
Browse files
Options
Downloads
Patches
Plain Diff
extend tests
parent
afa29ace
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
pyotrs/lib.py
+8
-4
8 additions, 4 deletions
pyotrs/lib.py
tests/test_client.py
+227
-5
227 additions, 5 deletions
tests/test_client.py
with
235 additions
and
9 deletions
pyotrs/lib.py
+
8
−
4
View file @
603bcb51
...
@@ -76,6 +76,10 @@ class TicketSearchNothingToLookFor(PyOTRSError):
...
@@ -76,6 +76,10 @@ class TicketSearchNothingToLookFor(PyOTRSError):
pass
pass
class
TicketSearchNumberMultipleResults
(
PyOTRSError
):
pass
class
TicketError
(
PyOTRSError
):
class
TicketError
(
PyOTRSError
):
pass
pass
...
@@ -805,8 +809,8 @@ class Client(object):
...
@@ -805,8 +809,8 @@ class Client(object):
Returns:
Returns:
dict: Ticket
dict: Ticket
"""
"""
if
not
isinstance
(
ticket_number
,
str
):
if
isinstance
(
ticket_number
,
int
):
raise
TicketError
(
"
P
lease provide
ticket_number as
str!
"
)
raise
TicketError
(
"
P
rovide ticket_number as str/unicode. Got
ticket_number as
int.
"
)
result_list
=
self
.
ticket_search
(
TicketNumber
=
ticket_number
)
result_list
=
self
.
ticket_search
(
TicketNumber
=
ticket_number
)
...
@@ -818,8 +822,8 @@ class Client(object):
...
@@ -818,8 +822,8 @@ class Client(object):
dynamic_fields
=
dynamic_fields
,
dynamic_fields
=
dynamic_fields
,
all_articles
=
all_articles
)
all_articles
=
all_articles
)
else
:
else
:
print
(
"
Found more that one result
with that Ticket Number?!
"
)
raise
TicketSearchNumberMultipleResults
(
"
Found more that one result
for
"
return
None
"
Ticket Number: {0}
"
.
format
(
ticket_number
))
def
_ticket_get_json
(
self
,
url
,
payload
):
def
_ticket_get_json
(
self
,
url
,
payload
):
"""
_ticket_get_json
"""
_ticket_get_json
...
...
This diff is collapsed.
Click to expand it.
tests/test_client.py
+
227
−
5
View file @
603bcb51
...
@@ -12,6 +12,9 @@ from __future__ import unicode_literals # support both Python2 and 3
...
@@ -12,6 +12,9 @@ from __future__ import unicode_literals # support both Python2 and 3
import
unittest2
as
unittest
import
unittest2
as
unittest
import
mock
import
mock
import
datetime
import
requests
# noqa
from
pyotrs
import
Client
from
pyotrs
import
Client
from
pyotrs.lib
import
NoBaseURL
,
NoWebServiceName
,
ResponseJSONParseError
from
pyotrs.lib
import
NoBaseURL
,
NoWebServiceName
,
ResponseJSONParseError
from
pyotrs.lib
import
SessionError
from
pyotrs.lib
import
SessionError
...
@@ -19,7 +22,8 @@ from pyotrs.lib import SessionError
...
@@ -19,7 +22,8 @@ from pyotrs.lib import SessionError
from
pyotrs
import
Article
,
Client
,
Ticket
# noqa
from
pyotrs
import
Article
,
Client
,
Ticket
# noqa
from
pyotrs.lib
import
NoBaseURL
,
NoWebServiceName
,
NoCredentials
# noqa
from
pyotrs.lib
import
NoBaseURL
,
NoWebServiceName
,
NoCredentials
# noqa
from
pyotrs.lib
import
SessionCreateError
,
SessionIDFileError
,
OTRSAPIError
,
OTRSHTTPError
# noqa
from
pyotrs.lib
import
SessionCreateError
,
SessionIDFileError
,
OTRSAPIError
,
OTRSHTTPError
# noqa
from
pyotrs.lib
import
TicketError
# noqa
from
pyotrs.lib
import
TicketError
,
TicketSearchNumberMultipleResults
# noqa
from
pyotrs.lib
import
TicketSearchNothingToLookFor
# noqa
class
ClientTests
(
unittest
.
TestCase
):
class
ClientTests
(
unittest
.
TestCase
):
...
@@ -60,6 +64,18 @@ class ClientTests(unittest.TestCase):
...
@@ -60,6 +64,18 @@ class ClientTests(unittest.TestCase):
client
=
Client
(
baseurl
=
"
http://localhost/
"
,
webservicename
=
"
foo
"
,
session_timeout
=
4711
)
client
=
Client
(
baseurl
=
"
http://localhost/
"
,
webservicename
=
"
foo
"
,
session_timeout
=
4711
)
self
.
assertEqual
(
client
.
session_timeout
,
4711
)
self
.
assertEqual
(
client
.
session_timeout
,
4711
)
@mock.patch
(
'
pyotrs.Client._session_create_json
'
,
autospec
=
True
)
def
test__session_create_json
(
self
,
mock_s_create_json
):
"""
Tests session_create fail
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
mock_s_create_json
.
return_value
=
False
result
=
obj
.
session_create
()
self
.
assertEqual
(
mock_s_create_json
.
call_count
,
1
)
self
.
assertEqual
(
result
,
None
)
@mock.patch
(
'
pyotrs.Client.session_check_is_valid
'
,
autospec
=
True
)
@mock.patch
(
'
pyotrs.Client.session_check_is_valid
'
,
autospec
=
True
)
@mock.patch
(
'
pyotrs.Client._read_session_id_from_file
'
,
autospec
=
True
)
@mock.patch
(
'
pyotrs.Client._read_session_id_from_file
'
,
autospec
=
True
)
def
test_session_restore_or_set_up_new_with_file_nok
(
self
,
mock_read_s_id
,
mock_is_valid
):
def
test_session_restore_or_set_up_new_with_file_nok
(
self
,
mock_read_s_id
,
mock_is_valid
):
...
@@ -302,6 +318,80 @@ class ClientTests(unittest.TestCase):
...
@@ -302,6 +318,80 @@ class ClientTests(unittest.TestCase):
m
.
assert_called_once_with
(
'
/tmp/.sid
'
,
'
r
'
)
m
.
assert_called_once_with
(
'
/tmp/.sid
'
,
'
r
'
)
@mock.patch
(
'
pyotrs.Client._ticket_get_json
'
,
autospec
=
True
)
def
test_ticket_get_by_id_fail
(
self
,
mock_ticket_get_json
):
"""
Tests ticket_get_by_id fail
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
mock_ticket_get_json
.
return_value
=
False
result
=
obj
.
ticket_get_by_id
(
1
)
self
.
assertEqual
(
mock_ticket_get_json
.
call_count
,
1
)
self
.
assertEqual
(
result
,
None
)
@mock.patch
(
'
pyotrs.Client._ticket_get_json
'
,
autospec
=
True
)
def
test_ticket_get_by_id_ok
(
self
,
mock_ticket_get_json
):
"""
Tests ticket_get_by_id ok
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
obj
.
response_json
=
{
'
Ticket
'
:
[{
'
Some
'
:
'
Ticket
'
}]}
mock_ticket_get_json
.
return_value
=
True
result
=
obj
.
ticket_get_by_id
(
1
)
self
.
assertEqual
(
mock_ticket_get_json
.
call_count
,
1
)
self
.
assertDictEqual
(
result
,
{
'
Some
'
:
'
Ticket
'
})
def
test_ticket_get_by_number_with_int
(
self
):
"""
Tests ticket_get_by_number provided int not str -> fail
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
self
.
assertRaisesRegex
(
TicketError
,
'
Provide ticket_number as str/unicode. Got ticket_number as int.
'
,
obj
.
ticket_get_by_number
,
ticket_number
=
1
)
@mock.patch
(
'
pyotrs.Client.ticket_search
'
,
autospec
=
True
)
def
test_ticket_get_by_number_with_string_no_result
(
self
,
mock_ticket_search
):
"""
Tests ticket_get_by_number provided as int -> ok
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
mock_ticket_search
.
return_value
=
[]
result
=
obj
.
ticket_get_by_number
(
"
SomeOtherNumber
"
)
self
.
assertEqual
(
result
,
None
)
self
.
assertEqual
(
mock_ticket_search
.
call_count
,
1
)
@mock.patch
(
'
pyotrs.Client._ticket_get_json
'
,
autospec
=
True
)
@mock.patch
(
'
pyotrs.Client.ticket_search
'
,
autospec
=
True
)
def
test_ticket_get_by_number_with_string_one_result
(
self
,
mock_t_search
,
mock_t_get
):
"""
Tests ticket_get_by_number provided as int -> ok; 1 result
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
obj
.
response_json
=
{
'
Ticket
'
:
[{
'
SomeOne
'
:
'
TicketOne
'
}]}
mock_t_get
.
return_value
=
True
mock_t_search
.
return_value
=
[
1
]
result
=
obj
.
ticket_get_by_number
(
"
SomeOtherNumber1
"
)
self
.
assertDictEqual
(
result
,
{
'
SomeOne
'
:
'
TicketOne
'
})
self
.
assertEqual
(
mock_t_search
.
call_count
,
1
)
@mock.patch
(
'
pyotrs.Client.ticket_search
'
,
autospec
=
True
)
def
test_ticket_get_by_number_with_string_three_results
(
self
,
mock_ticket_search
):
"""
Tests ticket_get_by_number provided as int; 3 results -> nok
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
mock_ticket_search
.
return_value
=
[
1
,
2
,
3
]
self
.
assertRaisesRegex
(
TicketSearchNumberMultipleResults
,
'
Found more that one result for Ticket Number: SomeOtherNumber123
'
,
obj
.
ticket_get_by_number
,
'
SomeOtherNumber123
'
)
self
.
assertEqual
(
mock_ticket_search
.
call_count
,
1
)
def
test__write_session_id_to_file
(
self
):
def
test__write_session_id_to_file
(
self
):
"""
Tests _write_session_id_to_file not implemented
"""
"""
Tests _write_session_id_to_file not implemented
"""
# create object
# create object
...
@@ -343,8 +433,8 @@ class ClientTests(unittest.TestCase):
...
@@ -343,8 +433,8 @@ class ClientTests(unittest.TestCase):
obj
.
ticket_create
,
ticket
=
tic
)
obj
.
ticket_create
,
ticket
=
tic
)
@mock.patch
(
'
pyotrs.lib.Client._ticket_create_json
'
,
autospec
=
True
)
@mock.patch
(
'
pyotrs.lib.Client._ticket_create_json
'
,
autospec
=
True
)
def
test_ticket_create_
no_ticket_mock
(
self
,
mock_t_create_json
):
def
test_ticket_create_
mocked_none
(
self
,
mock_t_create_json
):
"""
Test ticket_create -
no ticket specified
"""
"""
Test ticket_create -
mocked result None
"""
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
webservicename
=
"
GenericTicketConnectorREST
"
)
obj
.
session_id
=
"
some_session_id
"
obj
.
session_id
=
"
some_session_id
"
...
@@ -354,12 +444,49 @@ class ClientTests(unittest.TestCase):
...
@@ -354,12 +444,49 @@ class ClientTests(unittest.TestCase):
'
TimeUnit
'
:
0
,
'
TimeUnit
'
:
0
,
'
MimeType
'
:
'
text/plain
'
,
'
MimeType
'
:
'
text/plain
'
,
'
Charset
'
:
'
UTF8
'
})
'
Charset
'
:
'
UTF8
'
})
mock_t_create_json
.
return_value
=
False
mock_t_create_json
.
return_value
=
False
result
=
obj
.
ticket_create
(
ticket
=
tic
,
article
=
art
)
result
=
obj
.
ticket_create
(
ticket
=
tic
,
article
=
art
)
self
.
assertEqual
(
result
,
None
)
self
.
assertEqual
(
result
,
None
)
@mock.patch
(
'
pyotrs.lib.Client._ticket_create_json
'
,
autospec
=
True
)
def
test_ticket_create_mocked_true
(
self
,
mock_t_create_json
):
"""
Test ticket_create - mocked result
"""
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
obj
.
session_id
=
"
some_session_id
"
tic
=
Ticket
(
dct
=
{
'
Title
'
:
'
foo
'
})
art
=
Article
({
'
Subject
'
:
'
mySubject
'
,
'
Body
'
:
'
myBody
'
,
'
TimeUnit
'
:
0
,
'
MimeType
'
:
'
text/plain
'
,
'
Charset
'
:
'
UTF8
'
})
mock_t_create_json
.
return_value
=
True
obj
.
ticket_create
(
ticket
=
tic
,
article
=
art
)
self
.
assertEqual
(
mock_t_create_json
.
call_count
,
1
)
#
# @mock.patch('pyotrs.lib.requests.Response.json', autospec=True)
# @mock.patch('pyotrs.lib.Client._validate_response', autospec=True)
# def test__ticket_create_json_mocked(self, mock_validate_resp, mock_response_json):
# """Test _ticket_create_json - mocked"""
# obj = Client(baseurl="http://fqdn",
# webservicename="GenericTicketConnectorREST")
#
# def mock_response_obj():
# return True
#
# mock_validate_resp.return_value = True
# mock_response_json.return_value = {}
#
# with mock.patch.object(obj, '_send_request') as mock_send_request:
# mock_send_request.return_value = requests.Response
# result = obj._ticket_create_json(url="http://localhost", payload={"bar": "rab"})
#
# self.assertEqual(result, True)
# self.assertEqual(obj.operation, 'TicketCreate')
# self.assertEqual(obj.http_method, 'POST')
# self.assertEqual(mock_validate_resp.call_count, 1)
def
test__ticket_request_invalid_method
(
self
):
def
test__ticket_request_invalid_method
(
self
):
"""
Test Method Client._ticket_request
"""
"""
Test Method Client._ticket_request
"""
self
.
assertRaisesRegex
(
NotImplementedError
,
self
.
assertRaisesRegex
(
NotImplementedError
,
...
@@ -369,6 +496,101 @@ class ClientTests(unittest.TestCase):
...
@@ -369,6 +496,101 @@ class ClientTests(unittest.TestCase):
url
=
"
http://localhost/
"
,
url
=
"
http://localhost/
"
,
payload
=
{
"
foo
"
:
"
bar
"
})
payload
=
{
"
foo
"
:
"
bar
"
})
def
test_ticket_search_nothing_to_look_for
(
self
):
"""
Tests ticket_search nothing to look for
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
self
.
assertRaisesRegex
(
TicketSearchNothingToLookFor
,
'
Nothing specified to look for!
'
,
obj
.
ticket_search
)
@mock.patch
(
'
pyotrs.Client._ticket_search_json
'
,
autospec
=
True
)
def
test_ticket_search_ticket_id
(
self
,
mock_ticket_search_json
):
"""
Tests ticket_search ticket id
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
obj
.
ticket_search_result
=
[
1
]
mock_ticket_search_json
.
return_value
=
True
obj
.
ticket_search
(
TicketID
=
"
1
"
)
self
.
assertEqual
(
mock_ticket_search_json
.
call_count
,
1
)
@mock.patch
(
'
pyotrs.Client._ticket_search_json
'
,
autospec
=
True
)
def
test_ticket_search_datetime
(
self
,
mock_ticket_search_json
):
"""
Tests ticket_search datetime
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
obj
.
ticket_search_result
=
[
1
]
mock_ticket_search_json
.
return_value
=
True
obj
.
ticket_search
(
TicketCreateTimeOlderDate
=
datetime
.
datetime
.
utcnow
())
self
.
assertEqual
(
mock_ticket_search_json
.
call_count
,
1
)
@mock.patch
(
'
pyotrs.Client._ticket_update_json
'
,
autospec
=
True
)
def
test_ticket_update_queue_id_ok
(
self
,
mock_ticket_update_json
):
"""
Tests ticket_update queue_id ok
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
mock_ticket_update_json
.
return_value
=
True
obj
.
ticket_update
(
1
,
QueueID
=
"
1
"
)
self
.
assertEqual
(
mock_ticket_update_json
.
call_count
,
1
)
@mock.patch
(
'
pyotrs.Client._ticket_update_json
'
,
autospec
=
True
)
def
test_ticket_update_queue_id_nok
(
self
,
mock_ticket_update_json
):
"""
Tests ticket_update queue_id nok
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
mock_ticket_update_json
.
return_value
=
False
result
=
obj
.
ticket_update
(
1
,
QueueID
=
"
1
"
)
self
.
assertEqual
(
mock_ticket_update_json
.
call_count
,
1
)
self
.
assertEqual
(
result
,
None
)
@mock.patch
(
'
pyotrs.Client._ticket_update_json
'
,
autospec
=
True
)
def
test_ticket_update_article_nok
(
self
,
mock_ticket_update_json
):
"""
Tests ticket_update article nok
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
art
=
Article
({
'
Subject
'
:
'
mySubject
'
,
'
Body
'
:
'
myBody
'
,
'
TimeUnit
'
:
0
,
'
MimeType
'
:
'
text/plain
'
,
'
Charset
'
:
'
UTF8
'
})
mock_ticket_update_json
.
return_value
=
False
result
=
obj
.
ticket_update
(
1
,
article
=
art
)
self
.
assertEqual
(
mock_ticket_update_json
.
call_count
,
1
)
self
.
assertEqual
(
result
,
None
)
@mock.patch
(
'
pyotrs.Client._ticket_update_json
'
,
autospec
=
True
)
def
test_ticket_update_set_pending_ok
(
self
,
mock_ticket_update_json
):
"""
Tests ticket_update_set_pending ok
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
mock_ticket_update_json
.
return_value
=
True
obj
.
ticket_update_set_pending
(
1
)
self
.
assertEqual
(
mock_ticket_update_json
.
call_count
,
1
)
@mock.patch
(
'
pyotrs.Client._ticket_update_json
'
,
autospec
=
True
)
def
test_ticket_update_set_pending_nok
(
self
,
mock_ticket_update_json
):
"""
Tests ticket_update_set_pending nok
"""
# create object
obj
=
Client
(
baseurl
=
"
http://fqdn
"
,
webservicename
=
"
GenericTicketConnectorREST
"
)
mock_ticket_update_json
.
return_value
=
False
result
=
obj
.
ticket_update_set_pending
(
1
)
self
.
assertEqual
(
mock_ticket_update_json
.
call_count
,
1
)
self
.
assertEqual
(
result
,
None
)
def
test__validate_response_invalid_operation
(
self
):
def
test__validate_response_invalid_operation
(
self
):
"""
Test Method Client._ticket_request
"""
"""
Test Method Client._ticket_request
"""
client
=
Client
(
baseurl
=
"
http://localhost
"
,
webservicename
=
"
foo
"
)
client
=
Client
(
baseurl
=
"
http://localhost
"
,
webservicename
=
"
foo
"
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment