sort_service_test.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. from fig.project import sort_service_dicts, DependencyError
  2. from . import unittest
  3. class SortServiceTest(unittest.TestCase):
  4. def test_sort_service_dicts_1(self):
  5. services = [
  6. {
  7. 'links': ['redis'],
  8. 'name': 'web'
  9. },
  10. {
  11. 'name': 'grunt'
  12. },
  13. {
  14. 'name': 'redis'
  15. }
  16. ]
  17. sorted_services = sort_service_dicts(services)
  18. self.assertEqual(len(sorted_services), 3)
  19. self.assertEqual(sorted_services[0]['name'], 'grunt')
  20. self.assertEqual(sorted_services[1]['name'], 'redis')
  21. self.assertEqual(sorted_services[2]['name'], 'web')
  22. def test_sort_service_dicts_2(self):
  23. services = [
  24. {
  25. 'links': ['redis', 'postgres'],
  26. 'name': 'web'
  27. },
  28. {
  29. 'name': 'postgres',
  30. 'links': ['redis']
  31. },
  32. {
  33. 'name': 'redis'
  34. }
  35. ]
  36. sorted_services = sort_service_dicts(services)
  37. self.assertEqual(len(sorted_services), 3)
  38. self.assertEqual(sorted_services[0]['name'], 'redis')
  39. self.assertEqual(sorted_services[1]['name'], 'postgres')
  40. self.assertEqual(sorted_services[2]['name'], 'web')
  41. def test_sort_service_dicts_3(self):
  42. services = [
  43. {
  44. 'name': 'child'
  45. },
  46. {
  47. 'name': 'parent',
  48. 'links': ['child']
  49. },
  50. {
  51. 'links': ['parent'],
  52. 'name': 'grandparent'
  53. },
  54. ]
  55. sorted_services = sort_service_dicts(services)
  56. self.assertEqual(len(sorted_services), 3)
  57. self.assertEqual(sorted_services[0]['name'], 'child')
  58. self.assertEqual(sorted_services[1]['name'], 'parent')
  59. self.assertEqual(sorted_services[2]['name'], 'grandparent')
  60. def test_sort_service_dicts_circular_imports(self):
  61. services = [
  62. {
  63. 'links': ['redis'],
  64. 'name': 'web'
  65. },
  66. {
  67. 'name': 'redis',
  68. 'links': ['web']
  69. },
  70. ]
  71. try:
  72. sort_service_dicts(services)
  73. except DependencyError as e:
  74. self.assertIn('redis', e.msg)
  75. self.assertIn('web', e.msg)
  76. else:
  77. self.fail('Should have thrown an DependencyError')
  78. def test_sort_service_dicts_circular_imports_2(self):
  79. services = [
  80. {
  81. 'links': ['postgres', 'redis'],
  82. 'name': 'web'
  83. },
  84. {
  85. 'name': 'redis',
  86. 'links': ['web']
  87. },
  88. {
  89. 'name': 'postgres'
  90. }
  91. ]
  92. try:
  93. sort_service_dicts(services)
  94. except DependencyError as e:
  95. self.assertIn('redis', e.msg)
  96. self.assertIn('web', e.msg)
  97. else:
  98. self.fail('Should have thrown an DependencyError')
  99. def test_sort_service_dicts_circular_imports_3(self):
  100. services = [
  101. {
  102. 'links': ['b'],
  103. 'name': 'a'
  104. },
  105. {
  106. 'name': 'b',
  107. 'links': ['c']
  108. },
  109. {
  110. 'name': 'c',
  111. 'links': ['a']
  112. }
  113. ]
  114. try:
  115. sort_service_dicts(services)
  116. except DependencyError as e:
  117. self.assertIn('a', e.msg)
  118. self.assertIn('b', e.msg)
  119. else:
  120. self.fail('Should have thrown an DependencyError')
  121. def test_sort_service_dicts_self_imports(self):
  122. services = [
  123. {
  124. 'links': ['web'],
  125. 'name': 'web'
  126. },
  127. ]
  128. try:
  129. sort_service_dicts(services)
  130. except DependencyError as e:
  131. self.assertIn('web', e.msg)
  132. else:
  133. self.fail('Should have thrown an DependencyError')