mediawiki-gateway 0.1.0
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/.gitignore +3 -0
- data/README +12 -0
- data/Rakefile +40 -0
- data/VERSION +1 -0
- data/config/hosts.yml +17 -0
- data/doc/classes/MediaWiki.html +189 -0
- data/doc/classes/MediaWiki/Config.html +269 -0
- data/doc/classes/MediaWiki/Gateway.html +952 -0
- data/doc/created.rid +1 -0
- data/doc/files/README_txt.html +117 -0
- data/doc/files/media_wiki/config_rb.html +108 -0
- data/doc/files/media_wiki/gateway_rb.html +113 -0
- data/doc/files/media_wiki/utils_rb.html +101 -0
- data/doc/files/script/create_page_rb.html +115 -0
- data/doc/files/script/delete_book_rb.html +108 -0
- data/doc/files/script/export_xml_rb.html +114 -0
- data/doc/files/script/get_page_rb.html +114 -0
- data/doc/files/script/import_xml_rb.html +114 -0
- data/doc/files/script/undelete_page_rb.html +101 -0
- data/doc/files/script/upload_commons_rb.html +109 -0
- data/doc/files/script/upload_file_rb.html +115 -0
- data/doc/fr_class_index.html +29 -0
- data/doc/fr_file_index.html +38 -0
- data/doc/fr_method_index.html +49 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/media_wiki.rb +3 -0
- data/lib/media_wiki/config.rb +69 -0
- data/lib/media_wiki/gateway.rb +307 -0
- data/lib/media_wiki/utils.rb +18 -0
- data/mediawiki-gateway.gemspec +88 -0
- data/script/create_page.rb +14 -0
- data/script/delete_book.rb +14 -0
- data/script/export_xml.rb +14 -0
- data/script/get_page.rb +12 -0
- data/script/import_xml.rb +14 -0
- data/script/run_fake_media_wiki.rb +8 -0
- data/script/undelete_page.rb +15 -0
- data/script/upload_commons.rb +42 -0
- data/script/upload_file.rb +14 -0
- data/spec/fake_media_wiki/api_pages.rb +131 -0
- data/spec/fake_media_wiki/app.rb +262 -0
- data/spec/fake_media_wiki/query_handling.rb +112 -0
- data/spec/gateway_spec.old +535 -0
- data/spec/gateway_spec.rb +653 -0
- data/spec/import-test-data.xml +68 -0
- metadata +115 -0
@@ -0,0 +1,112 @@
|
|
1
|
+
|
2
|
+
module FakeMediaWiki
|
3
|
+
|
4
|
+
module QueryHandling
|
5
|
+
|
6
|
+
def query
|
7
|
+
[:prop, :export, :list, :meta].each do |query_type|
|
8
|
+
return send(query_type) if params[query_type]
|
9
|
+
end
|
10
|
+
halt(404, "Page not found")
|
11
|
+
end
|
12
|
+
|
13
|
+
def prop
|
14
|
+
return get_revisions if params[:prop] == "revisions"
|
15
|
+
return get_undelete_token if params[:drprop] == 'token'
|
16
|
+
return get_token if params[:prop] == "info"
|
17
|
+
end
|
18
|
+
|
19
|
+
def export
|
20
|
+
builder do |_|
|
21
|
+
_.mediawiki do
|
22
|
+
requested_page_titles.each do |requested_title|
|
23
|
+
page = @pages.get(requested_title)
|
24
|
+
_.page do
|
25
|
+
_.title(page[:title])
|
26
|
+
_.id(page[:pageid])
|
27
|
+
_.revision do
|
28
|
+
_.id(page[:pageid])
|
29
|
+
_.text(page[:content])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def list
|
38
|
+
list_type = params[:list].to_sym
|
39
|
+
return send(list_type) if respond_to?(list_type)
|
40
|
+
halt(404, "Page not found")
|
41
|
+
end
|
42
|
+
|
43
|
+
def allpages
|
44
|
+
api_response do |_|
|
45
|
+
_.query do
|
46
|
+
_.allpages do
|
47
|
+
prefix = params[:apprefix]
|
48
|
+
namespace = @pages.namespaces_by_id[params[:apnamespace].to_i]
|
49
|
+
prefix = "#{namespace}:#{prefix}" unless namespace.empty?
|
50
|
+
@pages.list(prefix).each do |key, page|
|
51
|
+
_.p(nil, { :title => page[:title], :ns => page[:namespace], :id => page[:pageid] })
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def search
|
59
|
+
api_response do |_|
|
60
|
+
_.query do
|
61
|
+
_.search do
|
62
|
+
namespaces = params[:srnamespace] ? params[:srnamespace].split('|') : [ "0" ]
|
63
|
+
@pages.search(params[:srsearch], namespaces).each do |key, page|
|
64
|
+
_.p(nil, { :title => page[:title], :ns => page[:namespace], :id => page[:pageid] })
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def meta
|
72
|
+
meta_type = params[:meta].to_sym
|
73
|
+
return send(meta_type) if respond_to?(meta_type)
|
74
|
+
halt(404, "Page not found")
|
75
|
+
end
|
76
|
+
|
77
|
+
def siteinfo
|
78
|
+
siteinfo_type = params[:siprop].to_sym
|
79
|
+
return send(siteinfo_type) if respond_to?(siteinfo_type)
|
80
|
+
halt(404, "Page not found")
|
81
|
+
end
|
82
|
+
|
83
|
+
def namespaces
|
84
|
+
api_response do |_|
|
85
|
+
_.query do
|
86
|
+
_.namespaces do
|
87
|
+
@pages.namespaces_by_prefix.each do |prefix, id|
|
88
|
+
attr = { :id => id }
|
89
|
+
attr[:canonical] = prefix unless prefix.empty?
|
90
|
+
_.ns(prefix, attr)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def extensions
|
98
|
+
api_response do |_|
|
99
|
+
_.query do
|
100
|
+
_.extensions do
|
101
|
+
@extensions.each do |name, version|
|
102
|
+
attr = { :version => version }
|
103
|
+
attr[:name] = name unless name.empty?
|
104
|
+
_.ext(name, attr)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,535 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
describe MediaWiki::Gateway do
|
4
|
+
|
5
|
+
def media_wiki_url
|
6
|
+
"#{LonelyPlanet::OnRails.environment.services[:atlas_mediawiki]}"
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
@gateway = MediaWiki::Gateway.new({:url => media_wiki_url, :username => 'atlasmw', :password => 'wombat'})
|
11
|
+
$fake_media_wiki.reset
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.wiki_to_uri' do
|
15
|
+
|
16
|
+
it "should underscore spaces" do
|
17
|
+
MediaWiki.wiki_to_uri('getting there').should == 'getting_there'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should escape ampersands" do
|
21
|
+
MediaWiki.wiki_to_uri('getting there & away').should == 'getting_there_%26_away'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should escape UTF-8" do
|
25
|
+
MediaWiki.wiki_to_uri('Phở').should == 'Ph%E1%BB%9F'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should escape each path component but leave slashes untouched" do
|
29
|
+
MediaWiki.wiki_to_uri('Phở/B&r/B z').should == 'Ph%E1%BB%9F/B%26r/B_z'
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should pass through nil" do
|
33
|
+
MediaWiki.wiki_to_uri(nil).should == nil
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '#login' do
|
39
|
+
|
40
|
+
describe "with a valid username & password" do
|
41
|
+
|
42
|
+
before do
|
43
|
+
@gateway.login('atlasmw', 'wombat')
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should login successfully" do
|
47
|
+
$fake_media_wiki.logged_in('atlasmw').should == true
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "with an non-existent username" do
|
53
|
+
|
54
|
+
it "should raise an error" do
|
55
|
+
lambda do
|
56
|
+
@gateway.login('bogususer', 'sekrit')
|
57
|
+
end.should raise_error(StandardError)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "with an incorrect password" do
|
63
|
+
|
64
|
+
it "should raise an error" do
|
65
|
+
lambda do
|
66
|
+
@gateway.login('atlasmw', 'sekrit')
|
67
|
+
end.should raise_error(StandardError)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#get_token" do
|
75
|
+
|
76
|
+
describe "when not logged in" do
|
77
|
+
|
78
|
+
describe "requesting an edit token" do
|
79
|
+
|
80
|
+
before do
|
81
|
+
@token = @gateway.get_token('edit', 'Main Page')
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return a blank token" do
|
85
|
+
@token.should_not == nil
|
86
|
+
@token.should == "+\\"
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "requesting an import token" do
|
92
|
+
|
93
|
+
it "should raise an error" do
|
94
|
+
lambda do
|
95
|
+
@gateway.get_token('import', 'Main Page')
|
96
|
+
end.should raise_error(StandardError)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "when logged in as admin user" do
|
104
|
+
|
105
|
+
before do
|
106
|
+
@gateway.login('atlasmw', 'wombat')
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "requesting an edit token for a single page" do
|
110
|
+
|
111
|
+
before do
|
112
|
+
@token = @gateway.get_token('edit', 'Main Page')
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should return a token" do
|
116
|
+
@token.should_not == nil
|
117
|
+
@token.should_not == "+\\"
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "requesting an edit token for multiple pages" do
|
123
|
+
|
124
|
+
before do
|
125
|
+
@token = @gateway.get_token('edit', "Main Page|Another Page")
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should return a token" do
|
129
|
+
@token.should_not == nil
|
130
|
+
@token.should_not == "+\\"
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "requesting an import token" do
|
136
|
+
|
137
|
+
before do
|
138
|
+
@token = @gateway.get_token('import', 'Main Page')
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should return a token" do
|
142
|
+
@token.should_not == nil
|
143
|
+
@token.should_not == "+\\"
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "#get" do
|
153
|
+
|
154
|
+
describe "for an existing wiki page" do
|
155
|
+
|
156
|
+
before do
|
157
|
+
$fake_media_wiki.add_page("page/title", "Wiki-text content")
|
158
|
+
end
|
159
|
+
|
160
|
+
it "returns raw page content" do
|
161
|
+
@gateway.get("page/title").should == "Wiki-text content"
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
describe "for a missing wiki page" do
|
167
|
+
|
168
|
+
it "returns nil" do
|
169
|
+
@gateway.get("page/missing").should be_nil
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
describe "for root (/)" do
|
175
|
+
|
176
|
+
it "returns nil" do
|
177
|
+
@gateway.get("").should be_nil
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
183
|
+
|
184
|
+
describe "#render" do
|
185
|
+
|
186
|
+
describe "for an existing wiki page" do
|
187
|
+
|
188
|
+
before do
|
189
|
+
@pages = @gateway.render('Main Page')
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should return the page content" do
|
193
|
+
expected = "Sample <B>HTML</B> content"
|
194
|
+
@pages.to_s.should == expected
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe "for a missing wiki page" do
|
199
|
+
|
200
|
+
before do
|
201
|
+
@pages = @gateway.render('Invalidpage')
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should return nil" do
|
205
|
+
@pages.should == nil
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
|
212
|
+
describe "#semantic_query" do
|
213
|
+
|
214
|
+
before do
|
215
|
+
@response = @gateway.semantic_query('[[place-id::123]]', ['mainlabel=Page'])
|
216
|
+
end
|
217
|
+
|
218
|
+
it "should return an HTML string" do
|
219
|
+
@response.should == "Sample <B>HTML</B> content"
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
223
|
+
|
224
|
+
describe "#create" do
|
225
|
+
|
226
|
+
before do
|
227
|
+
@gateway.login('atlasmw', 'wombat')
|
228
|
+
end
|
229
|
+
|
230
|
+
describe "when creating a new page" do
|
231
|
+
|
232
|
+
before do
|
233
|
+
@page = @gateway.create("A New Page", "Some content")
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should create the page" do
|
237
|
+
expected = <<-XML
|
238
|
+
<api>
|
239
|
+
<edit new='' result='Success' pageid='5' title='A New Page' oldrevid='0' newrevid='5'/>
|
240
|
+
</api>
|
241
|
+
XML
|
242
|
+
Hash.from_xml(@page.to_s).should == Hash.from_xml(expected)
|
243
|
+
end
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
describe "when creating a page that already exists" do
|
248
|
+
|
249
|
+
before do
|
250
|
+
@existing_page = $fake_media_wiki.add_page("The Page", "Some content")
|
251
|
+
end
|
252
|
+
|
253
|
+
describe "and the 'overwrite' option is set" do
|
254
|
+
|
255
|
+
before do
|
256
|
+
@new_page = @gateway.create("The Page", "Some new content", :summary => "The summary", :overwrite => true)
|
257
|
+
end
|
258
|
+
|
259
|
+
it "should overwrite the existing page" do
|
260
|
+
expected = <<-XML
|
261
|
+
<api>
|
262
|
+
<edit result='Success' pageid='#{@existing_page[:pageid] + 1}' title='The Page' oldrevid='#{@existing_page[:pageid]}' newrevid='#{@existing_page[:pageid] + 1}'/>
|
263
|
+
</api>
|
264
|
+
XML
|
265
|
+
Hash.from_xml(@new_page.to_s).should == Hash.from_xml(expected)
|
266
|
+
end
|
267
|
+
|
268
|
+
end
|
269
|
+
|
270
|
+
describe "and the 'overwrite' option is not set" do
|
271
|
+
|
272
|
+
it "should raise an error" do
|
273
|
+
lambda do
|
274
|
+
@gateway.create("The Page", "Some new content")
|
275
|
+
end.should raise_error(StandardError)
|
276
|
+
end
|
277
|
+
|
278
|
+
end
|
279
|
+
|
280
|
+
end
|
281
|
+
|
282
|
+
end
|
283
|
+
|
284
|
+
describe "#delete" do
|
285
|
+
|
286
|
+
describe "when logged in as admin" do
|
287
|
+
|
288
|
+
describe "and the page exists" do
|
289
|
+
def delete_response
|
290
|
+
<<-XML
|
291
|
+
<api>
|
292
|
+
<delete title='Deletable Page' reason='Default reason'/>
|
293
|
+
</api>
|
294
|
+
XML
|
295
|
+
end
|
296
|
+
|
297
|
+
before do
|
298
|
+
@gateway.login("atlasmw", "wombat")
|
299
|
+
@gateway.create("Deletable Page", "Some content")
|
300
|
+
@page = @gateway.delete("Deletable Page")
|
301
|
+
end
|
302
|
+
|
303
|
+
it "should delete the page" do
|
304
|
+
Hash.from_xml(@page.to_s) == Hash.from_xml(delete_response)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
describe "and the page does not exist" do
|
309
|
+
|
310
|
+
before do
|
311
|
+
@gateway.login("atlasmw", "wombat")
|
312
|
+
end
|
313
|
+
|
314
|
+
it "should raise an error" do
|
315
|
+
lambda do
|
316
|
+
@gateway.delete("Missing Page")
|
317
|
+
end.should raise_error(StandardError)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
describe "when not logged in" do
|
323
|
+
|
324
|
+
before do
|
325
|
+
@gateway.create("Deletable Page", "Some content")
|
326
|
+
end
|
327
|
+
|
328
|
+
it "should raise an error" do
|
329
|
+
lambda do
|
330
|
+
@gateway.delete("Deletable Page")
|
331
|
+
end.should raise_error(StandardError)
|
332
|
+
end
|
333
|
+
|
334
|
+
end
|
335
|
+
|
336
|
+
end
|
337
|
+
|
338
|
+
describe "#import" do
|
339
|
+
|
340
|
+
def import_file
|
341
|
+
File.dirname(__FILE__) + "/import-test-data.xml"
|
342
|
+
end
|
343
|
+
|
344
|
+
describe "when not logged in" do
|
345
|
+
|
346
|
+
it "should raise an error" do
|
347
|
+
lambda do
|
348
|
+
@gateway.import(import_file)
|
349
|
+
end.should raise_error(StandardError)
|
350
|
+
end
|
351
|
+
|
352
|
+
end
|
353
|
+
|
354
|
+
describe "when logged in as admin" do
|
355
|
+
|
356
|
+
def import_response
|
357
|
+
<<-XML
|
358
|
+
<api>
|
359
|
+
<import>
|
360
|
+
<page title='Main Page' ns='0' revisions='0'/>
|
361
|
+
<page title='Template:Header' ns='10' revisions='1'/>
|
362
|
+
</import>
|
363
|
+
</api>
|
364
|
+
XML
|
365
|
+
end
|
366
|
+
|
367
|
+
before do
|
368
|
+
@gateway.login("atlasmw", "wombat")
|
369
|
+
@page = @gateway.import(import_file)
|
370
|
+
end
|
371
|
+
|
372
|
+
it "should import content" do
|
373
|
+
Hash.from_xml(@page.to_s) == Hash.from_xml(import_response)
|
374
|
+
end
|
375
|
+
|
376
|
+
end
|
377
|
+
|
378
|
+
end
|
379
|
+
|
380
|
+
describe "#export" do
|
381
|
+
|
382
|
+
def export_data
|
383
|
+
page = $fake_media_wiki.page_by_title("Main Page")
|
384
|
+
<<-XML
|
385
|
+
<mediawiki>
|
386
|
+
<page>
|
387
|
+
<title>#{page[:title]}</title>
|
388
|
+
<id>#{page[:pageid]}</id>
|
389
|
+
<revision>
|
390
|
+
<id>#{page[:pageid]}</id>
|
391
|
+
<text>#{page[:content]}</text>
|
392
|
+
</revision>
|
393
|
+
</page>
|
394
|
+
</mediawiki>
|
395
|
+
XML
|
396
|
+
end
|
397
|
+
|
398
|
+
before do
|
399
|
+
@page = @gateway.export("Main Page")
|
400
|
+
end
|
401
|
+
|
402
|
+
it "should return export data for the page" do
|
403
|
+
Hash.from_xml(@page.to_s).should == Hash.from_xml(export_data)
|
404
|
+
end
|
405
|
+
|
406
|
+
end
|
407
|
+
|
408
|
+
describe "#list" do
|
409
|
+
|
410
|
+
before do
|
411
|
+
$fake_media_wiki.reset
|
412
|
+
end
|
413
|
+
|
414
|
+
describe "with an empty key" do
|
415
|
+
|
416
|
+
before do
|
417
|
+
@list = @gateway.list("")
|
418
|
+
end
|
419
|
+
|
420
|
+
it "should list all pages" do
|
421
|
+
@list.sort.should == [ "Book:Italy", "Level/Level/Index", "Main 2", "Main Page" ]
|
422
|
+
end
|
423
|
+
|
424
|
+
end
|
425
|
+
|
426
|
+
describe "with a namespace as the key" do
|
427
|
+
|
428
|
+
before do
|
429
|
+
@list = @gateway.list("Book:")
|
430
|
+
end
|
431
|
+
|
432
|
+
it "should list all pages in the namespace" do
|
433
|
+
@list.should == [ "Book:Italy" ]
|
434
|
+
end
|
435
|
+
|
436
|
+
end
|
437
|
+
|
438
|
+
describe "with a partial title as the key" do
|
439
|
+
|
440
|
+
before do
|
441
|
+
@list = @gateway.list("Main")
|
442
|
+
end
|
443
|
+
|
444
|
+
it "should list all pages in the main namespace that start with key" do
|
445
|
+
@list.sort.should == [ "Main 2", "Main Page" ]
|
446
|
+
end
|
447
|
+
|
448
|
+
end
|
449
|
+
|
450
|
+
end
|
451
|
+
|
452
|
+
describe "#search" do
|
453
|
+
|
454
|
+
before do
|
455
|
+
$fake_media_wiki.reset
|
456
|
+
@gateway.create("Search Test", "Foo KEY Blah")
|
457
|
+
@gateway.create("Search Test 2", "Zomp KEY Zorg")
|
458
|
+
@gateway.create("Book:Search Test", "Bar KEY Baz")
|
459
|
+
@gateway.create("Sandbox:Search Test", "Evil KEY Evil")
|
460
|
+
end
|
461
|
+
|
462
|
+
describe "with an empty key" do
|
463
|
+
|
464
|
+
it "should raise an error" do
|
465
|
+
lambda do
|
466
|
+
@gateway.search("")
|
467
|
+
end.should raise_error(StandardError)
|
468
|
+
end
|
469
|
+
|
470
|
+
end
|
471
|
+
|
472
|
+
describe "with a valid key and no namespaces" do
|
473
|
+
|
474
|
+
before do
|
475
|
+
@search = @gateway.search("KEY")
|
476
|
+
end
|
477
|
+
|
478
|
+
it "should list all matching pages in the main namespace" do
|
479
|
+
@search.should == [ "Search Test", "Search Test 2" ]
|
480
|
+
end
|
481
|
+
|
482
|
+
end
|
483
|
+
|
484
|
+
describe "with a valid key and a namespace string" do
|
485
|
+
|
486
|
+
before do
|
487
|
+
@search = @gateway.search("KEY", "Book")
|
488
|
+
end
|
489
|
+
|
490
|
+
it "should list all matching pages in the specified namespaces" do
|
491
|
+
@search.should == [ "Book:Search Test" ]
|
492
|
+
end
|
493
|
+
|
494
|
+
end
|
495
|
+
|
496
|
+
describe "with a valid key and a namespace array" do
|
497
|
+
|
498
|
+
before do
|
499
|
+
@search = @gateway.search("KEY", ["Book", "Sandbox"])
|
500
|
+
end
|
501
|
+
|
502
|
+
it "should list all matching pages in the specified namespaces" do
|
503
|
+
@search.should == [ "Sandbox:Search Test", "Book:Search Test" ]
|
504
|
+
end
|
505
|
+
|
506
|
+
end
|
507
|
+
|
508
|
+
end
|
509
|
+
|
510
|
+
describe "#namespaces_by_prefix" do
|
511
|
+
|
512
|
+
before do
|
513
|
+
$fake_media_wiki.reset
|
514
|
+
@namespaces = @gateway.namespaces_by_prefix
|
515
|
+
end
|
516
|
+
|
517
|
+
it "should list all namespaces" do
|
518
|
+
@namespaces.should == { "" => 0, "Book" => 100, "Sandbox" => 200}
|
519
|
+
end
|
520
|
+
|
521
|
+
end
|
522
|
+
|
523
|
+
describe "#extensions" do
|
524
|
+
|
525
|
+
before do
|
526
|
+
$fake_media_wiki.reset
|
527
|
+
@extensions = @gateway.extensions
|
528
|
+
end
|
529
|
+
|
530
|
+
it "should list all namespaces" do
|
531
|
+
@extensions.should == { "FooExtension" => "r1", "BarExtension" => "r2" }
|
532
|
+
end
|
533
|
+
|
534
|
+
end
|
535
|
+
end
|