impostor 0.0.1
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.
- data/History.txt +4 -0
- data/Manifest.txt +50 -0
- data/README.txt +65 -0
- data/Rakefile +40 -0
- data/lib/impostor.rb +6 -0
- data/lib/www/impostor/phpbb2.rb +260 -0
- data/lib/www/impostor/wwf79.rb +254 -0
- data/lib/www/impostor/wwf80.rb +264 -0
- data/lib/www/impostor.rb +269 -0
- data/test/fixtures/phpbb2-get-new_topic-form-good-response.html +725 -0
- data/test/fixtures/phpbb2-get-viewtopic-for-new-topic-good-response.html +364 -0
- data/test/fixtures/phpbb2-get-viewtopic-for-new-topic-malformed-response.html +364 -0
- data/test/fixtures/phpbb2-index.html +361 -0
- data/test/fixtures/phpbb2-logged-in.html +349 -0
- data/test/fixtures/phpbb2-login.html +306 -0
- data/test/fixtures/phpbb2-not-logged-in.html +349 -0
- data/test/fixtures/phpbb2-post-new_topic-good-response.html +290 -0
- data/test/fixtures/phpbb2-post-reply-good-response.html +290 -0
- data/test/fixtures/phpbb2-post-reply-throttled-response.html +290 -0
- data/test/fixtures/phpbb2-too-many-posts.html +290 -0
- data/test/fixtures/wwf79-forum_posts.html +422 -0
- data/test/fixtures/wwf79-general-new-topic-error.html +46 -0
- data/test/fixtures/wwf79-general-posting-error.html +46 -0
- data/test/fixtures/wwf79-good-post-forum_posts.html +462 -0
- data/test/fixtures/wwf79-index.html +137 -0
- data/test/fixtures/wwf79-logged-in.html +46 -0
- data/test/fixtures/wwf79-login.html +123 -0
- data/test/fixtures/wwf79-new-topic-forum_posts-response.html +305 -0
- data/test/fixtures/wwf79-new-topic-post_message_form.html +212 -0
- data/test/fixtures/wwf79-not-logged-in.html +128 -0
- data/test/fixtures/wwf79-too-many-posts.html +46 -0
- data/test/fixtures/wwf79-too-many-topics.html +46 -0
- data/test/fixtures/wwf80-general-posting-error.html +54 -0
- data/test/fixtures/wwf80-get-new_topic-form-good-response.html +217 -0
- data/test/fixtures/wwf80-get-viewtopic-for-new-topic-good-response.html +290 -0
- data/test/fixtures/wwf80-index.html +371 -0
- data/test/fixtures/wwf80-logged-in.html +52 -0
- data/test/fixtures/wwf80-login.html +125 -0
- data/test/fixtures/wwf80-new_reply_form.html +204 -0
- data/test/fixtures/wwf80-not-logged-in.html +136 -0
- data/test/fixtures/wwf80-post-new_topic-good-response.html +293 -0
- data/test/fixtures/wwf80-post-reply-good-response.html +331 -0
- data/test/fixtures/wwf80-too-many-posts.html +54 -0
- data/test/test_helper.rb +38 -0
- data/test/test_www_impostor.rb +165 -0
- data/test/test_www_impostor_phpbb2.rb +536 -0
- data/test/test_www_impostor_wwf79.rb +535 -0
- data/test/test_www_impostor_wwf80.rb +535 -0
- data/vendor/plugins/impostor/lib/autotest/discover.rb +3 -0
- data/vendor/plugins/impostor/lib/autotest/impostor.rb +49 -0
- data.tar.gz.sig +3 -0
- metadata +156 -0
- metadata.gz.sig +3 -0
@@ -0,0 +1,535 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "lib", "www", "impostor")
|
2
|
+
require File.join(File.dirname(__FILE__), "..", "lib", "www", "impostor", "wwf80")
|
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 TestWwwImpostorWwf80 < Test::Unit::TestCase
|
11
|
+
include TestHelper
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@cookie_jar = File.join(Dir.tmpdir, 'www_impostor_wwf80_test.yml')
|
15
|
+
@app_root = 'http://localhost/wwf80/'
|
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 => :wwf80,
|
25
|
+
:app_root => @app_root,
|
26
|
+
:login_page => 'login_user.asp',
|
27
|
+
:new_reply_page => 'new_reply_form.asp',
|
28
|
+
:new_topic_page => 'new_topic_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 wwf80_good_submit_post_form
|
38
|
+
%q!<form action="post_message.asp?PN=" method="post" name="frmMessageForm">
|
39
|
+
<input name="message" value="" type="hidden">
|
40
|
+
<input name="Submit" type="submit">
|
41
|
+
</form>!
|
42
|
+
end
|
43
|
+
|
44
|
+
def wwf80_good_submit_new_topic_form
|
45
|
+
%q!<form action="new_post.asp?PN=" method="post" name="frmMessageForm">
|
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('wwf80-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('wwf80-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('wwf80-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('wwf80-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('wwf80-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_new_reply_page
|
194
|
+
c = config
|
195
|
+
assert_equal URI.join(@app_root, c[:new_reply_page]), @im.new_reply_page
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_new_topic_page
|
199
|
+
c = config
|
200
|
+
assert_equal URI.join(@app_root, c[:new_topic_page]), @im.new_topic_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
|
+
new_reply_page = @im.new_reply_page
|
255
|
+
new_reply_page.query = "TID=#{topic}"
|
256
|
+
errmsg = "from test #{Time.now.to_s}"
|
257
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(
|
258
|
+
new_reply_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
|
+
new_reply_page = @im.new_reply_page
|
273
|
+
new_reply_page.query = "TID=#{topic}"
|
274
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_reply_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 = wwf80_good_submit_post_form
|
285
|
+
page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
|
286
|
+
topic = 2
|
287
|
+
new_reply_page = @im.new_reply_page
|
288
|
+
new_reply_page.query = "TID=#{topic}"
|
289
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_reply_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 = wwf80_good_submit_post_form
|
302
|
+
page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
|
303
|
+
topic = 2
|
304
|
+
new_reply_page = @im.new_reply_page
|
305
|
+
new_reply_page.query = "TID=#{topic}"
|
306
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_reply_page).returns(page)
|
307
|
+
body = load_page('wwf80-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_match /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 = wwf80_good_submit_post_form
|
321
|
+
page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
|
322
|
+
topic = 2
|
323
|
+
new_reply_page = @im.new_reply_page
|
324
|
+
new_reply_page.query = "TID=#{topic}"
|
325
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_reply_page).returns(page)
|
326
|
+
body = load_page('wwf80-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_match /Error: Message Not Posted/, 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 = wwf80_good_submit_post_form
|
340
|
+
page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
|
341
|
+
topic = 2
|
342
|
+
new_reply_page = @im.new_reply_page
|
343
|
+
new_reply_page.query = "TID=#{topic}"
|
344
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_reply_page).returns(page)
|
345
|
+
body = load_page('wwf80-post-reply-good-response.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
|
+
new_topic_page = @im.new_topic_page
|
411
|
+
new_topic_page.query = "FID=#{forum}"
|
412
|
+
errmsg = "from test #{Time.now.to_s}"
|
413
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(
|
414
|
+
new_topic_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
|
+
new_topic_page = @im.new_topic_page
|
430
|
+
new_topic_page.query = "FID=#{forum}"
|
431
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_topic_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 = wwf80_good_submit_new_topic_form
|
442
|
+
page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
|
443
|
+
forum = 2
|
444
|
+
new_topic_page = @im.new_topic_page
|
445
|
+
new_topic_page.query = "FID=#{forum}"
|
446
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_topic_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 = wwf80_good_submit_new_topic_form
|
459
|
+
page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
|
460
|
+
forum = 2
|
461
|
+
new_topic_page = @im.new_topic_page
|
462
|
+
new_topic_page.query = "FID=#{forum}"
|
463
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_topic_page).returns(page)
|
464
|
+
body = load_page('wwf80-too-many-posts.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_match /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 = wwf80_good_submit_new_topic_form
|
478
|
+
page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
|
479
|
+
forum = 2
|
480
|
+
new_topic_page = @im.new_topic_page
|
481
|
+
new_topic_page.query = "FID=#{forum}"
|
482
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_topic_page).returns(page)
|
483
|
+
body = load_page('wwf80-general-posting-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_match /Error: Message Not Posted/, 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 = wwf80_good_submit_new_topic_form
|
497
|
+
page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
|
498
|
+
forum = 2
|
499
|
+
new_topic_page = @im.new_topic_page
|
500
|
+
new_topic_page.query = "FID=#{forum}"
|
501
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_topic_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 = wwf80_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
|
+
new_topic_page = @im.new_topic_page
|
522
|
+
new_topic_page.query = "FID=#{forum}"
|
523
|
+
WWW::Mechanize.any_instance.expects(:get).once.with(new_topic_page).returns(page)
|
524
|
+
body = load_page('wwf80-post-new_topic-good-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,152,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 152, @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
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'autotest'
|
2
|
+
|
3
|
+
class Autotest::Impostor < Autotest
|
4
|
+
|
5
|
+
def initialize # :nodoc:
|
6
|
+
super
|
7
|
+
# ignore these types of iles
|
8
|
+
@exceptions = /\.(yml)$/
|
9
|
+
|
10
|
+
# files to their test files
|
11
|
+
@test_mappings = {
|
12
|
+
%r%^lib/imposter.rb$% => proc { |_, m|
|
13
|
+
["test/test_www_imposter.rb"]
|
14
|
+
},
|
15
|
+
%r%^lib/www/imposter.rb$% => proc { |_, m|
|
16
|
+
["test/test_www_imposter.rb"]
|
17
|
+
},
|
18
|
+
%r%^lib/www/impostor/(.+).rb$% => proc { |_, m|
|
19
|
+
["test/test_www_impostor_#{m[1]}.rb"]
|
20
|
+
},
|
21
|
+
%r%^test/test_.*\.rb$% => proc { |filename, _|
|
22
|
+
filename
|
23
|
+
}
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
# Given the string filename as the path, determine
|
28
|
+
# the corresponding tests for it, in an array.
|
29
|
+
def tests_for_file(filename)
|
30
|
+
super.select { |f| @files.has_key? f }
|
31
|
+
end
|
32
|
+
|
33
|
+
# Convert the pathname s to the name of class in the s file
|
34
|
+
def path_to_classname(s)
|
35
|
+
return "WWW::ImpostorTest" if s =~ /test\/test_www_impostor.rb$/
|
36
|
+
c = s.sub(/test\/test_www_impostor_(.+).rb$/, '\1')
|
37
|
+
"WWW::Impostor::#{c.capitalize}Test"
|
38
|
+
end
|
39
|
+
|
40
|
+
def path_to_classname(s)
|
41
|
+
sep = File::SEPARATOR
|
42
|
+
f = s.sub(/^test#{sep}/, '').sub(/\.rb$/, '').split(sep)
|
43
|
+
f = f.map { |path| path.split(/_/).map { |seg| seg.capitalize }.join }
|
44
|
+
f = f.map { |path| path =~ /^Test/ ? path : "Test#{path}" }
|
45
|
+
f.join
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
end
|
data.tar.gz.sig
ADDED