aura 0.0.1.pre10

Sign up to get free protection for your applications and to get access to all the features.
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