A fork of hyde, the static site generation. Some patches will be pushed upstream.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

126 lines
3.6 KiB

  1. # -*- coding: utf-8 -*-
  2. """
  3. Use nose
  4. `$ pip install nose`
  5. `$ nosetests`
  6. """
  7. from hyde.engine import Engine
  8. from hyde.exceptions import HydeException
  9. from hyde.layout import Layout
  10. from fswrap import File, Folder
  11. from nose.tools import raises, with_setup, nottest
  12. TEST_SITE = File(__file__).parent.child_folder('_test')
  13. TEST_SITE_AT_USER = Folder('~/_test')
  14. @nottest
  15. def create_test_site():
  16. TEST_SITE.make()
  17. @nottest
  18. def delete_test_site():
  19. TEST_SITE.delete()
  20. @nottest
  21. def create_test_site_at_user():
  22. TEST_SITE_AT_USER.make()
  23. @nottest
  24. def delete_test_site_at_user():
  25. TEST_SITE_AT_USER.delete()
  26. @raises(HydeException)
  27. @with_setup(create_test_site, delete_test_site)
  28. def test_ensure_exception_when_site_yaml_exists():
  29. e = Engine(raise_exceptions=True)
  30. File(TEST_SITE.child('site.yaml')).write("Hey")
  31. e.run(e.parse(['-s', unicode(TEST_SITE), 'create']))
  32. @raises(HydeException)
  33. @with_setup(create_test_site, delete_test_site)
  34. def test_ensure_exception_when_content_folder_exists():
  35. e = Engine(raise_exceptions=True)
  36. TEST_SITE.child_folder('content').make()
  37. e.run(e.parse(['-s', unicode(TEST_SITE), 'create']))
  38. @raises(HydeException)
  39. @with_setup(create_test_site, delete_test_site)
  40. def test_ensure_exception_when_layout_folder_exists():
  41. e = Engine(raise_exceptions=True)
  42. TEST_SITE.child_folder('layout').make()
  43. e.run(e.parse(['-s', unicode(TEST_SITE), 'create']))
  44. @with_setup(create_test_site, delete_test_site)
  45. def test_ensure_no_exception_when_empty_site_exists():
  46. e = Engine(raise_exceptions=True)
  47. e.run(e.parse(['-s', unicode(TEST_SITE), 'create']))
  48. verify_site_contents(TEST_SITE, Layout.find_layout())
  49. @with_setup(create_test_site, delete_test_site)
  50. def test_ensure_no_exception_when_forced():
  51. e = Engine(raise_exceptions=True)
  52. TEST_SITE.child_folder('layout').make()
  53. e.run(e.parse(['-s', unicode(TEST_SITE), 'create', '-f']))
  54. verify_site_contents(TEST_SITE, Layout.find_layout())
  55. TEST_SITE.delete()
  56. TEST_SITE.child_folder('content').make()
  57. e.run(e.parse(['-s', unicode(TEST_SITE), 'create', '-f']))
  58. verify_site_contents(TEST_SITE, Layout.find_layout())
  59. TEST_SITE.delete()
  60. TEST_SITE.make()
  61. File(TEST_SITE.child('site.yaml')).write("Hey")
  62. e.run(e.parse(['-s', unicode(TEST_SITE), 'create', '-f']))
  63. verify_site_contents(TEST_SITE, Layout.find_layout())
  64. @with_setup(create_test_site, delete_test_site)
  65. def test_ensure_no_exception_when_sitepath_does_not_exist():
  66. e = Engine(raise_exceptions=True)
  67. TEST_SITE.delete()
  68. e.run(e.parse(['-s', unicode(TEST_SITE), 'create', '-f']))
  69. verify_site_contents(TEST_SITE, Layout.find_layout())
  70. @with_setup(create_test_site_at_user, delete_test_site_at_user)
  71. def test_ensure_can_create_site_at_user():
  72. e = Engine(raise_exceptions=True)
  73. TEST_SITE_AT_USER.delete()
  74. e.run(e.parse(['-s', unicode(TEST_SITE_AT_USER), 'create', '-f']))
  75. verify_site_contents(TEST_SITE_AT_USER, Layout.find_layout())
  76. @nottest
  77. def verify_site_contents(site, layout):
  78. assert site.exists
  79. assert site.child_folder('layout').exists
  80. assert File(site.child('info.yaml')).exists
  81. expected = map(
  82. lambda f: f.get_relative_path(layout), layout.walker.walk_all())
  83. actual = map(lambda f: f.get_relative_path(site), site.walker.walk_all())
  84. assert actual
  85. assert expected
  86. expected.sort()
  87. actual.sort()
  88. assert actual == expected
  89. @raises(HydeException)
  90. @with_setup(create_test_site, delete_test_site)
  91. def test_ensure_exception_when_layout_is_invalid():
  92. e = Engine(raise_exceptions=True)
  93. e.run(e.parse(['-s', unicode(TEST_SITE), 'create', '-l', 'junk']))