radiant 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of radiant might be problematic. Click here for more details.
- data/CHANGELOG +1 -0
- data/CONTRIBUTORS +12 -0
- data/LICENSE +9 -0
- data/README +91 -0
- data/Rakefile +10 -0
- data/app/behaviors/archive_behavior.rb +42 -0
- data/app/behaviors/archive_day_index_behavior.rb +30 -0
- data/app/behaviors/archive_month_index_behavior.rb +30 -0
- data/app/behaviors/archive_year_index_behavior.rb +30 -0
- data/app/behaviors/env_behavior.rb +18 -0
- data/app/behaviors/page_missing_behavior.rb +31 -0
- data/app/controllers/admin/export_controller.rb +8 -0
- data/app/controllers/admin/layout_controller.rb +23 -0
- data/app/controllers/admin/model_controller.rb +119 -0
- data/app/controllers/admin/page_controller.rb +119 -0
- data/app/controllers/admin/snippet_controller.rb +6 -0
- data/app/controllers/admin/user_controller.rb +45 -0
- data/app/controllers/admin/welcome_controller.rb +39 -0
- data/app/controllers/application.rb +32 -0
- data/app/controllers/site_controller.rb +54 -0
- data/app/filters/markdown_filter.rb +9 -0
- data/app/filters/textile_filter.rb +9 -0
- data/app/helpers/admin/export_helper.rb +2 -0
- data/app/helpers/admin/layout_helper.rb +2 -0
- data/app/helpers/admin/page_helper.rb +10 -0
- data/app/helpers/admin/snippet_helper.rb +2 -0
- data/app/helpers/admin/user_helper.rb +2 -0
- data/app/helpers/admin/welcome_helper.rb +2 -0
- data/app/helpers/application_helper.rb +141 -0
- data/app/helpers/site_helper.rb +2 -0
- data/app/models/archive_finder.rb +66 -0
- data/app/models/behavior.rb +194 -0
- data/app/models/layout.rb +13 -0
- data/app/models/page.rb +91 -0
- data/app/models/page_context.rb +526 -0
- data/app/models/page_part.rb +13 -0
- data/app/models/radiant/config.rb +53 -0
- data/app/models/radiant/exporter.rb +11 -0
- data/app/models/response_cache.rb +112 -0
- data/app/models/snippet.rb +16 -0
- data/app/models/status.rb +31 -0
- data/app/models/text_filter.rb +11 -0
- data/app/models/user.rb +70 -0
- data/app/models/user_action_observer.rb +13 -0
- data/app/views/admin/layout/index.rhtml +38 -0
- data/app/views/admin/layout/new.rhtml +37 -0
- data/app/views/admin/layout/remove.rhtml +17 -0
- data/app/views/admin/page/_node.rhtml +51 -0
- data/app/views/admin/page/_part.rhtml +17 -0
- data/app/views/admin/page/children.rhtml +4 -0
- data/app/views/admin/page/index.rhtml +172 -0
- data/app/views/admin/page/new.rhtml +164 -0
- data/app/views/admin/page/remove.rhtml +14 -0
- data/app/views/admin/snippet/index.rhtml +36 -0
- data/app/views/admin/snippet/new.rhtml +28 -0
- data/app/views/admin/snippet/remove.rhtml +16 -0
- data/app/views/admin/user/index.rhtml +43 -0
- data/app/views/admin/user/new.rhtml +48 -0
- data/app/views/admin/user/preferences.rhtml +29 -0
- data/app/views/admin/user/remove.rhtml +16 -0
- data/app/views/admin/welcome/login.rhtml +51 -0
- data/app/views/layouts/application.rhtml +75 -0
- data/app/views/site/not_found.rhtml +3 -0
- data/bin/radiant +305 -0
- data/config/boot.rb +80 -0
- data/config/database.mysql.yml +20 -0
- data/config/database.postgresql.yml +20 -0
- data/config/database.sqlite.yml +20 -0
- data/config/environment.rb +76 -0
- data/config/environments/development.rb +20 -0
- data/config/environments/production.rb +22 -0
- data/config/environments/test.rb +20 -0
- data/config/locomotive.yml +6 -0
- data/config/routes.rb +64 -0
- data/db/development_structure.sql +80 -0
- data/db/migrate/001_create_radiant_tables.rb +73 -0
- data/db/migrate/002_insert_initial_data.rb +45 -0
- data/db/migrate/003_rename_behavior_column.rb +9 -0
- data/db/migrate/004_rename_filter_column.rb +11 -0
- data/db/migrate/005_add_virtual_column_to_page.rb +9 -0
- data/db/migrate/006_integer_columns_to_boolean.rb +11 -0
- data/db/migrate/007_remove_virtual_column_from_page.rb +9 -0
- data/db/migrate/008_add_virtual_column_to_page_again.rb +9 -0
- data/db/migrate/009_add_content_type_field_to_layout.rb +9 -0
- data/db/schema.rb +74 -0
- data/db/templates/empty.yml +2 -0
- data/db/templates/simple-blog.yml +197 -0
- data/db/templates/styled-blog.yml +472 -0
- data/lib/advanced_delegation.rb +21 -0
- data/lib/archive_index_behavior_tags_and_methods.rb +48 -0
- data/lib/generators/behavior/USAGE +16 -0
- data/lib/generators/behavior/behavior_generator.rb +22 -0
- data/lib/generators/behavior/templates/model.rb.template +9 -0
- data/lib/generators/behavior/templates/unit_test.rb.template +16 -0
- data/lib/generators/filter/USAGE +16 -0
- data/lib/generators/filter/filter_generator.rb +22 -0
- data/lib/generators/filter/templates/model.rb.template +8 -0
- data/lib/generators/filter/templates/unit_test.rb.template +7 -0
- data/lib/inheritable_class_attributes.rb +65 -0
- data/lib/login_system.rb +80 -0
- data/lib/plugins/index_quoting_fix/init.rb +32 -0
- data/lib/plugins/string_io/init.rb +2 -0
- data/lib/radiant.rb +5 -0
- data/lib/registerable.rb +70 -0
- data/lib/tasks/release.rake +84 -0
- data/public/404.html +8 -0
- data/public/500.html +8 -0
- data/public/dispatch.cgi +10 -0
- data/public/dispatch.fcgi +24 -0
- data/public/dispatch.rb +10 -0
- data/public/favicon.ico +0 -0
- data/public/images/add-child.png +0 -0
- data/public/images/brown-bottom-line.gif +0 -0
- data/public/images/clear-page-cache.png +0 -0
- data/public/images/collapse.png +0 -0
- data/public/images/expand.png +0 -0
- data/public/images/minus.png +0 -0
- data/public/images/new-homepage.png +0 -0
- data/public/images/new-layout.png +0 -0
- data/public/images/new-snippet.png +0 -0
- data/public/images/new-user.png +0 -0
- data/public/images/page.png +0 -0
- data/public/images/plus.png +0 -0
- data/public/images/remove-disabled.png +0 -0
- data/public/images/remove.png +0 -0
- data/public/images/snippet.png +0 -0
- data/public/images/spinner.gif +0 -0
- data/public/images/view-site.gif +0 -0
- data/public/images/virtual-page.png +0 -0
- data/public/javascripts/application.js +2 -0
- data/public/javascripts/controls.js +815 -0
- data/public/javascripts/dragdrop.js +913 -0
- data/public/javascripts/effects.js +958 -0
- data/public/javascripts/pngfix.js +78 -0
- data/public/javascripts/prototype.js +2006 -0
- data/public/javascripts/ruledtable.js +28 -0
- data/public/javascripts/string.js +23 -0
- data/public/javascripts/tabcontrol.js +140 -0
- data/public/robots.txt +1 -0
- data/public/stylesheets/admin.css +464 -0
- data/script/about +3 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/process/spinner +3 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/script/setup_database +297 -0
- data/test/fixtures/layouts.yml +26 -0
- data/test/fixtures/page_parts.yml +99 -0
- data/test/fixtures/pages.yml +359 -0
- data/test/fixtures/pages.yml.rej +28 -0
- data/test/fixtures/snippets.yml +18 -0
- data/test/fixtures/users.yml +30 -0
- data/test/functional/admin/export_controller_test.rb +22 -0
- data/test/functional/admin/layout_controller_test.rb +40 -0
- data/test/functional/admin/model_controller_test.rb +152 -0
- data/test/functional/admin/page_controller_test.rb +179 -0
- data/test/functional/admin/snippet_controller_test.rb +11 -0
- data/test/functional/admin/user_controller_test.rb +71 -0
- data/test/functional/admin/welcome_controller_test.rb +48 -0
- data/test/functional/application_controller_test.rb +44 -0
- data/test/functional/login_system_test.rb +155 -0
- data/test/functional/site_controller_test.rb +172 -0
- data/test/helpers/archive_index_test_helper.rb +35 -0
- data/test/helpers/behavior_render_test_helper.rb +34 -0
- data/test/helpers/behavior_test_helper.rb +47 -0
- data/test/helpers/caching_test_helper.rb +41 -0
- data/test/helpers/layout_test_helper.rb +35 -0
- data/test/helpers/page_part_test_helper.rb +49 -0
- data/test/helpers/page_test_helper.rb +36 -0
- data/test/helpers/snippet_test_helper.rb +32 -0
- data/test/helpers/user_test_helper.rb +34 -0
- data/test/helpers/validation_test_helper.rb +42 -0
- data/test/test_helper.rb +54 -0
- data/test/unit/behavior_test.rb +196 -0
- data/test/unit/behaviors/archive_behavior_test.rb +33 -0
- data/test/unit/behaviors/archive_day_index_behavior_test.rb +21 -0
- data/test/unit/behaviors/archive_month_index_behavior_test.rb +21 -0
- data/test/unit/behaviors/archive_year_index_behavior_test.rb +21 -0
- data/test/unit/behaviors/page_missing_behavior_test.rb +27 -0
- data/test/unit/filters/markdown_filter_test.rb +14 -0
- data/test/unit/filters/textile_filter_test.rb +14 -0
- data/test/unit/inheritable_class_attributes_test.rb +47 -0
- data/test/unit/layout_test.rb +29 -0
- data/test/unit/page_context_test.rb +375 -0
- data/test/unit/page_context_test.rb.rej +26 -0
- data/test/unit/page_part_test.rb +44 -0
- data/test/unit/page_test.rb +224 -0
- data/test/unit/radiant/config_test.rb +46 -0
- data/test/unit/radiant/exporter_test.rb +26 -0
- data/test/unit/registerable_test.rb +68 -0
- data/test/unit/response_cache_test.rb +133 -0
- data/test/unit/snippet_test.rb +47 -0
- data/test/unit/status_test.rb +43 -0
- data/test/unit/text_filter_test.rb +14 -0
- data/test/unit/user_action_observer_test.rb +40 -0
- data/test/unit/user_test.rb +138 -0
- metadata +355 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
***************
|
2
|
+
*** 262,267 ****
|
3
|
+
assert_parse_output_match "undefined tag `missing'", '<r:missing />'
|
4
|
+
end
|
5
|
+
|
6
|
+
protected
|
7
|
+
|
8
|
+
def setup_for_page(page)
|
9
|
+
--- 262,278 ----
|
10
|
+
assert_parse_output_match "undefined tag `missing'", '<r:missing />'
|
11
|
+
end
|
12
|
+
|
13
|
+
+ def test_tag_tags_list
|
14
|
+
+ setup_for_page(:homepage)
|
15
|
+
+ expected = '<a href="/tags/lump">lump</a><a href="/tags/bar">bar</a><a href="/tags/test">test</a><a href="/tags/foo">foo</a>'
|
16
|
+
+ tags = '<r:tags url="/tags/"><r:link /></r:tags>'
|
17
|
+
+ assert_parse_output expected, tags
|
18
|
+
+ end
|
19
|
+
+
|
20
|
+
+ def test_tag_tags_without_url
|
21
|
+
+ assert_parse_output_match "`tags' tag must include an 'url' attribute", %{<r:tags />}
|
22
|
+
+ end
|
23
|
+
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def setup_for_page(page)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class PagePartTest < Test::Unit::TestCase
|
4
|
+
fixtures :page_parts
|
5
|
+
test_helper :pages, :page_parts, :validations
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@part = @model = PagePart.new(VALID_PAGE_PART_PARAMS)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_validates_length_of
|
12
|
+
{
|
13
|
+
:name => 100,
|
14
|
+
:filter_id => 25
|
15
|
+
}.each do |field, max|
|
16
|
+
assert_invalid field, ('%d-character limit' % max), 'x' * (max + 1)
|
17
|
+
assert_valid field, 'x' * max
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_validates_presence_of
|
22
|
+
[:name].each do |field|
|
23
|
+
assert_invalid field, 'required', '', ' ', nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_validates_numericality_of
|
28
|
+
[:id, :page_id].each do |field|
|
29
|
+
assert_valid field, '1', '2'
|
30
|
+
assert_invalid field, 'must be a number', 'abcd', '1,2', '1.3'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_filter
|
35
|
+
@part = page_parts(:textile_body)
|
36
|
+
original = @part.filter
|
37
|
+
assert_kind_of TextileFilter, original
|
38
|
+
|
39
|
+
assert_same original, @part.filter
|
40
|
+
|
41
|
+
@part.filter_id = 'Markdown'
|
42
|
+
assert_kind_of MarkdownFilter, @part.filter
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,224 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class PageTest < Test::Unit::TestCase
|
4
|
+
fixtures :users, :pages, :page_parts, :layouts
|
5
|
+
test_helper :pages, :page_parts, :validations
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@page_title = 'Page Title'
|
9
|
+
destroy_test_page
|
10
|
+
|
11
|
+
@part_name = 'test-part'
|
12
|
+
destroy_test_part
|
13
|
+
|
14
|
+
@page = @model = Page.new(VALID_PAGE_PARAMS)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_validates_length_of
|
18
|
+
{
|
19
|
+
:title => 255,
|
20
|
+
:slug => 100,
|
21
|
+
:breadcrumb => 160,
|
22
|
+
:behavior_id => 25
|
23
|
+
}.each do |field, max|
|
24
|
+
assert_invalid field, ('%d-character limit' % max), 'x' * (max + 1)
|
25
|
+
assert_valid field, 'x' * max
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_validates_presence_of
|
30
|
+
[:title, :slug, :breadcrumb].each do |field|
|
31
|
+
assert_invalid field, 'required', '', ' ', nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_validates_format_of
|
36
|
+
@page.parent = pages(:homepage)
|
37
|
+
assert_valid :slug, 'abc', 'abcd-efg', 'abcd_efg', 'abc.html', '/', '123'
|
38
|
+
assert_invalid :slug, 'invalid format', 'abcd efg', ' abcd', 'abcd/efg'
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_validates_numericality_of
|
42
|
+
assert_invalid :status_id, 'required', '', nil
|
43
|
+
[:id, :status_id, :parent_id].each do |field|
|
44
|
+
assert_valid field, '1', '2'
|
45
|
+
assert_invalid field, 'must be a number', 'abcd', '1,2', '1.3'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_validates_uniqueness_of
|
50
|
+
@page.parent = pages(:radius)
|
51
|
+
assert_invalid :slug, 'slug already in use for child of parent', 'child-1', 'child-2', 'child-3'
|
52
|
+
assert_valid :slug, 'child-4'
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_parts
|
56
|
+
@homepage = pages(:homepage)
|
57
|
+
assert_equal(4, @homepage.parts.count)
|
58
|
+
|
59
|
+
@documentation = pages(:documentation)
|
60
|
+
assert_equal(1, @documentation.parts.count)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_destroy__parts_dependant
|
64
|
+
@page = create_test_page
|
65
|
+
@page.parts.create(part_params(:name => @part_name, :page_id => nil))
|
66
|
+
assert_kind_of PagePart, @page.parts.find_by_name(@part_name)
|
67
|
+
|
68
|
+
id = @page.id
|
69
|
+
@page.destroy
|
70
|
+
assert_nil PagePart.find_by_page_id_and_name(id, @part_name)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_part
|
74
|
+
part = radius_page.part('body')
|
75
|
+
assert_equal 'body', part.name
|
76
|
+
end
|
77
|
+
def test_part__lookup_by_symbol
|
78
|
+
part = radius_page.part(:body)
|
79
|
+
assert_equal 'body', part.name
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_child_url
|
83
|
+
@page = pages(:parent)
|
84
|
+
@child = pages(:child)
|
85
|
+
assert_equal '/parent/child/', @page.child_url(@child)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_url
|
89
|
+
page = pages(:parent)
|
90
|
+
assert_equal '/parent/', page.url
|
91
|
+
assert_equal '/parent/child/', page.children.first.url
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_layout
|
95
|
+
page = pages(:page_with_layout)
|
96
|
+
assert_equal 1, page.layout_id
|
97
|
+
assert_kind_of Layout, page.layout
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_published_at
|
101
|
+
@page = create_test_page(:status_id => '1')
|
102
|
+
assert_nil @page.published_at
|
103
|
+
|
104
|
+
@page.status_id = status(:published).id
|
105
|
+
@page.save
|
106
|
+
assert_not_nil @page.published_at
|
107
|
+
assert_equal Time.now.day, @page.published_at.day
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_published_at__not_updated_on_save_because_already_published
|
111
|
+
@page = create_test_page(:status_id => status(:published).id)
|
112
|
+
assert_kind_of Time, @page.published_at
|
113
|
+
|
114
|
+
expected = @page.published_at
|
115
|
+
@page.save
|
116
|
+
assert_equal expected, @page.published_at
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_published
|
120
|
+
@page.status = status(:published)
|
121
|
+
assert_equal true, @page.published?
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_published__not_published
|
125
|
+
@page.status = status(:draft)
|
126
|
+
assert_equal false, @page.published?
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_find_by_url
|
130
|
+
@page = pages(:homepage)
|
131
|
+
assert_equal pages(:article), @page.find_by_url('/archive/2000/05/01/article/')
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_find_by_url__raises_exception_when_root_missing
|
135
|
+
pages(:homepage).destroy
|
136
|
+
|
137
|
+
# This shouldn't raise an error when there's no root...
|
138
|
+
assert_nil Page.find_by_parent_id(nil)
|
139
|
+
|
140
|
+
# ...but this should
|
141
|
+
e = assert_raises(Page::MissingRootPageError) { Page.find_by_url "/" }
|
142
|
+
assert_equal 'Database missing root page', e.message
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_find_by_url_class_method
|
146
|
+
@root = pages(:homepage)
|
147
|
+
assert_equal @root, Page.find_by_url('/')
|
148
|
+
|
149
|
+
@page = pages(:books)
|
150
|
+
assert_equal @page, Page.find_by_url('/documentation/books/')
|
151
|
+
|
152
|
+
@root = pages(:homepage)
|
153
|
+
assert_equal 'File Not Found', Page.find_by_url('/gallery/gallery_draft/').title
|
154
|
+
assert_equal 'Gallery Draft', Page.find_by_url('/gallery/gallery_draft/', false).title
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_render
|
158
|
+
@page = pages(:small_test)
|
159
|
+
assert_equal 'test', @page.render
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_process
|
163
|
+
@page = create_test_page
|
164
|
+
@request = ActionController::TestRequest.new :url => '/page/'
|
165
|
+
@response = ActionController::TestResponse.new
|
166
|
+
@page.process(@request, @response)
|
167
|
+
assert_equal 'test', @response.body
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_status
|
171
|
+
@page = pages(:homepage)
|
172
|
+
assert_equal Status[:published], @page.status
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_set_status
|
176
|
+
@page = pages(:homepage)
|
177
|
+
draft = Status[:draft]
|
178
|
+
@page.status = draft
|
179
|
+
assert_equal draft, @page.status
|
180
|
+
assert_equal draft.id, @page.status_id
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_cache
|
184
|
+
assert_equal true, @page.cache?
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_layout__inherited
|
188
|
+
@page = pages(:child_of_page_with_layout)
|
189
|
+
assert_equal nil, @page.layout_id
|
190
|
+
assert_equal @page.parent.layout, @page.layout
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_virtual?
|
194
|
+
assert_equal false, @page.virtual?
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_before_save
|
198
|
+
@page = create_test_page(:behavior_id => 'Archive Month Index')
|
199
|
+
assert_equal true, @page.virtual?
|
200
|
+
assert_equal true, @page.virtual
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_behavior
|
204
|
+
@page = pages(:homepage)
|
205
|
+
original = @page.behavior
|
206
|
+
|
207
|
+
assert_kind_of Behavior::Base, original
|
208
|
+
|
209
|
+
assert_same original, @page.behavior
|
210
|
+
|
211
|
+
@page.behavior_id = 'Archive'
|
212
|
+
assert_kind_of ArchiveBehavior, @page.behavior
|
213
|
+
end
|
214
|
+
|
215
|
+
private
|
216
|
+
|
217
|
+
def radius_page
|
218
|
+
pages(:radius)
|
219
|
+
end
|
220
|
+
|
221
|
+
def status(name)
|
222
|
+
Status[name]
|
223
|
+
end
|
224
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
require 'radiant/config'
|
3
|
+
|
4
|
+
class Radiant::ConfigTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@conf = Radiant::Config
|
7
|
+
set('test', 'cool')
|
8
|
+
set('foo', 'bar')
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_brackets
|
12
|
+
assert_equal 'cool', @conf['test']
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_brackets_with_non_existant_key
|
16
|
+
assert_equal nil, @conf['non-existant-key']
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_assign_to_brackets
|
20
|
+
v = @conf['bar'] = 'baz'
|
21
|
+
assert_equal 'baz', @conf['bar']
|
22
|
+
assert_equal 'baz', v
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_assign_to_brackets_existing_key
|
26
|
+
@conf['foo'] = 'normal'
|
27
|
+
v = @conf['foo'] = 'replaced'
|
28
|
+
assert_equal 'replaced', @conf['foo']
|
29
|
+
assert_equal 'replaced', v
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_to_hash
|
33
|
+
h = @conf.to_hash
|
34
|
+
assert_instance_of Hash, h
|
35
|
+
assert_equal 'cool', h['test']
|
36
|
+
assert h.size > 1
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def set(key, value)
|
41
|
+
setting = Radiant::Config.find_by_key(key)
|
42
|
+
setting.destroy if setting
|
43
|
+
Radiant::Config.new(:key => key, :value => value).save
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
require 'radiant/exporter'
|
3
|
+
|
4
|
+
class Radiant::ExporterTest < Test::Unit::TestCase
|
5
|
+
fixtures :users, :pages, :page_parts, :snippets, :layouts
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@exporter = Radiant::Exporter
|
9
|
+
@output = @exporter.export
|
10
|
+
@hash = YAML::load(@output)
|
11
|
+
@classes = ['Radiant::Configs', 'Users', 'Pages', 'PageParts', 'Snippets', 'Layouts']
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_export_is_string
|
15
|
+
assert_kind_of String, @output
|
16
|
+
end
|
17
|
+
def test_export_classes
|
18
|
+
@classes.each do |expected|
|
19
|
+
assert @hash.keys.include?(expected), "expected hash to contain <#{expected.inspect}> but it did not"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
def test_export_homepage
|
23
|
+
assert_equal 'Ruby Home Page', @hash['Pages'][1]['title']
|
24
|
+
assert_equal 'Admin User', @hash['Users'][3]['name']
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class RegisterableTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
module TestModule
|
6
|
+
include Registerable
|
7
|
+
|
8
|
+
class TestClass < Base
|
9
|
+
register 'test'
|
10
|
+
end
|
11
|
+
|
12
|
+
class Unregistered < Base
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_registered
|
17
|
+
assert_kind_of Hash, TestModule.registered
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_registered_id
|
21
|
+
assert_equal nil, TestModule::Unregistered.registered_id
|
22
|
+
assert_equal 'test', TestModule::TestClass.registered_id
|
23
|
+
assert_equal 'test', TestModule::TestClass.new.registered_id
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_brackets
|
27
|
+
assert_equal TestModule::TestClass, TestModule['test']
|
28
|
+
end
|
29
|
+
def test_brackets__symbol
|
30
|
+
assert_equal TestModule::TestClass, TestModule[:test]
|
31
|
+
end
|
32
|
+
def test_brackets__with_padding
|
33
|
+
assert_equal TestModule::TestClass, TestModule[' test ']
|
34
|
+
end
|
35
|
+
def test_brackets__nil_value
|
36
|
+
assert_equal TestModule::Base, TestModule[nil]
|
37
|
+
end
|
38
|
+
def test_brackets__empty_value
|
39
|
+
assert_equal TestModule::Base, TestModule[' ']
|
40
|
+
end
|
41
|
+
def test_brackets__unknown_value
|
42
|
+
assert_equal TestModule::Base, TestModule['Unknown']
|
43
|
+
end
|
44
|
+
def test_brackets__return_same_instance_every_time
|
45
|
+
assert_same TestModule['test'], TestModule['test']
|
46
|
+
assert_same TestModule[nil], TestModule[nil]
|
47
|
+
assert_same TestModule[' '], TestModule[' ']
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_create
|
51
|
+
assert_instance_of TestModule::TestClass, TestModule.create('test')
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_register
|
55
|
+
assert_equal TestModule::TestClass, TestModule['test']
|
56
|
+
assert_equal 'test', TestModule::TestClass.registered_id
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_register__already_registered
|
60
|
+
e = assert_raises(RuntimeError) { TestModule::Base.register 'test' }
|
61
|
+
assert_equal "ID `test' already registered. Choose another ID.", e.message
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_find_all
|
65
|
+
expected = [TestModule::TestClass]
|
66
|
+
assert_equal expected, TestModule.find_all
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class ResponseCacheTest < Test::Unit::TestCase
|
4
|
+
class SilentLogger
|
5
|
+
def method_missing(*args); end
|
6
|
+
end
|
7
|
+
|
8
|
+
class TestResponse
|
9
|
+
attr_accessor :headers, :body
|
10
|
+
def initialize(body = '', headers = {})
|
11
|
+
@body, @headers = body, headers
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup
|
16
|
+
@dir = "#{RAILS_ROOT}/test/cache"
|
17
|
+
@cache = ResponseCache.new(
|
18
|
+
:directory => @dir,
|
19
|
+
:perform_caching => true
|
20
|
+
)
|
21
|
+
@cache.clear
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
FileUtils.rm_rf @dir if File.exists? @dir
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_initialize__defaults
|
29
|
+
@cache = ResponseCache.new
|
30
|
+
assert_equal "#{RAILS_ROOT}/cache", @cache.directory
|
31
|
+
assert_equal 5.minutes, @cache.expire_time
|
32
|
+
assert_equal '.yml', @cache.default_extension
|
33
|
+
assert_equal false, @cache.perform_caching
|
34
|
+
assert_kind_of Logger, @cache.logger
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_initialize__with_options
|
38
|
+
@cache = ResponseCache.new(
|
39
|
+
:directory => "test",
|
40
|
+
:expire_time => 5,
|
41
|
+
:default_extension => ".xhtml",
|
42
|
+
:perform_caching => false,
|
43
|
+
:logger => SilentLogger.new
|
44
|
+
)
|
45
|
+
assert_equal "test", @cache.directory
|
46
|
+
assert_equal 5, @cache.expire_time
|
47
|
+
assert_equal ".xhtml", @cache.default_extension
|
48
|
+
assert_equal false, @cache.perform_caching
|
49
|
+
assert_kind_of SilentLogger, @cache.logger
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_cache_response
|
53
|
+
['test/me', '/test/me', 'test/me/', '/test/me/', 'test//me'].each do |url|
|
54
|
+
@cache.clear
|
55
|
+
@cache.cache_response(url, response('content'))
|
56
|
+
name = "#{@dir}/test/me.html"
|
57
|
+
assert File.exists?(name), "url: #{url}"
|
58
|
+
assert_equal "--- \nbody: content\nheaders: {}", file(name), "url: #{url}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
def test_cache_response_without_caching
|
62
|
+
@cache.perform_caching = false
|
63
|
+
@cache.cache_response('test', response('content'))
|
64
|
+
assert !File.exists?("#{@dir}/test.yml")
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_cache_response
|
68
|
+
@cache.cache_response('/test/me', response('content'))
|
69
|
+
['test/me', '/test/me', 'test/me/', '/test/me/', 'test//me'].each do |url|
|
70
|
+
assert_equal 'content', @cache.update_response(url, response).body, "url: #{url}"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
def test_update_response__nonexistant
|
74
|
+
assert_equal '', @cache.update_response('nothing/here', response).body
|
75
|
+
end
|
76
|
+
def test_update_response_without_caching
|
77
|
+
@cache.cache_response('/test/me', response('content'))
|
78
|
+
@cache.perform_caching = false
|
79
|
+
assert_equal '', @cache.update_response('/test/me', response).body
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_cache
|
83
|
+
result = @cache.cache_response('test', response('content', 'Content-Type' => 'text/plain'))
|
84
|
+
cached = @cache.update_response('test', response)
|
85
|
+
assert_equal 'content', cached.body
|
86
|
+
assert_equal 'text/plain', cached.headers['Content-Type']
|
87
|
+
assert_kind_of TestResponse, result
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_expire_response
|
91
|
+
@cache.cache_response('test', response('content'))
|
92
|
+
@cache.expire_response('test')
|
93
|
+
assert_equal '', @cache.update_response('test', response).body
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_clear
|
97
|
+
@cache.cache_response('test1', response('content'))
|
98
|
+
@cache.cache_response('test2', response('content'))
|
99
|
+
assert_equal 2, Dir["#{@dir}/*"].size
|
100
|
+
|
101
|
+
@cache.clear
|
102
|
+
assert_equal 0, Dir["#{@dir}/*"].size
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_response_cached
|
106
|
+
assert_equal false, @cache.response_cached?('test')
|
107
|
+
result = @cache.cache_response('test', response('content'))
|
108
|
+
assert_equal true, @cache.response_cached?('test')
|
109
|
+
end
|
110
|
+
def test_response_cached_timed_out
|
111
|
+
@cache.expire_time = 1
|
112
|
+
result = @cache.cache_response('test', response('content'))
|
113
|
+
sleep 1.5
|
114
|
+
assert_equal false, @cache.response_cached?('test')
|
115
|
+
end
|
116
|
+
|
117
|
+
# Class Methods
|
118
|
+
|
119
|
+
def test_instance
|
120
|
+
assert_same ResponseCache.instance, ResponseCache.instance
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
def file(filename)
|
126
|
+
open(filename) { |f| f.read } rescue ''
|
127
|
+
end
|
128
|
+
|
129
|
+
def response(*args)
|
130
|
+
TestResponse.new(*args)
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|