1+ import codecs
2+ import json
13from http .server import HTTPServer , BaseHTTPRequestHandler
24
35from tests .support import MigTestCase , testmain
@@ -10,17 +12,20 @@ class TestRequestHandler(BaseHTTPRequestHandler):
1012 def do_POST (self ):
1113 test_server = self .server
1214
13- programmed_error = test_server ._programmed_error
14- if programmed_error :
15- status , content = programmed_error
16- self .send_response (status )
17- self .end_headers ()
18- self .wfile .write (content )
15+ if test_server ._programmed_response :
16+ status , content = test_server ._programmed_response
17+ elif test_server ._programmed_error :
18+ status , content = test_server ._programmed_error
19+
20+ self .send_response (status )
21+ self .end_headers ()
22+ self .wfile .write (content )
1923
2024
2125class TestHTTPServer (HTTPServer ):
2226 def __init__ (self , addr , ** kwargs ):
2327 self ._programmed_error = None
28+ self ._programmed_response = None
2429 self ._on_start = kwargs .pop ('on_start' , lambda _ : None )
2530
2631 HTTPServer .__init__ (self , addr , TestRequestHandler , ** kwargs )
@@ -29,9 +34,18 @@ def clear_programmed(self):
2934 self ._programmed_error = None
3035
3136 def set_programmed_error (self , status , content ):
37+ assert self ._programmed_response is None
3238 assert isinstance (content , bytes )
3339 self ._programmed_error = (status , content )
3440
41+ def set_programmed_response (self , status , content ):
42+ assert self ._programmed_error is None
43+ assert isinstance (content , bytes )
44+ self ._programmed_response = (status , content )
45+
46+ def set_programmed_json_response (self , status , content ):
47+ self .set_programmed_response (status , codecs .encode (json .dumps (content ), 'utf8' ))
48+
3549 def server_activate (self ):
3650 HTTPServer .server_activate (self )
3751 self ._on_start (self )
@@ -48,12 +62,32 @@ def after_each(self):
4862 if server :
4963 server .stop ()
5064
51- def test_true (self ):
65+ def test_raises_in_the_absence_of_success (self ):
5266 self .server .start_wait_until_ready ()
5367 self .server .set_programmed_error (418 , b'tea; earl grey; hot' )
5468 instance = CoreApiClient ("http://%s:%s/" % self .server_addr )
5569
56- status , content = instance .createUser ({
70+ with self .assertRaises (Exception ):
71+ instance .createUser ({
72+ 'full_name' : "Test User" ,
73+ 'organization' : "Test Org" ,
74+ 'state' : "NA" ,
75+ 'country' : "DK" ,
76+ 77+ 'comment' : "This is the create comment" ,
78+ 'password' : "password" ,
79+ })
80+
81+ def test_returs_a_user_object (self ):
82+ test_content = {
83+ 'foo' : 1 ,
84+ 'bar' : True
85+ }
86+ self .server .start_wait_until_ready ()
87+ self .server .set_programmed_json_response (201 , test_content )
88+ instance = CoreApiClient ("http://%s:%s/" % self .server_addr )
89+
90+ content = instance .createUser ({
5791 'full_name' : "Test User" ,
5892 'organization' : "Test Org" ,
5993 'state' : "NA" ,
@@ -63,8 +97,8 @@ def test_true(self):
6397 'password' : "password" ,
6498 })
6599
66- self .assertEqual ( status , 418 )
67-
100+ self .assertIsInstance ( content , dict )
101+ self . assertEqual ( content , test_content )
68102
69103if __name__ == '__main__' :
70104 testmain ()
0 commit comments