impostor 0.2.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +2 -0
  4. data/.rvmrc +1 -0
  5. data/Gemfile +17 -0
  6. data/Gemfile.lock +47 -0
  7. data/History.txt +8 -0
  8. data/Manifest.txt +87 -55
  9. data/README.txt +11 -11
  10. data/Rakefile +16 -20
  11. data/lib/impostor/auth.rb +103 -0
  12. data/lib/impostor/config.rb +171 -0
  13. data/lib/impostor/errors.rb +67 -0
  14. data/lib/impostor/phpbb2.rb +202 -0
  15. data/lib/impostor/phpbb3.rb +199 -0
  16. data/lib/impostor/post.rb +111 -0
  17. data/lib/impostor/topic.rb +115 -0
  18. data/lib/impostor/wwf79.rb +186 -0
  19. data/lib/impostor/wwf80.rb +190 -0
  20. data/lib/impostor.rb +108 -5
  21. data/spec/auth_spec.rb +148 -0
  22. data/spec/base_spec_helper.rb +12 -0
  23. data/{test/test_helper.rb → spec/caged_net_http.rb} +8 -17
  24. data/spec/config_spec.rb +136 -0
  25. data/spec/fixtures/junk.html +1 -0
  26. data/{test → spec}/fixtures/phpbb2-get-new_topic-form-good-response.html +0 -0
  27. data/{test → spec}/fixtures/phpbb2-get-viewtopic-for-new-topic-good-response.html +11 -11
  28. data/{test → spec}/fixtures/phpbb2-get-viewtopic-for-new-topic-malformed-response.html +0 -0
  29. data/{test → spec}/fixtures/phpbb2-index.html +0 -0
  30. data/{test → spec}/fixtures/phpbb2-logged-in.html +0 -0
  31. data/{test → spec}/fixtures/phpbb2-login.html +0 -0
  32. data/{test → spec}/fixtures/phpbb2-not-logged-in.html +0 -0
  33. data/{test → spec}/fixtures/phpbb2-post-new_topic-good-response.html +0 -0
  34. data/{test → spec}/fixtures/phpbb2-post-reply-good-response.html +0 -0
  35. data/{test → spec}/fixtures/phpbb2-post-reply-throttled-response.html +0 -0
  36. data/{test → spec}/fixtures/phpbb2-too-many-posts.html +0 -0
  37. data/{test → spec}/fixtures/phpbb3-get-new-topic-form-good-response.html +0 -0
  38. data/{test → spec}/fixtures/phpbb3-get-reply-form-good-response.html +0 -0
  39. data/{test → spec}/fixtures/phpbb3-logged-in.html +0 -0
  40. data/{test → spec}/fixtures/phpbb3-login.html +0 -0
  41. data/{test → spec}/fixtures/phpbb3-not-logged-in.html +0 -0
  42. data/{test → spec}/fixtures/phpbb3-post-new_topic-good-response.html +0 -0
  43. data/{test → spec}/fixtures/phpbb3-post-reply-good-response.html +0 -0
  44. data/spec/fixtures/vcr_cassettes/phpbb2-should-be-overlimit-creating-topic.yml +1308 -0
  45. data/spec/fixtures/vcr_cassettes/phpbb2-should-create-topic.yml +923 -0
  46. data/spec/fixtures/vcr_cassettes/phpbb2-should-login.yml +360 -0
  47. data/spec/fixtures/vcr_cassettes/phpbb2-should-not-create-new-topic.yml +497 -0
  48. data/spec/fixtures/vcr_cassettes/phpbb2-should-not-login.yml +287 -0
  49. data/spec/fixtures/vcr_cassettes/phpbb2-should-not-post.yml +497 -0
  50. data/spec/fixtures/vcr_cassettes/phpbb2-should-overlimit-error-post.yml +1140 -0
  51. data/spec/fixtures/vcr_cassettes/phpbb2-should-post.yml +751 -0
  52. data/spec/fixtures/vcr_cassettes/phpbb3-should-be-overlimit-creating-topic.yml +995 -0
  53. data/spec/fixtures/vcr_cassettes/phpbb3-should-create-topic.yml +675 -0
  54. data/spec/fixtures/vcr_cassettes/phpbb3-should-login.yml +245 -0
  55. data/spec/fixtures/vcr_cassettes/phpbb3-should-not-create-new-topic.yml +350 -0
  56. data/spec/fixtures/vcr_cassettes/phpbb3-should-not-login.yml +253 -0
  57. data/spec/fixtures/vcr_cassettes/phpbb3-should-not-post.yml +350 -0
  58. data/spec/fixtures/vcr_cassettes/phpbb3-should-overlimit-error-post.yml +1046 -0
  59. data/spec/fixtures/vcr_cassettes/phpbb3-should-post.yml +605 -0
  60. data/{test → spec}/fixtures/wwf79-forum_posts.html +0 -0
  61. data/{test → spec}/fixtures/wwf79-general-new-topic-error.html +0 -0
  62. data/{test → spec}/fixtures/wwf79-general-posting-error.html +0 -0
  63. data/{test → spec}/fixtures/wwf79-good-post-forum_posts.html +1 -1
  64. data/{test → spec}/fixtures/wwf79-index.html +0 -0
  65. data/{test → spec}/fixtures/wwf79-logged-in.html +0 -0
  66. data/{test → spec}/fixtures/wwf79-login.html +0 -0
  67. data/{test → spec}/fixtures/wwf79-new-topic-forum_posts-response.html +0 -0
  68. data/{test → spec}/fixtures/wwf79-new-topic-post_message_form.html +0 -0
  69. data/{test → spec}/fixtures/wwf79-not-logged-in.html +0 -0
  70. data/{test → spec}/fixtures/wwf79-too-many-posts.html +0 -0
  71. data/{test → spec}/fixtures/wwf79-too-many-topics.html +0 -0
  72. data/{test → spec}/fixtures/wwf80-general-posting-error.html +0 -0
  73. data/{test → spec}/fixtures/wwf80-get-new_topic-form-good-response.html +0 -0
  74. data/{test → spec}/fixtures/wwf80-get-viewtopic-for-new-topic-good-response.html +0 -0
  75. data/{test → spec}/fixtures/wwf80-index.html +0 -0
  76. data/{test → spec}/fixtures/wwf80-logged-in.html +0 -0
  77. data/{test → spec}/fixtures/wwf80-login.html +0 -0
  78. data/{test → spec}/fixtures/wwf80-new_reply_form.html +0 -0
  79. data/{test → spec}/fixtures/wwf80-not-logged-in.html +0 -0
  80. data/{test → spec}/fixtures/wwf80-post-new_topic-good-response.html +1 -1
  81. data/{test → spec}/fixtures/wwf80-post-reply-good-response.html +0 -0
  82. data/{test → spec}/fixtures/wwf80-too-many-posts.html +0 -0
  83. data/spec/impostor_spec_helper.rb +162 -0
  84. data/spec/integration/phpbb2_spec.rb +111 -0
  85. data/spec/integration/phpbb3_spec.rb +109 -0
  86. data/spec/integration_spec_helper.rb +7 -0
  87. data/spec/phpbb2_spec.rb +346 -0
  88. data/spec/phpbb3_spec.rb +332 -0
  89. data/spec/post_spec.rb +134 -0
  90. data/spec/spec_helper.rb +2 -0
  91. data/spec/test_impostor.rb +12 -0
  92. data/spec/topic_spec.rb +143 -0
  93. data/spec/wwf79_spec.rb +342 -0
  94. data/spec/wwf80_spec.rb +339 -0
  95. metadata +156 -87
  96. data/lib/www/impostor/phpbb2.rb +0 -258
  97. data/lib/www/impostor/phpbb3.rb +0 -236
  98. data/lib/www/impostor/wwf79.rb +0 -254
  99. data/lib/www/impostor/wwf80.rb +0 -264
  100. data/lib/www/impostor.rb +0 -269
  101. data/test/test_github.rb +0 -12
  102. data/test/test_www_impostor.rb +0 -165
  103. data/test/test_www_impostor_phpbb2.rb +0 -536
  104. data/test/test_www_impostor_phpbb3.rb +0 -483
  105. data/test/test_www_impostor_wwf79.rb +0 -535
  106. data/test/test_www_impostor_wwf80.rb +0 -535
  107. data/vendor/plugins/impostor/lib/autotest/discover.rb +0 -3
  108. data/vendor/plugins/impostor/lib/autotest/impostor.rb +0 -49
@@ -1,535 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "..", "lib", "www", "impostor")
2
- require File.join(File.dirname(__FILE__), "..", "lib", "www", "impostor", "wwf79")
3
- require File.join(File.dirname(__FILE__), "test_helper")
4
-
5
- require 'test/unit'
6
- require 'rubygems'
7
- require 'mocha'
8
- require 'mechanize'
9
-
10
- class TestWwwImpostorWwf79 < Test::Unit::TestCase
11
- include TestHelper
12
-
13
- def setup
14
- @cookie_jar = File.join(Dir.tmpdir, 'www_impostor_wwf79_test.yml')
15
- @app_root = 'http://localhost/wwf79/'
16
- @im = WWW::Impostor.new(config())
17
- end
18
-
19
- def teardown
20
- File.delete(@cookie_jar) if File.exist?(@cookie_jar)
21
- end
22
-
23
- def config(config={})
24
- c = {:type => :wwf79,
25
- :app_root => @app_root,
26
- :login_page => 'login_user.asp',
27
- :forum_posts_page => 'forum_posts.asp',
28
- :post_message_page => 'post_message_form.asp',
29
- :user_agent => 'Windows IE 7',
30
- :username => 'tester',
31
- :password => 'test',
32
- :cookie_jar => @cookie_jar
33
- }.merge(config)
34
- c
35
- end
36
-
37
- def wwf79_good_submit_post_form
38
- %q!<form action="post_message.asp?PN=" method="post" name="frmAddMessage">
39
- <input name="message" value="" type="hidden">
40
- <input name="Submit" type="submit">
41
- </form>!
42
- end
43
-
44
- def wwf79_good_submit_new_topic_form
45
- %q!<form action="post_message.asp?PN=" method="post" name="frmAddMessage">
46
- <input name="subject" type="text">
47
- <input name="message" value="" type="hidden">
48
- <input name="Submit" type="submit">
49
- </form>!
50
- end
51
-
52
- def test_initialize_with_cookie_jar
53
- FileUtils.touch(@cookie_jar)
54
-
55
- WWW::Mechanize::CookieJar.any_instance.expects(:load).once.with(@cookie_jar)
56
- im = WWW::Impostor.new(config())
57
- assert im
58
- end
59
-
60
- def test_initialize_without_cookie_jar
61
- WWW::Mechanize::CookieJar.any_instance.expects(:load).never
62
- im = WWW::Impostor.new(config())
63
- assert im
64
- end
65
-
66
- def test_version
67
- assert @im.version
68
- end
69
-
70
- def test_should_be_logged_in?
71
- response = {'content-type' => 'text/html'}
72
- body = load_page('wwf79-logged-in.html').join
73
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
74
- assert_equal true, @im.send(:logged_in?, page)
75
- end
76
-
77
- def test_should_not_be_logged_in?
78
- response = {'content-type' => 'text/html'}
79
- body = load_page('wwf79-not-logged-in.html').join
80
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
81
- assert_equal false, @im.send(:logged_in?, page)
82
- end
83
-
84
- def test_fetch_login_page
85
- page = load_page('wwf79-login.html').join
86
- WWW::Mechanize.any_instance.expects(:get).once.with(
87
- URI.join(@app_root, config[:login_page])
88
- ).returns(page)
89
-
90
- assert_equal page, @im.send(:fetch_login_page)
91
- end
92
-
93
- def test_login_form_and_button_should_raise_login_error_when_form_is_missing
94
- err = assert_raise(WWW::Impostor::LoginError) do
95
- form, button = @im.send(:login_form_and_button, nil)
96
- end
97
- assert_equal "unknown login page format", err.original_exception.message
98
- end
99
-
100
- def test_login_form_and_button_should_return_a_form_and_button
101
- response = {'content-type' => 'text/html'}
102
- body = load_page('wwf79-login.html').join
103
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
104
- form, button = @im.send(:login_form_and_button, page)
105
- assert_equal true, form.is_a?(WWW::Mechanize::Form)
106
- assert_equal true, button.is_a?(WWW::Mechanize::Form::Button)
107
- end
108
-
109
- def test_post_login_should_return_page
110
- response = {'content-type' => 'text/html'}
111
- body = load_page('wwf79-logged-in.html').join
112
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
113
- form = mock()
114
- button = mock()
115
- WWW::Mechanize.any_instance.expects(:submit).once.with(form, button).returns(page)
116
-
117
- assert_equal page, @im.send(:post_login, form, button)
118
- end
119
-
120
- def test_post_login_should_raise_login_error
121
- errmsg = "from test #{Time.now.to_s}"
122
- WWW::Mechanize.any_instance.expects(:submit).raises(StandardError, errmsg)
123
- err = assert_raise(WWW::Impostor::LoginError) do
124
- page = @im.send(:post_login, nil, nil)
125
- end
126
- assert_equal errmsg, err.original_exception.message
127
- end
128
-
129
- def test_bad_login_page_should_raise_exception
130
- errmsg = "from test #{Time.now.to_s}"
131
- WWW::Mechanize.any_instance.expects(:get).once.with(
132
- URI.join(@app_root, config[:login_page])
133
- ).raises(StandardError, errmsg)
134
-
135
- err = assert_raise(WWW::Impostor::LoginError) do
136
- @im.send(:fetch_login_page)
137
- end
138
- assert_equal errmsg, err.original_exception.message
139
- end
140
-
141
- def test_already_logged_in_should_not_post_login_information_again_instance_varialbe
142
- @im.instance_variable_set(:@loggedin, true)
143
- @im.expects(:fetch_login_page).never
144
- assert_equal true, @im.login
145
- end
146
-
147
- def test_already_logged_in_should_not_post_login_information_again
148
- @im.instance_variable_set(:@loggedin, false)
149
- page = mock()
150
- @im.stubs(:fetch_login_page).returns(page)
151
- @im.expects(:logged_in?).once.with(page).returns(true)
152
- @im.expects(:login_form_and_button).with(page).never
153
- assert_equal true, @im.login
154
- end
155
-
156
- def test_login_should_login
157
- @im.instance_variable_set(:@loggedin, false)
158
- login_page = mock()
159
- @im.stubs(:fetch_login_page).returns(login_page)
160
- @im.expects(:logged_in?).once.with(login_page).returns(false)
161
- form = mock()
162
- button = mock()
163
- @im.expects(:login_form_and_button).with(login_page).returns([form, button])
164
- logged_in_page = mock()
165
- @im.expects(:post_login).with(form, button).returns(logged_in_page)
166
- @im.expects(:logged_in?).once.with(logged_in_page).returns(true)
167
- @im.expects(:load_topics).once.returns(true)
168
-
169
- assert_equal true, @im.login
170
- end
171
-
172
- def test_logout_does_nothing_if_logged_out
173
- @im.instance_variable_set(:@loggedin, false)
174
- @im.expects(:cookie_jar).never
175
- @im.expects(:save_topics).never
176
- assert_equal false, @im.logout
177
- end
178
-
179
- def test_logout
180
- @im.instance_variable_set(:@loggedin, true)
181
- cookie_jar = mock()
182
- @im.expects(:cookie_jar).times(2).returns(cookie_jar)
183
- WWW::Mechanize::CookieJar.any_instance.expects(:save_as).once.with(cookie_jar).returns(nil)
184
- @im.expects(:save_topics).once
185
- assert_equal true, @im.logout
186
- assert_equal nil, @im.instance_variable_get(:@forum)
187
- assert_equal nil, @im.instance_variable_get(:@topic)
188
- assert_equal nil, @im.instance_variable_get(:@subject)
189
- assert_equal nil, @im.instance_variable_get(:@message)
190
- assert_equal false, @im.instance_variable_get(:@loggedin)
191
- end
192
-
193
- def test_forum_posts_page
194
- c = config
195
- assert_equal URI.join(@app_root, c[:forum_posts_page]), @im.forum_posts_page
196
- end
197
-
198
- def test_post_message_page
199
- c = config
200
- assert_equal URI.join(@app_root, c[:post_message_page]), @im.post_message_page
201
- end
202
-
203
- def test_post_without_forum_set_should_raise_exception
204
- @im.instance_variable_set(:@forum, nil)
205
- err = assert_raise(WWW::Impostor::PostError) do
206
- @im.post
207
- end
208
- assert_equal "forum not set", err.original_exception.message
209
- err = assert_raise(WWW::Impostor::PostError) do
210
- @im.post(f=nil,t=nil,m=nil)
211
- end
212
- assert_equal "forum not set", err.original_exception.message
213
- end
214
-
215
- def test_post_without_topic_set_should_raise_exception
216
- @im.instance_variable_set(:@forum, 1)
217
- @im.instance_variable_set(:@topic, nil)
218
- err = assert_raise(WWW::Impostor::PostError) do
219
- @im.post
220
- end
221
- assert_equal "topic not set", err.original_exception.message
222
- err = assert_raise(WWW::Impostor::PostError) do
223
- @im.post(f=2,t=nil,m=nil)
224
- end
225
- assert_equal "topic not set", err.original_exception.message
226
- end
227
-
228
- def test_post_without_message_set_should_raise_exception
229
- @im.instance_variable_set(:@forum, 1)
230
- @im.instance_variable_set(:@topic, 1)
231
- @im.instance_variable_set(:@message, nil)
232
- err = assert_raise(WWW::Impostor::PostError) do
233
- @im.post
234
- end
235
- assert_equal "message not set", err.original_exception.message
236
- err = assert_raise(WWW::Impostor::PostError) do
237
- @im.post(f=2,t=2,m=nil)
238
- end
239
- assert_equal "message not set", err.original_exception.message
240
- end
241
-
242
- def test_post_not_logged_in_should_raise_exception
243
- @im.expects(:login).once.returns(false)
244
- @im.instance_variable_set(:@loggedin, false)
245
- err = assert_raise(WWW::Impostor::PostError) do
246
- @im.post(2,2,'hello')
247
- end
248
- assert_equal "not logged in", err.original_exception.message
249
- end
250
-
251
- def test_bad_post_page_for_post_should_raise_exception
252
- @im.instance_variable_set(:@loggedin, true)
253
- topic = 2
254
- forum_posts_page = @im.forum_posts_page
255
- forum_posts_page.query = "TID=#{topic}&TPN=10000"
256
- errmsg = "from test #{Time.now.to_s}"
257
- WWW::Mechanize.any_instance.expects(:get).once.with(
258
- forum_posts_page
259
- ).raises(StandardError, errmsg)
260
- err = assert_raise(WWW::Impostor::PostError) do
261
- @im.post(7,topic,'hello')
262
- end
263
- assert_equal errmsg, err.original_exception.message
264
- end
265
-
266
- def test_bad_post_form_for_post_should_raise_exception
267
- @im.instance_variable_set(:@loggedin, true)
268
- response = {'content-type' => 'text/html'}
269
- body = '<form action="post_message.asp?PN=" method="post" name="frmAddMessage"></form>'
270
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
271
- topic = 2
272
- forum_posts_page = @im.forum_posts_page
273
- forum_posts_page.query = "TID=#{topic}&TPN=10000"
274
- WWW::Mechanize.any_instance.expects(:get).once.with(forum_posts_page).returns(page)
275
- err = assert_raise(WWW::Impostor::PostError) do
276
- @im.post(1,topic,'hello')
277
- end
278
- assert_equal "post form not found", err.original_exception.message
279
- end
280
-
281
- def test_submitting_bad_post_form_for_post_should_raise_exception
282
- @im.instance_variable_set(:@loggedin, true)
283
- response = {'content-type' => 'text/html'}
284
- body = wwf79_good_submit_post_form
285
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
286
- topic = 2
287
- forum_posts_page = @im.forum_posts_page
288
- forum_posts_page.query = "TID=#{topic}&TPN=10000"
289
- WWW::Mechanize.any_instance.expects(:get).once.with(forum_posts_page).returns(page)
290
- errmsg = "from test #{Time.now.to_s}"
291
- WWW::Mechanize.any_instance.expects(:submit).once.raises(StandardError, errmsg)
292
- err = assert_raise(WWW::Impostor::PostError) do
293
- @im.post(1,topic,'hello')
294
- end
295
- assert_equal errmsg, err.original_exception.message
296
- end
297
-
298
- def test_too_many_posts_for_post_should_raise_exception
299
- @im.instance_variable_set(:@loggedin, true)
300
- response = {'content-type' => 'text/html'}
301
- body = wwf79_good_submit_post_form
302
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
303
- topic = 2
304
- forum_posts_page = @im.forum_posts_page
305
- forum_posts_page.query = "TID=#{topic}&TPN=10000"
306
- WWW::Mechanize.any_instance.expects(:get).once.with(forum_posts_page).returns(page)
307
- body = load_page('wwf79-too-many-posts.html').join
308
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
309
- WWW::Mechanize.any_instance.expects(:submit).once.returns(page)
310
-
311
- err = assert_raise(WWW::Impostor::ThrottledError) do
312
- @im.post(1,topic,'hello')
313
- end
314
- assert_equal "You have exceeded the number of posts permitted in the time span", err.original_exception.message
315
- end
316
-
317
- def test_getting_unknown_post_response_should_raise_exception
318
- @im.instance_variable_set(:@loggedin, true)
319
- response = {'content-type' => 'text/html'}
320
- body = wwf79_good_submit_post_form
321
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
322
- topic = 2
323
- forum_posts_page = @im.forum_posts_page
324
- forum_posts_page.query = "TID=#{topic}&TPN=10000"
325
- WWW::Mechanize.any_instance.expects(:get).once.with(forum_posts_page).returns(page)
326
- body = load_page('wwf79-general-posting-error.html').join
327
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
328
- WWW::Mechanize.any_instance.expects(:submit).once.returns(page)
329
-
330
- err = assert_raise(WWW::Impostor::PostError) do
331
- @im.post(1,topic,'hello')
332
- end
333
- assert_equal "There was an error making the post", err.original_exception.message
334
- end
335
-
336
- def test_should_post
337
- @im.instance_variable_set(:@loggedin, true)
338
- response = {'content-type' => 'text/html'}
339
- body = wwf79_good_submit_post_form
340
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
341
- topic = 2
342
- forum_posts_page = @im.forum_posts_page
343
- forum_posts_page.query = "TID=#{topic}&TPN=10000"
344
- WWW::Mechanize.any_instance.expects(:get).once.with(forum_posts_page).returns(page)
345
- body = load_page('wwf79-good-post-forum_posts.html').join
346
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
347
- WWW::Mechanize.any_instance.expects(:submit).once.returns(page)
348
- subject = "test #{Time.now.to_s}"
349
- @im.expects(:get_subject).once.returns(subject)
350
-
351
- assert_equal true, @im.post(1,topic,'hello')
352
- assert_equal 1, @im.instance_variable_get(:@forum)
353
- assert_equal topic, @im.instance_variable_get(:@topic)
354
- assert_equal subject, @im.instance_variable_get(:@subject)
355
- assert_equal 'hello', @im.instance_variable_get(:@message)
356
- end
357
-
358
- def test_new_topic_without_forum_set_should_raise_exception
359
- @im.instance_variable_set(:@forum, nil)
360
- err = assert_raise(WWW::Impostor::PostError) do
361
- @im.new_topic
362
- end
363
- assert_equal "forum not set", err.original_exception.message
364
- err = assert_raise(WWW::Impostor::PostError) do
365
- @im.new_topic(f=nil,s="hello world",m="hello world")
366
- end
367
- assert_equal "forum not set", err.original_exception.message
368
- end
369
-
370
- def test_new_topic_without_subject_set_should_raise_exception
371
- @im.instance_variable_set(:@forum, 1)
372
- @im.instance_variable_set(:@subject, nil)
373
- err = assert_raise(WWW::Impostor::PostError) do
374
- @im.new_topic
375
- end
376
- assert_equal "topic name not given", err.original_exception.message
377
- err = assert_raise(WWW::Impostor::PostError) do
378
- @im.new_topic(f=1,s=nil,m="hello world")
379
- end
380
- assert_equal "topic name not given", err.original_exception.message
381
- end
382
-
383
- def test_new_topic_without_message_set_should_raise_exception
384
- @im.instance_variable_set(:@forum, 1)
385
- @im.instance_variable_set(:@subject, 'test')
386
- @im.instance_variable_set(:@message, nil)
387
- err = assert_raise(WWW::Impostor::PostError) do
388
- @im.new_topic
389
- end
390
- assert_equal "message not set", err.original_exception.message
391
- err = assert_raise(WWW::Impostor::PostError) do
392
- @im.new_topic(f=1,s="hello world",m=nil)
393
- end
394
- assert_equal "message not set", err.original_exception.message
395
- end
396
-
397
- def test_new_topic_not_logged_in_should_raise_exception
398
- @im.expects(:login).once.returns(false)
399
- @im.instance_variable_set(:@loggedin, false)
400
-
401
- err = assert_raise(WWW::Impostor::PostError) do
402
- @im.new_topic(f=2,s="hello world",m="hello ruby")
403
- end
404
- assert_equal "not logged in", err.original_exception.message
405
- end
406
-
407
- def test_getting_bad_post_page_for_new_topic_should_raise_exception
408
- @im.instance_variable_set(:@loggedin, true)
409
- forum = 2
410
- post_message_page = @im.post_message_page
411
- post_message_page.query = "FID=#{forum}"
412
- errmsg = "from test #{Time.now.to_s}"
413
- WWW::Mechanize.any_instance.expects(:get).once.with(
414
- post_message_page
415
- ).raises(StandardError, errmsg)
416
-
417
- err = assert_raise(WWW::Impostor::PostError) do
418
- @im.new_topic(f=forum,s="hello world",m="hello ruby")
419
- end
420
- assert_equal errmsg, err.original_exception.message
421
- end
422
-
423
- def test_getting_bad_post_form_for_new_topic_should_raise_exception
424
- @im.instance_variable_set(:@loggedin, true)
425
- response = {'content-type' => 'text/html'}
426
- body = '<form action="post_message.asp?PN=" method="post" name="frmAddMessage"></form>'
427
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
428
- forum = 2
429
- post_message_page = @im.post_message_page
430
- post_message_page.query = "FID=#{forum}"
431
- WWW::Mechanize.any_instance.expects(:get).once.with(post_message_page).returns(page)
432
- err = assert_raise(WWW::Impostor::PostError) do
433
- @im.new_topic(f=forum,s="hello world",m="hello ruby")
434
- end
435
- assert_equal "post form not found", err.original_exception.message
436
- end
437
-
438
- def test_submitting_bad_post_for_new_topic_form_should_raise_exception
439
- @im.instance_variable_set(:@loggedin, true)
440
- response = {'content-type' => 'text/html'}
441
- body = wwf79_good_submit_new_topic_form
442
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
443
- forum = 2
444
- post_message_page = @im.post_message_page
445
- post_message_page.query = "FID=#{forum}"
446
- WWW::Mechanize.any_instance.expects(:get).once.with(post_message_page).returns(page)
447
- errmsg = "from test #{Time.now.to_s}"
448
- WWW::Mechanize.any_instance.expects(:submit).once.raises(StandardError, errmsg)
449
- err = assert_raise(WWW::Impostor::PostError) do
450
- @im.new_topic(f=forum,s="hello world",m="hello ruby")
451
- end
452
- assert_equal errmsg, err.original_exception.message
453
- end
454
-
455
- def test_too_many_posts_for_new_topic_should_raise_exception
456
- @im.instance_variable_set(:@loggedin, true)
457
- response = {'content-type' => 'text/html'}
458
- body = wwf79_good_submit_new_topic_form
459
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
460
- forum = 2
461
- post_message_page = @im.post_message_page
462
- post_message_page.query = "FID=#{forum}"
463
- WWW::Mechanize.any_instance.expects(:get).once.with(post_message_page).returns(page)
464
- body = load_page('wwf79-too-many-topics.html').join
465
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
466
- WWW::Mechanize.any_instance.expects(:submit).once.returns(page)
467
-
468
- err = assert_raise(WWW::Impostor::ThrottledError) do
469
- @im.new_topic(f=forum,s="hello world",m="hello ruby")
470
- end
471
- assert_equal "You have exceeded the number of posts permitted in the time span", err.original_exception.message
472
- end
473
-
474
- def test_getting_unknown_new_topic_response_should_raise_exception
475
- @im.instance_variable_set(:@loggedin, true)
476
- response = {'content-type' => 'text/html'}
477
- body = wwf79_good_submit_new_topic_form
478
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
479
- forum = 2
480
- post_message_page = @im.post_message_page
481
- post_message_page.query = "FID=#{forum}"
482
- WWW::Mechanize.any_instance.expects(:get).once.with(post_message_page).returns(page)
483
- body = load_page('wwf79-general-new-topic-error.html').join
484
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
485
- WWW::Mechanize.any_instance.expects(:submit).once.returns(page)
486
-
487
- err = assert_raise(WWW::Impostor::PostError) do
488
- @im.new_topic(f=forum,s="hello world",m="hello ruby")
489
- end
490
- assert_equal "There was an error creating the topic", err.original_exception.message
491
- end
492
-
493
- def test_malformed_form_with_topicid_for_new_topic_should_raise_exception
494
- @im.instance_variable_set(:@loggedin, true)
495
- response = {'content-type' => 'text/html'}
496
- body = wwf79_good_submit_new_topic_form
497
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
498
- forum = 2
499
- post_message_page = @im.post_message_page
500
- post_message_page.query = "FID=#{forum}"
501
- WWW::Mechanize.any_instance.expects(:get).once.with(post_message_page).returns(page)
502
-
503
- body = 'junk'
504
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
505
- WWW::Mechanize.any_instance.expects(:submit).once.returns(page)
506
-
507
- err = assert_raise(WWW::Impostor::PostError) do
508
- @im.new_topic(f=forum,s="hello world",m="hello ruby")
509
- end
510
- assert_equal "unexpected new topic ID", err.original_exception.message
511
- end
512
-
513
- def test_new_topic_should_work
514
- @im.instance_variable_set(:@loggedin, true)
515
- response = {'content-type' => 'text/html'}
516
- body = wwf79_good_submit_new_topic_form
517
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
518
- forum = 2
519
- subject = "hello world"
520
- message = "hello ruby"
521
- post_message_page = @im.post_message_page
522
- post_message_page.query = "FID=#{forum}"
523
- WWW::Mechanize.any_instance.expects(:get).once.with(post_message_page).returns(page)
524
- body = load_page('wwf79-new-topic-forum_posts-response.html').join
525
- page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
526
- WWW::Mechanize.any_instance.expects(:submit).once.returns(page)
527
-
528
- @im.expects(:add_subject).once.with(forum,357,subject)
529
- assert_equal true, @im.new_topic(f=forum,s=subject,m=message)
530
- assert_equal forum, @im.instance_variable_get(:@forum)
531
- assert_equal 357, @im.instance_variable_get(:@topic)
532
- assert_equal subject, @im.instance_variable_get(:@subject)
533
- assert_equal message, @im.instance_variable_get(:@message)
534
- end
535
- end