rubot-base 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.
@@ -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: