Changeset 200

Show
Ignore:
Timestamp:
08/19/08 08:38:17 (3 months ago)
Author:
Denis Bilenko <denis@ag-projects.com>
Hashname:
20080819063817-b2873-f8a1538c111122c2fc38f2650e6dadf1bb424721
Message:

decoupled XCAPClient from XCAPTest

* removed _resource suffix in get/put/delete methods
* put also checks that GET(PUT(x))=>x
* delete also checks that GET=>404

Location:
xcap/test
Files:
11 modified

Legend:

Unmodified
Added
Removed
  • xcap/test/common.py

    r199 r200  
    157157        return result 
    158158 
    159     def get_resource(self, application, node=None, headers={}): 
     159    def get(self, application, node=None, headers={}): 
    160160        username, domain = self.username.split('@', 1) 
    161161        uri = "%s/%s/users/%s/index.xml" % (self.xcap_root, application, self.username) 
    162162        if node: 
    163163            uri += '~~' + node 
    164         r = self._execute_request("GET", uri, username, domain, self.password, headers) 
    165         self.status, self.headers, self.body = r.code, r.headers, r.body 
    166         return r 
    167  
    168     get=get_resource 
    169  
    170     def put_resource(self, application, resource, node=None, headers={}): 
     164        return self._execute_request("GET", uri, username, domain, self.password, headers) 
     165 
     166    def put(self, application, resource, node=None, headers={}): 
    171167        username, domain = self.username.split('@', 1) 
    172168        uri = "%s/%s/users/%s/index.xml" % (self.xcap_root, application, self.username) 
    173169        if node: 
    174170            uri += '~~' + node 
    175         r = self._execute_request("PUT", uri, username, domain, self.password, headers, resource) 
    176         self.status, self.headers, self.body = r.code, r.headers, r.body 
    177         return r 
    178  
    179     put = put_resource 
    180  
    181     def delete_resource(self, application, node=None, headers={}): 
     171        return self._execute_request("PUT", uri, username, domain, self.password, headers, resource) 
     172 
     173    def delete(self, application, node=None, headers={}): 
    182174        username, domain = self.username.split('@', 1) 
    183175        uri = "%s/%s/users/%s/index.xml" % (self.xcap_root, application, self.username) 
    184176        if node: 
    185177            uri += '~~' + node 
    186         r = self._execute_request("DELETE", uri, username, domain, self.password, headers) 
    187         self.status, self.headers, self.body = r.code, r.headers, r.body 
    188         return r 
    189  
    190     delete = delete_resource 
    191  
    192  
    193 class XCAPTest(unittest.TestCase, XCAPClient): 
    194  
    195     def assertStatus(self, status, msg=None): 
    196         if isinstance(status, int): 
    197             if self.status != status: 
     178        return self._execute_request("DELETE", uri, username, domain, self.password, headers) 
     179 
     180 
     181class XCAPTest(unittest.TestCase): 
     182 
     183    XCAPClient = XCAPClient 
     184 
     185    @classmethod 
     186    def setupOptionParser(cls, parser): 
     187        cls.XCAPClient.setupOptionParser(parser) 
     188 
     189    def initialize(self, options, args = []): 
     190        self.options = options 
     191        self.args = args 
     192 
     193    def new_client(self): 
     194        client = self.XCAPClient() 
     195        client.initialize(self.options, self.args) 
     196        return client 
     197 
     198    def setUp(self): 
     199        self.client = self.new_client() 
     200 
     201    def assertStatus(self, r, status, msg=None): 
     202        if status is None: 
     203            return 
     204        elif isinstance(status, int): 
     205            if r.code != status: 
    198206                if msg is None: 
    199                     msg = 'Status (%s) != %s' % (self.status, status) 
     207                    msg = 'Status (%s) != %s' % (r.code, status) 
    200208                raise self.failureException(msg) 
    201209        else: 
    202210            ## status is a tuple or a list 
    203             if self.status not in status: 
     211            if r.code not in status: 
    204212                if msg is None: 
    205                     msg = 'Status (%s) not in %s' % (self.status, str(status)) 
     213                    msg = 'Status (%s) not in %s' % (r.code, str(status)) 
    206214                raise self.failureException(msg) 
    207215 
    208     def assertHeader(self, key, value=None, msg=None): 
    209         """Fail if (key, [value]) not in self.headers.""" 
     216    def assertHeader(self, r, key, value=None, msg=None): 
     217        """Fail if (key, [value]) not in r.headers.""" 
    210218        lowkey = key.lower() 
    211         for k, v in self.headers.items(): 
     219        for k, v in r.headers.items(): 
    212220            if k.lower() == lowkey: 
    213221                if value is None or str(value) == v: 
     
    220228        raise self.failureException(msg) 
    221229 
    222     def assertNoHeader(self, key, msg=None): 
    223         """Fail if key in self.headers.""" 
     230    def assertNoHeader(self, r, key, msg=None): 
     231        """Fail if key in r.headers.""" 
    224232        lowkey = key.lower() 
    225         matches = [k for k, v in self.headers if k.lower() == lowkey] 
     233        matches = [k for k, v in r.headers if k.lower() == lowkey] 
    226234        if matches: 
    227235            if msg is None: 
     
    229237            raise self.failureException(msg) 
    230238     
    231     def assertBody(self, value, msg=None): 
    232         """Fail if value != self.body.""" 
    233         if value != self.body: 
    234             if msg is None: 
    235                 msg = 'expected body:\n"%s"\n\nactual body:\n"%s"' % (value, self.body) 
    236             raise self.failureException(msg) 
    237  
    238     def assertInBody(self, value, msg=None): 
    239         """Fail if value not in self.body.""" 
    240         if value not in self.body: 
     239    def assertBody(self, r, value, msg=None): 
     240        """Fail if value != r.body.""" 
     241        if value.strip() != r.body.strip(): 
     242            if msg is None: 
     243                msg = 'expected body:\n"%s"\n\nactual body:\n"%s"' % (value, r.body) 
     244            raise self.failureException(msg) 
     245 
     246    def assertInBody(self, r, value, msg=None): 
     247        """Fail if value not in r.body.""" 
     248        if value not in r.body: 
    241249            if msg is None: 
    242250                msg = '%s not in body' % value 
    243251            raise self.failureException(msg) 
    244252 
    245     def assertNotInBody(self, value, msg=None): 
    246         """Fail if value in self.body.""" 
    247         if value in self.body: 
     253    def assertNotInBody(self, r, value, msg=None): 
     254        """Fail if value in r.body.""" 
     255        if value in r.body: 
    248256            if msg is None: 
    249257                msg = '%s found in body' % value 
    250258            raise self.failureException(msg) 
    251259     
    252     def assertMatchesBody(self, pattern, msg=None, flags=0): 
    253         """Fail if value (a regex pattern) is not in self.body.""" 
    254         if re.search(pattern, self.body, flags) is None: 
     260    def assertMatchesBody(self, r, pattern, msg=None, flags=0): 
     261        """Fail if value (a regex pattern) is not in r.body.""" 
     262        if re.search(pattern, r.body, flags) is None: 
    255263            if msg is None: 
    256264                msg = 'No match for %s in body' % pattern 
    257265            raise self.failureException(msg) 
    258266 
    259     def put_rejected(self, application, resource): 
    260         self.delete_resource(application) 
    261         self.assertStatus([200, 404]) 
    262  
    263         r = self.put_resource(application, resource) 
    264         self.assertStatus(409) 
    265  
    266         # the document shouldn't be there 
    267         self.get_resource(application) 
    268         self.assertStatus(404) 
    269  
    270         self.status, self.headers, self.body = r.code, r.headers, r.body 
     267    def get(self, application, node=None, headers={}, status=200, client=None): 
     268        client = client or self.client 
     269        r = client.get(application, node, headers) 
     270        self.assertStatus(r, status) 
    271271        return r 
    272272 
    273     def getputdelete_successful(self, application, document, content_type): 
    274         self.delete_resource(application) 
    275         self.assertStatus([200, 404]) 
    276  
    277         self.get_resource(application) 
    278         self.assertStatus(404) 
    279  
    280         self.put_resource(application, document) 
    281         self.assertStatus(201) 
    282  
    283         self.get_resource(application) 
    284         self.assertStatus(200) 
    285         self.assertBody(document) 
    286         self.assertHeader('Content-Type', content_type) 
    287  
    288         self.put_resource(application, document) 
    289         self.assertStatus(200) 
    290  
    291         self.delete_resource(application) 
    292         self.assertStatus(200) 
    293  
    294         self.delete_resource(application) 
    295         self.assertStatus(404) 
     273    def put(self, application, resource, node=None, headers={}, 
     274            status=[200,201], content_type_in_GET=None, client=None): 
     275        client = client or self.client 
     276        r_put = client.put(application, resource, node, headers) 
     277        self.assertStatus(r_put, status) 
     278 
     279        # if PUTting succeed, check that document is there and equals to resource 
     280        if r_put.succeed: 
     281            r_get = client.get(application, node) 
     282            self.assertStatus(r_get, 200, 
     283                              'although PUT succeed, following GET on the same URI did not: %s %s' % \ 
     284                              (r_get.code, r_get.msg)) 
     285            self.assertEqual(resource, r_get.body) # is body put equals to body got? 
     286            if content_type_in_GET is not None: 
     287                self.assertHeader(r_get, 'content-type', content_type_in_GET) 
     288 
     289        return r_put 
     290 
     291    def delete(self, application, node=None, headers={}, status=200, client=None): 
     292        client = client or self.client 
     293        r = client.delete(application, node, headers) 
     294        self.assertStatus(r, status) 
     295 
     296        # if deleting succeed, GET should return 404 
     297        if r.succeed or r.code == 404: 
     298            r_get = client.get(application, node, headers) 
     299            self.assertStatus(r_get, 404, 
     300                              'although DELETE succeed, following GET on the same URI did not return 404: %s %s' % \ 
     301                              (r_get.code, r_get.msg)) 
     302 
     303        return r 
     304 
     305    def put_rejected(self, application, resource, status=409, client=None): 
     306        """DELETE the document, then PUT it and expect 409 error. Return PUT result. 
     307        If PUT has indeed failed, also check that GET returns 404 
     308        """ 
     309        self.delete(application, status=[200,404], client=client) 
     310        put_result = self.put(application, resource, status=status, client=client) 
     311        self.get(application, status=404, client=client) 
     312        return put_result 
     313 
     314    def getputdelete(self, application, document, content_type, client=None): 
     315        self.delete(application, status=[200,404], client=client) 
     316        self.get(application, status=404, client=client) 
     317        self.put(application, document, status=201, content_type_in_GET=content_type, client=client) 
     318        self.put(application, document, status=200, content_type_in_GET=content_type, client=client) 
     319        self.put(application, document, status=200, content_type_in_GET=content_type, client=client) 
     320        self.delete(application, status=200, client=client) 
     321        self.delete(application, status=404, client=client) 
    296322 
    297323 
  • xcap/test/test_attribute.py

    r199 r200  
    3939     
    4040    def test_get(self): 
    41         self.put_resource('resource-lists', resource_list_xml) 
    42         self.assertStatus([200, 201]) 
     41        self.put('resource-lists', resource_list_xml) 
    4342         
    44         self.get_resource('resource-lists', '/resource-lists/list[@name="other"]/@some-attribute') 
    45         self.assertStatus(404) 
     43        self.get('resource-lists', '/resource-lists/list[@name="other"]/@some-attribute', status=404) 
    4644                 
    47         self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]/@name') 
    48         self.assertStatus(200) 
    49         self.assertBody("friends") 
    50         self.assertHeader('ETag') 
    51         self.assertHeader('Content-type', 'application/xcap-att+xml') 
     45        r = self.get('resource-lists', '/resource-lists/list[@name="friends"]/@name') 
     46        self.assertBody(r, "friends") 
     47        self.assertHeader(r, 'ETag') 
     48        self.assertHeader(r, 'Content-type', 'application/xcap-att+xml') 
    5249 
    5350    def test_delete(self): 
    54         self.put_resource('resource-lists', resource_list_xml) 
    55         self.assertStatus([200, 201]) 
    56          
    57         self.delete_resource('resource-lists', '/resource-lists/list[@name="other"]/@some-attribute') 
    58         self.assertStatus(404) 
     51        self.put('resource-lists', resource_list_xml) 
     52        self.delete('resource-lists', '/resource-lists/list[@name="other"]/@some-attribute', status=404) 
    5953 
    60         self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/@name') 
    61         self.assertStatus(200) 
    62  
    63         self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/@name') 
    64         self.assertStatus(404) 
     54        self.delete('resource-lists', '/resource-lists/list[@name="friends"]/@name', status=200) 
     55        self.delete('resource-lists', '/resource-lists/list[@name="friends"]/@name', status=404) 
    6556 
    6657    def test_put(self): 
    67         self.put_resource('resource-lists', resource_list_xml) 
    68         self.assertStatus([200, 201]) 
     58        self.put('resource-lists', resource_list_xml) 
    6959 
    7060        headers = {'Content-type': "application/xcap-att+xml"} 
    71         self.put_resource('resource-lists', 'coworkers', '/resource-lists/list[@name="other"]/@some-attribute', headers) 
    72         self.assertStatus(409) 
     61        self.put('resource-lists', 'coworkers', 
     62                 '/resource-lists/list[@name="other"]/@some-attribute', headers, status=409) 
    7363 
    74         headers = {'Content-type': "application/xcap-att+xml"} 
    75         self.put_resource('resource-lists', 'coworkers', '/resource-lists/list[@name="friends"]/@name', headers) 
    76         self.assertStatus(200) 
     64        # fails GET(PUT(x))==x test. REJECT in the server? 
     65        ##self.put('resource-lists', 'coworkers', '/resource-lists/list[@name="friends"]/@name', headers) 
     66 
     67        r = self.client.put('resource-lists', 'coworkers', '/resource-lists/list[@name="friends"]/@name', headers) 
     68        self.assertStatus(r, 200) 
    7769 
    7870if __name__ == '__main__': 
  • xcap/test/test_auth.py

    r199 r200  
    1010     
    1111    def test_authorization(self): 
    12         self.put_resource('resource-lists', resource_list_xml) 
    13         self.assertStatus([200, 201]) 
    14          
    15         self.get_resource('resource-lists') 
    16         self.assertStatus(200) 
    17          
    18         self.get_resource('dummy-application') 
    19         self.assertStatus(404) 
     12        self.put('resource-lists', resource_list_xml) 
     13        self.get('dummy-application', status=404) 
    2014         
    2115        ### the request cannot be authenticated 
    2216        #password = self.account 
    23         #self.password += "dummy" 
    24         #self.get_resource('resource-lists') 
    25         #self.assertStatus(401) 
    26         #self.password = password 
     17        #self.client.password += "dummy" 
     18        #self.get('resource-lists', status=401) 
     19        #self.client.password = password 
    2720         
    2821        ### the request cannot be authorized (we're trying to access someone else' resource) 
    2922        #account = self.account 
    3023        #self.account = "dummy" + self.account 
    31         #self.get_resource('resource-lists') 
    32         #self.assertStatus(401) 
    33         #self.account = account 
     24        #r = self.get('resource-lists', status=401) 
     25        #self.client.account = account 
    3426 
    3527if __name__ == '__main__': 
  • xcap/test/test_element.py

    r199 r200  
    3939     
    4040    def test_get(self): 
    41         self.put_resource('resource-lists', resource_list_xml) 
    42         self.assertStatus([200, 201]) 
     41        self.delete('resource-lists', status=[200,404]) 
     42        self.put('resource-lists', resource_list_xml) 
     43        self.get('resource-lists', '/resource-lists/list[@name="other"]', status=404) 
     44        self.get('resource-lists', '/resource-lists/list/entry[4]', status=404) 
     45        r = self.get('resource-lists', '/resource-lists/list[@name="friends"]') 
     46        self.assertBody(r, list_element_xml) 
     47        self.assertHeader(r, 'ETag') 
     48        self.assertHeader(r, 'Content-type', 'application/xcap-el+xml') 
    4349         
    44         self.get_resource('resource-lists', '/resource-lists/list[@name="other"]') 
    45         self.assertStatus(404) 
     50        r = self.get('resource-lists', '/resource-lists/list[@name="friends"]/entry[2]') 
     51        self.assertBody(r, second_element_xml) 
     52        self.assertHeader(r, 'ETag') 
     53        self.assertHeader(r, 'Content-type', 'application/xcap-el+xml') 
    4654         
    47         self.get_resource('resource-lists', '/resource-lists/list/entry[4]') 
    48         self.assertStatus(404) 
    49          
    50         self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]') 
    51         self.assertStatus(200) 
    52         self.assertInBody(list_element_xml) 
    53         #self.assertBody(list_element_xml) 
    54         self.assertHeader('ETag') 
    55         self.assertHeader('Content-type', 'application/xcap-el+xml') 
    56          
    57         self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]/entry[2]') 
    58         self.assertStatus(200) 
    59         self.assertInBody(second_element_xml) 
    60         #self.assertBody(second_element_xml) 
    61         self.assertHeader('ETag') 
    62         self.assertHeader('Content-type', 'application/xcap-el+xml') 
    63          
    64         self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]/*[2]') 
    65         self.assertStatus(200) 
    66         self.assertInBody(second_element_xml) 
    67         #self.assertBody(second_element_xml) 
    68         self.assertHeader('ETag') 
    69         self.assertHeader('Content-type', 'application/xcap-el+xml') 
     55        r = self.get('resource-lists', '/resource-lists/list[@name="friends"]/*[2]') 
     56        self.assertStatus(r, 200) 
     57        self.assertBody(r, second_element_xml) 
     58        self.assertHeader(r, 'ETag') 
     59        self.assertHeader(r, 'Content-type', 'application/xcap-el+xml') 
    7060 
    7161    def test_delete(self): 
    72         self.put_resource('resource-lists', resource_list_xml) 
    73         self.assertStatus([200, 201]) 
     62        self.put('resource-lists', resource_list_xml) 
    7463         
    75         self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/*[3]') 
    76         self.assertStatus(200) 
    77         self.assertHeader('ETag') 
     64        r = self.delete('resource-lists', '/resource-lists/list[@name="friends"]/*[3]') 
     65        self.assertHeader(r, 'ETag') 
    7866 
    79         self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/*[2]') 
    80         self.assertStatus(200) 
    81         self.assertHeader('ETag') 
     67        r = self.delete('resource-lists', '/resource-lists/list[@name="friends"]/*[2]') 
     68        self.assertHeader(r, 'ETag') 
    8269 
    83         self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/*[1]') 
    84         self.assertStatus(200) 
    85         self.assertHeader('ETag') 
     70        r = self.delete('resource-lists', '/resource-lists/list[@name="friends"]/*[1]') 
     71        self.assertHeader(r, 'ETag') 
    8672 
    87         self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/entry[@uri="sip:joe@example.com"]') 
    88         self.assertStatus(404) 
     73        self.delete('resource-lists', 
     74                    '/resource-lists/list[@name="friends"]/entry[@uri="sip:joe@example.com"]', status=404) 
    8975 
    90     def test_put(self): 
    91         self.put_resource('resource-lists', resource_list_xml) 
    92         self.assertStatus([200, 201]) 
    93          
    94         self.put_resource('resource-lists', second_element_xml, '/resource-lists/list[@name="friends"]') 
    95         self.assertStatus(415)        ## content type not set 
     76    def test_put_error(self): 
     77        self.put('resource-lists', resource_list_xml) 
     78 
     79        # 415 content type not set 
     80        self.put('resource-lists', second_element_xml, '/resource-lists/list[@name="friends"]', status=415) 
    9681 
    9782        headers = {'Content-type': "application/xcap-el+xml"} 
    98         self.put_resource('resource-lists', broken_element_xml, '/resource-lists/list[@name="friends"]', headers) 
    99         self.assertStatus(409)        ## <not-xml-frag> 
    100          
    101         self.put_resource('resource-lists', second_element_xml, '/resource-lists/list[@name="others"]/entry[2]', headers) 
    102         self.assertStatus(409)        ## <not-parent> 
    103          
    104         self.put_resource('resource-lists', second_element_xml, '/resource-lists/list[@name="friends"]/entry[1]', headers) 
    105         self.assertStatus(409)        ## <uniqueness-failure> 
     83        # 409 <not-xml-frag> 
     84        r = self.put('resource-lists', broken_element_xml, '/resource-lists/list[@name="friends"]', 
     85                     headers, status=409) 
     86 
     87        # 409 <not-parent> 
     88        r = self.put('resource-lists', second_element_xml, '/resource-lists/list[@name="others"]/entry[2]', 
     89                     headers, status=409) 
     90 
     91        # 409 <uniqueness-failure> 
     92        r = self.put('resource-lists', second_element_xml, '/resource-lists/list[@name="friends"]/entry[1]', 
     93                     headers, status=409) 
    10694 
    10795if __name__ == '__main__': 
  • xcap/test/test_etags.py

    r199 r200  
    1010 
    1111    def test_conditional_GET(self): 
    12         self.put_resource('resource-lists', resource_list_xml) 
    13         self.assertStatus([200, 201]) 
    14         etag = self.assertHeader('ETag') 
     12        r = self.put('resource-lists', resource_list_xml) 
     13        etag = self.assertHeader(r, 'ETag') 
    1514         
    1615        # Test If-Match (both valid and invalid) 
    17         self.get_resource('resource-lists', headers={'If-Match': etag}) 
    18         self.assertStatus(200) 
    19         self.get_resource('resource-lists', headers={'If-Match': '*'}) 
    20         self.assertStatus(200) 
    21         self.get_resource('resource-lists', headers={'if-Match': "another-etag"}) 
    22         self.assertStatus(412) 
     16        self.get('resource-lists', headers={'If-Match': etag}) 
     17        self.get('resource-lists', headers={'If-Match': '*'}) 
     18        self.get('resource-lists', headers={'if-Match': "another-etag"}, status=412) 
    2319         
    2420        # Test If-None-Match (both valid and invalid) 
    25         self.get_resource('resource-lists', headers={'If-None-Match': etag}) 
    26         self.assertStatus(304) 
    27         self.get_resource('resource-lists', headers={'If-None-Match': '*'}) 
    28         self.assertStatus(304) 
    29         self.get_resource('resource-lists', headers={'If-None-Match': "another-etag"}) 
    30         self.assertStatus(200) 
     21        self.get('resource-lists', headers={'If-None-Match': etag}, status=304) 
     22        self.get('resource-lists', headers={'If-None-Match': '*'}, status=304) 
     23        self.get('resource-lists', headers={'If-None-Match': "another-etag"}, status=200) 
    3124         
    3225    def test_conditional_PUT(self): 
    33         self.put_resource('resource-lists', resource_list_xml) 
    34         self.assertStatus([200, 201]) 
    35         etag = self.assertHeader('ETag')         
     26        r = self.put('resource-lists', resource_list_xml) 
     27        etag = self.assertHeader(r, 'ETag')         
    3628         
    3729        # Test conditional PUT logic 
    3830        ## Alice and Bob initially share the same etag 
    3931        alice_etag = bob_etag = etag 
     32 
    4033        ## Bob modifies the resource 
    41         self.put_resource('resource-lists', resource_list_xml, headers={'If-Match': bob_etag}) 
    42         self.assertStatus([200, 201]) 
    43         bob_etag = self.assertHeader('ETag') 
     34        r = self.put('resource-lists', resource_list_xml, headers={'If-Match': bob_etag}) 
     35        bob_etag = self.assertHeader(r, 'ETag') 
    4436         
    4537        ## now Alice tries to modify the resource 
    46         self.put_resource('resource-lists', resource_list_xml, headers={'If-Match': alice_etag}) 
    47         self.assertStatus(412) 
     38        self.put('resource-lists', resource_list_xml, headers={'If-Match': alice_etag}, status=412) 
    4839         
    4940        ## the etag has changed so now she updates her in-memory document 
    50         self.get_resource('resource-lists') 
    51         self.assertStatus(200) 
    52         alice_etag = self.assertHeader('ETag') 
     41        r = self.get('resource-lists') 
     42        new_alice_etag = self.assertHeader(r, 'ETag') 
     43        self.assertEqual(bob_etag, new_alice_etag) 
    5344         
    54         self.put_resource('resource-lists', resource_list_xml, headers={'If-Match': alice_etag}) 
    55         self.assertStatus([200, 201]) 
     45        self.put('resource-lists', resource_list_xml, headers={'If-Match': new_alice_etag}) 
    5646 
    5747if __name__ == '__main__': 
  • xcap/test/test_nsbindings.py

    r199 r200  
    1919 
    2020    def test_ns_bindings(self): 
    21         self.put_resource('resource-lists', resource_list_xml) 
    22         self.assertStatus([200, 201]) 
    23  
    24         self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]/namespace::*') 
    25         self.assertStatus(200) 
    26         self.assertHeader('ETag') 
    27         self.assertHeader('Content-type', 'application/xcap-ns+xml') 
     21        self.put('resource-lists', resource_list_xml) 
     22        r = self.get('resource-lists', '/resource-lists/list[@name="friends"]/namespace::*') 
     23        self.assertHeader(r, 'ETag') 
     24        self.assertHeader(r, 'Content-type', 'application/xcap-ns+xml') 
    2825 
    2926if __name__ == '__main__': 
  • xcap/test/test_pidf.py

    r199 r200  
    2121 
    2222    def test_pidf_manipulation(self): 
    23         self.delete_resource('pidf-manipulation') 
    24         self.assertStatus([200, 404]) 
    25  
    26         self.get_resource('pidf-manipulation') 
    27         self.assertStatus(404) 
    28  
    29         self.put_resource('pidf-manipulation', pidf_xml) 
    30         self.assertStatus(201) 
    31  
    32         self.get_resource('pidf-manipulation') 
    33         self.assertStatus(200) 
    34         self.assertBody(pidf_xml) 
    35         self.assertHeader('Content-type', 'application/pidf+xml') 
    36  
    37         self.put_resource('pidf-manipulation', pidf_xml) 
    38         self.assertStatus(200) 
    39  
    40         self.delete_resource('pidf-manipulation') 
    41         self.assertStatus(200) 
    42  
    43         self.delete_resource('pidf-manipulation') 
    44         self.assertStatus(404) 
     23        self.getputdelete('pidf-manipulation', pidf_xml, 'application/pidf+xml') 
    4524 
    4625if __name__ == '__main__': 
  • xcap/test/test_presrules.py

    r199 r200  
    3232 
    3333    def test_pidf_manipulation(self): 
    34         self.delete_resource('pres-rules') 
    35         self.assertStatus([200, 404]) 
    36  
    37         self.put_resource('pres-rules', pres_rules_xml) 
    38         self.assertStatus(201) 
    39  
    40         self.get_resource('pres-rules') 
    41         self.assertStatus(200) 
    42         self.assertBody(pres_rules_xml) 
    43         self.assertHeader('Content-type', 'application/auth-policy+xml') 
     34        self.getputdelete('pres-rules', pres_rules_xml, 'application/auth-policy+xml') 
    4435 
    4536if __name__ == '__main__': 
  • xcap/test/test_resourcelists.py

    r199 r200  
    9999   
    100100    def test_operations(self): 
    101         self.getputdelete_successful('resource-lists', resource_lists_xml, 'application/resource-lists+xml')