mediawiki-gateway 0.6.2 → 1.0.0.rc1

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/COPYING +22 -0
  3. data/ChangeLog +16 -0
  4. data/README.md +80 -21
  5. data/Rakefile +28 -34
  6. data/bin/mediawiki-gateway +203 -0
  7. data/lib/media_wiki.rb +4 -9
  8. data/lib/media_wiki/exception.rb +11 -8
  9. data/lib/media_wiki/fake_wiki.rb +636 -0
  10. data/lib/media_wiki/gateway.rb +105 -940
  11. data/lib/media_wiki/gateway/files.rb +173 -0
  12. data/lib/media_wiki/gateway/pages.rb +400 -0
  13. data/lib/media_wiki/gateway/query.rb +98 -0
  14. data/lib/media_wiki/gateway/site.rb +101 -0
  15. data/lib/media_wiki/gateway/users.rb +182 -0
  16. data/lib/media_wiki/utils.rb +47 -13
  17. data/lib/media_wiki/version.rb +27 -0
  18. data/lib/mediawiki-gateway.rb +1 -0
  19. data/spec/{import-test-data.xml → data/import.xml} +0 -0
  20. data/spec/media_wiki/gateway/files_spec.rb +34 -0
  21. data/spec/media_wiki/gateway/pages_spec.rb +390 -0
  22. data/spec/media_wiki/gateway/query_spec.rb +84 -0
  23. data/spec/media_wiki/gateway/site_spec.rb +122 -0
  24. data/spec/media_wiki/gateway/users_spec.rb +171 -0
  25. data/spec/media_wiki/gateway_spec.rb +129 -0
  26. data/spec/{live_gateway_spec.rb → media_wiki/live_gateway_spec.rb} +31 -35
  27. data/spec/{utils_spec.rb → media_wiki/utils_spec.rb} +41 -39
  28. data/spec/spec_helper.rb +17 -16
  29. metadata +77 -135
  30. data/.ruby-version +0 -1
  31. data/.rvmrc +0 -34
  32. data/Gemfile +0 -19
  33. data/Gemfile.lock +0 -77
  34. data/LICENSE +0 -21
  35. data/config/hosts.yml +0 -17
  36. data/lib/media_wiki/config.rb +0 -69
  37. data/mediawiki-gateway.gemspec +0 -113
  38. data/samples/README +0 -18
  39. data/samples/create_page.rb +0 -13
  40. data/samples/delete_batch.rb +0 -14
  41. data/samples/download_batch.rb +0 -15
  42. data/samples/email_user.rb +0 -14
  43. data/samples/export_xml.rb +0 -14
  44. data/samples/get_page.rb +0 -11
  45. data/samples/import_xml.rb +0 -14
  46. data/samples/run_fake_media_wiki.rb +0 -8
  47. data/samples/search_content.rb +0 -12
  48. data/samples/semantic_query.rb +0 -17
  49. data/samples/upload_commons.rb +0 -45
  50. data/samples/upload_file.rb +0 -13
  51. data/spec/fake_media_wiki/api_pages.rb +0 -135
  52. data/spec/fake_media_wiki/app.rb +0 -360
  53. data/spec/fake_media_wiki/query_handling.rb +0 -136
  54. data/spec/gateway_spec.rb +0 -888
@@ -1,136 +0,0 @@
1
-
2
- module FakeMediaWiki
3
-
4
- module QueryHandling
5
-
6
- def action
7
- [:userrights].each do |action_type|
8
- return send(action_type)
9
- end
10
- halt(404, "Page not found")
11
- end
12
-
13
- def query
14
- [:prop, :export, :list, :meta].each do |query_type|
15
- return send(query_type) if params[query_type]
16
- end
17
- halt(404, "Page not found")
18
- end
19
-
20
- def prop
21
- return get_revisions if params[:prop] == "revisions"
22
- return get_undelete_token if params[:drprop] == 'token'
23
- return get_token if params[:intoken]
24
- return get_info if params[:prop] == "info"
25
- end
26
-
27
- def export
28
- builder do |_|
29
- _.mediawiki do
30
- requested_page_titles.each do |requested_title|
31
- page = @pages.get(requested_title)
32
- _.page do
33
- _.title(page[:title])
34
- _.id(page[:pageid])
35
- _.revision do
36
- _.id(page[:pageid])
37
- _.text(page[:content])
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
44
-
45
- def list
46
- list_type = params[:list].to_sym
47
-
48
- # api.php?action=query&list=users&ususers=Bob&ustoken=userrights
49
- if list_type == :users && params[:ustoken] && params[:ususers]
50
- # This "list" is actually a request for a user rights token
51
- return get_userrights_token(params[:ususers])
52
- end
53
-
54
- # This is a real list
55
- return send(list_type) if respond_to?(list_type)
56
- halt(404, "Page not found")
57
- end
58
-
59
- def allpages
60
- api_response do |_|
61
- _.query do
62
- _.allpages do
63
- prefix = params[:apprefix]
64
- namespace = @pages.namespaces_by_id[params[:apnamespace].to_i]
65
- prefix = "#{namespace}:#{prefix}" unless namespace.empty?
66
- @pages.list(prefix).each do |key, page|
67
- _.p(nil, { :title => page[:title], :ns => page[:namespace], :id => page[:pageid] })
68
- end
69
- end
70
- end
71
- end
72
- end
73
-
74
- def search
75
- api_response do |_|
76
- _.query do
77
- _.search do
78
- namespaces = params[:srnamespace] ? params[:srnamespace].split('|') : [ "0" ]
79
- @pages.search(params[:srsearch], namespaces).first(params[:srlimit].to_i).each do |key, page|
80
- _.p(nil, { :title => page[:title], :ns => page[:namespace], :id => page[:pageid] })
81
- end
82
- end
83
- end
84
- end
85
- end
86
-
87
- def meta
88
- meta_type = params[:meta].to_sym
89
- return send(meta_type) if respond_to?(meta_type)
90
- halt(404, "Page not found")
91
- end
92
-
93
- def siteinfo
94
- if siteinfo_type = params[:siprop]
95
- return send(siteinfo_type) if respond_to?(siteinfo_type)
96
- halt(404, "Page not found")
97
- else
98
- api_response do |_|
99
- _.query do
100
- _.general(generator: "MediaWiki #{MediaWiki::VERSION}")
101
- end
102
- end
103
- end
104
- end
105
-
106
- def namespaces
107
- api_response do |_|
108
- _.query do
109
- _.namespaces do
110
- @pages.namespaces_by_prefix.each do |prefix, id|
111
- attr = { :id => id }
112
- attr[:canonical] = prefix unless prefix.empty?
113
- _.ns(prefix, attr)
114
- end
115
- end
116
- end
117
- end
118
- end
119
-
120
- def extensions
121
- api_response do |_|
122
- _.query do
123
- _.extensions do
124
- @extensions.each do |name, version|
125
- attr = { :version => version }
126
- attr[:name] = name unless name.empty?
127
- _.ext(name, attr)
128
- end
129
- end
130
- end
131
- end
132
- end
133
-
134
- end
135
-
136
- end
@@ -1,888 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # Kickstart fake media wiki app
4
- require 'sham_rack'
5
- require_relative 'fake_media_wiki/app'
6
-
7
- $fake_media_wiki = FakeMediaWiki::App.new!
8
- ShamRack.mount($fake_media_wiki, 'dummy-wiki.example')
9
-
10
- describe MediaWiki::Gateway do
11
-
12
- before do
13
- @gateway = MediaWiki::Gateway.new('http://dummy-wiki.example/w/api.php')
14
- $fake_media_wiki.reset
15
- end
16
-
17
- describe '#login' do
18
-
19
- describe "with a valid username & password" do
20
-
21
- before do
22
- @gateway.login('atlasmw', 'wombat')
23
- end
24
-
25
- it "should login successfully with the default domain" do
26
- $fake_media_wiki.logged_in('atlasmw').should == true
27
- end
28
-
29
- end
30
-
31
- describe "with a valid username, password and domain" do
32
-
33
- before do
34
- @gateway.login('ldapuser', 'ldappass', 'ldapdomain')
35
- end
36
-
37
- it "should login successfully" do
38
- $fake_media_wiki.logged_in('ldapuser').should == true
39
- end
40
-
41
- end
42
-
43
- describe "with an non-existent username" do
44
-
45
- it "should raise an error" do
46
- lambda do
47
- @gateway.login('bogususer', 'sekrit')
48
- end.should raise_error(MediaWiki::Unauthorized)
49
- end
50
-
51
- end
52
-
53
- describe "with an incorrect password" do
54
-
55
- it "should raise an error" do
56
- lambda do
57
- @gateway.login('atlasmw', 'sekrit')
58
- end.should raise_error(MediaWiki::Unauthorized)
59
- end
60
-
61
- end
62
-
63
- describe "with an incorrect domain" do
64
-
65
- it "should raise an error" do
66
- lambda do
67
- @gateway.login('atlasmw', 'wombat', 'bogusdomain')
68
- end.should raise_error(MediaWiki::Unauthorized)
69
- end
70
-
71
- end
72
-
73
- end
74
-
75
- describe "#get_token" do
76
-
77
- describe "when not logged in" do
78
-
79
- describe "requesting an edit token" do
80
-
81
- before do
82
- @token = @gateway.send(:get_token, 'edit', 'Main Page')
83
- end
84
-
85
- it "should return a blank token" do
86
- @token.should_not == nil
87
- @token.should == "+\\"
88
- end
89
-
90
- end
91
-
92
- describe "requesting an import token" do
93
-
94
- it "should raise an error" do
95
- lambda do
96
- @gateway.send(:get_token, 'import', 'Main Page')
97
- end.should raise_error(MediaWiki::Unauthorized)
98
- end
99
-
100
- end
101
-
102
- end
103
-
104
- describe "when logged in as admin user" do
105
-
106
- before do
107
- @gateway.login('atlasmw', 'wombat')
108
- end
109
-
110
- describe "requesting an edit token for a single page" do
111
-
112
- before do
113
- @token = @gateway.send(:get_token, 'edit', 'Main Page')
114
- end
115
-
116
- it "should return a token" do
117
- @token.should_not == nil
118
- @token.should_not == "+\\"
119
- end
120
-
121
- end
122
-
123
- describe "requesting an edit token for multiple pages" do
124
-
125
- before do
126
- @token = @gateway.send(:get_token, 'edit', "Main Page|Another Page")
127
- end
128
-
129
- it "should return a token" do
130
- @token.should_not == nil
131
- @token.should_not == "+\\"
132
- end
133
-
134
- end
135
-
136
- describe "requesting an import token" do
137
-
138
- before do
139
- @token = @gateway.send(:get_token, 'import', 'Main Page')
140
- end
141
-
142
- it "should return a token" do
143
- @token.should_not == nil
144
- @token.should_not == "+\\"
145
- end
146
-
147
- end
148
-
149
- end
150
-
151
- end
152
-
153
- describe "#get" do
154
-
155
- describe "for an existing wiki page" do
156
-
157
- it "returns raw page content" do
158
- @gateway.get("Main Page").should == "Content"
159
- end
160
-
161
- end
162
-
163
- describe "for an existing empty wiki page" do
164
-
165
- it "returns an empty string" do
166
- @gateway.get("Empty").should == ""
167
- end
168
-
169
- end
170
-
171
- describe "for a missing wiki page" do
172
-
173
- it "returns nil" do
174
- @gateway.get("page/missing").should be_nil
175
- end
176
-
177
- end
178
-
179
- describe "for root (/)" do
180
-
181
- it "returns nil" do
182
- @gateway.get("").should be_nil
183
- end
184
-
185
- end
186
-
187
- describe "when wiki returns 503" do
188
-
189
- before do
190
- @log = double(:debug => nil, :warn => nil)
191
- @fail_gateway = MediaWiki::Gateway.new('http://dummy-wiki.example/w/api.php', {:maxlag => -1, :retry_delay => 0})
192
- allow(@fail_gateway).to receive(:log) { @log }
193
- end
194
-
195
- it "should retry twice and fail" do
196
- lambda {
197
- @fail_gateway.get("")
198
- }.should raise_error
199
- @log.should have_received(:warn).with("503 Service Unavailable: Maxlag exceeded. Retry in 0 seconds.").twice
200
- end
201
-
202
- end
203
-
204
- it "should pass options to RestClient::Request" do
205
- gateway = MediaWiki::Gateway.new('http://dummy-wiki.example/w/api.php', {}, :verify_ssl => false)
206
- RestClient::Request.should receive(:execute).with(hash_including(:verify_ssl => false)).and_return([double(:elements => {})])
207
- gateway.get("").should be_nil
208
- end
209
-
210
- end
211
-
212
- describe "#redirect?" do
213
-
214
- describe "for an existing redirect page" do
215
-
216
- it "returns true" do
217
- @gateway.redirect?("Redirect").should == true
218
- end
219
-
220
- end
221
-
222
- describe "for an existing non-redirect page" do
223
-
224
- it "returns false" do
225
- @gateway.redirect?("Main Page").should == false
226
- end
227
-
228
- end
229
-
230
- describe "for a missing wiki page" do
231
-
232
- it "returns false" do
233
- @gateway.redirect?("page/missing").should == false
234
- end
235
-
236
- end
237
-
238
- end
239
-
240
- describe "#render" do
241
-
242
- describe "for an existing wiki page" do
243
-
244
- before do
245
- @pages = @gateway.render('Main Page')
246
- end
247
-
248
- it "should return the page content" do
249
- expected = 'Sample <B>HTML</B> content.'
250
- @pages.to_s.should == expected
251
- end
252
-
253
- it "should raise an ArgumentError on illegal options" do
254
- lambda do
255
- @gateway.render("Main Page", :doesnotexist => :at_all)
256
- end.should raise_error(ArgumentError)
257
- end
258
-
259
- describe "with option" do
260
-
261
- it "should strip img tags" do
262
- @pages = @gateway.render('Foopage', :noimages => true)
263
-
264
- expected = 'Sample <B>HTML</B> content.'\
265
- '<span class="editsection">[<a title="Edit section: Nomenclature" href="/w/index.php?title=Seat_of_local_government&amp;action=edit&amp;section=1">edit</a>]</span>'\
266
- '<a title="Interpreted language" href="/wiki/Interpreted_language">interpreted language</a>'
267
- @pages.to_s.should == expected
268
- end
269
-
270
- it "should strip edit sections" do
271
- @pages = @gateway.render('Foopage', :noeditsections => true)
272
-
273
- expected = 'Sample <B>HTML</B> content.' \
274
- '<img width="150" height="150" class="thumbimage" src="http://upload.wikimedia.org/foo/Ruby_logo.svg" alt="Ruby logo.svg"/>' \
275
- '<a title="Interpreted language" href="/wiki/Interpreted_language">interpreted language</a>'
276
- @pages.to_s.should == expected
277
- end
278
-
279
- it "should make all links absolute" do
280
- @pages = @gateway.render('Foopage', :linkbase => "http://en.wikipedia.org")
281
-
282
- expected = 'Sample <B>HTML</B> content.' \
283
- '<img width="150" height="150" class="thumbimage" src="http://upload.wikimedia.org/foo/Ruby_logo.svg" alt="Ruby logo.svg"/>' \
284
- '<span class="editsection">[<a title="Edit section: Nomenclature" href="/w/index.php?title=Seat_of_local_government&amp;action=edit&amp;section=1">edit</a>]</span>'\
285
- '<a title="Interpreted language" href="http://en.wikipedia.org/wiki/Interpreted_language">interpreted language</a>'
286
- @pages.to_s.should == expected
287
- end
288
-
289
- end
290
-
291
- end
292
-
293
- describe "for a missing wiki page" do
294
-
295
- before do
296
- @pages = @gateway.render('Invalidpage')
297
- end
298
-
299
- it "should return nil" do
300
- @pages.should == nil
301
- end
302
-
303
- end
304
-
305
- end
306
-
307
- describe "#create" do
308
-
309
- before do
310
- @gateway.login('atlasmw', 'wombat')
311
- end
312
-
313
- describe "when creating a new page" do
314
-
315
- before do
316
- @page = @gateway.create("A New Page", "Some content")
317
- end
318
-
319
- it "should create the page" do
320
- expected = <<-XML
321
- <api>
322
- <edit new='' result='Success' pageid='8' title='A New Page' oldrevid='0' newrevid='8'/>
323
- </api>
324
- XML
325
- Hash.from_xml(@page.first.to_s).should == Hash.from_xml(expected)
326
- end
327
-
328
- end
329
-
330
- describe "when creating a page that already exists" do
331
-
332
- before do
333
- $fake_media_wiki.reset
334
- end
335
-
336
- describe "and the 'overwrite' option is set" do
337
-
338
- before do
339
- @new_page = @gateway.create("Main Page", "Some new content", :summary => "The summary", :overwrite => true)
340
- end
341
-
342
- it "should overwrite the existing page" do
343
- expected = <<-XML
344
- <api>
345
- <edit result='Success' pageid='8' title='Main Page' oldrevid='1' newrevid='8'/>
346
- </api>
347
- XML
348
- Hash.from_xml(@new_page.first.to_s).should == Hash.from_xml(expected)
349
- end
350
-
351
- end
352
-
353
- describe "and the 'overwrite' option is not set" do
354
-
355
- it "should raise an error" do
356
- lambda do
357
- @gateway.create("Main Page", "Some new content")
358
- end.should raise_error(MediaWiki::APIError)
359
- end
360
-
361
- end
362
-
363
- end
364
-
365
- end
366
-
367
- describe "#edit" do
368
- before do
369
- $fake_media_wiki.reset
370
- @edit_page = @gateway.edit("Main Page", "Some new content")
371
- end
372
-
373
- it "should overwrite the existing page" do
374
- expected = <<-XML
375
- <api>
376
- <edit result='Success' pageid='8' title='Main Page' oldrevid='1' newrevid='8'/>
377
- </api>
378
- XML
379
- Hash.from_xml(@edit_page.first.to_s).should == Hash.from_xml(expected)
380
- end
381
-
382
- end
383
-
384
- describe "#upload" do
385
-
386
- before do
387
- @gateway.login('atlasmw', 'wombat')
388
- end
389
-
390
- describe "when uploading a new file" do
391
-
392
- before do
393
- @path = 'some/path/sample_image.jpg'
394
- allow(File).to receive(:new).with(@path).and_return('SAMPLEIMAGEDATA')
395
- @page = @gateway.upload(@path)
396
- end
397
-
398
- it "should open the file" do
399
- File.should have_received(:new).with(@path)
400
- end
401
-
402
- it "should upload the file" do
403
- expected = <<-XML
404
- <api>
405
- <upload result="Success" filename="sample_image.jpg"/>
406
- </api>
407
- XML
408
- Hash.from_xml(@page.first.to_s).should == Hash.from_xml(expected)
409
- end
410
-
411
- end
412
-
413
- end
414
-
415
- describe "#delete" do
416
-
417
- describe "when logged in as admin" do
418
-
419
- describe "and the page exists" do
420
- def delete_response
421
- <<-XML
422
- <api>
423
- <delete title='Deletable Page' reason='Default reason'/>
424
- </api>
425
- XML
426
- end
427
-
428
- before do
429
- @gateway.login("atlasmw", "wombat")
430
-
431
- create("Deletable Page", "Some content")
432
- @page = @gateway.delete("Deletable Page")
433
- end
434
-
435
- it "should delete the page" do
436
- Hash.from_xml(@page.first.to_s) == Hash.from_xml(delete_response)
437
- end
438
- end
439
-
440
- describe "and the page does not exist" do
441
-
442
- before do
443
- @gateway.login("atlasmw", "wombat")
444
- end
445
-
446
- it "should raise an error" do
447
- lambda do
448
- @gateway.delete("Missing Page")
449
- end.should raise_error(MediaWiki::APIError)
450
- end
451
- end
452
- end
453
-
454
- describe "when not logged in" do
455
-
456
- before do
457
- create("Deletable Page", "Some content")
458
- end
459
-
460
- it "should raise an error" do
461
- lambda do
462
- @gateway.delete("Deletable Page")
463
- end.should raise_error(MediaWiki::Unauthorized)
464
- end
465
-
466
- end
467
-
468
- end
469
-
470
- describe "#undelete" do
471
-
472
- describe "when logged in as admin" do
473
- before do
474
- $fake_media_wiki.reset
475
- @gateway.login("atlasmw", "wombat")
476
- end
477
-
478
- describe "and the page no longer exists" do
479
- before do
480
- @revs = @gateway.undelete("Sandbox:Undeleted")
481
- end
482
-
483
- it "should recreate the given page" do
484
- @gateway.list("Sandbox:Undeleted").should == [ "Sandbox:Undeleted" ]
485
- end
486
-
487
- it "should report one undeleted revision" do
488
- @revs.should == 1
489
- end
490
- end
491
-
492
- describe "but the page exists" do
493
- before do
494
- @revs = @gateway.undelete("Main Page")
495
- end
496
-
497
- it "should report zero undeleted revisions" do
498
- @revs.should == 0
499
- end
500
- end
501
- end
502
-
503
- describe "when not logged in" do
504
-
505
- it "should raise an error" do
506
- lambda do
507
- @gateway.undelete("Undeletable Page")
508
- end.should raise_error(MediaWiki::APIError)
509
- end
510
-
511
- end
512
-
513
- end
514
-
515
- describe "#list" do
516
-
517
- before do
518
- $fake_media_wiki.reset
519
- end
520
-
521
- describe "with an empty key" do
522
-
523
- before do
524
- @list = @gateway.list("")
525
- end
526
-
527
- it "should list all pages" do
528
- @list.sort.should == [ "Book:Italy", "Empty", "Foopage", "Level/Level/Index", "Main 2", "Main Page", "Redirect" ]
529
- end
530
-
531
- end
532
-
533
- describe "with a namespace as the key" do
534
-
535
- before do
536
- @list = @gateway.list("Book:")
537
- end
538
-
539
- it "should list all pages in the namespace" do
540
- @list.should == [ "Book:Italy" ]
541
- end
542
-
543
- end
544
-
545
- describe "with a partial title as the key" do
546
-
547
- before do
548
- @list = @gateway.list("Main")
549
- end
550
-
551
- it "should list all pages in the main namespace that start with key" do
552
- @list.sort.should == [ "Main 2", "Main Page" ]
553
- end
554
-
555
- end
556
-
557
- end
558
-
559
- describe "#search" do
560
-
561
- before do
562
- $fake_media_wiki.reset
563
- @gateway.create("Search Test", "Foo KEY Blah")
564
- @gateway.create("Search Test 2", "Zomp KEY Zorg")
565
- @gateway.create("Book:Search Test", "Bar KEY Baz")
566
- @gateway.create("Sandbox:Search Test", "Evil KEY Evil")
567
- end
568
-
569
- describe "with an empty key" do
570
-
571
- it "should raise an error" do
572
- lambda do
573
- @gateway.search("")
574
- end.should raise_error(MediaWiki::APIError)
575
- end
576
-
577
- end
578
-
579
- describe "with a valid key and no namespaces" do
580
-
581
- before do
582
- @search = @gateway.search("KEY")
583
- end
584
-
585
- it "should list all matching pages in the main namespace" do
586
- @search.should =~ [ "Search Test", "Search Test 2" ]
587
- end
588
-
589
- end
590
-
591
- describe "with a valid key and a namespace string" do
592
-
593
- before do
594
- @search = @gateway.search("KEY", "Book")
595
- end
596
-
597
- it "should list all matching pages in the specified namespaces" do
598
- @search.should == [ "Book:Search Test" ]
599
- end
600
-
601
- end
602
-
603
- describe "with a valid key and a namespace array" do
604
-
605
- before do
606
- @search = @gateway.search("KEY", ["Book", "Sandbox"])
607
- end
608
-
609
- it "should list all matching pages in the specified namespaces" do
610
- @search.should =~ [ "Sandbox:Search Test", "Book:Search Test" ]
611
- end
612
-
613
- end
614
-
615
- describe "with maximum number of results" do
616
-
617
- before do
618
- @search = @gateway.search("KEY", nil, 2, 1)
619
- end
620
-
621
- it "should return at most the maximum number of results asked" do
622
- @search.size.should == 1
623
- end
624
- end
625
-
626
- end
627
-
628
- describe "#namespaces_by_prefix" do
629
-
630
- before do
631
- $fake_media_wiki.reset
632
- @namespaces = @gateway.namespaces_by_prefix
633
- end
634
-
635
- it "should list all namespaces" do
636
- @namespaces.should == { "" => 0, "Book" => 100, "Sandbox" => 200}
637
- end
638
-
639
- end
640
-
641
- describe "#semantic_query" do
642
-
643
- before do
644
- @response = @gateway.semantic_query('[[place::123]]', ['mainlabel=Page'])
645
- end
646
-
647
- it "should return an HTML string" do
648
- @response.should == 'Sample <B>HTML</B> content.'
649
- end
650
-
651
- end
652
-
653
- describe "#import" do
654
-
655
- def import_file
656
- File.dirname(__FILE__) + "/import-test-data.xml"
657
- end
658
-
659
- describe "when not logged in" do
660
-
661
- it "should raise an error" do
662
- lambda do
663
- @gateway.import(import_file)
664
- end.should raise_error(MediaWiki::Unauthorized)
665
- end
666
-
667
- end
668
-
669
- describe "when logged in as admin" do
670
-
671
- def import_response
672
- <<-XML
673
- <api>
674
- <import>
675
- <page title='Main Page' ns='0' revisions='0'/>
676
- <page title='Template:Header' ns='10' revisions='1'/>
677
- </import>
678
- </api>
679
- XML
680
- end
681
-
682
- before do
683
- @gateway.login("atlasmw", "wombat")
684
- @page = @gateway.import(import_file)
685
- end
686
-
687
- it "should import content" do
688
- Hash.from_xml(@page.first.to_s) == Hash.from_xml(import_response)
689
- end
690
-
691
- end
692
-
693
- end
694
-
695
- describe "#export" do
696
-
697
- def export_response
698
- <<-XML
699
- <mediawiki>
700
- <page>
701
- <title>Main Page</title>
702
- <id>1</id>
703
- <revision>
704
- <id>1</id>
705
- <text>Content</text>
706
- </revision>
707
- </page>
708
- </mediawiki>
709
- XML
710
- end
711
-
712
- before do
713
- @page = @gateway.export("Main Page")
714
- end
715
-
716
- it "should return export data for the page" do
717
- Hash.from_xml(@page.to_s).should == Hash.from_xml(export_response)
718
- end
719
-
720
- end
721
-
722
- describe "#siteinfo" do
723
-
724
- before do
725
- $fake_media_wiki.reset
726
- @siteinfo = @gateway.siteinfo
727
- end
728
-
729
- it "should get the siteinfo" do
730
- @siteinfo.should == { 'generator' => "MediaWiki #{MediaWiki::VERSION}" }
731
- end
732
-
733
- end
734
-
735
- describe "#version" do
736
-
737
- before do
738
- $fake_media_wiki.reset
739
- @version = @gateway.version
740
- end
741
-
742
- it "should get the version" do
743
- @version.should == MediaWiki::VERSION
744
- end
745
-
746
- end
747
-
748
- describe "#namespaces_by_prefix" do
749
-
750
- before do
751
- $fake_media_wiki.reset
752
- @namespaces = @gateway.send :namespaces_by_prefix
753
- end
754
-
755
- it "should list all namespaces" do
756
- @namespaces.should == { "" => 0, "Book" => 100, "Sandbox" => 200}
757
- end
758
-
759
- end
760
-
761
- describe "#extensions" do
762
-
763
- before do
764
- $fake_media_wiki.reset
765
- @extensions = @gateway.extensions
766
- end
767
-
768
- it "should list all extensions" do
769
- @extensions.should == { "FooExtension" => "r1", "BarExtension" => "r2", 'Semantic MediaWiki' => '1.5' }
770
- end
771
-
772
- end
773
-
774
- def create(title, content, options={})
775
- form_data = {'action' => 'edit', 'title' => title, 'text' => content, 'summary' => (options[:summary] || ""), 'token' => @gateway.send(:get_token, 'edit', title)}
776
- form_data['createonly'] = "" unless options[:overwrite]
777
- @gateway.send(:make_api_request, form_data)
778
- end
779
-
780
- describe "#create_account" do
781
-
782
- describe "when logged in as admin" do
783
- before do
784
- @gateway.login("atlasmw", "wombat")
785
- end
786
-
787
- it 'should get expected result' do
788
- expected = <<-XML
789
- <api>
790
- <createaccount result='success' token='admin_token+\\' userid='4' username='FooBar'/>
791
- </api>
792
- XML
793
-
794
- Hash.from_xml(@gateway.create_account({ 'name' => 'FooBar', 'password' => 'BarBaz' }).to_s).should == Hash.from_xml(expected)
795
- end
796
-
797
- end
798
-
799
- end
800
-
801
- describe '#options' do
802
-
803
- describe 'when logged in' do
804
- before do
805
- @gateway.login("atlasmw", "wombat")
806
- end
807
-
808
- describe 'requesting an options token' do
809
- before do
810
- @token = @gateway.send(:get_options_token)
811
- end
812
-
813
- it "should return a token" do
814
- @token.should_not == nil
815
- @token.should_not == "+\\"
816
- end
817
-
818
- end
819
-
820
- it 'should return the expected response' do
821
- expected = '<api options="success" />'
822
- Hash.from_xml(@gateway.options({ :realname => 'Bar Baz' }).to_s).should == Hash.from_xml(expected)
823
- end
824
-
825
- end
826
-
827
- end
828
-
829
- describe "#user_rights" do
830
-
831
- describe "when logged in as admin" do
832
- before do
833
- @gateway.login("atlasmw", "wombat")
834
- end
835
-
836
- describe "requesting a userrights token for an existing user" do
837
-
838
- before do
839
- @token = @gateway.send(:get_userrights_token, 'nonadmin')
840
- end
841
-
842
- it "should return a token" do
843
- @token.should_not == nil
844
- @token.should_not == "+\\"
845
- end
846
- end
847
-
848
- describe "requesting a userrights token for an nonexistant user" do
849
-
850
- it "should raise an error" do
851
- lambda do
852
- @gateway.send(:get_userrights_token, 'nosuchuser')
853
- end.should raise_error(MediaWiki::APIError)
854
- end
855
- end
856
-
857
- describe "changing a user's groups with a valid token" do
858
-
859
- def userrights_response
860
- <<-XML
861
- <api>
862
- <userrights user="nonadmin">
863
- <removed>
864
- <group>oldgroup</group>
865
- </removed>
866
- <added>
867
- <group>newgroup</group>
868
- </added>
869
- </userrights>
870
- </api>
871
- XML
872
- end
873
-
874
- before do
875
- @token = @gateway.send(:get_userrights_token, 'nonadmin')
876
- @result = @gateway.send(:userrights, 'nonadmin', @token, 'newgroup', 'oldgroup', 'because I can')
877
- end
878
-
879
- it "should return a result matching the input" do
880
- Hash.from_xml(@result.to_s).should == Hash.from_xml(userrights_response)
881
- end
882
-
883
- end
884
-
885
- end
886
- end
887
-
888
- end