11import unittest
2- from mock import Mock
2+ from mock import Mock , patch
33from hypermedia_resource import HypermediaResource
44from hypermedia_resource .wrappers import HypermediaResponse , ResponseBuilder
5+ from hypermedia_resource .wrappers import APIResource , FlaskAPIResource
56
67def adapter ():
78 adapter = Mock ()
@@ -10,6 +11,15 @@ def adapter():
1011 adapter .build .return_value = "built"
1112 return adapter
1213
14+ def request (method = 'GET' , data = {}):
15+ request = Mock ()
16+ request .method = method
17+ request .data = data
18+ request .headers = Mock ()
19+ request .headers .get = Mock ()
20+ request .headers .get .return_value = "application/hal+json"
21+ return request
22+
1323class TestHypermediaResponse (unittest .TestCase ):
1424
1525 def test (self ):
@@ -29,3 +39,64 @@ def test(self):
2939 response = response_builder .build (resource , accept )
3040 self .assertEqual (response .media_type , "application/hal+json" )
3141 self .assertEqual (response .body , "built" )
42+
43+ class TestAPIResource (unittest .TestCase ):
44+
45+ def setUp (self ):
46+ HypermediaResource .adapters .add (adapter ())
47+ self .resource = APIResource ()
48+
49+ def test_available_actions (self ):
50+ self .resource .read = Mock ()
51+ actions = self .resource .available_actions ()
52+ self .assertTrue ('read' in actions )
53+ self .assertFalse ('missing' in actions )
54+
55+ def test_available_methods (self ):
56+ self .resource .read = Mock ()
57+ methods = self .resource .available_methods ()
58+ self .assertTrue ('GET' in methods )
59+ self .assertFalse ('POST' in methods )
60+
61+ def test_response (self ):
62+ resource = HypermediaResource ()
63+ self .resource .read = Mock ()
64+ self .resource .read .return_value = resource
65+ accepts = "application/hal+json"
66+ response = self .resource .build_response (resource , accepts )
67+ self .assertEqual (response .body , "built" )
68+
69+ class TestFlaskAPIResource (unittest .TestCase ):
70+
71+ def setUp (self ):
72+ self .resource = FlaskAPIResource ()
73+
74+ def test_get_method (self ):
75+ method = self .resource .get_method (request ("GET" ))
76+ self .assertEqual (method , "GET" )
77+
78+ def test_get_method_override (self ):
79+ method = self .resource .get_method (request ("POST" , { "_method" : "PUT" }))
80+ self .assertEqual (method , "PUT" )
81+
82+ @patch ('hypermedia_resource.wrappers.Response' )
83+ def test_response_for (self , mock_method ):
84+ resource = HypermediaResource ()
85+
86+ # Response
87+ response = Mock ()
88+ response .body = "body"
89+ response .media_type = "media_type"
90+
91+ # Read action
92+ self .resource .read = Mock ()
93+ self .resource .read .return_value = resource
94+
95+ # Mock build response
96+ self .resource .build_response = Mock ()
97+ self .resource .build_response .return_value = response
98+
99+ self .resource .response_for (request ())
100+ self .resource .build_response .assert_called_with (resource , "application/hal+json" )
101+ mock_method .assert_called_with (response .body , mimetype = response .media_type )
102+
0 commit comments