2 from django.test import TestCase
3 from core.models import *
4 from rest_framework.test import *
7 from datetime import datetime
9 FIXTURES_FILE = 'core/fixtures/initial_data.json'
10 MODELS = ['Deployment','Image','Node','Reservation','Slice','Sliver','User']
12 def is_dynamic_type(x):
14 return t in [datetime]
16 class APITestCase(TestCase):
18 self.init_data=json.loads(open(FIXTURES_FILE).read())
22 for d in self.init_data:
23 model_tag = d['model']
24 model_name = model_tag.split('.')[1]
27 self.data_dict[model_name].append(d)
29 self.data_dict[model_name]=[d]
31 # Any admin user would do
32 self.calling_user = User('sapan@onlab.us')
33 self.client = APIClient()
34 self.client.force_authenticate(user=self.calling_user)
37 def check_items(self, response, data_list):
45 item = rdict['%d'%d['pk']]
47 print 'API missing item %d / %r'%(d['pk'],rdict.keys())
57 if (not self.hidden_keys.has_key(k)):
58 print 'Hidden key %s'%k
59 self.hidden_keys[k]=True
63 if (item[k]!=resp_val and not is_dynamic_type(item[k])):
64 if (type(resp_val)==type(item[k])):
65 print 'Key %s did not match: 1. %r 2. %r'%(k,item[k],resp_val)
71 def create(self, model, mplural, record):
72 request = self.client.put('/plstackapi/%s/'%mplural,record['fields'])
75 # raise Exception('Could not delete %s/%d'%(model,pk))
79 def update(self, model, mplural, pk):
80 src_record = self.data_dict[model.lower()][0]
81 record_to_update = src_record['fields']
83 record_to_update['enacted']=now
84 response = self.client.put('/plstackapi/%s/%d/'%(mplural,pk),record_to_update)
85 self.assertEqual(response.data['enacted'],now)
89 def delete(self, model, mplural, pk):
90 mclass = globals()[model]
91 len1 = len(mclass.objects.all())
92 response = self.client.delete('/plstackapi/%s/%d/'%(mplural,pk))
93 len2 = len(mclass.objects.all())
94 self.assertNotEqual(len1,len2)
98 def retrieve(self, m, mplural, mlower):
99 response = self.client.get('/plstackapi/%s/'%mplural)
100 #force_authenticate(request,user=self.calling_user)
101 self.check_items(response.data,self.data_dict[mlower])
105 def test_initial_retrieve(self):
107 print 'Checking retrieve on %s...'%m
108 self.retrieve(m, m.lower()+'s',m.lower())
111 def test_update(self):
113 print 'Checking update on %s...'%m
114 first = self.data_dict[m.lower()][0]['pk']
115 self.update(m, m.lower()+'s',int(first))
117 def test_delete(self):
119 print 'Checking delete on %s...'%m
120 first = self.data_dict[m.lower()][0]['pk']
121 self.delete(m, m.lower()+'s',int(first))
123 def test_create(self):
125 print 'Checking create on %s...'%m
126 first = self.data_dict[m.lower()][0]
127 self.create(m, m.lower()+'s',first)