rubot-base 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/ruby
2
+ $: << '../../lib'
3
+ require 'rubot/base'
4
+ require '../rubot_config'
5
+ require '../tools'
6
+ require 'test/unit'
7
+
8
+ include RubotTestTools
9
+
10
+ class BaseTest < Test::Unit::TestCase
11
+
12
+ def test_monkey_patching
13
+ assert_equal "x&y".for_url, "x%26y"
14
+ assert_equal ([1].collect_hash { {:a => :b} }), {:a => :b}
15
+ assert ([true, true ].for_all? { |x| x }), "first for_all? test should be true"
16
+ assert !([true, false].for_all? { |x| x }), "second for_all? test should be false"
17
+ assert ([true, false].exists? { |x| x }), "first exists? test should be true"
18
+ assert !([false, false].exists? { |x| x }), "second exists? test should be false"
19
+ assert_equal ({:a=>:b}).to_url_data, "a=b"
20
+ assert_equal ({'a'=>:b}).keys_to_sym, {:a=>:b}
21
+ ary = {'a'=>:b}
22
+ ary.keys_to_sym!
23
+ assert_equal ary, {:a=>:b}
24
+ assert_equal ({1=>2}.collect_hash { {:a => :b} }), {:a => :b}
25
+ end
26
+
27
+ def test_connection
28
+ assert_raise SocketError do
29
+ tmp_server :test, :host => "does.not.exists", :username => 'x', :password => 'y'
30
+ end
31
+ assert_nothing_raised "Test wiki available?" do
32
+ tmp_server *Rubot::TESTWIKI
33
+ end
34
+ assert_raise Net::HTTPServerException do
35
+ tmp_server(*Rubot::TESTWIKI) { |server| server.request :path => 'bad.request' }
36
+ end
37
+ end
38
+
39
+ def test_family
40
+ Rubot.new :en, :host => 'localhost'
41
+ Rubot.new :en, :host => 'en.somewiki.tld', :wiki_family => :somewiki
42
+ assert_equal :default, Rubot.default_family
43
+ assert_equal :default, Rubot[:en].family
44
+ assert_equal :default, Rubot.new(:de, :host => 'localhost').family
45
+ assert_equal Rubot[:en], Rubot[:en, :default]
46
+ Rubot.default_family = :somewiki
47
+ assert_equal :somewiki, Rubot.default_family
48
+ assert_equal :somewiki, Rubot[:en].family
49
+ assert_equal :somewiki, Rubot.new(:de, :host => 'somewiki').family
50
+ assert_equal Rubot[:en], Rubot[:en, :somewiki]
51
+ Rubot.default_family = :default
52
+ assert_equal :default, Rubot[:de].family
53
+ end
54
+
55
+ def test_value
56
+ assert_equal 'a string', Rubot.value('a string', :en)
57
+ assert_equal 'a string', Rubot.value({ :en => 'a string', :fr => 'another string' }, :en)
58
+ assert_equal 'a string', Rubot.value(lambda { |v| 'a string' if v == :en }, :en)
59
+ end
60
+
61
+ def test_login
62
+ assert tmp_server(*Rubot::TESTWIKI).logged_in?, "check to add :username and :password to test wiki config"
63
+ config = Rubot::TESTWIKI[1].dup
64
+ config.delete :username
65
+ assert (not tmp_server(:test, config).logged_in?), "login should fail without username."
66
+ config[:username] = "ThisUserDoesNotExist"
67
+ assert_raise(Rubot::LoginError) { tmp_server(:test, config).logged_in? }
68
+ end
69
+
70
+ def test_check_preferences
71
+ tmp_server *Rubot::TESTWIKI do |server|
72
+ assert_equal 'en', server.preferences['wpUserLanguage']
73
+ server.preferences['wpUserLanguage'] = 'de'
74
+ assert_nothing_raised { server.check_preferences true }
75
+ assert_equal 'druckversion', server.hpricot.at('#t-print a').inner_html.downcase
76
+ server.preferences['wpUserLanguage'] = 'en'
77
+ assert_nothing_raised { server.check_preferences true }
78
+ assert_equal 'printable version', server.hpricot.at('#t-print a').inner_html.downcase
79
+ end
80
+ end
81
+
82
+ def test_read_write
83
+ tmp_server *Rubot::TESTWIKI do |server|
84
+ TEST_STRINGS[0..1].each do |str|
85
+ assert_nothing_raised { server.write_page 'Read and write test', str, 'summary', true }
86
+ assert_equal str, server.read_page('Read and write test')
87
+ end
88
+ end
89
+ end
90
+
91
+ def test_page_history
92
+ tmp_server *Rubot::TESTWIKI do |server|
93
+ 1.upto(100) { |i| server.write_page 'Page with long history', "Counting upto 100: #{i}", 'summary', true }
94
+ server.write_page 'Page with long history', "That's it!", 'summary'
95
+ hist = []
96
+ assert_nothing_raised { hist = server.page_history 'Page with long history' }
97
+ assert hist.length > 90, "There should be more than 90 edits!"
98
+ end
99
+ end
100
+
101
+ def test_move
102
+ tmp_server *Rubot::TESTWIKI do |server|
103
+ page = "Created #{Time.now.strftime("Created %H:%M:%S")}"
104
+ server.write_page page, "to be moved", "summary", true
105
+ sleep(2)
106
+ assert_nothing_raised { server.move page, "Moved #{Time.now.strftime("Moved %H:%M:%S")}", "summary" }
107
+ end
108
+ end
109
+
110
+ def test_recent_changes
111
+ tmp_server *Rubot::TESTWIKI do |server|
112
+ 1.upto(50) { |i| server.write_page "Many Pages, No. #{i}", Time.now.strftime("%y/%m/%d, %H:%M:%S"), 'summary', true }
113
+ page = Time.now.strftime("Created %H:%M:%S")
114
+ server.write_page page, "to be moved", "summary", true
115
+ sleep(2)
116
+ server.move page, Time.now.strftime("Moved %H:%M:%S"), "summary"
117
+ changes = nil
118
+ assert_nothing_raised { changes = server.recent_changes }
119
+ assert_not_nil changes
120
+ [:edits, :deletes, :moves, :uploads, :protections, :user_rights].each { |key| assert_not_nil changes[key], "#{key} missing" }
121
+ assert changes[:edits].length > 30, "where are all the edits gone?"
122
+ assert changes[:moves].length > 0, "I moved a page!"
123
+ end
124
+ end
125
+
126
+ def test_upload
127
+ puts "Upload test not yet written!"
128
+ end
129
+
130
+ def test_category_pages
131
+ tmp_server *Rubot::TESTWIKI do |server|
132
+ 1.upto 210 do |i|
133
+ server.write_page "In a test category #{i}", Time.now.strftime("%y/%m/%d, %H:%M:%S\n[[Category:Test]]"), 'summary'
134
+ end
135
+ pages = nil
136
+ assert_nothing_raised { pages = server.category_pages "Test" }
137
+ assert_not_nil pages
138
+ assert pages.length > 201, "where are the pages gone?"
139
+ end
140
+ end
141
+
142
+ def test_namespaces
143
+ tmp_server *Rubot::TESTWIKI do |server|
144
+ [ :main, :talk,
145
+ :user, :user_talk,
146
+ :project, :project_talk,
147
+ :image, :image_talk,
148
+ :mediawiki, :mediawiki_talk,
149
+ :template, :template_talk,
150
+ :help, :help_talk,
151
+ :category, :category_talk ].each { |ns| assert_not_nil server.lns(ns), "no #{ns} namespace" }
152
+ assert_equal 0, server.namespace_index(:main)
153
+ assert_equal 1, server.namespace_index(server.lns(:talk))
154
+ assert_equal 2, server.namespace_index(2)
155
+ assert_equal 3, server.namespace_index('ns3')
156
+ assert_equal '', server.namespace(:main)
157
+ assert_equal "#{server.lns(:talk)}:", server.namespace(:talk)
158
+ end
159
+ end
160
+
161
+ def test_pages_in_namespace
162
+ tmp_server *Rubot::TESTWIKI do |server|
163
+ pages = nil
164
+ assert_nothing_raised { pages = server.pages_in_namespace :main }
165
+ assert_not_nil pages
166
+ assert pages.length > 0, "no pages in main namespace?"
167
+ end
168
+ end
169
+
170
+ def test_all_pages
171
+ tmp_server *Rubot::TESTWIKI do |server|
172
+ pages = nil
173
+ assert_nothing_raised { pages = server.all_pages }
174
+ assert_not_nil pages
175
+ assert pages.length > 0, "no pages in this wiki?"
176
+ end
177
+ end
178
+
179
+ end
@@ -0,0 +1,15 @@
1
+ # Unfortunatly a Testwiki is needed to do all the Unit Testing,
2
+ # since Rubot is not (yet) able to fake a wiki.
3
+ #
4
+ # DO NOT USE A WIKI NOT ENTIRELY DEDICADED TO TESTING!
5
+ # It is recommended to use a local wiki, since heavy
6
+ # network usages should be expected otherwise.
7
+ #
8
+ # Simply put your Wiki config in here.
9
+
10
+ module Rubot
11
+ TESTWIKI = [ :test, { :host => 'localhost',
12
+ :path => '/testwiki/index.php',
13
+ :username => 'TestBot',
14
+ :password => 'test' } ]
15
+ end
@@ -0,0 +1,12 @@
1
+ module RubotTestTools
2
+
3
+ def tmp_server(*config)
4
+ server = Rubot.new *config
5
+ yield(server) if block_given?
6
+ Rubot::Server.server[server.family].delete server.iw
7
+ end
8
+
9
+ TEST_STRINGS = ["Hello from ''unit testing''!\n[[Category:Test]]\n",
10
+ "Hello from unit testing!\n[[Category:Test]]\n"]
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: rubot-base
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2008-04-07 00:00:00 +02:00
8
+ summary: Library for creating bots for MediaWiki projects (i.e. Wikipedia)
9
+ require_paths:
10
+ - lib
11
+ email: konstantin.mailinglists@googlemail.com
12
+ homepage:
13
+ rubyforge_project:
14
+ description: "Rubot is a library for creating bots for MediaWiki projects (i.e. Wikipedia). This gem contains the rubot base library and a collection of rubot utilities. It can be either used directly or through an adapter library (for handling monitoring, caching and so on). Status Quo: This libary is working quite smooth now but it's not as feature-rich as I want it to be. Heavy improvements to be expected."
15
+ autorequire: rubot/base
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.8.6
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Konstantin Haase
31
+ files:
32
+ - lib/rubot/base.rb
33
+ - lib/rubot/mime.rb
34
+ - lib/rubot/base/utils.rb
35
+ - test/rubot_config.rb
36
+ - test/tools.rb
37
+ - test/rubot/base.rb
38
+ test_files: []
39
+
40
+ rdoc_options:
41
+ - -S
42
+ - -N
43
+ - -w
44
+ - "2"
45
+ - -m
46
+ - rubot/base.rb
47
+ extra_rdoc_files: []
48
+
49
+ executables: []
50
+
51
+ extensions: []
52
+
53
+ requirements: []
54
+
55
+ dependencies:
56
+ - !ruby/object:Gem::Dependency
57
+ name: htmlentities
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Version::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 4.0.0
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: hpricot
67
+ version_requirement:
68
+ version_requirements: !ruby/object:Gem::Version::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.5.0
73
+ version: