Advertisement
Guest User

testy

a guest
Aug 3rd, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.41 KB | None | 0 0
  1. import datetime
  2. import random
  3.  
  4. from django.db.models import Min, Max, Sum
  5. from django.test import TestCase
  6. import json
  7.  
  8. from core.models import SupremeUser, Location, Store, ProcessedDailyVisits, GeoLocation, Category, Brand, VisitsSummary
  9. from core.serializers import StoreSerializer
  10. from django.utils import timezone
  11. from rest_framework.request import Request
  12. from rest_framework.test import APIRequestFactory, force_authenticate
  13.  
  14. WAIT_TIME = 10
  15. STATUS_CODE_OK = 200
  16.  
  17.  
  18. class CoreTest(TestCase):
  19.  
  20. def setUp(self):
  21. print("SET UP")
  22. u = SupremeUser.objects.create_superuser(username='test', email="hehe@xD.co", password='test')
  23. u.save()
  24. self.client.force_login(u)
  25. factory = APIRequestFactory()
  26. request = factory.get('/api/token-auth')
  27.  
  28. response = self.client.post('/api/token-auth/', {
  29. "username": "test",
  30. "password": "test"
  31. })
  32. self.assertEquals(response.status_code, 200)
  33. force_authenticate(request, user=u, token=response.data["token"])
  34.  
  35. def add_geo_locations(self):
  36. g1 = GeoLocation.objects.create(region="reg1", country="c1")
  37. g1.save()
  38. g2 = GeoLocation.objects.create(region="reg2", country="c2")
  39. g2.save()
  40.  
  41. g_data_from_api = self.client.get('/api/geo_locations/')
  42. self.assertEquals(g_data_from_api.status_code, 200)
  43. # print("Created two simple geo_locations and saved to database")
  44. correct_data_num = 0
  45. for g_data in g_data_from_api.data:
  46. numReg = 0
  47. numCountry = 0
  48. for key, value in g_data.items():
  49. if str(key) == "region":
  50. if str(value) == "reg1":
  51. numReg = 1
  52. elif str(value) == "reg2":
  53. numReg = 2
  54. if str(key) == "country":
  55. if str(value) == "c1":
  56. numCountry = 1
  57. elif str(value) == "c2":
  58. numCountry = 2
  59. self.assertEquals(numReg, numCountry)
  60. if (numReg == numCountry) and (numReg != 0):
  61. correct_data_num += 1
  62. self.assertEquals(correct_data_num, 2)
  63. # print("Checked correction of insertion geo_locations to database -> OK")
  64.  
  65. def add_locations(self):
  66. # g_data_from_api = self.client.get('/api/geo_locations/')
  67. # geo_locations_urls = []
  68. # for g_data in g_data_from_api.data:
  69. # for key, value in g_data.items():
  70. # if str(key) == "url":
  71. # geo_locations_urls.append(str(value))
  72. # print("Geo Locations URLs : ")
  73. # print(geo_locations_urls)
  74. g = GeoLocation.objects.all()
  75. self.assertEquals(len(g), 2)
  76. l1 = Location.objects.create(name="loc1", geo_location=g[0])
  77. l1.save()
  78. l2 = Location.objects.create(name="loc2", geo_location=g[1])
  79. l2.save()
  80.  
  81. l_data_from_api = self.client.get('/api/locations/')
  82. self.assertEquals(l_data_from_api.status_code, 200)
  83. # print("Created two simple locations with previous geo_locations data")
  84. correct_data_num = 0
  85. for l_data in l_data_from_api.data:
  86. numLoc = 0
  87. numGeoLoc = 0
  88. for key, value in l_data.items():
  89. if str(key) == "name":
  90. if str(value) == "loc1":
  91. numLoc = 1
  92. elif str(value) == "loc2":
  93. numLoc = 2
  94. if str(key) == "geo_location":
  95. # print("GEO LOCATION")
  96. # print(value)
  97. for key2, value2 in value.items():
  98. # print("key2 = " + str(key2))
  99. # print("value2 = " + str(value2))
  100. if str(key2) == "region":
  101. # print("region = " + str(value2) + ", gdy loc = " + str(numLoc))
  102. for i in range(1, 3):
  103. if str(value2) == "reg1":
  104. numGeoLoc = 1
  105. elif str(value2) == "reg2":
  106. numGeoLoc = 2
  107. self.assertEquals(numLoc, numGeoLoc)
  108. if numLoc == numGeoLoc and numLoc != 0:
  109. correct_data_num += 1
  110. # print("I see there is " + str(correct_data_num) + " correct data in database (should be 2)")
  111. self.assertEquals(correct_data_num, 2)
  112.  
  113. def add_categories(self):
  114. for i in range(20):
  115. active = False
  116. if i % 2 == 0:
  117. active = True
  118. cat = Category.objects.create(name="cat" + str(i), active=active)
  119. cat.save()
  120.  
  121. def add_brands(self):
  122. for i in range(10):
  123. active = False
  124. if i % 2 == 0:
  125. active = True
  126. b = Brand.objects.create(name="brand" + str(i), active=active)
  127. b.save()
  128.  
  129. def add_stores(self):
  130. brand = Brand.objects.all()
  131. locations = Location.objects.all()
  132. categories = Category.objects.all()
  133. # print("Len locations to ")
  134. # print(len(locations))
  135. # print(locations[0])
  136. # print(locations[1])
  137. for i in range(2):
  138. cat_set = set()
  139. for j in range(random.randint(0, len(categories))):
  140. randnum = random.randint(0, len(categories) - 1)
  141. cat_set.add(categories[randnum])
  142. # print("i = " + str(i))
  143. s = Store.objects.create(
  144. type="type" + str(i),
  145. name="name" + str(i),
  146. floor=i,
  147. brand=brand[i],
  148. created_by="misio" + str(i),
  149. updated_by="nobody" + str(i),
  150. location=locations[i],
  151. )
  152. s.categories.set(cat_set)
  153. s.save()
  154.  
  155. def add_processedDailyVisits(self):
  156. stores = Store.objects.all()
  157. for i in range(2):
  158. for days_num in range(20):
  159. pdv = ProcessedDailyVisits.objects.create(
  160. day=datetime.datetime.now() - datetime.timedelta(days=days_num),
  161. n_unique_customers=random.randint(1, 100),
  162. store_id=stores[i]
  163. )
  164. pdv.save()
  165.  
  166. def add_visitsSummary(self):
  167. stores = Store.objects.all()
  168. x = 0
  169. now = datetime.datetime.now()
  170. yesterday = now - datetime.timedelta(days=1)
  171. delta_30 = datetime.timedelta(days=30)
  172. delta_7 = datetime.timedelta(days=7)
  173. start_30 = now - delta_30
  174. start_7 = now - delta_7
  175. # print("yesterday : " + str(yesterday))
  176. # print("start_7 : " + str(start_7))
  177. for store in stores:
  178. vs = VisitsSummary.objects.get_or_create(store=store)
  179. new = vs[1]
  180. vs = vs[0] # above returns pair (object, bool_if_created)
  181. if new:
  182. vs.created_time = timezone.now()
  183.  
  184. delta = None
  185. delta_qs = store.processeddailyvisits_set.all().order_by('-day')
  186. if len(delta_qs) >= 3 and delta_qs[2].n_unique_customers > 0:
  187. delta = (delta_qs[1].n_unique_customers / delta_qs[2].n_unique_customers) - 1
  188. delta *= 100
  189.  
  190. filtered_visits = store.processeddailyvisits_set.all().filter(day__gte=start_30, day__lte=yesterday)
  191. days = len(filtered_visits)
  192. min_daily_visits = filtered_visits.aggregate(Min('n_unique_customers'))
  193. max_daily_visits = filtered_visits.aggregate(Max('n_unique_customers'))
  194. total_visits = filtered_visits.aggregate(Sum('n_unique_customers'))
  195. if days > 0:
  196. vs.average_visits_last_30_days = int(total_visits['n_unique_customers__sum'] / days)
  197. vs.total_visits_last_30_days = total_visits['n_unique_customers__sum']
  198. vs.min_daily_visits_last_30_days = min_daily_visits['n_unique_customers__min']
  199. vs.max_daily_visits_last_30_days = max_daily_visits['n_unique_customers__max']
  200. vs.active_last_30_days = days
  201.  
  202. filtered_visits = store.processeddailyvisits_set.all().filter(day__gte=start_7, day__lte=yesterday)
  203. days = len(filtered_visits)
  204. min_daily_visits = filtered_visits.aggregate(Min('n_unique_customers'))
  205. max_daily_visits = filtered_visits.aggregate(Max('n_unique_customers'))
  206. total_visits = filtered_visits.aggregate(Sum('n_unique_customers'))
  207. if days > 0:
  208. vs.average_visits_last_7_days = int(total_visits['n_unique_customers__sum'] / days)
  209. vs.total_visits_last_7_days = total_visits['n_unique_customers__sum']
  210. vs.min_daily_visits_last_7_days = min_daily_visits['n_unique_customers__min']
  211. vs.max_daily_visits_last_7_days = max_daily_visits['n_unique_customers__max']
  212. vs.active_last_7_days = days
  213.  
  214. vs.updated_time = timezone.now()
  215. vs.delta = delta
  216. vs.save()
  217. store.visits_summary = vs
  218. store.save()
  219. x += 1
  220.  
  221. def add_stores_to_user(self):
  222. stores = Store.objects.all()
  223. user = SupremeUser.objects.filter(username="test")[0]
  224. for store in stores:
  225. user.stores.add(store)
  226.  
  227. def add_everything_needed(self):
  228. self.add_geo_locations()
  229. self.add_locations()
  230. self.add_categories()
  231. self.add_brands()
  232. self.add_stores()
  233. self.add_processedDailyVisits()
  234. self.add_visitsSummary()
  235. self.add_stores_to_user()
  236.  
  237. def test_1(self):
  238. self.add_everything_needed()
  239. user = SupremeUser.objects.filter(username="test")[0]
  240. # print(user.stores.all())
  241. self.assertEquals(len(user.stores.all()), 2)
  242.  
  243. def test_2(self):
  244. self.add_everything_needed()
  245. response = self.client.get('/api/users/')
  246. self.assertEquals(response.status_code, 200)
  247. # print(response.status_code)
  248. # print(response.data)
  249. username = ""
  250. stores_number = 0
  251. ok_data = 0
  252. for data in response.data:
  253. for key, value in data.items():
  254. if key == "username":
  255. username = value
  256. if key == "stores":
  257. stores_number = len(value)
  258. # print("username = " + username)
  259. # print("stores num = " + str(stores_number))
  260. if (username == "AnonymousUser" and stores_number == 0) or (username == "test" and stores_number == 2):
  261. ok_data += 1
  262. self.assertEquals(ok_data, 2)
  263.  
  264. def test_3(self):
  265. self.add_everything_needed()
  266. response = self.client.get('/api/users/recent_stats/?days=7')
  267. # print(response.status_code)
  268. # print(response.data)
  269. user = SupremeUser.objects.filter(username="test")[0]
  270. total = 0
  271. for store in user.stores.all():
  272. # print("Store vs :")
  273. # print(store.visits_summary.total_visits_last_7_days)
  274. total += store.visits_summary.total_visits_last_7_days
  275.  
  276. # print("total")
  277. # print(total)
  278. self.assertEquals(total, response.data['total_number_of_visits'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement