Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 13
- Log:
Initial import of Typo 2.6.0 sources from a downloaded Tarball.
Typo is a Ruby On Rails based blog engine.
- Author:
- adh
- Date:
- Sat Jul 22 22:25:02 +0100 2006
- Size:
- 8133 Bytes
1 | require File.dirname(__FILE__) + '/../test_helper' |
2 | require 'backend_controller' |
3 | require 'blogger_service' |
4 | require 'digest/sha1' |
5 | require 'base64' |
6 | |
7 | # Re-raise errors caught by the controller. |
8 | class BackendController; def rescue_action(e) raise e end; end |
9 | |
10 | class BackendControllerTest < Test::Unit::TestCase |
11 | fixtures :articles, :categories, :settings, :trackbacks, :users, :articles_categories |
12 | |
13 | def setup |
14 | @controller = BackendController.new |
15 | @request, @response = ActionController::TestRequest.new, ActionController::TestResponse.new |
16 | @protocol = :xmlrpc |
17 | end |
18 | |
19 | # BloggerApi Tests |
20 | def test_blogger_delete_post |
21 | args = [ 'foo', 3, 'tobi', 'whatever', 1 ] |
22 | |
23 | result = invoke_layered :blogger, :deletePost, *args |
24 | assert_raise(ActiveRecord::RecordNotFound) { Article.find(3) } |
25 | end |
26 | |
27 | def test_blogger_get_users_blogs |
28 | args = [ 'foo', 'tobi', 'whatever' ] |
29 | |
30 | result = invoke_layered :blogger, :getUsersBlogs, *args |
31 | assert_equal result.first['blogName'], 'test blog' |
32 | end |
33 | |
34 | def test_blogger_get_user_info |
35 | args = [ 'foo', 'tobi', 'whatever' ] |
36 | |
37 | result = invoke_layered :blogger, :getUserInfo, *args |
38 | assert_equal 'tobi', result['userid'] |
39 | end |
40 | |
41 | def test_blogger_new_post |
42 | args = [ 'foo', '1', 'tobi', 'whatever', '<title>new post title</title>new post body', 1] |
43 | |
44 | result = invoke_layered :blogger, :newPost, *args |
45 | assert_not_nil result |
46 | new_post = Article.find(result) |
47 | assert_equal "new post title", new_post.title |
48 | assert_equal "new post body", new_post.body |
49 | assert_equal "textile", new_post.text_filter |
50 | assert_equal @tobi, new_post.user |
51 | end |
52 | |
53 | def test_blogger_new_post_no_title |
54 | args = [ 'foo', '1', 'tobi', 'whatever', 'new post body for post without title but with a lenghty body', 1] |
55 | |
56 | result = invoke_layered :blogger, :newPost, *args |
57 | assert_not_nil result |
58 | new_post = Article.find(result) |
59 | assert_equal "new post body for post without", new_post.title |
60 | assert_equal "new post body for post without title but with a lenghty body", new_post.body |
61 | end |
62 | |
63 | def test_blogger_new_post_with_categories |
64 | args = [ 'foo', '1', 'tobi', 'whatever', '<title>new post title</title><category>Software, Hardware</category>new post body', 1] |
65 | |
66 | result = invoke_layered :blogger, :newPost, *args |
67 | assert_not_nil result |
68 | new_post = Article.find(result) |
69 | assert_equal "new post title", new_post.title |
70 | assert_equal "new post body", new_post.body |
71 | assert_equal [@software, @hardware], new_post.categories.sort_by { |c| c.id } |
72 | end |
73 | |
74 | def test_blogger_new_post_with_non_existing_categories |
75 | args = [ 'foo', '1', 'tobi', 'whatever', '<title>new post title</title><category>Idontexist, Hardware</category>new post body', 1] |
76 | |
77 | result = invoke_layered :blogger, :newPost, *args |
78 | assert_not_nil result |
79 | new_post = Article.find(result) |
80 | assert_equal [@hardware], new_post.categories |
81 | end |
82 | |
83 | def test_blogger_fail_authentication |
84 | args = [ 'foo', 'tobi', 'using a wrong password' ] |
85 | # This will be a little more useful with the upstream changes in [1093] |
86 | assert_raise(XMLRPC::FaultException) { invoke_layered :blogger, :getUsersBlogs, *args } |
87 | end |
88 | |
89 | # Meta Weblog Tests |
90 | def test_meta_weblog_get_categories |
91 | args = [ 1, 'tobi', 'whatever' ] |
92 | |
93 | result = invoke_layered :metaWeblog, :getCategories, *args |
94 | assert_equal 'Software', result.first |
95 | end |
96 | |
97 | def test_meta_weblog_get_post |
98 | args = [ 1, 'tobi', 'whatever' ] |
99 | |
100 | result = invoke_layered :metaWeblog, :getPost, *args |
101 | assert_equal result['title'], 'Article 1!' |
102 | end |
103 | |
104 | def test_meta_weblog_get_recent_posts |
105 | args = [ 1, 'tobi', 'whatever', 2 ] |
106 | |
107 | result = invoke_layered :metaWeblog, :getRecentPosts, *args |
108 | assert_equal result.size, 2 |
109 | assert_equal result.last['title'], 'Article 2!' |
110 | end |
111 | |
112 | def test_meta_weblog_delete_post |
113 | args = [ 1, 2, 'tobi', 'whatever', 1 ] |
114 | |
115 | result = invoke_layered :metaWeblog, :deletePost, *args |
116 | assert_raise(ActiveRecord::RecordNotFound) { Article.find(2) } |
117 | end |
118 | |
119 | def test_meta_weblog_edit_post |
120 | article = Article.find(1) |
121 | article.title = "Modified!" |
122 | |
123 | args = [ 1, 'tobi', 'whatever', MetaWeblogService.new(@controller).article_dto_from(article), 1 ] |
124 | |
125 | result = invoke_layered :metaWeblog, :editPost, *args |
126 | assert result |
127 | assert_equal Article.find(1).title, "Modified!" |
128 | end |
129 | |
130 | def test_meta_weblog_new_post |
131 | article = Article.new |
132 | article.title = "Posted via Test" |
133 | article.body = "body" |
134 | |
135 | args = [ 1, 'tobi', 'whatever', MetaWeblogService.new(@controller).article_dto_from(article), 1 ] |
136 | |
137 | result = invoke_layered :metaWeblog, :newPost, *args |
138 | assert result |
139 | new_post = Article.find(result) |
140 | assert_equal "Posted via Test", new_post.title |
141 | assert_equal "textile", new_post.text_filter |
142 | end |
143 | |
144 | def test_meta_weblog_new_media_object |
145 | media_object = MetaWeblogStructs::MediaObject.new( |
146 | "name" => Digest::SHA1.hexdigest("upload-test--#{Time.now}--") + ".jpg", |
147 | "type" => "image/jpeg", |
148 | "bits" => Base64.encode64(File.open(File.expand_path(RAILS_ROOT) + "/public/images/header.jpg", "rb") { |f| f.read }) |
149 | ) |
150 | |
151 | args = [ 1, 'tobi', 'whatever', media_object ] |
152 | |
153 | result = invoke_layered :metaWeblog, :newMediaObject, *args |
154 | assert result['url'] =~ /#{media_object['name']}/ |
155 | assert File.unlink(File.expand_path(RAILS_ROOT) + "/public/files/#{media_object['name']}") |
156 | end |
157 | |
158 | def test_meta_weblog_fail_authentication |
159 | args = [ 1, 'tobi', 'using a wrong password', 2 ] |
160 | # This will be a little more useful with the upstream changes in [1093] |
161 | assert_raise(XMLRPC::FaultException) { invoke_layered :metaWeblog, :getRecentPosts, *args } |
162 | end |
163 | |
164 | # Movable Type Tests |
165 | |
166 | def test_mt_get_category_list |
167 | args = [ 1, 'tobi', 'whatever' ] |
168 | |
169 | result = invoke_layered :mt, :getCategoryList, *args |
170 | assert result.map { |c| c['categoryName'] }.include?('Software') |
171 | end |
172 | |
173 | def test_mt_get_post_categories |
174 | article = Article.find(1) |
175 | article.categories << @software |
176 | |
177 | args = [ 1, 'tobi', 'whatever' ] |
178 | |
179 | result = invoke_layered :mt, :getPostCategories, *args |
180 | assert_equal result.first['categoryName'], article.categories.first['name'] |
181 | end |
182 | |
183 | def test_mt_get_recent_post_titles |
184 | args = [ 1, 'tobi', 'whatever', 2 ] |
185 | |
186 | result = invoke_layered :mt, :getRecentPostTitles, *args |
187 | assert_equal result.first['title'], Article.find(1).title |
188 | end |
189 | |
190 | def test_mt_set_post_categories |
191 | args = [ 2, 'tobi', 'whatever', |
192 | [MovableTypeStructs::CategoryPerPost.new('categoryName' => 'personal', 'categoryId' => 3, 'isPrimary' => 1)] ] |
193 | |
194 | result = invoke_layered :mt, :setPostCategories, *args |
195 | assert_equal [@personal], Article.find(2).categories |
196 | |
197 | args = [ 2, 'tobi', 'whatever', |
198 | [MovableTypeStructs::CategoryPerPost.new('categoryName' => 'Software', 'categoryId' => 1, 'isPrimary' => 1), |
199 | MovableTypeStructs::CategoryPerPost.new('categoryName' => 'Hardware', 'categoryId' => 2, 'isPrimary' => 0) ]] |
200 | |
201 | result = invoke_layered :mt, :setPostCategories, *args |
202 | |
203 | assert Article.find(2).categories.include?(@hardware) |
204 | |
205 | end |
206 | |
207 | def test_mt_supported_text_filters |
208 | result = invoke_layered :mt, :supportedTextFilters |
209 | assert result.map {|f| f['label']}.include?('Markdown') if BlueCloth.new rescue false |
210 | assert result.map {|f| f['label']}.include?('Textile') if RedCloth.new rescue false |
211 | end |
212 | |
213 | def test_mt_get_trackback_pings |
214 | args = [ 1 ] |
215 | |
216 | result = invoke_layered :mt, :getTrackbackPings, *args |
217 | |
218 | assert_equal result.first['pingTitle'], 'Trackback Entry' |
219 | end |
220 | |
221 | def test_mt_publish_post |
222 | args = [ 4, 'tobi', 'whatever' ] |
223 | |
224 | assert_equal 0, Article.find(4).published |
225 | |
226 | result = invoke_layered :mt, :publishPost, *args |
227 | |
228 | assert result |
229 | assert_equal 1, Article.find(4).published |
230 | end |
231 | |
232 | def test_mt_fail_authentication |
233 | args = [ 1, 'tobi', 'using a wrong password', 2 ] |
234 | # This will be a little more useful with the upstream changes in [1093] |
235 | assert_raise(XMLRPC::FaultException) { invoke_layered :mt, :getRecentPostTitles, *args } |
236 | end |
237 | |
238 | end |