aura 0.0.1.pre10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. data/.gitignore +6 -0
  2. data/.travis.yml +3 -0
  3. data/Gemfile +2 -0
  4. data/HISTORY.md +95 -0
  5. data/README.md +53 -0
  6. data/Rakefile +27 -0
  7. data/Scribefile +8 -0
  8. data/app/css/_utilities.scss +88 -0
  9. data/app/css/admin.scss +21 -0
  10. data/app/css/admin/_settings.scss +136 -0
  11. data/app/css/admin/chrome.scss +208 -0
  12. data/app/css/admin/common.scss +78 -0
  13. data/app/css/admin/forms.scss +342 -0
  14. data/app/css/admin/jquery_wysiwyg.scss +96 -0
  15. data/app/css/admin/loading.scss +18 -0
  16. data/app/css/admin/meta.scss +42 -0
  17. data/app/css/admin/reset.scss +46 -0
  18. data/app/css/admin/sections.scss +79 -0
  19. data/app/css/admin/setup.scss +22 -0
  20. data/app/css/admin/sidebar.scss +136 -0
  21. data/app/css/admin/slug.scss +78 -0
  22. data/app/css/admin/uiscreen.scss +22 -0
  23. data/app/css/admin/wysiwyg_field.scss +11 -0
  24. data/app/css/admin_watermark.scss +23 -0
  25. data/app/css/default_home_page.scss +13 -0
  26. data/app/css/login.scss +47 -0
  27. data/app/helpers/admin_helpers.rb +59 -0
  28. data/app/helpers/flash_helpers.rb +86 -0
  29. data/app/helpers/form_builder_helpers.rb +9 -0
  30. data/app/helpers/html_helpers.rb +27 -0
  31. data/app/helpers/jquery_helpers.rb +26 -0
  32. data/app/helpers/main_helpers.rb +67 -0
  33. data/app/helpers/page_helpers.rb +92 -0
  34. data/app/helpers/template_helpers.rb +94 -0
  35. data/app/helpers/user_helpers.rb +45 -0
  36. data/app/init/admin.rb +34 -0
  37. data/app/init/extensions.rb +18 -0
  38. data/app/init/pistol.rb +11 -0
  39. data/app/init/sequel.rb +11 -0
  40. data/app/main.rb +106 -0
  41. data/app/migrations/page.rb +29 -0
  42. data/app/migrations/settings.rb +11 -0
  43. data/app/migrations/user.rb +13 -0
  44. data/app/models/page.rb +116 -0
  45. data/app/models/page_seed.rb +47 -0
  46. data/app/models/settings.rb +59 -0
  47. data/app/models/user.rb +60 -0
  48. data/app/routes/admin.rb +44 -0
  49. data/app/routes/css_js.rb +53 -0
  50. data/app/routes/design_tests.rb +15 -0
  51. data/app/routes/editor.rb +152 -0
  52. data/app/routes/site.rb +33 -0
  53. data/app/routes/user.rb +48 -0
  54. data/app/views/admin/_back_to_dashboard.haml +3 -0
  55. data/app/views/admin/dashboard.haml +46 -0
  56. data/app/views/admin/layout.haml +73 -0
  57. data/app/views/admin/settings.haml +40 -0
  58. data/app/views/admin/settings/database.haml +42 -0
  59. data/app/views/base/crumbs.haml +50 -0
  60. data/app/views/base/delete.haml +19 -0
  61. data/app/views/base/edit.haml +61 -0
  62. data/app/views/base/errors.haml +10 -0
  63. data/app/views/base/form.haml +11 -0
  64. data/app/views/base/list.haml +14 -0
  65. data/app/views/base/list_actions.haml +4 -0
  66. data/app/views/base/list_item.haml +7 -0
  67. data/app/views/base/nav.haml +36 -0
  68. data/app/views/base/new.haml +36 -0
  69. data/app/views/base/preview.haml +28 -0
  70. data/app/views/base/tabs.haml +12 -0
  71. data/app/views/default_home_page.haml +15 -0
  72. data/app/views/design_tests/admin_styles.haml +58 -0
  73. data/app/views/form_builder/builder.haml +29 -0
  74. data/app/views/page/edit.haml +29 -0
  75. data/app/views/page/form.haml +22 -0
  76. data/app/views/page/meta_form.haml +22 -0
  77. data/app/views/page/new.haml +26 -0
  78. data/app/views/user/edit.haml +52 -0
  79. data/app/views/user/form.haml +43 -0
  80. data/app/views/user/list.haml +11 -0
  81. data/app/views/user/login.haml +33 -0
  82. data/app/views/user/new.haml +25 -0
  83. data/app/views/user/welcome.haml +29 -0
  84. data/app/views/watermark/watermark.haml +16 -0
  85. data/aura.gemspec +36 -0
  86. data/bin/aura +8 -0
  87. data/config/database.rb +12 -0
  88. data/config/extensions.rb +5 -0
  89. data/config/scss.rb +14 -0
  90. data/config/user.rb +10 -0
  91. data/default/.gitignore +6 -0
  92. data/default/Gemfile +11 -0
  93. data/default/README.md +24 -0
  94. data/default/Rakefile +8 -0
  95. data/default/app/README +3 -0
  96. data/default/app/css/.gitignore +0 -0
  97. data/default/app/helpers/helpers.rb.example +9 -0
  98. data/default/app/js/.gitignore +0 -0
  99. data/default/app/migrations/model.rb.example +20 -0
  100. data/default/app/models/model.rb.example +11 -0
  101. data/default/app/models/page-ext.rb.example +17 -0
  102. data/default/app/routes/site.rb.example +5 -0
  103. data/default/app/views/hello.haml.example +1 -0
  104. data/default/config.ru +3 -0
  105. data/default/config/.gitignore +0 -0
  106. data/default/config/database.rb.example +30 -0
  107. data/default/config/extensions.rb +5 -0
  108. data/default/config/user.rb.example +10 -0
  109. data/default/db/.gitignore +0 -0
  110. data/default/init.rb +15 -0
  111. data/default/public/.gitignore +0 -0
  112. data/extensions/contact_form/migrations/contact_form.rb +13 -0
  113. data/extensions/contact_form/models/contact_form.rb +13 -0
  114. data/extensions/contact_form/routes/contact_form.rb +11 -0
  115. data/extensions/contact_form/views/contact_form/edit.haml +8 -0
  116. data/extensions/contact_form/views/contact_form/form.haml +3 -0
  117. data/extensions/contact_form/views/contact_form/nav.haml +42 -0
  118. data/extensions/contact_form/views/contact_form/responses.haml +20 -0
  119. data/extensions/contact_form/views/contact_form/tabs.haml +8 -0
  120. data/extensions/default_theme/css/theme/_settings.scss +3 -0
  121. data/extensions/default_theme/css/theme/chrome.scss +66 -0
  122. data/extensions/default_theme/css/theme/reset.scss +34 -0
  123. data/extensions/default_theme/css/theme/style.scss +3 -0
  124. data/extensions/default_theme/info.yml +2 -0
  125. data/extensions/default_theme/public/browse.png +0 -0
  126. data/extensions/default_theme/views/base/id_portfolio.haml +32 -0
  127. data/extensions/default_theme/views/base/show.haml +31 -0
  128. data/extensions/default_theme/views/errors/error.haml +9 -0
  129. data/extensions/default_theme/views/errors/not_found.haml +11 -0
  130. data/extensions/default_theme/views/layout.haml +33 -0
  131. data/lib/aura.rb +315 -0
  132. data/lib/aura/admin.rb +41 -0
  133. data/lib/aura/app.rb +4 -0
  134. data/lib/aura/cli.rb +19 -0
  135. data/lib/aura/cli/base.rb +89 -0
  136. data/lib/aura/cli/helpers.rb +32 -0
  137. data/lib/aura/editor.rb +30 -0
  138. data/lib/aura/extension.rb +189 -0
  139. data/lib/aura/files.rb +38 -0
  140. data/lib/aura/menu.rb +142 -0
  141. data/lib/aura/models.rb +80 -0
  142. data/lib/aura/public.rb +68 -0
  143. data/lib/aura/rendering.rb +134 -0
  144. data/lib/aura/seeder.rb +38 -0
  145. data/lib/aura/slugs.rb +87 -0
  146. data/lib/aura/subtype.rb +48 -0
  147. data/lib/aura/tasks.rb +24 -0
  148. data/lib/aura/tasks/common.rb +17 -0
  149. data/lib/aura/tasks/db.rake +54 -0
  150. data/lib/aura/utils.rb +81 -0
  151. data/lib/aura/version.rb +25 -0
  152. data/lib/core/hasharray.rb +65 -0
  153. data/lib/core/object_ext.rb +9 -0
  154. data/lib/sequel/plugins/aura_custom.rb +16 -0
  155. data/lib/sequel/plugins/aura_editable.rb +39 -0
  156. data/lib/sequel/plugins/aura_hierarchy.rb +82 -0
  157. data/lib/sequel/plugins/aura_model.rb +271 -0
  158. data/lib/sequel/plugins/aura_renderable.rb +42 -0
  159. data/lib/sequel/plugins/aura_sluggable.rb +103 -0
  160. data/lib/sequel/plugins/aura_subtyped.rb +83 -0
  161. data/lib/terra.rb +185 -0
  162. data/lib/terra/ext.rb +16 -0
  163. data/lib/terra/field.rb +98 -0
  164. data/lib/terra/fields.rb +122 -0
  165. data/lib/terra/fieldset.rb +93 -0
  166. data/lib/terra/form.rb +111 -0
  167. data/manual/configuration.md +42 -0
  168. data/manual/extensions.md +45 -0
  169. data/manual/files.md +70 -0
  170. data/manual/helpers.md +39 -0
  171. data/manual/index.md +65 -0
  172. data/manual/models.md +58 -0
  173. data/manual/recipes.md +38 -0
  174. data/manual/recipes/bundling_sample_data.md +30 -0
  175. data/manual/recipes/creating_themes.md +10 -0
  176. data/manual/recipes/using_markdown_or_textile.md +24 -0
  177. data/manual/routes.md +39 -0
  178. data/manual/theming.md +55 -0
  179. data/manual/views.md +128 -0
  180. data/public/hi.html +0 -0
  181. data/public/images/admin/back.png +0 -0
  182. data/public/images/admin/browse.png +0 -0
  183. data/public/images/admin/mock-bg.png +0 -0
  184. data/public/images/admin/top-loader.gif +0 -0
  185. data/public/images/admin/uiscreen-loader.gif +0 -0
  186. data/public/images/admin_icons/add.png +0 -0
  187. data/public/images/admin_icons/contact.png +0 -0
  188. data/public/images/admin_icons/dashboard.png +0 -0
  189. data/public/images/admin_icons/generic.png +0 -0
  190. data/public/images/admin_icons/home-12.png +0 -0
  191. data/public/images/admin_icons/page.png +0 -0
  192. data/public/images/admin_icons/settings.png +0 -0
  193. data/public/images/jquery.wysiwyg.gif +0 -0
  194. data/public/js/admin.form_builder.js +15 -0
  195. data/public/js/admin.js +62 -0
  196. data/public/js/admin.layout.js +53 -0
  197. data/public/js/admin.nav.js +241 -0
  198. data/public/js/admin.slug.js +46 -0
  199. data/public/js/admin.subpage.js +15 -0
  200. data/public/js/jquery.hashlisten.js +85 -0
  201. data/public/js/jquery.js +166 -0
  202. data/public/js/jquery.livenavigate.js +58 -0
  203. data/public/js/jquery.livequery.js +226 -0
  204. data/public/js/jquery.quickvalidate.js +164 -0
  205. data/public/js/jquery.tmpl.js +486 -0
  206. data/public/js/jquery.uiscreen.js +150 -0
  207. data/public/js/jquery.wysiwyg.js +2339 -0
  208. data/public/js/jqueryui.js +766 -0
  209. data/public/js/lib.dirty.js +11 -0
  210. data/public/js/lib.loading.js +23 -0
  211. data/public/js/lib.wysiwyg.js +155 -0
  212. data/public/js/underscore-1.1.7.js +27 -0
  213. data/test/app/app/css/test_raw.css +1 -0
  214. data/test/app/app/css/test_sass.sass +3 -0
  215. data/test/app/app/damogram.txt +1 -0
  216. data/test/app/app/js/test_coffee.coffee +4 -0
  217. data/test/app/app/js/test_javascript.js +4 -0
  218. data/test/app/init.rb +5 -0
  219. data/test/stories/admin_css_story.rb +18 -0
  220. data/test/stories/css_js_story.rb +29 -0
  221. data/test/stories/first_login_story.rb +29 -0
  222. data/test/stories/visit_story.rb +39 -0
  223. data/test/stories_helper.rb +58 -0
  224. data/test/test_cli_helper.rb +31 -0
  225. data/test/test_helper.rb +111 -0
  226. data/test/test_temp_helper.rb +9 -0
  227. data/test/unit/cli_test.rb +38 -0
  228. data/test/unit/dump_test.rb +14 -0
  229. data/test/unit/extensions_test.rb +18 -0
  230. data/test/unit/files_test.rb +14 -0
  231. data/test/unit/flash_helper_test.rb +36 -0
  232. data/test/unit/html_helper_test.rb +29 -0
  233. data/test/unit/jquery_helper_test.rb +18 -0
  234. data/test/unit/model_test.rb +34 -0
  235. data/test/unit/page_helpers_test.rb +36 -0
  236. data/test/unit/seeder_test.rb +15 -0
  237. data/test/unit/settings_test.rb +29 -0
  238. data/test/unit/slug_test.rb +39 -0
  239. data/test/unit/ss_migration_test.rb +14 -0
  240. data/test/unit/terra_test.rb +125 -0
  241. data/test/unit/utils_test.rb +11 -0
  242. data/vendor/sinatra-sequel/.gitignore +3 -0
  243. data/vendor/sinatra-sequel/COPYING +18 -0
  244. data/vendor/sinatra-sequel/README.md +84 -0
  245. data/vendor/sinatra-sequel/Rakefile +67 -0
  246. data/vendor/sinatra-sequel/lib/sinatra/sequel.rb +73 -0
  247. data/vendor/sinatra-sequel/sinatra-sequel.gemspec +39 -0
  248. data/vendor/sinatra-sequel/spec/spec_sinatra_sequel.rb +70 -0
  249. metadata +536 -0
@@ -0,0 +1,111 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
4
+ require 'bundler'
5
+ Bundler.setup
6
+
7
+ require File.expand_path('../app/init.rb', __FILE__)
8
+ require "rack/test"
9
+
10
+ require "test/unit"
11
+ require "contest"
12
+
13
+ require "redcloth"
14
+ require "rdiscount"
15
+
16
+ require File.expand_path('../test_temp_helper', __FILE__)
17
+ require File.expand_path('../test_cli_helper', __FILE__)
18
+
19
+ class Test::Unit::TestCase
20
+ include Rack::Test::Methods
21
+ include Rtopia
22
+
23
+ include TempHelper
24
+ include CliHelper
25
+
26
+ # Stub
27
+ unless defined?(::Para)
28
+ def self.enable_parallel() end
29
+ def self.disable_parallel() end
30
+ end
31
+
32
+ disable_parallel
33
+
34
+ def setup
35
+ Main.flush!
36
+ Aura.run_migrations!
37
+ Main.seed
38
+ Aura.set 'site.name', 'TESTSITE'
39
+ end
40
+
41
+ def app
42
+ Main.new
43
+ end
44
+
45
+ def db
46
+ Main.database
47
+ end
48
+
49
+ def aura(cmd)
50
+ old, $0 = $0, 'aura_'
51
+ cli { Aura::CLI.run *cmd.split(' ') }
52
+ ensure
53
+ $0 = old
54
+ end
55
+
56
+ def p(what, obj=nil)
57
+ return unless ENV['verbose']
58
+
59
+ what, obj = nil, what if obj.nil?
60
+ str = obj.is_a?(String) ? obj : obj.inspect
61
+
62
+ file, line = p_source
63
+ basename = File.basename(file)
64
+
65
+ if what
66
+ puts "\n\033[1;32m%20s\033[1;30m:%-3s\033[1;30m %s" % [basename, line, what]
67
+ puts "\033[0m%-24s %s" % ['', str]
68
+ else
69
+ puts "\n\033[1;32m%20s\033[1;30m:%-3s\033[0m %s" % [basename, line, str]
70
+ end
71
+ end
72
+
73
+ # @return [Array] [ app/test/unit/migration_test.rb, 23 ]
74
+ def p_source
75
+ backtrace[2].split(':')[0..1]
76
+ end
77
+
78
+ def backtrace
79
+ raise 1
80
+ rescue => e
81
+ e.backtrace[2..-1]
82
+ end
83
+ end
84
+
85
+ # For testing helpers
86
+ class MockSinatra
87
+ def settings; self.class; end
88
+ def self.settings; self; end
89
+ def self.production?; @@production; end
90
+ def self.development?; !@@production; end
91
+ def session; @session ||= Hash.new; end
92
+
93
+ def initialize
94
+ @@production = true
95
+ end
96
+
97
+ def production(&blk)
98
+ yield self
99
+ end
100
+
101
+ def development(&blk)
102
+ @@production = false
103
+ yield self
104
+ @@production = true
105
+ end
106
+
107
+ def request
108
+ require 'ostruct'
109
+ return OpenStruct.new(:fullpath => '/', :xhr? => false)
110
+ end
111
+ end
@@ -0,0 +1,9 @@
1
+ module TempHelper
2
+ def in_temp_dir(&blk)
3
+ dir = File.join(Dir.tmpdir, "cli-#{rand}")
4
+ FileUtils.mkdir_p(dir)
5
+ Dir.chdir(dir) { yield dir }
6
+ ensure
7
+ FileUtils.rm_rf(dir)
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+ require 'aura/cli'
3
+
4
+ class CLITest < Test::Unit::TestCase
5
+ BIN_ROOT = File.expand_path('../../../bin', __FILE__)
6
+
7
+ test "aura new (success)" do
8
+ in_temp_dir { |dir|
9
+ aura "new x"
10
+
11
+ assert File.directory?('x/')
12
+ assert File.file?('x/Gemfile')
13
+ assert File.file?('x/config.ru')
14
+
15
+ aura "new x"
16
+ assert stderr.include?("already exists")
17
+ }
18
+ end
19
+
20
+ test "aura -v" do
21
+ aura "-v"
22
+ assert stderr.empty?
23
+ assert stdout.include?(Aura.version)
24
+ end
25
+
26
+ test "aura --version" do
27
+ aura "--version"
28
+ assert stderr.empty?
29
+ assert stdout.include?(Aura.version)
30
+ end
31
+
32
+ test "aura" do
33
+ aura ""
34
+ assert stderr.include?("Usage: aura_ <command>")
35
+ assert stderr.include?("new")
36
+ assert stderr.include?(Aura::CLI.task(:new).description)
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class DumpTest < Test::Unit::TestCase
4
+ test "dump properly" do
5
+ dump = Aura.db_dump
6
+ assert dump.is_a?(Hash)
7
+ assert dump.keys.include?(:settings)
8
+ assert dump.keys.include?(:pages)
9
+
10
+ require 'yaml'
11
+ yml = YAML::dump(dump)
12
+ assert_equal yml, Aura.db_dump_yaml
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class ExtensionsTest < Test::Unit::TestCase
4
+ test "Should load the needed extensions" do
5
+
6
+ real_names = Aura::Extension.active.map { |ext| ext.name }
7
+ needed_names = Main.additional_extensions
8
+
9
+ p real_names
10
+ assert_equal real_names.sort, needed_names.sort
11
+ end
12
+
13
+ test "Extension.all" do
14
+ all = Aura::Extension.all
15
+
16
+ assert_equal 2, all.size
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class FilesTest < Test::Unit::TestCase
4
+ test "[]" do
5
+ path = Aura.files['damogram.txt']
6
+ assert path.is_a?(String)
7
+ assert_equal "Beedlebrox!", File.read(path).strip
8
+ end
9
+
10
+ test "glob" do
11
+ paths = Aura.files.glob('d*')
12
+ assert_equal [ Aura.files['damogram.txt'] ], paths
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class FlashHelperTest < Test::Unit::TestCase
4
+ setup do
5
+ @app = MockSinatra.new
6
+ @app.extend Main::FlashHelpers
7
+ end
8
+
9
+ test "flash errors" do
10
+ @app.production do |a|
11
+ assert ! a.flash_errors?
12
+
13
+ a.flash_error "Amazing!"
14
+ assert a.flash_errors?
15
+
16
+ # Display the errors
17
+ errors = a.flash_errors
18
+ assert errors.is_a? Array
19
+ assert ! a.flash_errors?
20
+ end
21
+ end
22
+
23
+ test "flash" do
24
+ @app.production do |a|
25
+ assert ! a.flash_messages?
26
+
27
+ a.flash_message "Amazing!"
28
+ assert a.flash_messages?
29
+
30
+ # Display the messages
31
+ messages = a.flash_messages
32
+ assert messages.is_a? Array
33
+ assert ! a.flash_messages?
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,29 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class HtmlHelper < Test::Unit::TestCase
4
+ include Main::HtmlHelpers
5
+
6
+ test "test" do
7
+ assert_equal "<x></x>", html("<x>")
8
+ end
9
+
10
+ test "markdown pre" do
11
+ assert_equal html("<pre format=markdown>hi</pre>"), "<p>hi</p>"
12
+ end
13
+
14
+ test "markdown" do
15
+ assert_equal html("<markdown>hi</markdown>"), "<p>hi</p>"
16
+ assert_equal html("<markdown>hi</markdown>\n"), "<p>hi</p>"
17
+ assert_equal html(" \n <markdown>hi</markdown> \n "), "<p>hi</p>"
18
+ end
19
+
20
+ test "stupidity" do
21
+ assert_equal "<p>hi</p>", html("<p><pre format=markdown>hi</pre>")
22
+ assert_equal "<p>hi</p>", html("<p></p><pre format=markdown>hi</pre><p></p>")
23
+ end
24
+
25
+ test "textile" do
26
+ assert_equal html('<textile>"ab":/cd</textile>'), '<p><a href="/cd">ab</a></p>'
27
+ assert_equal "<h2>Hello</h2>\n<p>Whats up?</p>", html("<textile>\nh2. Hello\n\nWhats up?\n</textile>")
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ class JqueryHelperTest < Test::Unit::TestCase
4
+ setup do
5
+ @app = MockSinatra.new
6
+ @app.extend Main::JqueryHelpers
7
+ end
8
+
9
+ should "jquery" do
10
+ @app.production do |a|
11
+ assert @app.jquery.match(/googleapis\.com/)
12
+ end
13
+
14
+ @app.development do |a|
15
+ assert_equal "<script type='text/javascript' src='/js/jquery.js'></script>", @app.jquery
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class ModelTest < Test::Unit::TestCase
4
+ setup do
5
+ @main = Page.new(:title => "About us")
6
+ @main.save
7
+
8
+ @sub = Page.new(:title => "Mission and vision", :parent_id => @main.id)
9
+ @sub.save
10
+ end
11
+
12
+ test "Children" do
13
+ # Make sure the parenting worked right
14
+ assert @sub.parent == @main
15
+ assert @main.children.include?(@sub)
16
+ assert @main.submenu.include?(@sub)
17
+ end
18
+
19
+ test "Submenu" do
20
+ assert @main.submenu.include?(@sub)
21
+
22
+ @sub.update :shown_in_menu => false
23
+ assert !@main.submenu.include?(@sub)
24
+ end
25
+
26
+ test "Slugs" do
27
+ assert @main.slug == 'about-us'
28
+ assert @sub.slug == 'mission-and-vision'
29
+
30
+ new = Page.new(:title => 'about-us')
31
+ new.save
32
+ assert new.slug == 'about-us-2'
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ class PageHelpersTest < Test::Unit::TestCase
4
+ setup do
5
+ @app = MockSinatra.new
6
+ @app.extend Main::PageHelpers
7
+ end
8
+
9
+ test "body_class" do
10
+ @app.production do |a|
11
+ a.body_class 'form'
12
+ a.body_class 'sidebar'
13
+ assert_equal 'form sidebar', a.body_class
14
+ end
15
+ end
16
+
17
+ test "title" do
18
+ @app.production do |a|
19
+ a.title 'hi'
20
+ assert_equal 'hi', a.title
21
+ end
22
+ end
23
+
24
+ test "link_to" do
25
+ @app.production do |a|
26
+ link = a.link_to 'http://google.com'
27
+ assert_equal '<a href="http://google.com"></a>', link
28
+
29
+ link = a.link_to 'http://google.com', "G thing"
30
+ assert_equal '<a href="http://google.com">G thing</a>', link
31
+
32
+ link = a.link_to 'http://google.com', lambda { "Hello" }
33
+ assert_equal '<a href="http://google.com">Hello</a>', link
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class SeederTest < Test::Unit::TestCase
4
+ should "seed properly" do
5
+ Main.flush!
6
+ Aura.run_migrations!
7
+ Main.seed!
8
+
9
+ assert_equal 1, User.all.size
10
+ assert_equal Main.default_user, User.all.first.email
11
+ assert_equal nil, User.all.first.last_login
12
+
13
+ assert Aura.site_empty?
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class SettingsTest < Test::Unit::TestCase
4
+ test "Settings" do
5
+ Aura.set('site.name', 'Hello')
6
+ assert_equal 'Hello', Aura.get('site.name')
7
+ end
8
+
9
+ test "Default settings" do
10
+ assert_equal nil, Aura.get('jiggawatts')
11
+
12
+ # Should do it's thing.
13
+ Aura.default('jiggawatts', 1210)
14
+ assert_equal 1210, Aura.get('jiggawatts')
15
+
16
+ # Should not change.
17
+ Aura.default('jiggawatts', 31337)
18
+ assert_equal 1210, Aura.get('jiggawatts')
19
+
20
+ # *Should* change.
21
+ Aura.set('jiggawatts', 31337)
22
+ assert_equal 31337, Aura.get('jiggawatts')
23
+
24
+ # Should delete properly.
25
+ last = Aura.del('jiggawatts')
26
+ assert_equal 31337, last
27
+ assert_equal nil, Aura.get('jiggawatts')
28
+ end
29
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class SlugTest < Test::Unit::TestCase
4
+ setup do
5
+ # With slug
6
+ @products = Page.new :title => 'Products', :slug => 'products'
7
+ @products.save
8
+
9
+ # No slug
10
+ @boots = Page.new :title => 'Boots', :parent => @products
11
+ @boots.save
12
+ end
13
+
14
+ should "save properly without complaints" do
15
+ assert ! @boots.nil?
16
+ assert ! @products.nil?
17
+ end
18
+
19
+ should "autoslug" do
20
+ assert Page[@products.id] == @products
21
+ assert Page[@products.id].slug == 'products'
22
+
23
+ assert Page[@boots.id] == @boots
24
+ assert Page[@boots.id].slug == 'boots'
25
+
26
+ boots_2 = Page.new :title => 'Boots', :parent => @products
27
+ boots_2.save
28
+
29
+ assert_equal 'boots-2', boots_2.slug
30
+ end
31
+
32
+ should "find records by their paths" do
33
+ page = Aura.find('/products')
34
+ assert page.id == @products.id
35
+
36
+ page = Aura.find('/products/boots')
37
+ assert page.id == @boots.id
38
+ end
39
+ end