Ejemplo n.º 1
0
    def test_embedded_document_field(self):
        i = Inner(a="hihi", b=123)
        d = ComplexDoc(i=i)
        d.save()
        response = self.client.get('/complexdoc')
        json_data = response.get_json()[config.ITEMS][0]
        self.assertDictEqual(json_data['i'], {'a':"hihi", 'b':123})
        d.delete()
        # POST request
        response = self.client.post('/complexdoc/',
                                    data='{"i": {"a": "xaxa", "b":-555}}',
                                    content_type='application/json')
        self.assertEqual(response.get_json()[config.STATUS], "OK")

        response = self.client.get('/complexdoc')
        json_data = response.get_json()[config.ITEMS][0]
        self.assertDictEqual(json_data['i'], {'a':"xaxa", 'b':-555})

        ComplexDoc.objects[0].delete()
        response = self.client.post('/complexdoc/',
                                    data='{"i": {"a": "bar", "b": "baz"}}',
                                    content_type='application/json')
        json_data = response.get_json()
        self.assertEqual(json_data[config.STATUS], "ERR")
        self.assertIn('i', json_data[config.ISSUES])
        self.assertIn('b', json_data[config.ISSUES]['i'])
        self.assertEqual(json_data[config.ISSUES]['i']['b'], 'must be of integer type')
Ejemplo n.º 2
0
    def test_patch_subresource(self):
        # create new resource and subresource
        s = SimpleDoc(a="Answer to everything", b=42).save()
        d = ComplexDoc(l=['a', 'b'], n=999, r=s).save()

        response = self.client.get('/simpledoc/%s/complexdoc/%s' % (s.id, d.id))
        etag = response.get_json()[config.ETAG]
        headers = [('If-Match', etag)]

        # patch document
        patch_data = {'l': ['x', 'y', 'z'], 'r': str(s.id)}
        patch_url = '/simpledoc/%s/complexdoc/%s' % (s.id, d.id)
        response = self.client.patch(patch_url, data=json.dumps(patch_data),
                                     content_type='application/json', headers=headers)
        self.assertEqual(response.status_code, 200)
        resp_json = response.get_json()
        self.assertEqual(resp_json[config.STATUS], "OK")

        # check, if really edited
        response = self.client.get('/simpledoc/%s/complexdoc/%s' % (s.id, d.id))
        json_data = response.get_json()
        self.assertListEqual(json_data['l'], ['x', 'y', 'z'])
        self.assertEqual(json_data['n'], 999)

        # cleanup
        s.delete()
        d.delete()
Ejemplo n.º 3
0
    def test_put_subresource(self):
        # create new resource and subresource
        s = SimpleDoc(a="Answer to everything", b=42).save()
        d = ComplexDoc(l=["a", "b"], n=999, r=s).save()

        response = self.client.get("/simpledoc/%s/complexdoc/%s" % (s.id, d.id))
        etag = response.get_json()[config.ETAG]
        headers = [("If-Match", etag)]

        # new putted document
        put_data = {"l": ["x", "y", "z"], "r": str(s.id)}
        put_url = "/simpledoc/%s/complexdoc/%s" % (s.id, d.id)
        response = self.client.put(
            put_url,
            data=json.dumps(put_data),
            content_type="application/json",
            headers=headers,
        )
        self.assertEqual(response.status_code, 200)
        resp_json = response.get_json()
        self.assertEqual(resp_json[config.STATUS], "OK")

        # check, if really edited
        response = self.client.get("/simpledoc/%s/complexdoc/%s" % (s.id, d.id))
        json_data = response.get_json()
        self.assertListEqual(json_data["l"], ["x", "y", "z"])
        self.assertNotIn("n", json_data)

        s.delete()
        d.delete()
Ejemplo n.º 4
0
    def test_put_subresource(self):
        # create new resource and subresource
        s = SimpleDoc(a="Answer to everything", b=42).save()
        d = ComplexDoc(l=['a', 'b'], n=999, r=s).save()

        response = self.client.get('/simpledoc/%s/complexdoc/%s' %
                                   (s.id, d.id))
        etag = response.get_json()[config.ETAG]
        headers = [('If-Match', etag)]

        # new putted document
        put_data = {'l': ['x', 'y', 'z'], 'r': str(s.id)}
        put_url = '/simpledoc/%s/complexdoc/%s' % (s.id, d.id)
        response = self.client.put(put_url,
                                   data=json.dumps(put_data),
                                   content_type='application/json',
                                   headers=headers)
        self.assertEqual(response.status_code, 200)
        resp_json = response.get_json()
        self.assertEqual(resp_json[config.STATUS], "OK")

        # check, if really edited
        response = self.client.get('/simpledoc/%s/complexdoc/%s' %
                                   (s.id, d.id))
        json_data = response.get_json()
        self.assertListEqual(json_data['l'], ['x', 'y', 'z'])
        self.assertNotIn('n', json_data)

        s.delete()
        d.delete()
Ejemplo n.º 5
0
 def test_dynamic_field(self):
     d = ComplexDoc(n=789)
     d.save()
     response = self.client.get('/complexdoc')
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertEqual(json_data['n'], 789)
     finally:
         # cleanup
         d.delete()
Ejemplo n.º 6
0
 def test_dict_field(self):
     d = ComplexDoc(d={'g':'good', 'h':'hoorai'})
     d.save()
     response = self.client.get('/complexdoc')
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertDictEqual(json_data['d'], {'g':'good', 'h':'hoorai'})
     finally:
         # cleanup
         d.delete()
Ejemplo n.º 7
0
 def test_etag_in_item_and_resource(self):
     # etag of some entity has to be the same when fetching one item compared
     # to etag of part of feed (resource)
     d = ComplexDoc().save()
     feed = self.client.get('/complexdoc/').get_json()
     item = self.client.get('/complexdoc/%s' % d.id).get_json()
     try:
         self.assertEqual(feed[config.ITEMS][0][config.ETAG], item[config.ETAG])
     finally:
         d.delete()
Ejemplo n.º 8
0
 def test_get_subresource(self):
     s = SimpleDoc(a="Answer to everything", b=42).save()
     d = ComplexDoc(l=['a', 'b'], r=s).save()
     d2 = ComplexDoc(l=['c', 'd'], r=s).save()
     response = self.client.get('/simpledoc/%s/complexdoc' % s.id)
     self.assertEqual(response.status_code, 200)
     json_data = response.get_json()
     self.assertEqual(len(json_data['_items']), 2)
     real = [x['l'] for x in json_data['_items']]
     self.assertEqual(real, [['a', 'b'], ['c', 'd']])
Ejemplo n.º 9
0
 def test_etag_in_item_and_resource(self):
     # etag of some entity has to be the same when fetching one item compared
     # to etag of part of feed (resource)
     d = ComplexDoc().save()
     feed = self.client.get('/complexdoc/').get_json()
     item = self.client.get('/complexdoc/%s' % d.id).get_json()
     try:
         self.assertEqual(feed[config.ITEMS][0][config.ETAG],
                          item[config.ETAG])
     finally:
         d.delete()
Ejemplo n.º 10
0
 def test_embedded_in_list(self):
     # that's a tuff one
     i1 = Inner(a="foo", b=789)
     i2 = Inner(a="baz", b=456)
     d = ComplexDoc(o=[i1, i2])
     d.save()
     response = self.client.get('/complexdoc')
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertListEqual(json_data['o'], [{'a':"foo", 'b':789},{'a':"baz", 'b':456}])
     finally:
         d.delete()
Ejemplo n.º 11
0
 def test_reference_field(self):
     s = SimpleDoc(a="samurai", b=911)
     s.save()
     d = ComplexDoc(r=s)
     d.save()
     response = self.client.get('/complexdoc')
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertEqual(json_data['r'], str(s.id))
     finally:
         # cleanup
         d.delete()
         s.delete()
Ejemplo n.º 12
0
 def wrapper(self):
     payload = '{"i": {"a": "hello"}, "d": {"x": null}, "l": ["m", "n"]}'
     response = self.client.post('/complexdoc/',
                                 data=payload,
                                 content_type='application/json')
     json_data = response.get_json()
     self.url = '/complexdoc/%s' % json_data[config.ID_FIELD]
     response = self.client.get(self.url).get_json()
     self.etag = response[config.ETAG]
     self._id = response[config.ID_FIELD]
     self.updated = response[config.LAST_UPDATED]
     f(self)
     ComplexDoc.objects().delete()
Ejemplo n.º 13
0
 def wrapper(self):
     payload = '{"i": {"a": "hello"}, "d": {"x": null}, "l": ["m", "n"]}'
     response = self.client.post('/complexdoc/',
                                 data=payload,
                                 content_type='application/json')
     json_data = response.get_json()
     self.url = '/complexdoc/%s' % json_data[config.ID_FIELD]
     response = self.client.get(self.url).get_json()
     self.etag = response[config.ETAG]
     self._id = response[config.ID_FIELD]
     self.updated = response[config.LAST_UPDATED]
     f(self)
     ComplexDoc.objects().delete()
Ejemplo n.º 14
0
 def test_embedded_resource_serialization(self):
     s = SimpleDoc(a="Answer to everything", b=42).save()
     d = ComplexDoc(r=s).save()
     response = self.client.get('/complexdoc?embedded={"r":1}')
     json_data = response.get_json()
     expected = {'a': "Answer to everything", 'b': 42}
     try:
         emb = json_data['_items'][0]['r']
         self.assertEqual(emb['a'], expected['a'])
         self.assertEqual(emb['b'], expected['b'])
         self.assertIn(config.DATE_CREATED, emb)
         self.assertIn(config.LAST_UPDATED, emb)
     finally:
         d.delete()
         s.delete()
Ejemplo n.º 15
0
 def test_embedded_resource_serialization(self):
     s = SimpleDoc(a="Answer to everything", b=42).save()
     d = ComplexDoc(r=s).save()
     response = self.client.get('/complexdoc?embedded={"r":1}')
     json_data = response.get_json()
     expected = {'a': "Answer to everything", 'b': 42}
     try:
         emb = json_data['_items'][0]['r']
         self.assertEqual(emb['a'], expected['a'])
         self.assertEqual(emb['b'], expected['b'])
         self.assertIn(config.DATE_CREATED, emb)
         self.assertIn(config.LAST_UPDATED, emb)
     finally:
         d.delete()
         s.delete()
Ejemplo n.º 16
0
    def test_delete_subresource(self):
        # more subresources -> delete them all
        s = SimpleDoc(a="James Bond", b=7).save()
        c1 = ComplexDoc(l=['p', 'q', 'r'], n=1, r=s).save()
        c2 = ComplexDoc(l=['s', 't', 'u'], n=2, r=s).save()

        # delete subresources
        del_url = '/simpledoc/%s/complexdoc' % s.id
        response = self.client.delete(del_url)
        self.assertEqual(response.status_code, 200)
        # check, if really deleted
        response = self.client.get('/simpledoc/%s/complexdoc' % s.id)
        json_data = response.get_json()
        self.assertEqual(json_data[config.ITEMS], [])
        # cleanup
        s.delete()
Ejemplo n.º 17
0
 def wrapper(self):
     payload = '{"i": {"a": "hello"}, "d": {"x": null}, "l": ["m", "n"], '+\
               '"o": [{"a":"hi"},{"b":9}], "p": [{"ll": ["q", "w"]}]}'
     response = self.client.post('/complexdoc/',
                                 data=payload,
                                 content_type='application/json')
     json_data = response.get_json()
     self._id = json_data[config.ID_FIELD]
     self.url = '/complexdoc/%s' % json_data[config.ID_FIELD]
     self.etag = json_data[config.ETAG]
     # check if etags are okay
     self.assertEqual(self.client.get(self.url).get_json()[config.ETAG], self.etag)
     #self._id = response[config.ID_FIELD]
     self.updated = json_data[config.LAST_UPDATED]
     try:
         f(self)
     finally:
         ComplexDoc.objects().delete()
Ejemplo n.º 18
0
 def wrapper(self):
     payload = '{"i": {"a": "hello"}, "d": {"x": null}, "l": ["m", "n"], '+\
               '"o": [{"a":"hi"},{"b":9}], "p": [{"ll": ["q", "w"]}]}'
     response = self.client.post('/complexdoc/',
                                 data=payload,
                                 content_type='application/json')
     json_data = response.get_json()
     self._id = json_data[config.ID_FIELD]
     self.url = '/complexdoc/%s' % json_data[config.ID_FIELD]
     self.etag = json_data[config.ETAG]
     # check if etags are okay
     self.assertEqual(
         self.client.get(self.url).get_json()[config.ETAG], self.etag)
     #self._id = response[config.ID_FIELD]
     self.updated = json_data[config.LAST_UPDATED]
     try:
         f(self)
     finally:
         ComplexDoc.objects().delete()
Ejemplo n.º 19
0
    def test_embedded_document_field(self):
        i = Inner(a="hihi", b=123)
        d = ComplexDoc(i=i)
        d.save()
        response = self.client.get("/complexdoc")
        json_data = response.get_json()[config.ITEMS][0]
        self.assertDictEqual(json_data["i"], {"a": "hihi", "b": 123})
        d.delete()
        # POST request
        response = self.client.post(
            "/complexdoc/",
            data='{"i": {"a": "xaxa", "b":-555}}',
            content_type="application/json",
        )
        self.assertEqual(response.get_json()[config.STATUS], "OK")

        response = self.client.get("/complexdoc")
        json_data = response.get_json()[config.ITEMS][0]
        self.assertDictEqual(json_data["i"], {"a": "xaxa", "b": -555})

        ComplexDoc.objects[0].delete()
        response = self.client.post(
            "/complexdoc/",
            data='{"i": {"a": "bar", "b": "baz"}}',
            content_type="application/json",
        )
        json_data = response.get_json()
        self.assertEqual(json_data[config.STATUS], "ERR")
        self.assertIn("i", json_data[config.ISSUES])
        self.assertIn("b", json_data[config.ISSUES]["i"])
        self.assertEqual(json_data[config.ISSUES]["i"]["b"],
                         "must be of integer type")
Ejemplo n.º 20
0
    def test_embedded_document_field(self):
        i = Inner(a="hihi", b=123)
        d = ComplexDoc(i=i)
        d.save()
        response = self.client.get('/complexdoc')
        json_data = response.get_json()[config.ITEMS][0]
        self.assertDictEqual(json_data['i'], {'a': "hihi", 'b': 123})
        d.delete()
        # POST request
        response = self.client.post('/complexdoc/',
                                    data='{"i": {"a": "xaxa", "b":-555}}',
                                    content_type='application/json')
        self.assertEqual(response.get_json()[config.STATUS], "OK")

        response = self.client.get('/complexdoc')
        json_data = response.get_json()[config.ITEMS][0]
        self.assertDictEqual(json_data['i'], {'a': "xaxa", 'b': -555})

        ComplexDoc.objects[0].delete()
        response = self.client.post('/complexdoc/',
                                    data='{"i": {"a": "bar", "b": "baz"}}',
                                    content_type='application/json')
        json_data = response.get_json()
        self.assertEqual(json_data[config.STATUS], "ERR")
        self.assertIn('i', json_data[config.ISSUES])
        self.assertIn('b', json_data[config.ISSUES]['i'])
        self.assertEqual(json_data[config.ISSUES]['i']['b'],
                         'must be of integer type')
Ejemplo n.º 21
0
 def test_dynamic_field(self):
     d = ComplexDoc(n=789)
     d.save()
     response = self.client.get('/complexdoc')
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertEqual(json_data['n'], 789)
     finally:
         # cleanup
         d.delete()
Ejemplo n.º 22
0
 def test_dict_field(self):
     d = ComplexDoc(d={'g': 'good', 'h': 'hoorai'})
     d.save()
     response = self.client.get('/complexdoc')
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertDictEqual(json_data['d'], {'g': 'good', 'h': 'hoorai'})
     finally:
         # cleanup
         d.delete()
Ejemplo n.º 23
0
 def test_dict_field(self):
     d = ComplexDoc(d={"g": "good", "h": "hoorai"})
     d.save()
     response = self.client.get("/complexdoc")
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertDictEqual(json_data["d"], {"g": "good", "h": "hoorai"})
     finally:
         # cleanup
         d.delete()
Ejemplo n.º 24
0
    def test_delete_subresource_item(self):
        # create new resource and subresource
        s = SimpleDoc(a="Answer to everything", b=42).save()
        d = ComplexDoc(l=['a', 'b'], n=999, r=s).save()

        response = self.client.get('/simpledoc/%s/complexdoc/%s' % (s.id, d.id))
        etag = response.get_json()[config.ETAG]
        headers = [('If-Match', etag)]

        # delete subresource
        del_url = '/simpledoc/%s/complexdoc/%s' % (s.id, d.id)
        response = self.client.delete(del_url, headers=headers)
        self.assertEqual(response.status_code, 204)
        # check, if really deleted
        response = self.client.get('/simpledoc/%s/complexdoc/%s' % (s.id, d.id))
        self.assertEqual(response.status_code, 404)
        s.delete()
Ejemplo n.º 25
0
 def test_reference_field(self):
     s = SimpleDoc(a="samurai", b=911)
     s.save()
     d = ComplexDoc(r=s)
     d.save()
     response = self.client.get('/complexdoc')
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertEqual(json_data['r'], str(s.id))
     finally:
         # cleanup
         d.delete()
         s.delete()
Ejemplo n.º 26
0
    def test_patch_subresource(self):
        # create new resource and subresource
        SimpleDoc.objects.delete()
        ComplexDoc.objects.delete()
        s = SimpleDoc(a="Answer to everything", b=42).save()
        d = ComplexDoc(l=["a", "b"], n=999, r=s).save()

        response = self.client.get("/simpledoc/%s/complexdoc/%s" %
                                   (s.id, d.id))
        etag = response.get_json()[config.ETAG]
        self.assertNotIn("_cls", list(response.json.keys()))
        headers = [("If-Match", etag)]

        # patch document
        patch_data = {"l": ["x", "y", "z"], "r": str(s.id)}
        patch_url = "/simpledoc/%s/complexdoc/%s" % (s.id, d.id)
        response = self.client.patch(
            patch_url,
            data=json.dumps(patch_data),
            content_type="application/json",
            headers=headers,
        )
        self.assertEqual(response.status_code, 200)
        resp_json = response.get_json()
        self.assertNotIn("_cls", list(response.json.keys()))
        self.assertEqual(resp_json[config.STATUS], "OK")

        # check, if really edited
        response = self.client.get("/simpledoc/%s/complexdoc/%s" %
                                   (s.id, d.id))
        json_data = response.get_json()
        self.assertListEqual(json_data["l"], ["x", "y", "z"])
        self.assertEqual(json_data["n"], 999)

        # cleanup
        headers = [("If-Match", json_data[config.ETAG])]
        response = self.client.delete("/complexdoc/%s" % d.id, headers=headers)
        assert response.status_code == 204
        self.assertEqual(ComplexDoc.objects.count(), 0)
        s.delete()
Ejemplo n.º 27
0
 def test_embedded_in_list(self):
     # that's a tuff one
     i1 = Inner(a="foo", b=789)
     i2 = Inner(a="baz", b=456)
     d = ComplexDoc(o=[i1, i2])
     d.save()
     response = self.client.get('/complexdoc')
     try:
         json_data = response.get_json()[config.ITEMS][0]
         self.assertListEqual(json_data['o'], [{
             'a': "foo",
             'b': 789
         }, {
             'a': "baz",
             'b': 456
         }])
     finally:
         d.delete()