test_api.py 86 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160
  1. from __future__ import unicode_literals
  2. from rest_framework import status
  3. from rest_framework.test import APITestCase
  4. from django.contrib.auth.models import User
  5. from django.urls import reverse
  6. from dcim.models import (
  7. ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
  8. DeviceBayTemplate, DeviceRole, DeviceType, IFACE_FF_LAG, Interface, InterfaceConnection, InterfaceTemplate,
  9. Manufacturer, InventoryItem, Platform, PowerPort, PowerPortTemplate, PowerOutlet, PowerOutletTemplate, Rack, RackGroup,
  10. RackReservation, RackRole, Region, Site, SUBDEVICE_ROLE_CHILD, SUBDEVICE_ROLE_PARENT,
  11. )
  12. from extras.models import Graph, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
  13. from users.models import Token
  14. from utilities.tests import HttpStatusMixin
  15. class RegionTest(HttpStatusMixin, APITestCase):
  16. def setUp(self):
  17. user = User.objects.create(username='testuser', is_superuser=True)
  18. token = Token.objects.create(user=user)
  19. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  20. self.region1 = Region.objects.create(name='Test Region 1', slug='test-region-1')
  21. self.region2 = Region.objects.create(name='Test Region 2', slug='test-region-2')
  22. self.region3 = Region.objects.create(name='Test Region 3', slug='test-region-3')
  23. def test_get_region(self):
  24. url = reverse('dcim-api:region-detail', kwargs={'pk': self.region1.pk})
  25. response = self.client.get(url, **self.header)
  26. self.assertEqual(response.data['name'], self.region1.name)
  27. def test_list_regions(self):
  28. url = reverse('dcim-api:region-list')
  29. response = self.client.get(url, **self.header)
  30. self.assertEqual(response.data['count'], 3)
  31. def test_create_region(self):
  32. data = {
  33. 'name': 'Test Region 4',
  34. 'slug': 'test-region-4',
  35. }
  36. url = reverse('dcim-api:region-list')
  37. response = self.client.post(url, data, **self.header)
  38. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  39. self.assertEqual(Region.objects.count(), 4)
  40. region4 = Region.objects.get(pk=response.data['id'])
  41. self.assertEqual(region4.name, data['name'])
  42. self.assertEqual(region4.slug, data['slug'])
  43. def test_update_region(self):
  44. data = {
  45. 'name': 'Test Region X',
  46. 'slug': 'test-region-x',
  47. }
  48. url = reverse('dcim-api:region-detail', kwargs={'pk': self.region1.pk})
  49. response = self.client.put(url, data, **self.header)
  50. self.assertHttpStatus(response, status.HTTP_200_OK)
  51. self.assertEqual(Region.objects.count(), 3)
  52. region1 = Region.objects.get(pk=response.data['id'])
  53. self.assertEqual(region1.name, data['name'])
  54. self.assertEqual(region1.slug, data['slug'])
  55. def test_delete_region(self):
  56. url = reverse('dcim-api:region-detail', kwargs={'pk': self.region1.pk})
  57. response = self.client.delete(url, **self.header)
  58. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  59. self.assertEqual(Region.objects.count(), 2)
  60. class SiteTest(HttpStatusMixin, APITestCase):
  61. def setUp(self):
  62. user = User.objects.create(username='testuser', is_superuser=True)
  63. token = Token.objects.create(user=user)
  64. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  65. self.region1 = Region.objects.create(name='Test Region 1', slug='test-region-1')
  66. self.region2 = Region.objects.create(name='Test Region 2', slug='test-region-2')
  67. self.site1 = Site.objects.create(region=self.region1, name='Test Site 1', slug='test-site-1')
  68. self.site2 = Site.objects.create(region=self.region1, name='Test Site 2', slug='test-site-2')
  69. self.site3 = Site.objects.create(region=self.region1, name='Test Site 3', slug='test-site-3')
  70. def test_get_site(self):
  71. url = reverse('dcim-api:site-detail', kwargs={'pk': self.site1.pk})
  72. response = self.client.get(url, **self.header)
  73. self.assertEqual(response.data['name'], self.site1.name)
  74. def test_get_site_graphs(self):
  75. self.graph1 = Graph.objects.create(
  76. type=GRAPH_TYPE_SITE, name='Test Graph 1',
  77. source='http://example.com/graphs.py?site={{ obj.slug }}&foo=1'
  78. )
  79. self.graph2 = Graph.objects.create(
  80. type=GRAPH_TYPE_SITE, name='Test Graph 2',
  81. source='http://example.com/graphs.py?site={{ obj.slug }}&foo=2'
  82. )
  83. self.graph3 = Graph.objects.create(
  84. type=GRAPH_TYPE_SITE, name='Test Graph 3',
  85. source='http://example.com/graphs.py?site={{ obj.slug }}&foo=3'
  86. )
  87. url = reverse('dcim-api:site-graphs', kwargs={'pk': self.site1.pk})
  88. response = self.client.get(url, **self.header)
  89. self.assertEqual(len(response.data), 3)
  90. self.assertEqual(response.data[0]['embed_url'], 'http://example.com/graphs.py?site=test-site-1&foo=1')
  91. def test_list_sites(self):
  92. url = reverse('dcim-api:site-list')
  93. response = self.client.get(url, **self.header)
  94. self.assertEqual(response.data['count'], 3)
  95. def test_create_site(self):
  96. data = {
  97. 'name': 'Test Site 4',
  98. 'slug': 'test-site-4',
  99. 'region': self.region1.pk,
  100. }
  101. url = reverse('dcim-api:site-list')
  102. response = self.client.post(url, data, **self.header)
  103. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  104. self.assertEqual(Site.objects.count(), 4)
  105. site4 = Site.objects.get(pk=response.data['id'])
  106. self.assertEqual(site4.name, data['name'])
  107. self.assertEqual(site4.slug, data['slug'])
  108. self.assertEqual(site4.region_id, data['region'])
  109. def test_update_site(self):
  110. data = {
  111. 'name': 'Test Site X',
  112. 'slug': 'test-site-x',
  113. 'region': self.region2.pk,
  114. }
  115. url = reverse('dcim-api:site-detail', kwargs={'pk': self.site1.pk})
  116. response = self.client.put(url, data, **self.header)
  117. self.assertHttpStatus(response, status.HTTP_200_OK)
  118. self.assertEqual(Site.objects.count(), 3)
  119. site1 = Site.objects.get(pk=response.data['id'])
  120. self.assertEqual(site1.name, data['name'])
  121. self.assertEqual(site1.slug, data['slug'])
  122. self.assertEqual(site1.region_id, data['region'])
  123. def test_delete_site(self):
  124. url = reverse('dcim-api:site-detail', kwargs={'pk': self.site1.pk})
  125. response = self.client.delete(url, **self.header)
  126. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  127. self.assertEqual(Site.objects.count(), 2)
  128. class RackGroupTest(HttpStatusMixin, APITestCase):
  129. def setUp(self):
  130. user = User.objects.create(username='testuser', is_superuser=True)
  131. token = Token.objects.create(user=user)
  132. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  133. self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1')
  134. self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
  135. self.rackgroup1 = RackGroup.objects.create(site=self.site1, name='Test Rack Group 1', slug='test-rack-group-1')
  136. self.rackgroup2 = RackGroup.objects.create(site=self.site1, name='Test Rack Group 2', slug='test-rack-group-2')
  137. self.rackgroup3 = RackGroup.objects.create(site=self.site1, name='Test Rack Group 3', slug='test-rack-group-3')
  138. def test_get_rackgroup(self):
  139. url = reverse('dcim-api:rackgroup-detail', kwargs={'pk': self.rackgroup1.pk})
  140. response = self.client.get(url, **self.header)
  141. self.assertEqual(response.data['name'], self.rackgroup1.name)
  142. def test_list_rackgroups(self):
  143. url = reverse('dcim-api:rackgroup-list')
  144. response = self.client.get(url, **self.header)
  145. self.assertEqual(response.data['count'], 3)
  146. def test_create_rackgroup(self):
  147. data = {
  148. 'name': 'Test Rack Group 4',
  149. 'slug': 'test-rack-group-4',
  150. 'site': self.site1.pk,
  151. }
  152. url = reverse('dcim-api:rackgroup-list')
  153. response = self.client.post(url, data, **self.header)
  154. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  155. self.assertEqual(RackGroup.objects.count(), 4)
  156. rackgroup4 = RackGroup.objects.get(pk=response.data['id'])
  157. self.assertEqual(rackgroup4.name, data['name'])
  158. self.assertEqual(rackgroup4.slug, data['slug'])
  159. self.assertEqual(rackgroup4.site_id, data['site'])
  160. def test_update_rackgroup(self):
  161. data = {
  162. 'name': 'Test Rack Group X',
  163. 'slug': 'test-rack-group-x',
  164. 'site': self.site2.pk,
  165. }
  166. url = reverse('dcim-api:rackgroup-detail', kwargs={'pk': self.rackgroup1.pk})
  167. response = self.client.put(url, data, **self.header)
  168. self.assertHttpStatus(response, status.HTTP_200_OK)
  169. self.assertEqual(RackGroup.objects.count(), 3)
  170. rackgroup1 = RackGroup.objects.get(pk=response.data['id'])
  171. self.assertEqual(rackgroup1.name, data['name'])
  172. self.assertEqual(rackgroup1.slug, data['slug'])
  173. self.assertEqual(rackgroup1.site_id, data['site'])
  174. def test_delete_rackgroup(self):
  175. url = reverse('dcim-api:rackgroup-detail', kwargs={'pk': self.rackgroup1.pk})
  176. response = self.client.delete(url, **self.header)
  177. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  178. self.assertEqual(RackGroup.objects.count(), 2)
  179. class RackRoleTest(HttpStatusMixin, APITestCase):
  180. def setUp(self):
  181. user = User.objects.create(username='testuser', is_superuser=True)
  182. token = Token.objects.create(user=user)
  183. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  184. self.rackrole1 = RackRole.objects.create(name='Test Rack Role 1', slug='test-rack-role-1', color='ff0000')
  185. self.rackrole2 = RackRole.objects.create(name='Test Rack Role 2', slug='test-rack-role-2', color='00ff00')
  186. self.rackrole3 = RackRole.objects.create(name='Test Rack Role 3', slug='test-rack-role-3', color='0000ff')
  187. def test_get_rackrole(self):
  188. url = reverse('dcim-api:rackrole-detail', kwargs={'pk': self.rackrole1.pk})
  189. response = self.client.get(url, **self.header)
  190. self.assertEqual(response.data['name'], self.rackrole1.name)
  191. def test_list_rackroles(self):
  192. url = reverse('dcim-api:rackrole-list')
  193. response = self.client.get(url, **self.header)
  194. self.assertEqual(response.data['count'], 3)
  195. def test_create_rackrole(self):
  196. data = {
  197. 'name': 'Test Rack Role 4',
  198. 'slug': 'test-rack-role-4',
  199. 'color': 'ffff00',
  200. }
  201. url = reverse('dcim-api:rackrole-list')
  202. response = self.client.post(url, data, **self.header)
  203. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  204. self.assertEqual(RackRole.objects.count(), 4)
  205. rackrole1 = RackRole.objects.get(pk=response.data['id'])
  206. self.assertEqual(rackrole1.name, data['name'])
  207. self.assertEqual(rackrole1.slug, data['slug'])
  208. self.assertEqual(rackrole1.color, data['color'])
  209. def test_update_rackrole(self):
  210. data = {
  211. 'name': 'Test Rack Role X',
  212. 'slug': 'test-rack-role-x',
  213. 'color': 'ffff00',
  214. }
  215. url = reverse('dcim-api:rackrole-detail', kwargs={'pk': self.rackrole1.pk})
  216. response = self.client.put(url, data, **self.header)
  217. self.assertHttpStatus(response, status.HTTP_200_OK)
  218. self.assertEqual(RackRole.objects.count(), 3)
  219. rackrole1 = RackRole.objects.get(pk=response.data['id'])
  220. self.assertEqual(rackrole1.name, data['name'])
  221. self.assertEqual(rackrole1.slug, data['slug'])
  222. self.assertEqual(rackrole1.color, data['color'])
  223. def test_delete_rackrole(self):
  224. url = reverse('dcim-api:rackrole-detail', kwargs={'pk': self.rackrole1.pk})
  225. response = self.client.delete(url, **self.header)
  226. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  227. self.assertEqual(RackRole.objects.count(), 2)
  228. class RackTest(HttpStatusMixin, APITestCase):
  229. def setUp(self):
  230. user = User.objects.create(username='testuser', is_superuser=True)
  231. token = Token.objects.create(user=user)
  232. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  233. self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1')
  234. self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
  235. self.rackgroup1 = RackGroup.objects.create(site=self.site1, name='Test Rack Group 1', slug='test-rack-group-1')
  236. self.rackgroup2 = RackGroup.objects.create(site=self.site2, name='Test Rack Group 2', slug='test-rack-group-2')
  237. self.rackrole1 = RackRole.objects.create(name='Test Rack Role 1', slug='test-rack-role-1', color='ff0000')
  238. self.rackrole2 = RackRole.objects.create(name='Test Rack Role 2', slug='test-rack-role-2', color='00ff00')
  239. self.rack1 = Rack.objects.create(
  240. site=self.site1, group=self.rackgroup1, role=self.rackrole1, name='Test Rack 1', u_height=42,
  241. )
  242. self.rack2 = Rack.objects.create(
  243. site=self.site1, group=self.rackgroup1, role=self.rackrole1, name='Test Rack 2', u_height=42,
  244. )
  245. self.rack3 = Rack.objects.create(
  246. site=self.site1, group=self.rackgroup1, role=self.rackrole1, name='Test Rack 3', u_height=42,
  247. )
  248. def test_get_rack(self):
  249. url = reverse('dcim-api:rack-detail', kwargs={'pk': self.rack1.pk})
  250. response = self.client.get(url, **self.header)
  251. self.assertEqual(response.data['name'], self.rack1.name)
  252. def test_get_rack_units(self):
  253. url = reverse('dcim-api:rack-units', kwargs={'pk': self.rack1.pk})
  254. response = self.client.get(url, **self.header)
  255. self.assertEqual(response.data['count'], 42)
  256. def test_list_racks(self):
  257. url = reverse('dcim-api:rack-list')
  258. response = self.client.get(url, **self.header)
  259. self.assertEqual(response.data['count'], 3)
  260. def test_create_rack(self):
  261. data = {
  262. 'name': 'Test Rack 4',
  263. 'site': self.site1.pk,
  264. 'group': self.rackgroup1.pk,
  265. 'role': self.rackrole1.pk,
  266. }
  267. url = reverse('dcim-api:rack-list')
  268. response = self.client.post(url, data, **self.header)
  269. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  270. self.assertEqual(Rack.objects.count(), 4)
  271. rack4 = Rack.objects.get(pk=response.data['id'])
  272. self.assertEqual(rack4.name, data['name'])
  273. self.assertEqual(rack4.site_id, data['site'])
  274. self.assertEqual(rack4.group_id, data['group'])
  275. self.assertEqual(rack4.role_id, data['role'])
  276. def test_update_rack(self):
  277. data = {
  278. 'name': 'Test Rack X',
  279. 'site': self.site2.pk,
  280. 'group': self.rackgroup2.pk,
  281. 'role': self.rackrole2.pk,
  282. }
  283. url = reverse('dcim-api:rack-detail', kwargs={'pk': self.rack1.pk})
  284. response = self.client.put(url, data, **self.header)
  285. self.assertHttpStatus(response, status.HTTP_200_OK)
  286. self.assertEqual(Rack.objects.count(), 3)
  287. rack1 = Rack.objects.get(pk=response.data['id'])
  288. self.assertEqual(rack1.name, data['name'])
  289. self.assertEqual(rack1.site_id, data['site'])
  290. self.assertEqual(rack1.group_id, data['group'])
  291. self.assertEqual(rack1.role_id, data['role'])
  292. def test_delete_rack(self):
  293. url = reverse('dcim-api:rack-detail', kwargs={'pk': self.rack1.pk})
  294. response = self.client.delete(url, **self.header)
  295. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  296. self.assertEqual(Rack.objects.count(), 2)
  297. class RackReservationTest(HttpStatusMixin, APITestCase):
  298. def setUp(self):
  299. user = User.objects.create(username='testuser', is_superuser=True)
  300. token = Token.objects.create(user=user)
  301. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  302. self.user1 = user
  303. self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1')
  304. self.rack1 = Rack.objects.create(site=self.site1, name='Test Rack 1')
  305. self.rackreservation1 = RackReservation.objects.create(
  306. rack=self.rack1, units=[1, 2, 3], user=user, description='First reservation',
  307. )
  308. self.rackreservation2 = RackReservation.objects.create(
  309. rack=self.rack1, units=[4, 5, 6], user=user, description='Second reservation',
  310. )
  311. self.rackreservation3 = RackReservation.objects.create(
  312. rack=self.rack1, units=[7, 8, 9], user=user, description='Third reservation',
  313. )
  314. def test_get_rackreservation(self):
  315. url = reverse('dcim-api:rackreservation-detail', kwargs={'pk': self.rackreservation1.pk})
  316. response = self.client.get(url, **self.header)
  317. self.assertEqual(response.data['id'], self.rackreservation1.pk)
  318. def test_list_rackreservations(self):
  319. url = reverse('dcim-api:rackreservation-list')
  320. response = self.client.get(url, **self.header)
  321. self.assertEqual(response.data['count'], 3)
  322. def test_create_rackreservation(self):
  323. data = {
  324. 'rack': self.rack1.pk,
  325. 'units': [10, 11, 12],
  326. 'user': self.user1.pk,
  327. 'description': 'Fourth reservation',
  328. }
  329. url = reverse('dcim-api:rackreservation-list')
  330. response = self.client.post(url, data, **self.header)
  331. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  332. self.assertEqual(RackReservation.objects.count(), 4)
  333. rackreservation4 = RackReservation.objects.get(pk=response.data['id'])
  334. self.assertEqual(rackreservation4.rack_id, data['rack'])
  335. self.assertEqual(rackreservation4.units, data['units'])
  336. self.assertEqual(rackreservation4.user_id, data['user'])
  337. self.assertEqual(rackreservation4.description, data['description'])
  338. def test_update_rackreservation(self):
  339. data = {
  340. 'rack': self.rack1.pk,
  341. 'units': [10, 11, 12],
  342. 'user': self.user1.pk,
  343. 'description': 'Modified reservation',
  344. }
  345. url = reverse('dcim-api:rackreservation-detail', kwargs={'pk': self.rackreservation1.pk})
  346. response = self.client.put(url, data, **self.header)
  347. self.assertHttpStatus(response, status.HTTP_200_OK)
  348. self.assertEqual(RackReservation.objects.count(), 3)
  349. rackreservation1 = RackReservation.objects.get(pk=response.data['id'])
  350. self.assertEqual(rackreservation1.units, data['units'])
  351. self.assertEqual(rackreservation1.description, data['description'])
  352. def test_delete_rackreservation(self):
  353. url = reverse('dcim-api:rackreservation-detail', kwargs={'pk': self.rackreservation1.pk})
  354. response = self.client.delete(url, **self.header)
  355. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  356. self.assertEqual(RackReservation.objects.count(), 2)
  357. class ManufacturerTest(HttpStatusMixin, APITestCase):
  358. def setUp(self):
  359. user = User.objects.create(username='testuser', is_superuser=True)
  360. token = Token.objects.create(user=user)
  361. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  362. self.manufacturer1 = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  363. self.manufacturer2 = Manufacturer.objects.create(name='Test Manufacturer 2', slug='test-manufacturer-2')
  364. self.manufacturer3 = Manufacturer.objects.create(name='Test Manufacturer 3', slug='test-manufacturer-3')
  365. def test_get_manufacturer(self):
  366. url = reverse('dcim-api:manufacturer-detail', kwargs={'pk': self.manufacturer1.pk})
  367. response = self.client.get(url, **self.header)
  368. self.assertEqual(response.data['name'], self.manufacturer1.name)
  369. def test_list_manufacturers(self):
  370. url = reverse('dcim-api:manufacturer-list')
  371. response = self.client.get(url, **self.header)
  372. self.assertEqual(response.data['count'], 3)
  373. def test_create_manufacturer(self):
  374. data = {
  375. 'name': 'Test Manufacturer 4',
  376. 'slug': 'test-manufacturer-4',
  377. }
  378. url = reverse('dcim-api:manufacturer-list')
  379. response = self.client.post(url, data, **self.header)
  380. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  381. self.assertEqual(Manufacturer.objects.count(), 4)
  382. manufacturer4 = Manufacturer.objects.get(pk=response.data['id'])
  383. self.assertEqual(manufacturer4.name, data['name'])
  384. self.assertEqual(manufacturer4.slug, data['slug'])
  385. def test_update_manufacturer(self):
  386. data = {
  387. 'name': 'Test Manufacturer X',
  388. 'slug': 'test-manufacturer-x',
  389. }
  390. url = reverse('dcim-api:manufacturer-detail', kwargs={'pk': self.manufacturer1.pk})
  391. response = self.client.put(url, data, **self.header)
  392. self.assertHttpStatus(response, status.HTTP_200_OK)
  393. self.assertEqual(Manufacturer.objects.count(), 3)
  394. manufacturer1 = Manufacturer.objects.get(pk=response.data['id'])
  395. self.assertEqual(manufacturer1.name, data['name'])
  396. self.assertEqual(manufacturer1.slug, data['slug'])
  397. def test_delete_manufacturer(self):
  398. url = reverse('dcim-api:manufacturer-detail', kwargs={'pk': self.manufacturer1.pk})
  399. response = self.client.delete(url, **self.header)
  400. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  401. self.assertEqual(Manufacturer.objects.count(), 2)
  402. class DeviceTypeTest(HttpStatusMixin, APITestCase):
  403. def setUp(self):
  404. user = User.objects.create(username='testuser', is_superuser=True)
  405. token = Token.objects.create(user=user)
  406. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  407. self.manufacturer1 = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  408. self.manufacturer2 = Manufacturer.objects.create(name='Test Manufacturer 2', slug='test-manufacturer-2')
  409. self.devicetype1 = DeviceType.objects.create(
  410. manufacturer=self.manufacturer1, model='Test Device Type 1', slug='test-device-type-1'
  411. )
  412. self.devicetype2 = DeviceType.objects.create(
  413. manufacturer=self.manufacturer1, model='Test Device Type 2', slug='test-device-type-2'
  414. )
  415. self.devicetype3 = DeviceType.objects.create(
  416. manufacturer=self.manufacturer1, model='Test Device Type 3', slug='test-device-type-3'
  417. )
  418. def test_get_devicetype(self):
  419. url = reverse('dcim-api:devicetype-detail', kwargs={'pk': self.devicetype1.pk})
  420. response = self.client.get(url, **self.header)
  421. self.assertEqual(response.data['model'], self.devicetype1.model)
  422. def test_list_devicetypes(self):
  423. url = reverse('dcim-api:devicetype-list')
  424. response = self.client.get(url, **self.header)
  425. self.assertEqual(response.data['count'], 3)
  426. def test_create_devicetype(self):
  427. data = {
  428. 'manufacturer': self.manufacturer1.pk,
  429. 'model': 'Test Device Type 4',
  430. 'slug': 'test-device-type-4',
  431. }
  432. url = reverse('dcim-api:devicetype-list')
  433. response = self.client.post(url, data, **self.header)
  434. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  435. self.assertEqual(DeviceType.objects.count(), 4)
  436. devicetype4 = DeviceType.objects.get(pk=response.data['id'])
  437. self.assertEqual(devicetype4.manufacturer_id, data['manufacturer'])
  438. self.assertEqual(devicetype4.model, data['model'])
  439. self.assertEqual(devicetype4.slug, data['slug'])
  440. def test_update_devicetype(self):
  441. data = {
  442. 'manufacturer': self.manufacturer2.pk,
  443. 'model': 'Test Device Type X',
  444. 'slug': 'test-device-type-x',
  445. }
  446. url = reverse('dcim-api:devicetype-detail', kwargs={'pk': self.devicetype1.pk})
  447. response = self.client.put(url, data, **self.header)
  448. self.assertHttpStatus(response, status.HTTP_200_OK)
  449. self.assertEqual(DeviceType.objects.count(), 3)
  450. devicetype1 = DeviceType.objects.get(pk=response.data['id'])
  451. self.assertEqual(devicetype1.manufacturer_id, data['manufacturer'])
  452. self.assertEqual(devicetype1.model, data['model'])
  453. self.assertEqual(devicetype1.slug, data['slug'])
  454. def test_delete_devicetype(self):
  455. url = reverse('dcim-api:devicetype-detail', kwargs={'pk': self.devicetype1.pk})
  456. response = self.client.delete(url, **self.header)
  457. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  458. self.assertEqual(DeviceType.objects.count(), 2)
  459. class ConsolePortTemplateTest(HttpStatusMixin, APITestCase):
  460. def setUp(self):
  461. user = User.objects.create(username='testuser', is_superuser=True)
  462. token = Token.objects.create(user=user)
  463. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  464. self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  465. self.devicetype = DeviceType.objects.create(
  466. manufacturer=self.manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  467. )
  468. self.consoleporttemplate1 = ConsolePortTemplate.objects.create(
  469. device_type=self.devicetype, name='Test CP Template 1'
  470. )
  471. self.consoleporttemplate2 = ConsolePortTemplate.objects.create(
  472. device_type=self.devicetype, name='Test CP Template 2'
  473. )
  474. self.consoleporttemplate3 = ConsolePortTemplate.objects.create(
  475. device_type=self.devicetype, name='Test CP Template 3'
  476. )
  477. def test_get_consoleporttemplate(self):
  478. url = reverse('dcim-api:consoleporttemplate-detail', kwargs={'pk': self.consoleporttemplate1.pk})
  479. response = self.client.get(url, **self.header)
  480. self.assertEqual(response.data['name'], self.consoleporttemplate1.name)
  481. def test_list_consoleporttemplates(self):
  482. url = reverse('dcim-api:consoleporttemplate-list')
  483. response = self.client.get(url, **self.header)
  484. self.assertEqual(response.data['count'], 3)
  485. def test_create_consoleporttemplate(self):
  486. data = {
  487. 'device_type': self.devicetype.pk,
  488. 'name': 'Test CP Template 4',
  489. }
  490. url = reverse('dcim-api:consoleporttemplate-list')
  491. response = self.client.post(url, data, **self.header)
  492. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  493. self.assertEqual(ConsolePortTemplate.objects.count(), 4)
  494. consoleporttemplate4 = ConsolePortTemplate.objects.get(pk=response.data['id'])
  495. self.assertEqual(consoleporttemplate4.device_type_id, data['device_type'])
  496. self.assertEqual(consoleporttemplate4.name, data['name'])
  497. def test_update_consoleporttemplate(self):
  498. data = {
  499. 'device_type': self.devicetype.pk,
  500. 'name': 'Test CP Template X',
  501. }
  502. url = reverse('dcim-api:consoleporttemplate-detail', kwargs={'pk': self.consoleporttemplate1.pk})
  503. response = self.client.put(url, data, **self.header)
  504. self.assertHttpStatus(response, status.HTTP_200_OK)
  505. self.assertEqual(ConsolePortTemplate.objects.count(), 3)
  506. consoleporttemplate1 = ConsolePortTemplate.objects.get(pk=response.data['id'])
  507. self.assertEqual(consoleporttemplate1.name, data['name'])
  508. def test_delete_consoleporttemplate(self):
  509. url = reverse('dcim-api:consoleporttemplate-detail', kwargs={'pk': self.consoleporttemplate1.pk})
  510. response = self.client.delete(url, **self.header)
  511. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  512. self.assertEqual(ConsolePortTemplate.objects.count(), 2)
  513. class ConsoleServerPortTemplateTest(HttpStatusMixin, APITestCase):
  514. def setUp(self):
  515. user = User.objects.create(username='testuser', is_superuser=True)
  516. token = Token.objects.create(user=user)
  517. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  518. self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  519. self.devicetype = DeviceType.objects.create(
  520. manufacturer=self.manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  521. )
  522. self.consoleserverporttemplate1 = ConsoleServerPortTemplate.objects.create(
  523. device_type=self.devicetype, name='Test CSP Template 1'
  524. )
  525. self.consoleserverporttemplate2 = ConsoleServerPortTemplate.objects.create(
  526. device_type=self.devicetype, name='Test CSP Template 2'
  527. )
  528. self.consoleserverporttemplate3 = ConsoleServerPortTemplate.objects.create(
  529. device_type=self.devicetype, name='Test CSP Template 3'
  530. )
  531. def test_get_consoleserverporttemplate(self):
  532. url = reverse('dcim-api:consoleserverporttemplate-detail', kwargs={'pk': self.consoleserverporttemplate1.pk})
  533. response = self.client.get(url, **self.header)
  534. self.assertEqual(response.data['name'], self.consoleserverporttemplate1.name)
  535. def test_list_consoleserverporttemplates(self):
  536. url = reverse('dcim-api:consoleserverporttemplate-list')
  537. response = self.client.get(url, **self.header)
  538. self.assertEqual(response.data['count'], 3)
  539. def test_create_consoleserverporttemplate(self):
  540. data = {
  541. 'device_type': self.devicetype.pk,
  542. 'name': 'Test CSP Template 4',
  543. }
  544. url = reverse('dcim-api:consoleserverporttemplate-list')
  545. response = self.client.post(url, data, **self.header)
  546. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  547. self.assertEqual(ConsoleServerPortTemplate.objects.count(), 4)
  548. consoleserverporttemplate4 = ConsoleServerPortTemplate.objects.get(pk=response.data['id'])
  549. self.assertEqual(consoleserverporttemplate4.device_type_id, data['device_type'])
  550. self.assertEqual(consoleserverporttemplate4.name, data['name'])
  551. def test_update_consoleserverporttemplate(self):
  552. data = {
  553. 'device_type': self.devicetype.pk,
  554. 'name': 'Test CSP Template X',
  555. }
  556. url = reverse('dcim-api:consoleserverporttemplate-detail', kwargs={'pk': self.consoleserverporttemplate1.pk})
  557. response = self.client.put(url, data, **self.header)
  558. self.assertHttpStatus(response, status.HTTP_200_OK)
  559. self.assertEqual(ConsoleServerPortTemplate.objects.count(), 3)
  560. consoleserverporttemplate1 = ConsoleServerPortTemplate.objects.get(pk=response.data['id'])
  561. self.assertEqual(consoleserverporttemplate1.name, data['name'])
  562. def test_delete_consoleserverporttemplate(self):
  563. url = reverse('dcim-api:consoleserverporttemplate-detail', kwargs={'pk': self.consoleserverporttemplate1.pk})
  564. response = self.client.delete(url, **self.header)
  565. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  566. self.assertEqual(ConsoleServerPortTemplate.objects.count(), 2)
  567. class PowerPortTemplateTest(HttpStatusMixin, APITestCase):
  568. def setUp(self):
  569. user = User.objects.create(username='testuser', is_superuser=True)
  570. token = Token.objects.create(user=user)
  571. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  572. self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  573. self.devicetype = DeviceType.objects.create(
  574. manufacturer=self.manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  575. )
  576. self.powerporttemplate1 = PowerPortTemplate.objects.create(
  577. device_type=self.devicetype, name='Test PP Template 1'
  578. )
  579. self.powerporttemplate2 = PowerPortTemplate.objects.create(
  580. device_type=self.devicetype, name='Test PP Template 2'
  581. )
  582. self.powerporttemplate3 = PowerPortTemplate.objects.create(
  583. device_type=self.devicetype, name='Test PP Template 3'
  584. )
  585. def test_get_powerporttemplate(self):
  586. url = reverse('dcim-api:powerporttemplate-detail', kwargs={'pk': self.powerporttemplate1.pk})
  587. response = self.client.get(url, **self.header)
  588. self.assertEqual(response.data['name'], self.powerporttemplate1.name)
  589. def test_list_powerporttemplates(self):
  590. url = reverse('dcim-api:powerporttemplate-list')
  591. response = self.client.get(url, **self.header)
  592. self.assertEqual(response.data['count'], 3)
  593. def test_create_powerporttemplate(self):
  594. data = {
  595. 'device_type': self.devicetype.pk,
  596. 'name': 'Test PP Template 4',
  597. }
  598. url = reverse('dcim-api:powerporttemplate-list')
  599. response = self.client.post(url, data, **self.header)
  600. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  601. self.assertEqual(PowerPortTemplate.objects.count(), 4)
  602. powerporttemplate4 = PowerPortTemplate.objects.get(pk=response.data['id'])
  603. self.assertEqual(powerporttemplate4.device_type_id, data['device_type'])
  604. self.assertEqual(powerporttemplate4.name, data['name'])
  605. def test_update_powerporttemplate(self):
  606. data = {
  607. 'device_type': self.devicetype.pk,
  608. 'name': 'Test PP Template X',
  609. }
  610. url = reverse('dcim-api:powerporttemplate-detail', kwargs={'pk': self.powerporttemplate1.pk})
  611. response = self.client.put(url, data, **self.header)
  612. self.assertHttpStatus(response, status.HTTP_200_OK)
  613. self.assertEqual(PowerPortTemplate.objects.count(), 3)
  614. powerporttemplate1 = PowerPortTemplate.objects.get(pk=response.data['id'])
  615. self.assertEqual(powerporttemplate1.name, data['name'])
  616. def test_delete_powerporttemplate(self):
  617. url = reverse('dcim-api:powerporttemplate-detail', kwargs={'pk': self.powerporttemplate1.pk})
  618. response = self.client.delete(url, **self.header)
  619. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  620. self.assertEqual(PowerPortTemplate.objects.count(), 2)
  621. class PowerOutletTemplateTest(HttpStatusMixin, APITestCase):
  622. def setUp(self):
  623. user = User.objects.create(username='testuser', is_superuser=True)
  624. token = Token.objects.create(user=user)
  625. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  626. self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  627. self.devicetype = DeviceType.objects.create(
  628. manufacturer=self.manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  629. )
  630. self.poweroutlettemplate1 = PowerOutletTemplate.objects.create(
  631. device_type=self.devicetype, name='Test PO Template 1'
  632. )
  633. self.poweroutlettemplate2 = PowerOutletTemplate.objects.create(
  634. device_type=self.devicetype, name='Test PO Template 2'
  635. )
  636. self.poweroutlettemplate3 = PowerOutletTemplate.objects.create(
  637. device_type=self.devicetype, name='Test PO Template 3'
  638. )
  639. def test_get_poweroutlettemplate(self):
  640. url = reverse('dcim-api:poweroutlettemplate-detail', kwargs={'pk': self.poweroutlettemplate1.pk})
  641. response = self.client.get(url, **self.header)
  642. self.assertEqual(response.data['name'], self.poweroutlettemplate1.name)
  643. def test_list_poweroutlettemplates(self):
  644. url = reverse('dcim-api:poweroutlettemplate-list')
  645. response = self.client.get(url, **self.header)
  646. self.assertEqual(response.data['count'], 3)
  647. def test_create_poweroutlettemplate(self):
  648. data = {
  649. 'device_type': self.devicetype.pk,
  650. 'name': 'Test PO Template 4',
  651. }
  652. url = reverse('dcim-api:poweroutlettemplate-list')
  653. response = self.client.post(url, data, **self.header)
  654. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  655. self.assertEqual(PowerOutletTemplate.objects.count(), 4)
  656. poweroutlettemplate4 = PowerOutletTemplate.objects.get(pk=response.data['id'])
  657. self.assertEqual(poweroutlettemplate4.device_type_id, data['device_type'])
  658. self.assertEqual(poweroutlettemplate4.name, data['name'])
  659. def test_update_poweroutlettemplate(self):
  660. data = {
  661. 'device_type': self.devicetype.pk,
  662. 'name': 'Test PO Template X',
  663. }
  664. url = reverse('dcim-api:poweroutlettemplate-detail', kwargs={'pk': self.poweroutlettemplate1.pk})
  665. response = self.client.put(url, data, **self.header)
  666. self.assertHttpStatus(response, status.HTTP_200_OK)
  667. self.assertEqual(PowerOutletTemplate.objects.count(), 3)
  668. poweroutlettemplate1 = PowerOutletTemplate.objects.get(pk=response.data['id'])
  669. self.assertEqual(poweroutlettemplate1.name, data['name'])
  670. def test_delete_poweroutlettemplate(self):
  671. url = reverse('dcim-api:poweroutlettemplate-detail', kwargs={'pk': self.poweroutlettemplate1.pk})
  672. response = self.client.delete(url, **self.header)
  673. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  674. self.assertEqual(PowerOutletTemplate.objects.count(), 2)
  675. class InterfaceTemplateTest(HttpStatusMixin, APITestCase):
  676. def setUp(self):
  677. user = User.objects.create(username='testuser', is_superuser=True)
  678. token = Token.objects.create(user=user)
  679. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  680. self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  681. self.devicetype = DeviceType.objects.create(
  682. manufacturer=self.manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  683. )
  684. self.interfacetemplate1 = InterfaceTemplate.objects.create(
  685. device_type=self.devicetype, name='Test Interface Template 1'
  686. )
  687. self.interfacetemplate2 = InterfaceTemplate.objects.create(
  688. device_type=self.devicetype, name='Test Interface Template 2'
  689. )
  690. self.interfacetemplate3 = InterfaceTemplate.objects.create(
  691. device_type=self.devicetype, name='Test Interface Template 3'
  692. )
  693. def test_get_interfacetemplate(self):
  694. url = reverse('dcim-api:interfacetemplate-detail', kwargs={'pk': self.interfacetemplate1.pk})
  695. response = self.client.get(url, **self.header)
  696. self.assertEqual(response.data['name'], self.interfacetemplate1.name)
  697. def test_list_interfacetemplates(self):
  698. url = reverse('dcim-api:interfacetemplate-list')
  699. response = self.client.get(url, **self.header)
  700. self.assertEqual(response.data['count'], 3)
  701. def test_create_interfacetemplate(self):
  702. data = {
  703. 'device_type': self.devicetype.pk,
  704. 'name': 'Test Interface Template 4',
  705. }
  706. url = reverse('dcim-api:interfacetemplate-list')
  707. response = self.client.post(url, data, **self.header)
  708. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  709. self.assertEqual(InterfaceTemplate.objects.count(), 4)
  710. interfacetemplate4 = InterfaceTemplate.objects.get(pk=response.data['id'])
  711. self.assertEqual(interfacetemplate4.device_type_id, data['device_type'])
  712. self.assertEqual(interfacetemplate4.name, data['name'])
  713. def test_update_interfacetemplate(self):
  714. data = {
  715. 'device_type': self.devicetype.pk,
  716. 'name': 'Test Interface Template X',
  717. }
  718. url = reverse('dcim-api:interfacetemplate-detail', kwargs={'pk': self.interfacetemplate1.pk})
  719. response = self.client.put(url, data, **self.header)
  720. self.assertHttpStatus(response, status.HTTP_200_OK)
  721. self.assertEqual(InterfaceTemplate.objects.count(), 3)
  722. interfacetemplate1 = InterfaceTemplate.objects.get(pk=response.data['id'])
  723. self.assertEqual(interfacetemplate1.name, data['name'])
  724. def test_delete_interfacetemplate(self):
  725. url = reverse('dcim-api:interfacetemplate-detail', kwargs={'pk': self.interfacetemplate1.pk})
  726. response = self.client.delete(url, **self.header)
  727. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  728. self.assertEqual(InterfaceTemplate.objects.count(), 2)
  729. class DeviceBayTemplateTest(HttpStatusMixin, APITestCase):
  730. def setUp(self):
  731. user = User.objects.create(username='testuser', is_superuser=True)
  732. token = Token.objects.create(user=user)
  733. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  734. self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  735. self.devicetype = DeviceType.objects.create(
  736. manufacturer=self.manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  737. )
  738. self.devicebaytemplate1 = DeviceBayTemplate.objects.create(
  739. device_type=self.devicetype, name='Test Device Bay Template 1'
  740. )
  741. self.devicebaytemplate2 = DeviceBayTemplate.objects.create(
  742. device_type=self.devicetype, name='Test Device Bay Template 2'
  743. )
  744. self.devicebaytemplate3 = DeviceBayTemplate.objects.create(
  745. device_type=self.devicetype, name='Test Device Bay Template 3'
  746. )
  747. def test_get_devicebaytemplate(self):
  748. url = reverse('dcim-api:devicebaytemplate-detail', kwargs={'pk': self.devicebaytemplate1.pk})
  749. response = self.client.get(url, **self.header)
  750. self.assertEqual(response.data['name'], self.devicebaytemplate1.name)
  751. def test_list_devicebaytemplates(self):
  752. url = reverse('dcim-api:devicebaytemplate-list')
  753. response = self.client.get(url, **self.header)
  754. self.assertEqual(response.data['count'], 3)
  755. def test_create_devicebaytemplate(self):
  756. data = {
  757. 'device_type': self.devicetype.pk,
  758. 'name': 'Test Device Bay Template 4',
  759. }
  760. url = reverse('dcim-api:devicebaytemplate-list')
  761. response = self.client.post(url, data, **self.header)
  762. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  763. self.assertEqual(DeviceBayTemplate.objects.count(), 4)
  764. devicebaytemplate4 = DeviceBayTemplate.objects.get(pk=response.data['id'])
  765. self.assertEqual(devicebaytemplate4.device_type_id, data['device_type'])
  766. self.assertEqual(devicebaytemplate4.name, data['name'])
  767. def test_update_devicebaytemplate(self):
  768. data = {
  769. 'device_type': self.devicetype.pk,
  770. 'name': 'Test Device Bay Template X',
  771. }
  772. url = reverse('dcim-api:devicebaytemplate-detail', kwargs={'pk': self.devicebaytemplate1.pk})
  773. response = self.client.put(url, data, **self.header)
  774. self.assertHttpStatus(response, status.HTTP_200_OK)
  775. self.assertEqual(DeviceBayTemplate.objects.count(), 3)
  776. devicebaytemplate1 = DeviceBayTemplate.objects.get(pk=response.data['id'])
  777. self.assertEqual(devicebaytemplate1.name, data['name'])
  778. def test_delete_devicebaytemplate(self):
  779. url = reverse('dcim-api:devicebaytemplate-detail', kwargs={'pk': self.devicebaytemplate1.pk})
  780. response = self.client.delete(url, **self.header)
  781. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  782. self.assertEqual(DeviceBayTemplate.objects.count(), 2)
  783. class DeviceRoleTest(HttpStatusMixin, APITestCase):
  784. def setUp(self):
  785. user = User.objects.create(username='testuser', is_superuser=True)
  786. token = Token.objects.create(user=user)
  787. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  788. self.devicerole1 = DeviceRole.objects.create(
  789. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  790. )
  791. self.devicerole2 = DeviceRole.objects.create(
  792. name='Test Device Role 2', slug='test-device-role-2', color='00ff00'
  793. )
  794. self.devicerole3 = DeviceRole.objects.create(
  795. name='Test Device Role 3', slug='test-device-role-3', color='0000ff'
  796. )
  797. def test_get_devicerole(self):
  798. url = reverse('dcim-api:devicerole-detail', kwargs={'pk': self.devicerole1.pk})
  799. response = self.client.get(url, **self.header)
  800. self.assertEqual(response.data['name'], self.devicerole1.name)
  801. def test_list_deviceroles(self):
  802. url = reverse('dcim-api:devicerole-list')
  803. response = self.client.get(url, **self.header)
  804. self.assertEqual(response.data['count'], 3)
  805. def test_create_devicerole(self):
  806. data = {
  807. 'name': 'Test Device Role 4',
  808. 'slug': 'test-device-role-4',
  809. 'color': 'ffff00',
  810. }
  811. url = reverse('dcim-api:devicerole-list')
  812. response = self.client.post(url, data, **self.header)
  813. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  814. self.assertEqual(DeviceRole.objects.count(), 4)
  815. devicerole4 = DeviceRole.objects.get(pk=response.data['id'])
  816. self.assertEqual(devicerole4.name, data['name'])
  817. self.assertEqual(devicerole4.slug, data['slug'])
  818. self.assertEqual(devicerole4.color, data['color'])
  819. def test_update_devicerole(self):
  820. data = {
  821. 'name': 'Test Device Role X',
  822. 'slug': 'test-device-role-x',
  823. 'color': '00ffff',
  824. }
  825. url = reverse('dcim-api:devicerole-detail', kwargs={'pk': self.devicerole1.pk})
  826. response = self.client.put(url, data, **self.header)
  827. self.assertHttpStatus(response, status.HTTP_200_OK)
  828. self.assertEqual(DeviceRole.objects.count(), 3)
  829. devicerole1 = DeviceRole.objects.get(pk=response.data['id'])
  830. self.assertEqual(devicerole1.name, data['name'])
  831. self.assertEqual(devicerole1.slug, data['slug'])
  832. self.assertEqual(devicerole1.color, data['color'])
  833. def test_delete_devicerole(self):
  834. url = reverse('dcim-api:devicerole-detail', kwargs={'pk': self.devicerole1.pk})
  835. response = self.client.delete(url, **self.header)
  836. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  837. self.assertEqual(DeviceRole.objects.count(), 2)
  838. class PlatformTest(HttpStatusMixin, APITestCase):
  839. def setUp(self):
  840. user = User.objects.create(username='testuser', is_superuser=True)
  841. token = Token.objects.create(user=user)
  842. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  843. self.platform1 = Platform.objects.create(name='Test Platform 1', slug='test-platform-1')
  844. self.platform2 = Platform.objects.create(name='Test Platform 2', slug='test-platform-2')
  845. self.platform3 = Platform.objects.create(name='Test Platform 3', slug='test-platform-3')
  846. def test_get_platform(self):
  847. url = reverse('dcim-api:platform-detail', kwargs={'pk': self.platform1.pk})
  848. response = self.client.get(url, **self.header)
  849. self.assertEqual(response.data['name'], self.platform1.name)
  850. def test_list_platforms(self):
  851. url = reverse('dcim-api:platform-list')
  852. response = self.client.get(url, **self.header)
  853. self.assertEqual(response.data['count'], 3)
  854. def test_create_platform(self):
  855. data = {
  856. 'name': 'Test Platform 4',
  857. 'slug': 'test-platform-4',
  858. }
  859. url = reverse('dcim-api:platform-list')
  860. response = self.client.post(url, data, **self.header)
  861. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  862. self.assertEqual(Platform.objects.count(), 4)
  863. platform4 = Platform.objects.get(pk=response.data['id'])
  864. self.assertEqual(platform4.name, data['name'])
  865. self.assertEqual(platform4.slug, data['slug'])
  866. def test_update_platform(self):
  867. data = {
  868. 'name': 'Test Platform X',
  869. 'slug': 'test-platform-x',
  870. }
  871. url = reverse('dcim-api:platform-detail', kwargs={'pk': self.platform1.pk})
  872. response = self.client.put(url, data, **self.header)
  873. self.assertHttpStatus(response, status.HTTP_200_OK)
  874. self.assertEqual(Platform.objects.count(), 3)
  875. platform1 = Platform.objects.get(pk=response.data['id'])
  876. self.assertEqual(platform1.name, data['name'])
  877. self.assertEqual(platform1.slug, data['slug'])
  878. def test_delete_platform(self):
  879. url = reverse('dcim-api:platform-detail', kwargs={'pk': self.platform1.pk})
  880. response = self.client.delete(url, **self.header)
  881. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  882. self.assertEqual(Platform.objects.count(), 2)
  883. class DeviceTest(HttpStatusMixin, APITestCase):
  884. def setUp(self):
  885. user = User.objects.create(username='testuser', is_superuser=True)
  886. token = Token.objects.create(user=user)
  887. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  888. self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1')
  889. self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
  890. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  891. self.devicetype1 = DeviceType.objects.create(
  892. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  893. )
  894. self.devicetype2 = DeviceType.objects.create(
  895. manufacturer=manufacturer, model='Test Device Type 2', slug='test-device-type-2'
  896. )
  897. self.devicerole1 = DeviceRole.objects.create(
  898. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  899. )
  900. self.devicerole2 = DeviceRole.objects.create(
  901. name='Test Device Role 2', slug='test-device-role-2', color='00ff00'
  902. )
  903. self.device1 = Device.objects.create(
  904. device_type=self.devicetype1, device_role=self.devicerole1, name='Test Device 1', site=self.site1
  905. )
  906. self.device2 = Device.objects.create(
  907. device_type=self.devicetype1, device_role=self.devicerole1, name='Test Device 2', site=self.site1
  908. )
  909. self.device3 = Device.objects.create(
  910. device_type=self.devicetype1, device_role=self.devicerole1, name='Test Device 3', site=self.site1
  911. )
  912. def test_get_device(self):
  913. url = reverse('dcim-api:device-detail', kwargs={'pk': self.device1.pk})
  914. response = self.client.get(url, **self.header)
  915. self.assertEqual(response.data['name'], self.device1.name)
  916. def test_list_devices(self):
  917. url = reverse('dcim-api:device-list')
  918. response = self.client.get(url, **self.header)
  919. self.assertEqual(response.data['count'], 3)
  920. def test_create_device(self):
  921. data = {
  922. 'device_type': self.devicetype1.pk,
  923. 'device_role': self.devicerole1.pk,
  924. 'name': 'Test Device 4',
  925. 'site': self.site1.pk,
  926. }
  927. url = reverse('dcim-api:device-list')
  928. response = self.client.post(url, data, **self.header)
  929. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  930. self.assertEqual(Device.objects.count(), 4)
  931. device4 = Device.objects.get(pk=response.data['id'])
  932. self.assertEqual(device4.device_type_id, data['device_type'])
  933. self.assertEqual(device4.device_role_id, data['device_role'])
  934. self.assertEqual(device4.name, data['name'])
  935. self.assertEqual(device4.site_id, data['site'])
  936. def test_update_device(self):
  937. data = {
  938. 'device_type': self.devicetype2.pk,
  939. 'device_role': self.devicerole2.pk,
  940. 'name': 'Test Device X',
  941. 'site': self.site2.pk,
  942. }
  943. url = reverse('dcim-api:device-detail', kwargs={'pk': self.device1.pk})
  944. response = self.client.put(url, data, **self.header)
  945. self.assertHttpStatus(response, status.HTTP_200_OK)
  946. self.assertEqual(Device.objects.count(), 3)
  947. device1 = Device.objects.get(pk=response.data['id'])
  948. self.assertEqual(device1.device_type_id, data['device_type'])
  949. self.assertEqual(device1.device_role_id, data['device_role'])
  950. self.assertEqual(device1.name, data['name'])
  951. self.assertEqual(device1.site_id, data['site'])
  952. def test_delete_device(self):
  953. url = reverse('dcim-api:device-detail', kwargs={'pk': self.device1.pk})
  954. response = self.client.delete(url, **self.header)
  955. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  956. self.assertEqual(Device.objects.count(), 2)
  957. class ConsolePortTest(HttpStatusMixin, APITestCase):
  958. def setUp(self):
  959. user = User.objects.create(username='testuser', is_superuser=True)
  960. token = Token.objects.create(user=user)
  961. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  962. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  963. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  964. devicetype = DeviceType.objects.create(
  965. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  966. )
  967. devicerole = DeviceRole.objects.create(
  968. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  969. )
  970. self.device = Device.objects.create(
  971. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  972. )
  973. self.consoleport1 = ConsolePort.objects.create(device=self.device, name='Test Console Port 1')
  974. self.consoleport2 = ConsolePort.objects.create(device=self.device, name='Test Console Port 2')
  975. self.consoleport3 = ConsolePort.objects.create(device=self.device, name='Test Console Port 3')
  976. def test_get_consoleport(self):
  977. url = reverse('dcim-api:consoleport-detail', kwargs={'pk': self.consoleport1.pk})
  978. response = self.client.get(url, **self.header)
  979. self.assertEqual(response.data['name'], self.consoleport1.name)
  980. def test_list_consoleports(self):
  981. url = reverse('dcim-api:consoleport-list')
  982. response = self.client.get(url, **self.header)
  983. self.assertEqual(response.data['count'], 3)
  984. def test_create_consoleport(self):
  985. data = {
  986. 'device': self.device.pk,
  987. 'name': 'Test Console Port 4',
  988. }
  989. url = reverse('dcim-api:consoleport-list')
  990. response = self.client.post(url, data, **self.header)
  991. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  992. self.assertEqual(ConsolePort.objects.count(), 4)
  993. consoleport4 = ConsolePort.objects.get(pk=response.data['id'])
  994. self.assertEqual(consoleport4.device_id, data['device'])
  995. self.assertEqual(consoleport4.name, data['name'])
  996. def test_update_consoleport(self):
  997. consoleserverport = ConsoleServerPort.objects.create(device=self.device, name='Test CS Port 1')
  998. data = {
  999. 'device': self.device.pk,
  1000. 'name': 'Test Console Port X',
  1001. 'cs_port': consoleserverport.pk,
  1002. }
  1003. url = reverse('dcim-api:consoleport-detail', kwargs={'pk': self.consoleport1.pk})
  1004. response = self.client.put(url, data, **self.header)
  1005. self.assertHttpStatus(response, status.HTTP_200_OK)
  1006. self.assertEqual(ConsolePort.objects.count(), 3)
  1007. consoleport1 = ConsolePort.objects.get(pk=response.data['id'])
  1008. self.assertEqual(consoleport1.name, data['name'])
  1009. self.assertEqual(consoleport1.cs_port_id, data['cs_port'])
  1010. def test_delete_consoleport(self):
  1011. url = reverse('dcim-api:consoleport-detail', kwargs={'pk': self.consoleport1.pk})
  1012. response = self.client.delete(url, **self.header)
  1013. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  1014. self.assertEqual(ConsolePort.objects.count(), 2)
  1015. class ConsoleServerPortTest(HttpStatusMixin, APITestCase):
  1016. def setUp(self):
  1017. user = User.objects.create(username='testuser', is_superuser=True)
  1018. token = Token.objects.create(user=user)
  1019. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1020. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1021. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1022. devicetype = DeviceType.objects.create(
  1023. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1024. )
  1025. devicerole = DeviceRole.objects.create(
  1026. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1027. )
  1028. self.device = Device.objects.create(
  1029. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  1030. )
  1031. self.consoleserverport1 = ConsoleServerPort.objects.create(device=self.device, name='Test CS Port 1')
  1032. self.consoleserverport2 = ConsoleServerPort.objects.create(device=self.device, name='Test CS Port 2')
  1033. self.consoleserverport3 = ConsoleServerPort.objects.create(device=self.device, name='Test CS Port 3')
  1034. def test_get_consoleserverport(self):
  1035. url = reverse('dcim-api:consoleserverport-detail', kwargs={'pk': self.consoleserverport1.pk})
  1036. response = self.client.get(url, **self.header)
  1037. self.assertEqual(response.data['name'], self.consoleserverport1.name)
  1038. def test_list_consoleserverports(self):
  1039. url = reverse('dcim-api:consoleserverport-list')
  1040. response = self.client.get(url, **self.header)
  1041. self.assertEqual(response.data['count'], 3)
  1042. def test_create_consoleserverport(self):
  1043. data = {
  1044. 'device': self.device.pk,
  1045. 'name': 'Test CS Port 4',
  1046. }
  1047. url = reverse('dcim-api:consoleserverport-list')
  1048. response = self.client.post(url, data, **self.header)
  1049. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  1050. self.assertEqual(ConsoleServerPort.objects.count(), 4)
  1051. consoleserverport4 = ConsoleServerPort.objects.get(pk=response.data['id'])
  1052. self.assertEqual(consoleserverport4.device_id, data['device'])
  1053. self.assertEqual(consoleserverport4.name, data['name'])
  1054. def test_update_consoleserverport(self):
  1055. data = {
  1056. 'device': self.device.pk,
  1057. 'name': 'Test CS Port X',
  1058. }
  1059. url = reverse('dcim-api:consoleserverport-detail', kwargs={'pk': self.consoleserverport1.pk})
  1060. response = self.client.put(url, data, **self.header)
  1061. self.assertHttpStatus(response, status.HTTP_200_OK)
  1062. self.assertEqual(ConsoleServerPort.objects.count(), 3)
  1063. consoleserverport1 = ConsoleServerPort.objects.get(pk=response.data['id'])
  1064. self.assertEqual(consoleserverport1.name, data['name'])
  1065. def test_delete_consoleserverport(self):
  1066. url = reverse('dcim-api:consoleserverport-detail', kwargs={'pk': self.consoleserverport1.pk})
  1067. response = self.client.delete(url, **self.header)
  1068. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  1069. self.assertEqual(ConsoleServerPort.objects.count(), 2)
  1070. class PowerPortTest(HttpStatusMixin, APITestCase):
  1071. def setUp(self):
  1072. user = User.objects.create(username='testuser', is_superuser=True)
  1073. token = Token.objects.create(user=user)
  1074. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1075. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1076. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1077. devicetype = DeviceType.objects.create(
  1078. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1079. )
  1080. devicerole = DeviceRole.objects.create(
  1081. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1082. )
  1083. self.device = Device.objects.create(
  1084. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  1085. )
  1086. self.powerport1 = PowerPort.objects.create(device=self.device, name='Test Power Port 1')
  1087. self.powerport2 = PowerPort.objects.create(device=self.device, name='Test Power Port 2')
  1088. self.powerport3 = PowerPort.objects.create(device=self.device, name='Test Power Port 3')
  1089. def test_get_powerport(self):
  1090. url = reverse('dcim-api:powerport-detail', kwargs={'pk': self.powerport1.pk})
  1091. response = self.client.get(url, **self.header)
  1092. self.assertEqual(response.data['name'], self.powerport1.name)
  1093. def test_list_powerports(self):
  1094. url = reverse('dcim-api:powerport-list')
  1095. response = self.client.get(url, **self.header)
  1096. self.assertEqual(response.data['count'], 3)
  1097. def test_create_powerport(self):
  1098. data = {
  1099. 'device': self.device.pk,
  1100. 'name': 'Test Power Port 4',
  1101. }
  1102. url = reverse('dcim-api:powerport-list')
  1103. response = self.client.post(url, data, **self.header)
  1104. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  1105. self.assertEqual(PowerPort.objects.count(), 4)
  1106. powerport4 = PowerPort.objects.get(pk=response.data['id'])
  1107. self.assertEqual(powerport4.device_id, data['device'])
  1108. self.assertEqual(powerport4.name, data['name'])
  1109. def test_update_powerport(self):
  1110. poweroutlet = PowerOutlet.objects.create(device=self.device, name='Test Power Outlet 1')
  1111. data = {
  1112. 'device': self.device.pk,
  1113. 'name': 'Test Power Port X',
  1114. 'power_outlet': poweroutlet.pk,
  1115. }
  1116. url = reverse('dcim-api:powerport-detail', kwargs={'pk': self.powerport1.pk})
  1117. response = self.client.put(url, data, **self.header)
  1118. self.assertHttpStatus(response, status.HTTP_200_OK)
  1119. self.assertEqual(PowerPort.objects.count(), 3)
  1120. powerport1 = PowerPort.objects.get(pk=response.data['id'])
  1121. self.assertEqual(powerport1.name, data['name'])
  1122. self.assertEqual(powerport1.power_outlet_id, data['power_outlet'])
  1123. def test_delete_powerport(self):
  1124. url = reverse('dcim-api:powerport-detail', kwargs={'pk': self.powerport1.pk})
  1125. response = self.client.delete(url, **self.header)
  1126. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  1127. self.assertEqual(PowerPort.objects.count(), 2)
  1128. class PowerOutletTest(HttpStatusMixin, APITestCase):
  1129. def setUp(self):
  1130. user = User.objects.create(username='testuser', is_superuser=True)
  1131. token = Token.objects.create(user=user)
  1132. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1133. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1134. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1135. devicetype = DeviceType.objects.create(
  1136. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1137. )
  1138. devicerole = DeviceRole.objects.create(
  1139. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1140. )
  1141. self.device = Device.objects.create(
  1142. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  1143. )
  1144. self.poweroutlet1 = PowerOutlet.objects.create(device=self.device, name='Test Power Outlet 1')
  1145. self.poweroutlet2 = PowerOutlet.objects.create(device=self.device, name='Test Power Outlet 2')
  1146. self.poweroutlet3 = PowerOutlet.objects.create(device=self.device, name='Test Power Outlet 3')
  1147. def test_get_poweroutlet(self):
  1148. url = reverse('dcim-api:poweroutlet-detail', kwargs={'pk': self.poweroutlet1.pk})
  1149. response = self.client.get(url, **self.header)
  1150. self.assertEqual(response.data['name'], self.poweroutlet1.name)
  1151. def test_list_poweroutlets(self):
  1152. url = reverse('dcim-api:poweroutlet-list')
  1153. response = self.client.get(url, **self.header)
  1154. self.assertEqual(response.data['count'], 3)
  1155. def test_create_poweroutlet(self):
  1156. data = {
  1157. 'device': self.device.pk,
  1158. 'name': 'Test Power Outlet 4',
  1159. }
  1160. url = reverse('dcim-api:poweroutlet-list')
  1161. response = self.client.post(url, data, **self.header)
  1162. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  1163. self.assertEqual(PowerOutlet.objects.count(), 4)
  1164. poweroutlet4 = PowerOutlet.objects.get(pk=response.data['id'])
  1165. self.assertEqual(poweroutlet4.device_id, data['device'])
  1166. self.assertEqual(poweroutlet4.name, data['name'])
  1167. def test_update_poweroutlet(self):
  1168. data = {
  1169. 'device': self.device.pk,
  1170. 'name': 'Test Power Outlet X',
  1171. }
  1172. url = reverse('dcim-api:poweroutlet-detail', kwargs={'pk': self.poweroutlet1.pk})
  1173. response = self.client.put(url, data, **self.header)
  1174. self.assertHttpStatus(response, status.HTTP_200_OK)
  1175. self.assertEqual(PowerOutlet.objects.count(), 3)
  1176. poweroutlet1 = PowerOutlet.objects.get(pk=response.data['id'])
  1177. self.assertEqual(poweroutlet1.name, data['name'])
  1178. def test_delete_poweroutlet(self):
  1179. url = reverse('dcim-api:poweroutlet-detail', kwargs={'pk': self.poweroutlet1.pk})
  1180. response = self.client.delete(url, **self.header)
  1181. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  1182. self.assertEqual(PowerOutlet.objects.count(), 2)
  1183. class InterfaceTest(HttpStatusMixin, APITestCase):
  1184. def setUp(self):
  1185. user = User.objects.create(username='testuser', is_superuser=True)
  1186. token = Token.objects.create(user=user)
  1187. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1188. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1189. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1190. devicetype = DeviceType.objects.create(
  1191. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1192. )
  1193. devicerole = DeviceRole.objects.create(
  1194. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1195. )
  1196. self.device = Device.objects.create(
  1197. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  1198. )
  1199. self.interface1 = Interface.objects.create(device=self.device, name='Test Interface 1')
  1200. self.interface2 = Interface.objects.create(device=self.device, name='Test Interface 2')
  1201. self.interface3 = Interface.objects.create(device=self.device, name='Test Interface 3')
  1202. def test_get_interface(self):
  1203. url = reverse('dcim-api:interface-detail', kwargs={'pk': self.interface1.pk})
  1204. response = self.client.get(url, **self.header)
  1205. self.assertEqual(response.data['name'], self.interface1.name)
  1206. def test_get_interface_graphs(self):
  1207. self.graph1 = Graph.objects.create(
  1208. type=GRAPH_TYPE_INTERFACE, name='Test Graph 1',
  1209. source='http://example.com/graphs.py?interface={{ obj.name }}&foo=1'
  1210. )
  1211. self.graph2 = Graph.objects.create(
  1212. type=GRAPH_TYPE_INTERFACE, name='Test Graph 2',
  1213. source='http://example.com/graphs.py?interface={{ obj.name }}&foo=2'
  1214. )
  1215. self.graph3 = Graph.objects.create(
  1216. type=GRAPH_TYPE_INTERFACE, name='Test Graph 3',
  1217. source='http://example.com/graphs.py?interface={{ obj.name }}&foo=3'
  1218. )
  1219. url = reverse('dcim-api:interface-graphs', kwargs={'pk': self.interface1.pk})
  1220. response = self.client.get(url, **self.header)
  1221. self.assertEqual(len(response.data), 3)
  1222. self.assertEqual(response.data[0]['embed_url'], 'http://example.com/graphs.py?interface=Test Interface 1&foo=1')
  1223. def test_list_interfaces(self):
  1224. url = reverse('dcim-api:interface-list')
  1225. response = self.client.get(url, **self.header)
  1226. self.assertEqual(response.data['count'], 3)
  1227. def test_create_interface(self):
  1228. data = {
  1229. 'device': self.device.pk,
  1230. 'name': 'Test Interface 4',
  1231. }
  1232. url = reverse('dcim-api:interface-list')
  1233. response = self.client.post(url, data, **self.header)
  1234. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  1235. self.assertEqual(Interface.objects.count(), 4)
  1236. interface4 = Interface.objects.get(pk=response.data['id'])
  1237. self.assertEqual(interface4.device_id, data['device'])
  1238. self.assertEqual(interface4.name, data['name'])
  1239. def test_update_interface(self):
  1240. lag_interface = Interface.objects.create(
  1241. device=self.device, name='Test LAG Interface', form_factor=IFACE_FF_LAG
  1242. )
  1243. data = {
  1244. 'device': self.device.pk,
  1245. 'name': 'Test Interface X',
  1246. 'lag': lag_interface.pk,
  1247. }
  1248. url = reverse('dcim-api:interface-detail', kwargs={'pk': self.interface1.pk})
  1249. response = self.client.put(url, data, **self.header)
  1250. self.assertHttpStatus(response, status.HTTP_200_OK)
  1251. self.assertEqual(Interface.objects.count(), 4)
  1252. interface1 = Interface.objects.get(pk=response.data['id'])
  1253. self.assertEqual(interface1.name, data['name'])
  1254. self.assertEqual(interface1.lag_id, data['lag'])
  1255. def test_delete_interface(self):
  1256. url = reverse('dcim-api:interface-detail', kwargs={'pk': self.interface1.pk})
  1257. response = self.client.delete(url, **self.header)
  1258. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  1259. self.assertEqual(Interface.objects.count(), 2)
  1260. class DeviceBayTest(HttpStatusMixin, APITestCase):
  1261. def setUp(self):
  1262. user = User.objects.create(username='testuser', is_superuser=True)
  1263. token = Token.objects.create(user=user)
  1264. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1265. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1266. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1267. self.devicetype1 = DeviceType.objects.create(
  1268. manufacturer=manufacturer, model='Parent Device Type', slug='parent-device-type',
  1269. subdevice_role=SUBDEVICE_ROLE_PARENT
  1270. )
  1271. self.devicetype2 = DeviceType.objects.create(
  1272. manufacturer=manufacturer, model='Child Device Type', slug='child-device-type',
  1273. subdevice_role=SUBDEVICE_ROLE_CHILD
  1274. )
  1275. devicerole = DeviceRole.objects.create(
  1276. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1277. )
  1278. self.parent_device = Device.objects.create(
  1279. device_type=self.devicetype1, device_role=devicerole, name='Parent Device 1', site=site
  1280. )
  1281. self.child_device = Device.objects.create(
  1282. device_type=self.devicetype2, device_role=devicerole, name='Child Device 1', site=site
  1283. )
  1284. self.devicebay1 = DeviceBay.objects.create(device=self.parent_device, name='Test Device Bay 1')
  1285. self.devicebay2 = DeviceBay.objects.create(device=self.parent_device, name='Test Device Bay 2')
  1286. self.devicebay3 = DeviceBay.objects.create(device=self.parent_device, name='Test Device Bay 3')
  1287. def test_get_devicebay(self):
  1288. url = reverse('dcim-api:devicebay-detail', kwargs={'pk': self.devicebay1.pk})
  1289. response = self.client.get(url, **self.header)
  1290. self.assertEqual(response.data['name'], self.devicebay1.name)
  1291. def test_list_devicebays(self):
  1292. url = reverse('dcim-api:devicebay-list')
  1293. response = self.client.get(url, **self.header)
  1294. self.assertEqual(response.data['count'], 3)
  1295. def test_create_devicebay(self):
  1296. data = {
  1297. 'device': self.parent_device.pk,
  1298. 'name': 'Test Device Bay 4',
  1299. 'installed_device': self.child_device.pk,
  1300. }
  1301. url = reverse('dcim-api:devicebay-list')
  1302. response = self.client.post(url, data, **self.header)
  1303. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  1304. self.assertEqual(DeviceBay.objects.count(), 4)
  1305. devicebay4 = DeviceBay.objects.get(pk=response.data['id'])
  1306. self.assertEqual(devicebay4.device_id, data['device'])
  1307. self.assertEqual(devicebay4.name, data['name'])
  1308. self.assertEqual(devicebay4.installed_device_id, data['installed_device'])
  1309. def test_update_devicebay(self):
  1310. data = {
  1311. 'device': self.parent_device.pk,
  1312. 'name': 'Test Device Bay X',
  1313. 'installed_device': self.child_device.pk,
  1314. }
  1315. url = reverse('dcim-api:devicebay-detail', kwargs={'pk': self.devicebay1.pk})
  1316. response = self.client.put(url, data, **self.header)
  1317. self.assertHttpStatus(response, status.HTTP_200_OK)
  1318. self.assertEqual(DeviceBay.objects.count(), 3)
  1319. devicebay1 = DeviceBay.objects.get(pk=response.data['id'])
  1320. self.assertEqual(devicebay1.name, data['name'])
  1321. self.assertEqual(devicebay1.installed_device_id, data['installed_device'])
  1322. def test_delete_devicebay(self):
  1323. url = reverse('dcim-api:devicebay-detail', kwargs={'pk': self.devicebay1.pk})
  1324. response = self.client.delete(url, **self.header)
  1325. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  1326. self.assertEqual(DeviceBay.objects.count(), 2)
  1327. class InventoryItemTest(HttpStatusMixin, APITestCase):
  1328. def setUp(self):
  1329. user = User.objects.create(username='testuser', is_superuser=True)
  1330. token = Token.objects.create(user=user)
  1331. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1332. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1333. self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1334. devicetype = DeviceType.objects.create(
  1335. manufacturer=self.manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1336. )
  1337. devicerole = DeviceRole.objects.create(
  1338. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1339. )
  1340. self.device = Device.objects.create(
  1341. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  1342. )
  1343. self.inventoryitem1 = InventoryItem.objects.create(device=self.device, name='Test Inventory Item 1')
  1344. self.inventoryitem2 = InventoryItem.objects.create(device=self.device, name='Test Inventory Item 2')
  1345. self.inventoryitem3 = InventoryItem.objects.create(device=self.device, name='Test Inventory Item 3')
  1346. def test_get_inventoryitem(self):
  1347. url = reverse('dcim-api:inventoryitem-detail', kwargs={'pk': self.inventoryitem1.pk})
  1348. response = self.client.get(url, **self.header)
  1349. self.assertEqual(response.data['name'], self.inventoryitem1.name)
  1350. def test_list_inventoryitems(self):
  1351. url = reverse('dcim-api:inventoryitem-list')
  1352. response = self.client.get(url, **self.header)
  1353. self.assertEqual(response.data['count'], 3)
  1354. def test_create_inventoryitem(self):
  1355. data = {
  1356. 'device': self.device.pk,
  1357. 'parent': self.inventoryitem1.pk,
  1358. 'name': 'Test Inventory Item 4',
  1359. 'manufacturer': self.manufacturer.pk,
  1360. }
  1361. url = reverse('dcim-api:inventoryitem-list')
  1362. response = self.client.post(url, data, **self.header)
  1363. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  1364. self.assertEqual(InventoryItem.objects.count(), 4)
  1365. inventoryitem4 = InventoryItem.objects.get(pk=response.data['id'])
  1366. self.assertEqual(inventoryitem4.device_id, data['device'])
  1367. self.assertEqual(inventoryitem4.parent_id, data['parent'])
  1368. self.assertEqual(inventoryitem4.name, data['name'])
  1369. self.assertEqual(inventoryitem4.manufacturer_id, data['manufacturer'])
  1370. def test_update_inventoryitem(self):
  1371. data = {
  1372. 'device': self.device.pk,
  1373. 'parent': self.inventoryitem1.pk,
  1374. 'name': 'Test Inventory Item X',
  1375. 'manufacturer': self.manufacturer.pk,
  1376. }
  1377. url = reverse('dcim-api:inventoryitem-detail', kwargs={'pk': self.inventoryitem1.pk})
  1378. response = self.client.put(url, data, **self.header)
  1379. self.assertHttpStatus(response, status.HTTP_200_OK)
  1380. self.assertEqual(InventoryItem.objects.count(), 3)
  1381. inventoryitem1 = InventoryItem.objects.get(pk=response.data['id'])
  1382. self.assertEqual(inventoryitem1.device_id, data['device'])
  1383. self.assertEqual(inventoryitem1.parent_id, data['parent'])
  1384. self.assertEqual(inventoryitem1.name, data['name'])
  1385. self.assertEqual(inventoryitem1.manufacturer_id, data['manufacturer'])
  1386. def test_delete_inventoryitem(self):
  1387. url = reverse('dcim-api:inventoryitem-detail', kwargs={'pk': self.inventoryitem1.pk})
  1388. response = self.client.delete(url, **self.header)
  1389. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  1390. self.assertEqual(InventoryItem.objects.count(), 2)
  1391. class ConsoleConnectionTest(HttpStatusMixin, APITestCase):
  1392. def setUp(self):
  1393. user = User.objects.create(username='testuser', is_superuser=True)
  1394. token = Token.objects.create(user=user)
  1395. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1396. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1397. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1398. devicetype = DeviceType.objects.create(
  1399. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1400. )
  1401. devicerole = DeviceRole.objects.create(
  1402. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1403. )
  1404. device1 = Device.objects.create(
  1405. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  1406. )
  1407. device2 = Device.objects.create(
  1408. device_type=devicetype, device_role=devicerole, name='Test Device 2', site=site
  1409. )
  1410. cs_port1 = ConsoleServerPort.objects.create(device=device1, name='Test CS Port 1')
  1411. cs_port2 = ConsoleServerPort.objects.create(device=device1, name='Test CS Port 2')
  1412. cs_port3 = ConsoleServerPort.objects.create(device=device1, name='Test CS Port 3')
  1413. ConsolePort.objects.create(
  1414. device=device2, cs_port=cs_port1, name='Test Console Port 1', connection_status=True
  1415. )
  1416. ConsolePort.objects.create(
  1417. device=device2, cs_port=cs_port2, name='Test Console Port 2', connection_status=True
  1418. )
  1419. ConsolePort.objects.create(
  1420. device=device2, cs_port=cs_port3, name='Test Console Port 3', connection_status=True
  1421. )
  1422. def test_list_consoleconnections(self):
  1423. url = reverse('dcim-api:consoleconnections-list')
  1424. response = self.client.get(url, **self.header)
  1425. self.assertEqual(response.data['count'], 3)
  1426. class PowerConnectionTest(HttpStatusMixin, APITestCase):
  1427. def setUp(self):
  1428. user = User.objects.create(username='testuser', is_superuser=True)
  1429. token = Token.objects.create(user=user)
  1430. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1431. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1432. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1433. devicetype = DeviceType.objects.create(
  1434. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1435. )
  1436. devicerole = DeviceRole.objects.create(
  1437. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1438. )
  1439. device1 = Device.objects.create(
  1440. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  1441. )
  1442. device2 = Device.objects.create(
  1443. device_type=devicetype, device_role=devicerole, name='Test Device 2', site=site
  1444. )
  1445. power_outlet1 = PowerOutlet.objects.create(device=device1, name='Test Power Outlet 1')
  1446. power_outlet2 = PowerOutlet.objects.create(device=device1, name='Test Power Outlet 2')
  1447. power_outlet3 = PowerOutlet.objects.create(device=device1, name='Test Power Outlet 3')
  1448. PowerPort.objects.create(
  1449. device=device2, power_outlet=power_outlet1, name='Test Power Port 1', connection_status=True
  1450. )
  1451. PowerPort.objects.create(
  1452. device=device2, power_outlet=power_outlet2, name='Test Power Port 2', connection_status=True
  1453. )
  1454. PowerPort.objects.create(
  1455. device=device2, power_outlet=power_outlet3, name='Test Power Port 3', connection_status=True
  1456. )
  1457. def test_list_powerconnections(self):
  1458. url = reverse('dcim-api:powerconnections-list')
  1459. response = self.client.get(url, **self.header)
  1460. self.assertEqual(response.data['count'], 3)
  1461. class InterfaceConnectionTest(HttpStatusMixin, APITestCase):
  1462. def setUp(self):
  1463. user = User.objects.create(username='testuser', is_superuser=True)
  1464. token = Token.objects.create(user=user)
  1465. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1466. site = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1467. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1468. devicetype = DeviceType.objects.create(
  1469. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1470. )
  1471. devicerole = DeviceRole.objects.create(
  1472. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1473. )
  1474. self.device = Device.objects.create(
  1475. device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
  1476. )
  1477. self.interface1 = Interface.objects.create(device=self.device, name='Test Interface 1')
  1478. self.interface2 = Interface.objects.create(device=self.device, name='Test Interface 2')
  1479. self.interface3 = Interface.objects.create(device=self.device, name='Test Interface 3')
  1480. self.interface4 = Interface.objects.create(device=self.device, name='Test Interface 4')
  1481. self.interface5 = Interface.objects.create(device=self.device, name='Test Interface 5')
  1482. self.interface6 = Interface.objects.create(device=self.device, name='Test Interface 6')
  1483. self.interface7 = Interface.objects.create(device=self.device, name='Test Interface 7')
  1484. self.interface8 = Interface.objects.create(device=self.device, name='Test Interface 8')
  1485. self.interfaceconnection1 = InterfaceConnection.objects.create(
  1486. interface_a=self.interface1, interface_b=self.interface2
  1487. )
  1488. self.interfaceconnection2 = InterfaceConnection.objects.create(
  1489. interface_a=self.interface3, interface_b=self.interface4
  1490. )
  1491. self.interfaceconnection3 = InterfaceConnection.objects.create(
  1492. interface_a=self.interface5, interface_b=self.interface6
  1493. )
  1494. def test_get_interfaceconnection(self):
  1495. url = reverse('dcim-api:interfaceconnection-detail', kwargs={'pk': self.interfaceconnection1.pk})
  1496. response = self.client.get(url, **self.header)
  1497. self.assertEqual(response.data['interface_a']['id'], self.interfaceconnection1.interface_a_id)
  1498. self.assertEqual(response.data['interface_b']['id'], self.interfaceconnection1.interface_b_id)
  1499. def test_list_interfaceconnections(self):
  1500. url = reverse('dcim-api:interfaceconnection-list')
  1501. response = self.client.get(url, **self.header)
  1502. self.assertEqual(response.data['count'], 3)
  1503. def test_create_interfaceconnection(self):
  1504. data = {
  1505. 'interface_a': self.interface7.pk,
  1506. 'interface_b': self.interface8.pk,
  1507. }
  1508. url = reverse('dcim-api:interfaceconnection-list')
  1509. response = self.client.post(url, data, **self.header)
  1510. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  1511. self.assertEqual(InterfaceConnection.objects.count(), 4)
  1512. interfaceconnection4 = InterfaceConnection.objects.get(pk=response.data['id'])
  1513. self.assertEqual(interfaceconnection4.interface_a_id, data['interface_a'])
  1514. self.assertEqual(interfaceconnection4.interface_b_id, data['interface_b'])
  1515. def test_update_interfaceconnection(self):
  1516. new_connection_status = not self.interfaceconnection1.connection_status
  1517. data = {
  1518. 'interface_a': self.interface7.pk,
  1519. 'interface_b': self.interface8.pk,
  1520. 'connection_status': new_connection_status,
  1521. }
  1522. url = reverse('dcim-api:interfaceconnection-detail', kwargs={'pk': self.interfaceconnection1.pk})
  1523. response = self.client.put(url, data, **self.header)
  1524. self.assertHttpStatus(response, status.HTTP_200_OK)
  1525. self.assertEqual(InterfaceConnection.objects.count(), 3)
  1526. interfaceconnection1 = InterfaceConnection.objects.get(pk=response.data['id'])
  1527. self.assertEqual(interfaceconnection1.interface_a_id, data['interface_a'])
  1528. self.assertEqual(interfaceconnection1.interface_b_id, data['interface_b'])
  1529. self.assertEqual(interfaceconnection1.connection_status, data['connection_status'])
  1530. def test_delete_interfaceconnection(self):
  1531. url = reverse('dcim-api:interfaceconnection-detail', kwargs={'pk': self.interfaceconnection1.pk})
  1532. response = self.client.delete(url, **self.header)
  1533. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  1534. self.assertEqual(InterfaceConnection.objects.count(), 2)
  1535. class ConnectedDeviceTest(HttpStatusMixin, APITestCase):
  1536. def setUp(self):
  1537. user = User.objects.create(username='testuser', is_superuser=True)
  1538. token = Token.objects.create(user=user)
  1539. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  1540. self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1')
  1541. self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
  1542. manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
  1543. self.devicetype1 = DeviceType.objects.create(
  1544. manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
  1545. )
  1546. self.devicetype2 = DeviceType.objects.create(
  1547. manufacturer=manufacturer, model='Test Device Type 2', slug='test-device-type-2'
  1548. )
  1549. self.devicerole1 = DeviceRole.objects.create(
  1550. name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
  1551. )
  1552. self.devicerole2 = DeviceRole.objects.create(
  1553. name='Test Device Role 2', slug='test-device-role-2', color='00ff00'
  1554. )
  1555. self.device1 = Device.objects.create(
  1556. device_type=self.devicetype1, device_role=self.devicerole1, name='TestDevice1', site=self.site1
  1557. )
  1558. self.device2 = Device.objects.create(
  1559. device_type=self.devicetype1, device_role=self.devicerole1, name='TestDevice2', site=self.site1
  1560. )
  1561. self.interface1 = Interface.objects.create(device=self.device1, name='eth0')
  1562. self.interface2 = Interface.objects.create(device=self.device2, name='eth0')
  1563. InterfaceConnection.objects.create(interface_a=self.interface1, interface_b=self.interface2)
  1564. def test_get_connected_device(self):
  1565. url = reverse('dcim-api:connected-device-list')
  1566. response = self.client.get(url + '?peer-device=TestDevice2&peer-interface=eth0', **self.header)
  1567. self.assertHttpStatus(response, status.HTTP_200_OK)
  1568. self.assertEqual(response.data['name'], self.device1.name)