def setUp(self): super(RestApiResourceTestCase, self).setUp() FModel.delete().execute() EModel.delete().execute() CModel.delete().execute() BModel.delete().execute() AModel.delete().execute()
def test_delete(self): self.create_test_models() resp = self.post_to('/api/cmodel/%s/delete/' % self.c2.id, {}) self.assertEqual(json.loads(resp.data.decode('utf8')), {'deleted': 1}) self.assertEqual(CModel.select().count(), 1) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) resp = self.post_to('/api/amodel/%s/delete/' % self.a1.id, {}) self.assertEqual(json.loads(resp.data.decode('utf8')), {'deleted': 1}) self.assertEqual(CModel.select().count(), 0) self.assertEqual(BModel.select().count(), 1) self.assertEqual(AModel.select().count(), 1) resp = self.post_to('/api/emodel/%s/delete/' % self.e1.id, {}) self.assertEqual(json.loads(resp.data.decode('utf8')), {'deleted': 1}) self.assertEqual(EModel.select().count(), 1) self.assertEqual(FModel.select().count(), 2) f_obj = FModel.get(id=self.f1.id) self.assertEqual(f_obj.e, None)
def test_delete(self): self.create_test_models() resp = self.post_to('/api/cmodel/%s/delete/' % self.c2.id, {}) self.assertEqual(json.loads(resp.data), {'deleted': 1}) self.assertEqual(CModel.select().count(), 1) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) resp = self.post_to('/api/amodel/%s/delete/' % self.a1.id, {}) self.assertEqual(json.loads(resp.data), {'deleted': 1}) self.assertEqual(CModel.select().count(), 0) self.assertEqual(BModel.select().count(), 1) self.assertEqual(AModel.select().count(), 1) resp = self.post_to('/api/emodel/%s/delete/' % self.e1.id, {}) self.assertEqual(json.loads(resp.data), {'deleted': 1}) self.assertEqual(EModel.select().count(), 1) self.assertEqual(FModel.select().count(), 2) f_obj = FModel.get(id=self.f1.id) self.assertEqual(f_obj.e, None)
def create_test_models(self): self.a1 = AModel.create(a_field='a1') self.a2 = AModel.create(a_field='a2') self.b1 = BModel.create(b_field='b1', a=self.a1) self.b2 = BModel.create(b_field='b2', a=self.a2) self.c1 = CModel.create(c_field='c1', b=self.b1) self.c2 = CModel.create(c_field='c2', b=self.b2) self.e1 = EModel.create(e_field='e1') self.e2 = EModel.create(e_field='e2') self.f1 = FModel.create(f_field='f1', e=self.e1) self.f2 = FModel.create(f_field='f2')
def setUp(self): super(AdminFilterTestCase, self).setUp() BDetails.drop_table(True) DModel.drop_table(True) CModel.drop_table(True) BModel.drop_table(True) AModel.drop_table(True) AModel.create_table() BModel.create_table() CModel.create_table() DModel.create_table() BDetails.create_table()
def create_models(self): for i in range(1, 4): a = AModel.create(a_field='a%d' % i) b = BModel.create(b_field='b%d' % i, a=a) c = CModel.create(c_field='c%d' % i, b=b) d = DModel.create(d_field='d%d' % i, c=c) if i % 2 == 0: bd = BDetails.create(b=b)
def setUp(self): super(RestApiResourceTestCase, self).setUp() db.create_tables([ AModel, BModel, BDetails, CModel, DModel, EModel, FModel, ]) FModel.delete().execute() EModel.delete().execute() DModel.delete().execute() CModel.delete().execute() BModel.delete().execute() BDetails.delete().execute() AModel.delete().execute()
def test_resource_edit_partial(self): self.create_test_models() # b model resp = self.post_to('/api/bmodel/%s/' % self.b2.id, {'b_field': 'b2-yyy'}) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) b_obj = BModel.get(id=self.b2.id) a_obj = AModel.get(id=self.a2.id) self.assertEqual(b_obj.a, a_obj) self.assertEqual( json.loads(resp.data), { 'id': b_obj.id, 'b_field': 'b2-yyy', 'a': { 'id': a_obj.id, 'a_field': 'a2', }, }) # f model resp = self.post_to('/api/fmodel/%s/' % self.f1.id, {'f_field': 'f1-zzz'}) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 2) self.assertEqual(EModel.select().count(), 2) f_obj = FModel.get(id=self.f1.id) e_obj = EModel.get(id=self.e1.id) self.assertEqual(f_obj.e, e_obj) self.assertEqual( json.loads(resp.data), { 'id': f_obj.id, 'f_field': 'f1-zzz', 'e': { 'id': e_obj.id, 'e_field': 'e1', }, })
def test_resource_edit_by_fk(self): self.create_test_models() # b model resp = self.post_to('/api/bmodel/%s/' % self.b2.id, {'a': self.a1.id}) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) b_obj = BModel.get(id=self.b2.id) a_obj = AModel.get(id=self.a1.id) self.assertEqual(b_obj.a, a_obj) self.assertEqual( json.loads(resp.data.decode('utf8')), { 'id': b_obj.id, 'b_field': 'b2', 'a': { 'id': a_obj.id, 'a_field': 'a1', }, }) # f model resp = self.post_to('/api/fmodel/%s/' % self.f2.id, {'e': self.e2.id}) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) f_obj = FModel.get(id=self.f2.id) e_obj = EModel.get(id=self.e2.id) self.assertEqual(f_obj.e, e_obj) self.assertEqual( json.loads(resp.data.decode('utf8')), { 'id': f_obj.id, 'f_field': 'f2', 'e': { 'id': e_obj.id, 'e_field': 'e2', }, })
def test_resource_edit_partial(self): self.create_test_models() # b model resp = self.post_to('/api/bmodel/%s/' % self.b2.id, {'b_field': 'b2-yyy'}) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) b_obj = BModel.get(id=self.b2.id) a_obj = AModel.get(id=self.a2.id) self.assertEqual(b_obj.a, a_obj) self.assertEqual(json.loads(resp.data), { 'id': b_obj.id, 'b_field': 'b2-yyy', 'a': { 'id': a_obj.id, 'a_field': 'a2', }, }) # f model resp = self.post_to('/api/fmodel/%s/' % self.f1.id, {'f_field': 'f1-zzz'}) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 2) self.assertEqual(EModel.select().count(), 2) f_obj = FModel.get(id=self.f1.id) e_obj = EModel.get(id=self.e1.id) self.assertEqual(f_obj.e, e_obj) self.assertEqual(json.loads(resp.data), { 'id': f_obj.id, 'f_field': 'f1-zzz', 'e': { 'id': e_obj.id, 'e_field': 'e1', }, })
def test_resource_edit_by_fk(self): self.create_test_models() # b model resp = self.post_to('/api/bmodel/%s/' % self.b2.id, {'a': self.a1.id}) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) b_obj = BModel.get(id=self.b2.id) a_obj = AModel.get(id=self.a1.id) self.assertEqual(b_obj.a, a_obj) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': b_obj.id, 'b_field': 'b2', 'a': { 'id': a_obj.id, 'a_field': 'a1', }, }) # f model resp = self.post_to('/api/fmodel/%s/' % self.f2.id, {'e': self.e2.id}) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) f_obj = FModel.get(id=self.f2.id) e_obj = EModel.get(id=self.e2.id) self.assertEqual(f_obj.e, e_obj) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': f_obj.id, 'f_field': 'f2', 'e': { 'id': e_obj.id, 'e_field': 'e2', }, })
def test_reverse_resources(self): self.create_test_models() CModel.delete().execute() # Test reverse resource serialization resp = self.app.get('/api/amodelv2') self.assertEqual(resp.get_json(), [ {'a_field': 'a1', 'bmodel_set': [{'a': 1, 'b_field': 'b1', 'c': None}], 'id': 1}, {'a_field': 'a2', 'bmodel_set': [{'a': 2, 'b_field': 'b2', 'c': None}], 'id': 2}, ]) # Test filter on reverse resources resp = self.app.get('/api/amodelv2?bmodel__b_field=b2') self.assertEqual(resp.get_json(), [ {'a_field': 'a2', 'bmodel_set': [{'a': 2, 'b_field': 'b2', 'c': None}], 'id': 2}, ]) # Test unique reverse resources self.c2 = CModel.create(c_field='c2', b=self.b2) resp = self.app.get('/api/bmodelv2?b_field=b2') self.assertEqual(resp.get_json(), [ {'a': 2, 'b_field': 'b2', 'c': {"c_field": "c2", "b": 2}}, ]) # Test empty reverse resources AModel.create(a_field='a3') resp = self.app.get('/api/amodelv2') resp_json = resp.get_json() self.assertEqual(resp_json[2]["bmodel_set"], []) # Test many to one reverse resources BModel.create(b_field='b11', a=self.a1) resp = self.app.get('/api/amodelv2') resp_json = resp.get_json() self.assertEqual(len(resp_json), 3) self.assertEqual(len(resp_json[0]["bmodel_set"]), 2)
def test_model_admin_recursive_delete(self): self.create_users() m1 = Message.create(user=self.normal, content='test1') m2 = Message.create(user=self.normal, content='test2') m3 = Message.create(user=self.admin, content='test3') n1 = Note.create(user=self.normal, message='test1') n2 = Note.create(user=self.normal, message='test2') n3 = Note.create(user=self.admin, message='test3') a1 = AModel.create(a_field='a1') a2 = AModel.create(a_field='a2') b1 = BModel.create(b_field='b1', a=a1) b2 = BModel.create(b_field='b2', a=a2) bd1= BDetails.create(b=b1) bd2= BDetails.create(b=b2) c1 = CModel.create(c_field='c1', b=b1) c2 = CModel.create(c_field='c2', b=b2) d1 = DModel.create(d_field='d1', c=c1) d2 = DModel.create(d_field='d2', c=c2) with self.flask_app.test_client() as c: self.login(c) resp = c.get('/admin/amodel/delete/?id=%d' % (a1.id)) self.assertEqual(resp.status_code, 200) collected = self.get_context('collected') self.assertEqual(collected, { a1.id: [ (1, BModel, 'a', [b1]), (2, BDetails, 'a', [bd1]), (2, CModel, 'a', [c1]), (3, DModel, 'a', [d1]), ] }) resp = c.post('/admin/amodel/delete/', data={'id': a1.id}) self.assertEqual(resp.status_code, 302) self.assertEqual(AModel.select().count(), 1) self.assertEqual(BModel.select().count(), 1) self.assertEqual(BDetails.select().count(), 1) self.assertEqual(CModel.select().count(), 1) self.assertEqual(DModel.select().count(), 1) # send it a single id resp = c.get('/admin/user/delete/?id=%d' % (self.normal.id)) self.assertEqual(resp.status_code, 200) query = self.get_context('query') self.assertEqual(list(query), [self.normal]) collected = self.get_context('collected') self.assertEqual(len(collected), 1) u_k = collected[self.normal.id] self.assertEqual(len(u_k), 2) self.assertEqual(u_k, [ (1, Message, 'user', [m1, m2]), (1, Note, 'user', [n1, n2]), ]) # post to it, get a redirect on success resp = c.post('/admin/user/delete/', data={'id': self.normal.id}) self.assertEqual(resp.status_code, 302) self.assertEqual(User.select().count(), 2) self.assertEqual(Message.select().count(), 1) self.assertEqual(Note.select().count(), 1) resp = c.get('/admin/user/delete/?id=%d&id=%d' % (self.admin.id, self.inactive.id)) self.assertEqual(resp.status_code, 200) collected = self.get_context('collected') self.assertEqual(len(collected), 2) u_k = collected[self.admin.id] self.assertEqual(len(u_k), 2) self.assertEqual(u_k, [ (1, Message, 'user', [m3]), (1, Note, 'user', [n3]), ]) u_k = collected[self.inactive.id] self.assertEqual(len(u_k), 0) # post to it, get a redirect on success resp = c.post('/admin/user/delete/', data={'id': [self.admin.id, self.inactive.id]}) self.assertEqual(resp.status_code, 302) self.assertEqual(User.select().count(), 0) self.assertEqual(Message.select().count(), 0) self.assertEqual(Note.select().count(), 0)
def test_resources_edit(self): self.create_test_models() # a resp = self.post_to('/api/amodel/%s/' % self.a2.id, {'a_field': 'a2-xxx'}) self.assertEqual(resp.status_code, 200) self.assertEqual(AModel.select().count(), 2) a_obj = AModel.get(id=self.a2.id) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': self.a2.id, 'a_field': 'a2-xxx', }) # b resp = self.post_to('/api/bmodel/%s/' % self.b2.id, {'b_field': 'b2-yyy', 'a': {'a_field': 'a2-yyy'}}) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) b_obj = BModel.get(id=self.b2.id) a_obj = AModel.get(id=self.a2.id) self.assertEqual(b_obj.a, a_obj) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': b_obj.id, 'b_field': 'b2-yyy', 'a': { 'id': a_obj.id, 'a_field': 'a2-yyy', }, }) # c resp = self.post_to('/api/cmodel/%s/' % self.c2.id, {'c_field': 'c2-zzz', 'b': {'b_field': 'b2-zzz', 'a': {'a_field': 'a2-zzz'}}}) self.assertEqual(resp.status_code, 200) self.assertEqual(CModel.select().count(), 2) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) c_obj = CModel.get(id=self.c2.id) b_obj = BModel.get(id=self.b2.id) a_obj = AModel.get(id=self.a2.id) self.assertEqual(c_obj.b, b_obj) self.assertEqual(b_obj.a, a_obj) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': c_obj.id, 'c_field': 'c2-zzz', 'b': { 'id': b_obj.id, 'b_field': 'b2-zzz', 'a': { 'id': a_obj.id, 'a_field': 'a2-zzz', }, }, }) # f resp = self.post_to('/api/fmodel/%s/' % self.f1.id, {'f_field': 'f1-yyy', 'e': {'e_field': 'e1-yyy'}}) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 2) self.assertEqual(EModel.select().count(), 2) f_obj = FModel.get(id=self.f1.id) e_obj = EModel.get(id=self.e1.id) self.assertEqual(f_obj.e, e_obj) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': f_obj.id, 'f_field': 'f1-yyy', 'e': { 'id': e_obj.id, 'e_field': 'e1-yyy', }, }) resp = self.post_to('/api/fmodel/%s/' % self.f2.id, {'f_field': 'f2-yyy'}) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 2) self.assertEqual(EModel.select().count(), 2) f_obj = FModel.get(id=self.f2.id) self.assertEqual(f_obj.e, None) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': f_obj.id, 'f_field': 'f2-yyy', 'e': None, })
def test_resources_create(self): # a model resp = self.post_to('/api/amodel/', {'a_field': 'ax'}) self.assertEqual(resp.status_code, 200) self.assertEqual(AModel.select().count(), 1) a_obj = AModel.get(a_field='ax') self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': a_obj.id, 'a_field': 'ax', }) # b model resp = self.post_to('/api/bmodel/', {'b_field': 'by', 'a': {'a_field': 'ay'}}) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 1) self.assertEqual(AModel.select().count(), 2) b_obj = BModel.get(b_field='by') a_obj = AModel.get(a_field='ay') self.assertEqual(b_obj.a, a_obj) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': b_obj.id, 'b_field': 'by', 'a': { 'id': a_obj.id, 'a_field': 'ay', }, }) # c model resp = self.post_to('/api/cmodel/', {'c_field': 'cz', 'b': {'b_field': 'bz', 'a': {'a_field': 'az'}}}) self.assertEqual(resp.status_code, 200) self.assertEqual(CModel.select().count(), 1) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 3) c_obj = CModel.get(c_field='cz') b_obj = BModel.get(b_field='bz') a_obj = AModel.get(a_field='az') self.assertEqual(c_obj.b, b_obj) self.assertEqual(b_obj.a, a_obj) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': c_obj.id, 'c_field': 'cz', 'b': { 'id': b_obj.id, 'b_field': 'bz', 'a': { 'id': a_obj.id, 'a_field': 'az', }, }, }) # f model resp = self.post_to('/api/fmodel/', {'f_field': 'fy', 'e': {'e_field': 'ey'}}) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 1) self.assertEqual(EModel.select().count(), 1) f_obj = FModel.get(f_field='fy') e_obj = EModel.get(e_field='ey') self.assertEqual(f_obj.e, e_obj) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': f_obj.id, 'f_field': 'fy', 'e': { 'id': e_obj.id, 'e_field': 'ey', }, }) resp = self.post_to('/api/fmodel/', {'f_field': 'fz'}) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 2) self.assertEqual(EModel.select().count(), 1) f_obj = FModel.get(f_field='fz') self.assertEqual(f_obj.e, None) self.assertEqual(json.loads(resp.data.decode('utf8')), { 'id': f_obj.id, 'f_field': 'fz', 'e': None, })
def test_resources_create(self): # a model resp = self.post_to('/api/amodel/', {'a_field': 'ax'}) self.assertEqual(resp.status_code, 200) self.assertEqual(AModel.select().count(), 1) a_obj = AModel.get(a_field='ax') self.assertEqual(json.loads(resp.data), { 'id': a_obj.id, 'a_field': 'ax', }) # b model resp = self.post_to('/api/bmodel/', { 'b_field': 'by', 'a': { 'a_field': 'ay' } }) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 1) self.assertEqual(AModel.select().count(), 2) b_obj = BModel.get(b_field='by') a_obj = AModel.get(a_field='ay') self.assertEqual(b_obj.a, a_obj) self.assertEqual( json.loads(resp.data), { 'id': b_obj.id, 'b_field': 'by', 'a': { 'id': a_obj.id, 'a_field': 'ay', }, }) # c model resp = self.post_to('/api/cmodel/', { 'c_field': 'cz', 'b': { 'b_field': 'bz', 'a': { 'a_field': 'az' } } }) self.assertEqual(resp.status_code, 200) self.assertEqual(CModel.select().count(), 1) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 3) c_obj = CModel.get(c_field='cz') b_obj = BModel.get(b_field='bz') a_obj = AModel.get(a_field='az') self.assertEqual(c_obj.b, b_obj) self.assertEqual(b_obj.a, a_obj) self.assertEqual( json.loads(resp.data), { 'id': c_obj.id, 'c_field': 'cz', 'b': { 'id': b_obj.id, 'b_field': 'bz', 'a': { 'id': a_obj.id, 'a_field': 'az', }, }, }) # f model resp = self.post_to('/api/fmodel/', { 'f_field': 'fy', 'e': { 'e_field': 'ey' } }) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 1) self.assertEqual(EModel.select().count(), 1) f_obj = FModel.get(f_field='fy') e_obj = EModel.get(e_field='ey') self.assertEqual(f_obj.e, e_obj) self.assertEqual( json.loads(resp.data), { 'id': f_obj.id, 'f_field': 'fy', 'e': { 'id': e_obj.id, 'e_field': 'ey', }, }) resp = self.post_to('/api/fmodel/', {'f_field': 'fz'}) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 2) self.assertEqual(EModel.select().count(), 1) f_obj = FModel.get(f_field='fz') self.assertEqual(f_obj.e, None) self.assertEqual(json.loads(resp.data), { 'id': f_obj.id, 'f_field': 'fz', 'e': None, })
def test_resources_edit(self): self.create_test_models() # a resp = self.post_to('/api/amodel/%s/' % self.a2.id, {'a_field': 'a2-xxx'}) self.assertEqual(resp.status_code, 200) self.assertEqual(AModel.select().count(), 2) a_obj = AModel.get(id=self.a2.id) self.assertEqual(json.loads(resp.data), { 'id': self.a2.id, 'a_field': 'a2-xxx', }) # b resp = self.post_to('/api/bmodel/%s/' % self.b2.id, { 'b_field': 'b2-yyy', 'a': { 'a_field': 'a2-yyy' } }) self.assertEqual(resp.status_code, 200) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) b_obj = BModel.get(id=self.b2.id) a_obj = AModel.get(id=self.a2.id) self.assertEqual(b_obj.a, a_obj) self.assertEqual( json.loads(resp.data), { 'id': b_obj.id, 'b_field': 'b2-yyy', 'a': { 'id': a_obj.id, 'a_field': 'a2-yyy', }, }) # c resp = self.post_to( '/api/cmodel/%s/' % self.c2.id, { 'c_field': 'c2-zzz', 'b': { 'b_field': 'b2-zzz', 'a': { 'a_field': 'a2-zzz' } } }) self.assertEqual(resp.status_code, 200) self.assertEqual(CModel.select().count(), 2) self.assertEqual(BModel.select().count(), 2) self.assertEqual(AModel.select().count(), 2) c_obj = CModel.get(id=self.c2.id) b_obj = BModel.get(id=self.b2.id) a_obj = AModel.get(id=self.a2.id) self.assertEqual(c_obj.b, b_obj) self.assertEqual(b_obj.a, a_obj) self.assertEqual( json.loads(resp.data), { 'id': c_obj.id, 'c_field': 'c2-zzz', 'b': { 'id': b_obj.id, 'b_field': 'b2-zzz', 'a': { 'id': a_obj.id, 'a_field': 'a2-zzz', }, }, }) # f resp = self.post_to('/api/fmodel/%s/' % self.f1.id, { 'f_field': 'f1-yyy', 'e': { 'e_field': 'e1-yyy' } }) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 2) self.assertEqual(EModel.select().count(), 2) f_obj = FModel.get(id=self.f1.id) e_obj = EModel.get(id=self.e1.id) self.assertEqual(f_obj.e, e_obj) self.assertEqual( json.loads(resp.data), { 'id': f_obj.id, 'f_field': 'f1-yyy', 'e': { 'id': e_obj.id, 'e_field': 'e1-yyy', }, }) resp = self.post_to('/api/fmodel/%s/' % self.f2.id, {'f_field': 'f2-yyy'}) self.assertEqual(resp.status_code, 200) self.assertEqual(FModel.select().count(), 2) self.assertEqual(EModel.select().count(), 2) f_obj = FModel.get(id=self.f2.id) self.assertEqual(f_obj.e, None) self.assertEqual(json.loads(resp.data), { 'id': f_obj.id, 'f_field': 'f2-yyy', 'e': None, })