/pyramid/tests/test_scripts/test_pcreate.py

https://github.com/ledmonster/pyramid · Python · 244 lines · 217 code · 27 blank · 0 comment · 0 complexity · fc289b5160de79d3e6a08787dd3edc54 MD5 · raw file

  1. import unittest
  2. class TestPCreateCommand(unittest.TestCase):
  3. def setUp(self):
  4. from pyramid.compat import NativeIO
  5. self.out_ = NativeIO()
  6. def out(self, msg):
  7. self.out_.write(msg)
  8. def _getTargetClass(self):
  9. from pyramid.scripts.pcreate import PCreateCommand
  10. return PCreateCommand
  11. def _makeOne(self, *args, **kw):
  12. effargs = ['pcreate']
  13. effargs.extend(args)
  14. cmd = self._getTargetClass()(effargs, **kw)
  15. cmd.out = self.out
  16. return cmd
  17. def test_run_show_scaffolds_exist(self):
  18. cmd = self._makeOne('-l')
  19. result = cmd.run()
  20. self.assertEqual(result, 0)
  21. out = self.out_.getvalue()
  22. self.assertTrue(out.startswith('Available scaffolds'))
  23. def test_run_show_scaffolds_none_exist(self):
  24. cmd = self._makeOne('-l')
  25. cmd.scaffolds = []
  26. result = cmd.run()
  27. self.assertEqual(result, 0)
  28. out = self.out_.getvalue()
  29. self.assertTrue(out.startswith('No scaffolds available'))
  30. def test_run_no_scaffold_no_args(self):
  31. cmd = self._makeOne(quiet=True)
  32. result = cmd.run()
  33. self.assertEqual(result, 2)
  34. def test_run_no_scaffold_name(self):
  35. cmd = self._makeOne('dummy')
  36. result = cmd.run()
  37. self.assertEqual(result, 2)
  38. out = self.out_.getvalue()
  39. self.assertTrue(out.startswith(
  40. 'You must provide at least one scaffold name'))
  41. def test_no_project_name(self):
  42. cmd = self._makeOne('-s', 'dummy')
  43. result = cmd.run()
  44. self.assertEqual(result, 2)
  45. out = self.out_.getvalue()
  46. self.assertTrue(out.startswith('You must provide a project name'))
  47. def test_unknown_scaffold_name(self):
  48. cmd = self._makeOne('-s', 'dummyXX', 'distro')
  49. result = cmd.run()
  50. self.assertEqual(result, 2)
  51. out = self.out_.getvalue()
  52. self.assertTrue(out.startswith('Unavailable scaffolds'))
  53. def test_known_scaffold_single_rendered(self):
  54. import os
  55. cmd = self._makeOne('-s', 'dummy', 'Distro')
  56. scaffold = DummyScaffold('dummy')
  57. cmd.scaffolds = [scaffold]
  58. cmd.pyramid_dist = DummyDist("0.1")
  59. result = cmd.run()
  60. self.assertEqual(result, 0)
  61. self.assertEqual(
  62. scaffold.output_dir,
  63. os.path.normpath(os.path.join(os.getcwd(), 'Distro'))
  64. )
  65. self.assertEqual(
  66. scaffold.vars,
  67. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  68. 'pyramid_version': '0.1', 'pyramid_docs_branch':'0.1-branch'})
  69. def test_scaffold_with_hyphen_in_project_name(self):
  70. import os
  71. cmd = self._makeOne('-s', 'dummy', 'Distro-')
  72. scaffold = DummyScaffold('dummy')
  73. cmd.scaffolds = [scaffold]
  74. cmd.pyramid_dist = DummyDist("0.1")
  75. result = cmd.run()
  76. self.assertEqual(result, 0)
  77. self.assertEqual(
  78. scaffold.output_dir,
  79. os.path.normpath(os.path.join(os.getcwd(), 'Distro-'))
  80. )
  81. self.assertEqual(
  82. scaffold.vars,
  83. {'project': 'Distro-', 'egg': 'Distro_', 'package': 'distro_',
  84. 'pyramid_version': '0.1', 'pyramid_docs_branch':'0.1-branch'})
  85. def test_known_scaffold_absolute_path(self):
  86. import os
  87. path = os.path.abspath('Distro')
  88. cmd = self._makeOne('-s', 'dummy', path)
  89. cmd.pyramid_dist = DummyDist("0.1")
  90. scaffold = DummyScaffold('dummy')
  91. cmd.scaffolds = [scaffold]
  92. cmd.pyramid_dist = DummyDist("0.1")
  93. result = cmd.run()
  94. self.assertEqual(result, 0)
  95. self.assertEqual(
  96. scaffold.output_dir,
  97. os.path.normpath(os.path.join(os.getcwd(), 'Distro'))
  98. )
  99. self.assertEqual(
  100. scaffold.vars,
  101. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  102. 'pyramid_version': '0.1', 'pyramid_docs_branch':'0.1-branch'})
  103. def test_known_scaffold_multiple_rendered(self):
  104. import os
  105. cmd = self._makeOne('-s', 'dummy1', '-s', 'dummy2', 'Distro')
  106. scaffold1 = DummyScaffold('dummy1')
  107. scaffold2 = DummyScaffold('dummy2')
  108. cmd.scaffolds = [scaffold1, scaffold2]
  109. cmd.pyramid_dist = DummyDist("0.1")
  110. result = cmd.run()
  111. self.assertEqual(result, 0)
  112. self.assertEqual(
  113. scaffold1.output_dir,
  114. os.path.normpath(os.path.join(os.getcwd(), 'Distro'))
  115. )
  116. self.assertEqual(
  117. scaffold1.vars,
  118. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  119. 'pyramid_version': '0.1', 'pyramid_docs_branch':'0.1-branch'})
  120. self.assertEqual(
  121. scaffold2.output_dir,
  122. os.path.normpath(os.path.join(os.getcwd(), 'Distro'))
  123. )
  124. self.assertEqual(
  125. scaffold2.vars,
  126. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  127. 'pyramid_version': '0.1', 'pyramid_docs_branch':'0.1-branch'})
  128. def test_known_scaffold_with_path_as_project_target_rendered(self):
  129. import os
  130. cmd = self._makeOne('-s', 'dummy', '/tmp/foo/Distro/')
  131. scaffold = DummyScaffold('dummy')
  132. cmd.scaffolds = [scaffold]
  133. cmd.pyramid_dist = DummyDist("0.1")
  134. result = cmd.run()
  135. self.assertEqual(result, 0)
  136. self.assertEqual(
  137. scaffold.output_dir,
  138. os.path.normpath(os.path.join(os.getcwd(), '/tmp/foo/Distro'))
  139. )
  140. self.assertEqual(
  141. scaffold.vars,
  142. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  143. 'pyramid_version': '0.1', 'pyramid_docs_branch':'0.1-branch'})
  144. def test_scaffold_with_prod_pyramid_version(self):
  145. cmd = self._makeOne('-s', 'dummy', 'Distro')
  146. scaffold = DummyScaffold('dummy')
  147. cmd.scaffolds = [scaffold]
  148. cmd.pyramid_dist = DummyDist("0.2")
  149. result = cmd.run()
  150. self.assertEqual(result, 0)
  151. self.assertEqual(
  152. scaffold.vars,
  153. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  154. 'pyramid_version': '0.2', 'pyramid_docs_branch':'0.2-branch'})
  155. def test_scaffold_with_prod_pyramid_long_version(self):
  156. cmd = self._makeOne('-s', 'dummy', 'Distro')
  157. scaffold = DummyScaffold('dummy')
  158. cmd.scaffolds = [scaffold]
  159. cmd.pyramid_dist = DummyDist("0.2.1")
  160. result = cmd.run()
  161. self.assertEqual(result, 0)
  162. self.assertEqual(
  163. scaffold.vars,
  164. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  165. 'pyramid_version': '0.2.1', 'pyramid_docs_branch':'0.2-branch'})
  166. def test_scaffold_with_prod_pyramid_unparsable_version(self):
  167. cmd = self._makeOne('-s', 'dummy', 'Distro')
  168. scaffold = DummyScaffold('dummy')
  169. cmd.scaffolds = [scaffold]
  170. cmd.pyramid_dist = DummyDist("abc")
  171. result = cmd.run()
  172. self.assertEqual(result, 0)
  173. self.assertEqual(
  174. scaffold.vars,
  175. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  176. 'pyramid_version': 'abc', 'pyramid_docs_branch':'latest'})
  177. def test_scaffold_with_dev_pyramid_version(self):
  178. cmd = self._makeOne('-s', 'dummy', 'Distro')
  179. scaffold = DummyScaffold('dummy')
  180. cmd.scaffolds = [scaffold]
  181. cmd.pyramid_dist = DummyDist("0.12dev")
  182. result = cmd.run()
  183. self.assertEqual(result, 0)
  184. self.assertEqual(
  185. scaffold.vars,
  186. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  187. 'pyramid_version': '0.12dev',
  188. 'pyramid_docs_branch': 'master'})
  189. def test_scaffold_with_dev_pyramid_long_version(self):
  190. cmd = self._makeOne('-s', 'dummy', 'Distro')
  191. scaffold = DummyScaffold('dummy')
  192. cmd.scaffolds = [scaffold]
  193. cmd.pyramid_dist = DummyDist("0.10.1dev")
  194. result = cmd.run()
  195. self.assertEqual(result, 0)
  196. self.assertEqual(
  197. scaffold.vars,
  198. {'project': 'Distro', 'egg': 'Distro', 'package': 'distro',
  199. 'pyramid_version': '0.10.1dev',
  200. 'pyramid_docs_branch': 'master'})
  201. class Test_main(unittest.TestCase):
  202. def _callFUT(self, argv):
  203. from pyramid.scripts.pcreate import main
  204. return main(argv, quiet=True)
  205. def test_it(self):
  206. result = self._callFUT(['pcreate'])
  207. self.assertEqual(result, 2)
  208. class DummyScaffold(object):
  209. def __init__(self, name):
  210. self.name = name
  211. def run(self, command, output_dir, vars):
  212. self.command = command
  213. self.output_dir = output_dir
  214. self.vars = vars
  215. class DummyDist(object):
  216. def __init__(self, version):
  217. self.version = version