mod_spox 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. data/CHANGELOG +31 -1
  2. data/LICENSE +674 -0
  3. data/README.rdoc +73 -0
  4. data/bin/mod_spox +28 -28
  5. data/data/mod_spox/extras/AOLSpeak.rb +2 -3
  6. data/data/mod_spox/extras/AutoKick.rb +10 -23
  7. data/data/mod_spox/extras/AutoMode.rb +12 -23
  8. data/data/mod_spox/extras/Bash.rb +55 -0
  9. data/data/mod_spox/extras/Bouncer.rb +85 -57
  10. data/data/mod_spox/extras/Bullshit.rb +1 -1
  11. data/data/mod_spox/extras/Bytes.rb +1 -2
  12. data/data/mod_spox/extras/Confess.rb +27 -29
  13. data/data/mod_spox/extras/DCC.rb +11 -20
  14. data/data/mod_spox/extras/DevWatch.rb +21 -23
  15. data/data/mod_spox/extras/DownForEveryoneOrJustMe.rb +47 -0
  16. data/data/mod_spox/extras/EightBall.rb +1 -1
  17. data/data/mod_spox/extras/FML.rb +35 -0
  18. data/data/mod_spox/extras/Headers.rb +31 -50
  19. data/data/mod_spox/extras/Karma.rb +81 -29
  20. data/data/mod_spox/extras/Logger.rb +2 -2
  21. data/data/mod_spox/extras/LolSpeak.rb +1 -2
  22. data/data/mod_spox/extras/PhpCli.rb +138 -8
  23. data/data/mod_spox/extras/PhpFuncLookup.rb +20 -23
  24. data/data/mod_spox/extras/Pinger.rb +1 -1
  25. data/data/mod_spox/extras/Quotes.rb +8 -10
  26. data/data/mod_spox/extras/RegexTracker.rb +2 -4
  27. data/data/mod_spox/extras/Roulette.rb +20 -27
  28. data/data/mod_spox/extras/RubyCli.rb +93 -0
  29. data/data/mod_spox/extras/Search.rb +17 -3
  30. data/data/mod_spox/extras/Seen.rb +150 -0
  31. data/data/mod_spox/extras/SlashdotHeadlineGenerator.rb +500 -0
  32. data/data/mod_spox/extras/Talk.rb +2 -4
  33. data/data/mod_spox/extras/Topten.rb +10 -12
  34. data/data/mod_spox/extras/TracTicket.rb +3 -5
  35. data/data/mod_spox/extras/Translate.rb +20 -22
  36. data/data/mod_spox/extras/Twitter.rb +118 -33
  37. data/data/mod_spox/extras/UrbanDictionary.rb +8 -17
  38. data/data/mod_spox/extras/Weather.rb +1 -2
  39. data/data/mod_spox/plugins/Authenticator.rb +93 -98
  40. data/data/mod_spox/plugins/Banner.rb +26 -56
  41. data/data/mod_spox/plugins/Helper.rb +5 -6
  42. data/data/mod_spox/plugins/Initializer.rb +4 -14
  43. data/data/mod_spox/plugins/Joiner.rb +1 -1
  44. data/data/mod_spox/plugins/Nicker.rb +13 -0
  45. data/data/mod_spox/plugins/Parter.rb +2 -2
  46. data/data/mod_spox/plugins/Permissions.rb +60 -0
  47. data/data/mod_spox/plugins/PluginLoader.rb +7 -12
  48. data/data/mod_spox/plugins/Ponger.rb +51 -0
  49. data/data/mod_spox/plugins/Quitter.rb +1 -2
  50. data/data/mod_spox/plugins/Servers.rb +57 -0
  51. data/data/mod_spox/plugins/Status.rb +3 -2
  52. data/data/mod_spox/plugins/Triggers.rb +9 -9
  53. data/lib/mod_spox/Bot.rb +109 -33
  54. data/lib/mod_spox/BotConfig.rb +2 -2
  55. data/lib/mod_spox/ConfigurationWizard.rb +12 -12
  56. data/lib/mod_spox/Database.rb +1 -4
  57. data/lib/mod_spox/Exceptions.rb +26 -0
  58. data/lib/mod_spox/Helpers.rb +29 -68
  59. data/lib/mod_spox/Loader.rb +23 -24
  60. data/lib/mod_spox/Logger.rb +19 -17
  61. data/lib/mod_spox/MessageFactory.rb +50 -24
  62. data/lib/mod_spox/Pipeline.rb +21 -7
  63. data/lib/mod_spox/Plugin.rb +27 -3
  64. data/lib/mod_spox/PluginManager.rb +28 -15
  65. data/lib/mod_spox/PriorityQueue.rb +69 -0
  66. data/lib/mod_spox/Socket.rb +93 -51
  67. data/lib/mod_spox/Sockets.rb +76 -63
  68. data/lib/mod_spox/Timer.rb +21 -141
  69. data/lib/mod_spox/Version.rb +14 -0
  70. data/lib/mod_spox/handlers/BadNick.rb +1 -1
  71. data/lib/mod_spox/handlers/Bounce.rb +5 -5
  72. data/lib/mod_spox/handlers/Created.rb +13 -5
  73. data/lib/mod_spox/handlers/Handler.rb +12 -3
  74. data/lib/mod_spox/handlers/Invite.rb +14 -8
  75. data/lib/mod_spox/handlers/Join.rb +24 -20
  76. data/lib/mod_spox/handlers/Kick.rb +22 -13
  77. data/lib/mod_spox/handlers/Mode.rb +42 -36
  78. data/lib/mod_spox/handlers/Motd.rb +4 -0
  79. data/lib/mod_spox/handlers/Names.rb +66 -39
  80. data/lib/mod_spox/handlers/Nick.rb +20 -14
  81. data/lib/mod_spox/handlers/Part.rb +25 -8
  82. data/lib/mod_spox/handlers/Ping.rb +11 -5
  83. data/lib/mod_spox/handlers/Pong.rb +9 -5
  84. data/lib/mod_spox/handlers/Privmsg.rb +25 -17
  85. data/lib/mod_spox/handlers/Quit.rb +13 -8
  86. data/lib/mod_spox/handlers/Topic.rb +4 -0
  87. data/lib/mod_spox/handlers/Welcome.rb +16 -24
  88. data/lib/mod_spox/handlers/Who.rb +64 -48
  89. data/lib/mod_spox/handlers/Whois.rb +92 -60
  90. data/lib/mod_spox/messages/incoming/Nick.rb +2 -2
  91. data/lib/mod_spox/messages/incoming/Privmsg.rb +1 -1
  92. data/lib/mod_spox/messages/incoming/Whois.rb +1 -0
  93. data/lib/mod_spox/messages/internal/EstablishConnection.rb +1 -1
  94. data/lib/mod_spox/messages/internal/PluginsReady.rb +10 -0
  95. data/lib/mod_spox/messages/internal/QueueSocket.rb +8 -0
  96. data/lib/mod_spox/messages/internal/Reconnect.rb +8 -0
  97. data/lib/mod_spox/messages/internal/UnqueueSocket.rb +8 -0
  98. data/lib/mod_spox/migrations/002_persistent_sigs.rb +14 -0
  99. data/lib/mod_spox/migrations/003_auth_restructure.rb +31 -0
  100. data/lib/mod_spox/migrations/004_mode_index_fix.rb +18 -0
  101. data/lib/mod_spox/migrations/005_nick_mode_nopark.rb +18 -0
  102. data/lib/mod_spox/models/Auth.rb +16 -46
  103. data/lib/mod_spox/models/AuthMask.rb +13 -0
  104. data/lib/mod_spox/models/Channel.rb +46 -27
  105. data/lib/mod_spox/models/Config.rb +10 -19
  106. data/lib/mod_spox/models/Group.rb +20 -8
  107. data/lib/mod_spox/models/Models.rb +1 -1
  108. data/lib/mod_spox/models/Nick.rb +105 -113
  109. data/lib/mod_spox/models/NickMode.rb +23 -9
  110. data/lib/mod_spox/models/Server.rb +12 -1
  111. data/lib/mod_spox/models/Setting.rb +12 -16
  112. data/lib/mod_spox/models/Signature.rb +28 -8
  113. data/tests/BotHolder.rb +24 -0
  114. data/tests/handlers/tc_BadNick.rb +21 -0
  115. data/tests/handlers/tc_Created.rb +24 -0
  116. data/tests/handlers/tc_Invite.rb +50 -0
  117. data/tests/handlers/tc_Join.rb +33 -0
  118. data/tests/handlers/tc_Kick.rb +32 -0
  119. data/tests/handlers/tc_Mode.rb +85 -0
  120. data/tests/handlers/tc_Names.rb +35 -0
  121. data/tests/handlers/tc_Nick.rb +55 -0
  122. data/tests/handlers/tc_Part.rb +44 -0
  123. data/tests/handlers/tc_Ping.rb +40 -0
  124. data/tests/handlers/tc_Pong.rb +28 -0
  125. data/tests/handlers/tc_Privmsg.rb +85 -0
  126. data/tests/handlers/tc_Quit.rb +40 -0
  127. data/tests/handlers/tc_Who.rb +50 -0
  128. data/tests/handlers/tc_Whois.rb +61 -0
  129. data/tests/models/tc_Auth.rb +34 -0
  130. data/tests/models/tc_Channel.rb +52 -0
  131. data/tests/models/tc_Config.rb +19 -0
  132. data/tests/models/tc_Nick.rb +142 -0
  133. data/tests/models/tc_NickMode.rb +40 -0
  134. data/tests/models/tc_Setting.rb +21 -0
  135. data/tests/models/tc_Signature.rb +14 -0
  136. data/tests/run_tests.rb +4 -0
  137. metadata +284 -212
  138. data/README +0 -36
  139. data/lib/mod_spox/Cache.rb +0 -57
  140. data/lib/mod_spox/Monitors.rb +0 -84
  141. data/lib/mod_spox/Pool.rb +0 -164
  142. data/lib/mod_spox/models/AuthGroup.rb +0 -16
  143. data/lib/mod_spox/models/ChannelMode.rb +0 -14
  144. data/lib/mod_spox/models/NickChannel.rb +0 -45
  145. data/lib/mod_spox/models/NickGroup.rb +0 -16
@@ -0,0 +1,24 @@
1
+ ['sequel', 'thread', 'etc', 'getoptlong', 'logger'].each{|f|require f}
2
+ # lets get sequel setup like we want it #
3
+ require 'sequel/extensions/migration'
4
+ Sequel::Model.plugin :validation_helpers
5
+ Sequel::Model.plugin :schema
6
+ Sequel::Model.unrestrict_primary_key
7
+ require 'mod_spox/Version'
8
+ require 'mod_spox/Loader'
9
+ require 'test/unit'
10
+ require 'singleton'
11
+
12
+ class BotHolder
13
+ include Singleton
14
+ attr_reader :bot
15
+ def initialize
16
+ ModSpox::Database.db = nil
17
+ ModSpox.initialize_bot(Sequel.sqlite) # in memory db
18
+ require 'mod_spox/Bot'
19
+ @bot = ModSpox::Bot.new
20
+ m = ModSpox::Models::Nick.find_or_create(:nick => 'mod_spox')
21
+ m.update(:botnick => true)
22
+ end
23
+
24
+ end
@@ -0,0 +1,21 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestBadNickHandler < Test::Unit::TestCase
4
+ def setup
5
+ h = BotHolder.instance
6
+ @bot = h.bot
7
+ @test = {:good => 'fail', :bad => 'fail'}
8
+ end
9
+
10
+ def teardown
11
+ #nothing#
12
+ end
13
+
14
+ def test_expected
15
+ assert_kind_of(ModSpox::Messages::Incoming::BadNick, @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good]))
16
+ end
17
+
18
+ def test_unexpected
19
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestCreatedHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :good => ':not.configured 003 spox :This server was created Tue Mar 24 2009 at 15:42:36 PDT',
10
+ :bad => ':fubared 003 fail whale'
11
+ }
12
+ end
13
+
14
+ def test_expected
15
+ assert_equal('003', @bot.factory.find_key(@test[:good]))
16
+ assert_kind_of(ModSpox::Messages::Incoming::Created, @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good]))
17
+ assert_equal(@test[:good], @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good]).raw_content)
18
+ assert_kind_of(Time, @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good]).date)
19
+ end
20
+
21
+ def test_unexpected
22
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
23
+ end
24
+ end
@@ -0,0 +1,50 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestInviteHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :good => ':spox!~spox@host INVITE spex :#m',
10
+ :bad => ':fail INVITE whale'
11
+ }
12
+ @queue = Queue.new
13
+ @bot.pipeline.hook(self, :gather, :Incoming_Invite)
14
+ end
15
+
16
+ def gather(m)
17
+ @queue << m
18
+ end
19
+
20
+ def test_direct
21
+ assert_equal(:INVITE, @bot.factory.find_key(@test[:good]))
22
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good])
23
+ check_result(result)
24
+ end
25
+
26
+ def test_indirect
27
+ @bot.factory << @test[:good]
28
+ sleep(0.1)
29
+ assert_equal(1, @queue.size)
30
+ m = @queue.pop
31
+ check_result(m)
32
+ end
33
+
34
+ def test_unexpected
35
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
36
+ end
37
+
38
+ private
39
+
40
+ def check_result(m)
41
+ assert_kind_of(ModSpox::Messages::Incoming::Invite, m)
42
+ assert_kind_of(ModSpox::Models::Nick, m.source)
43
+ assert_kind_of(ModSpox::Models::Nick, m.target)
44
+ assert_kind_of(ModSpox::Models::Channel, m.channel)
45
+ assert_equal('spox', m.source.nick)
46
+ assert_equal('spex', m.target.nick)
47
+ assert_equal('#m', m.channel.name)
48
+ assert_equal(@test[:good], m.raw_content)
49
+ end
50
+ end
@@ -0,0 +1,33 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestJoinHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :good => ':mod_spox!~mod_spox@host JOIN :#m',
10
+ :bad => ':fubared JOIN fail whale'
11
+ }
12
+ end
13
+
14
+ def test_expected
15
+ assert_equal(:JOIN, @bot.factory.find_key(@test[:good]))
16
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good])
17
+ assert_kind_of(ModSpox::Messages::Incoming::Join, result)
18
+ assert_equal(@test[:good], result.raw_content)
19
+ assert_kind_of(ModSpox::Models::Channel, result.channel)
20
+ assert_kind_of(ModSpox::Models::Nick, result.nick)
21
+ assert_equal('#m', result.channel.name)
22
+ assert_equal('mod_spox', result.nick.nick)
23
+ assert_equal('host', result.nick.host)
24
+ assert_equal('host', result.nick.address)
25
+ assert_equal('~mod_spox', result.nick.username)
26
+ assert_equal('mod_spox!~mod_spox@host', result.nick.source)
27
+ assert(result.nick.visible)
28
+ end
29
+
30
+ def test_unexpected
31
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestKickHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :good => ':spax!~spox@host KICK #m spox :foo',
10
+ :bad => ':fubared KICK fail whale'
11
+ }
12
+ end
13
+
14
+ def test_expected
15
+ assert_equal(:KICK, @bot.factory.find_key(@test[:good]))
16
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good])
17
+ assert_kind_of(ModSpox::Messages::Incoming::Kick, result)
18
+ assert_equal(@test[:good], result.raw_content)
19
+ assert_kind_of(ModSpox::Models::Channel, result.channel)
20
+ assert_equal('#m', result.channel.name)
21
+ assert_kind_of(ModSpox::Models::Nick, result.kickee)
22
+ assert_equal('spox', result.kickee.nick)
23
+ assert_kind_of(ModSpox::Models::Nick, result.kicker)
24
+ assert_equal('spax', result.kicker.nick)
25
+ assert_kind_of(String, result.reason)
26
+ assert_equal('foo', result.reason)
27
+ end
28
+
29
+ def test_unexpected
30
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
31
+ end
32
+ end
@@ -0,0 +1,85 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestModeHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :set_single => ':spax!~spox@host MODE #m +o spax',
10
+ :set_double => ':spax!~spox@host MODE #m +oo spax spex',
11
+ :set_channel => ':spax!~spox@host MODE #m +s',
12
+ :set_self => ':mod_spox MODE mod_spox :+iw',
13
+ :bad => ':fubared MODE fail whale'
14
+ }
15
+ end
16
+
17
+ def test_single
18
+ assert_equal(:MODE, @bot.factory.find_key(@test[:set_single]))
19
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:set_single])].process(@test[:set_single])
20
+ assert_kind_of(ModSpox::Messages::Incoming::Mode, result)
21
+ assert_equal(@test[:set_single], result.raw_content)
22
+ assert_kind_of(ModSpox::Models::Channel, result.channel)
23
+ assert_equal('#m', result.channel.name)
24
+ assert_kind_of(ModSpox::Models::Nick, result.target)
25
+ assert_equal('spax', result.target.nick)
26
+ assert_kind_of(ModSpox::Models::Nick, result.source)
27
+ assert_equal('spax', result.source.nick)
28
+ assert_kind_of(String, result.mode)
29
+ assert_equal('+o', result.mode)
30
+ assert(result.target.is_op?(result.channel))
31
+ end
32
+
33
+ def test_double
34
+ assert_equal(:MODE, @bot.factory.find_key(@test[:set_double]))
35
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:set_double])].process(@test[:set_double])
36
+ assert_kind_of(ModSpox::Messages::Incoming::Mode, result)
37
+ assert_equal(@test[:set_double], result.raw_content)
38
+ assert_kind_of(ModSpox::Models::Channel, result.channel)
39
+ assert_equal('#m', result.channel.name)
40
+ assert_kind_of(Array, result.target)
41
+ assert_equal('spax', result.target[0].nick)
42
+ assert_equal('spex', result.target[1].nick)
43
+ assert_kind_of(ModSpox::Models::Nick, result.source)
44
+ assert_equal('spax', result.source.nick)
45
+ assert_kind_of(String, result.mode)
46
+ assert_equal('+oo', result.mode)
47
+ assert(result.target[0].is_op?(result.channel))
48
+ assert(result.target[1].is_op?(result.channel))
49
+ end
50
+
51
+ def test_channel
52
+ assert_equal(:MODE, @bot.factory.find_key(@test[:set_channel]))
53
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:set_channel])].process(@test[:set_channel])
54
+ assert_kind_of(ModSpox::Messages::Incoming::Mode, result)
55
+ assert_equal(@test[:set_channel], result.raw_content)
56
+ assert_kind_of(ModSpox::Models::Channel, result.channel)
57
+ assert_equal('#m', result.channel.name)
58
+ assert_nil(result.target)
59
+ assert_kind_of(ModSpox::Models::Nick, result.source)
60
+ assert_equal('spax', result.source.nick)
61
+ assert_kind_of(String, result.mode)
62
+ assert_equal('+s', result.mode)
63
+ assert(result.channel.set?('s'))
64
+ end
65
+
66
+ def test_self
67
+ assert_equal(:MODE, @bot.factory.find_key(@test[:set_self]))
68
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:set_self])].process(@test[:set_self])
69
+ assert_kind_of(ModSpox::Messages::Incoming::Mode, result)
70
+ assert_equal(@test[:set_self], result.raw_content)
71
+ assert_nil(result.channel)
72
+ assert_kind_of(ModSpox::Models::Nick, result.target)
73
+ assert_equal('mod_spox', result.target.nick)
74
+ assert_kind_of(ModSpox::Models::Nick, result.source)
75
+ assert_equal('mod_spox', result.source.nick)
76
+ assert_kind_of(String, result.mode)
77
+ assert_equal('+iw', result.mode)
78
+ assert(result.target.mode_set?('i'))
79
+ assert(result.target.mode_set?('w'))
80
+ end
81
+
82
+ def test_unexpected
83
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
84
+ end
85
+ end
@@ -0,0 +1,35 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestNamesHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :names_start => ':swiftco.wa.us.dal.net 353 spox @ #mod_spox :@pizza_ pizza__ @mod_spox @spox +spex',
10
+ :names_end => ':swiftco.wa.us.dal.net 366 spox #mod_spox :End of /NAMES list.',
11
+ :bad => ':fubared 353 fail whale'
12
+ }
13
+ end
14
+
15
+ def test_expected
16
+ assert_equal('353', @bot.factory.find_key(@test[:names_start]))
17
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:names_start])].process(@test[:names_start]))
18
+ assert_equal('366', @bot.factory.find_key(@test[:names_end]))
19
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:names_end])].process(@test[:names_end])
20
+ assert_kind_of(ModSpox::Messages::Incoming::Names, result)
21
+ assert_equal('#mod_spox', result.channel.name)
22
+ assert_equal(5, result.nicks.size)
23
+ assert_equal(3, result.ops.size)
24
+ assert_equal(1, result.voiced.size)
25
+ assert(ModSpox::Models::Nick.find_or_create(:nick => 'mod_spox').is_op?(result.channel))
26
+ assert(ModSpox::Models::Nick.find_or_create(:nick => 'pizza_').is_op?(result.channel))
27
+ assert(ModSpox::Models::Nick.find_or_create(:nick => 'spox').is_op?(result.channel))
28
+ assert(!ModSpox::Models::Nick.find_or_create(:nick => 'pizza__').is_op?(result.channel))
29
+ assert(ModSpox::Models::Nick.find_or_create(:nick => 'spex').is_voice?(result.channel))
30
+ end
31
+
32
+ def test_unexpected
33
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
34
+ end
35
+ end
@@ -0,0 +1,55 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestNickHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :good => ':spox!~spox@some.random.host NICK :flock_of_deer',
10
+ :bad => ':bad NICK fail'
11
+ }
12
+ @nick = ModSpox::Models::Nick.find_or_create(:nick => 'spox')
13
+ end
14
+
15
+ def test_simple
16
+ m = @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good])
17
+ assert_kind_of(ModSpox::Messages::Incoming::Nick, m)
18
+ assert_equal(@test[:good], m.raw_content)
19
+ assert_kind_of(ModSpox::Models::Nick, m.new_nick)
20
+ assert_kind_of(ModSpox::Models::Nick, m.original_nick)
21
+ assert_equal('spox', m.original_nick.nick)
22
+ assert_equal('flock_of_deer', m.new_nick.nick)
23
+ end
24
+
25
+ def test_info_move
26
+ @nick.address = 'some.random.host'
27
+ @nick.username = '~spox'
28
+ @nick.real_name = 'foobar'
29
+ @nick.save
30
+ m = @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good])
31
+ assert_kind_of(ModSpox::Messages::Incoming::Nick, m)
32
+ assert_equal('spox', m.original_nick.nick)
33
+ assert_equal('flock_of_deer', m.new_nick.nick)
34
+ assert_equal('some.random.host', m.new_nick.address)
35
+ assert_equal('~spox', m.new_nick.username)
36
+ assert_equal('foobar', m.new_nick.real_name)
37
+ end
38
+
39
+ def test_mode_move
40
+ c = ModSpox::Models::Channel.find_or_create(:name => '#test')
41
+ @nick.add_channel(c)
42
+ mode = ModSpox::Models::NickMode.find_or_create(:nick_id => @nick.pk, :channel_id => c.pk)
43
+ mode.set_mode('o')
44
+ m = @bot.factory.handlers[@bot.factory.find_key(@test[:good])].process(@test[:good])
45
+ assert_kind_of(ModSpox::Messages::Incoming::Nick, m)
46
+ assert_equal(0, m.original_nick.channels.size)
47
+ assert(m.new_nick.channels.size > 0)
48
+ assert(m.new_nick.channels.include?(c))
49
+ assert(m.new_nick.is_op?(c))
50
+ end
51
+
52
+ def test_unexpected
53
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
54
+ end
55
+ end
@@ -0,0 +1,44 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestPartHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :w_message => ':mod_spox!~mod_spox@host PART #m :part message',
10
+ :wo_message => ':mod_spox!~mod_spox@host PART #m :',
11
+ :bad => ':bad PART fail'
12
+ }
13
+ end
14
+
15
+ def test_w_message
16
+ assert_equal(:PART, @bot.factory.find_key(@test[:w_message]))
17
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:w_message])].process(@test[:w_message])
18
+ assert_kind_of(ModSpox::Messages::Incoming::Part, result)
19
+ assert_equal(@test[:w_message], result.raw_content)
20
+ assert_kind_of(String, result.reason)
21
+ assert_kind_of(ModSpox::Models::Nick, result.nick)
22
+ assert_kind_of(ModSpox::Models::Channel, result.channel)
23
+ assert_equal('mod_spox', result.nick.nick)
24
+ assert_equal('#m', result.channel.name)
25
+ assert_equal('part message', result.reason)
26
+ end
27
+
28
+ def test_wo_message
29
+ assert_equal(:PART, @bot.factory.find_key(@test[:wo_message]))
30
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:wo_message])].process(@test[:wo_message])
31
+ assert_kind_of(ModSpox::Messages::Incoming::Part, result)
32
+ assert_equal(@test[:wo_message], result.raw_content)
33
+ assert_kind_of(String, result.reason)
34
+ assert_kind_of(ModSpox::Models::Nick, result.nick)
35
+ assert_kind_of(ModSpox::Models::Channel, result.channel)
36
+ assert_equal('mod_spox', result.nick.nick)
37
+ assert_equal('#m', result.channel.name)
38
+ assert(result.reason.empty?)
39
+ end
40
+
41
+ def test_unexpected
42
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
43
+ end
44
+ end
@@ -0,0 +1,40 @@
1
+ require "#{File.dirname(__FILE__)}/../BotHolder.rb"
2
+
3
+ class TestPingHandler < Test::Unit::TestCase
4
+
5
+ def setup
6
+ h = BotHolder.instance
7
+ @bot = h.bot
8
+ @test = {
9
+ :wo_server => 'PING :not.configured',
10
+ :w_server => ':not.configured PING :test',
11
+ :bad => 'PING fail whale'
12
+ }
13
+ end
14
+
15
+ def test_wo_server
16
+ assert_equal(:PING, @bot.factory.find_key(@test[:wo_server]))
17
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:wo_server])].process(@test[:wo_server])
18
+ assert_kind_of(ModSpox::Messages::Incoming::Ping, result)
19
+ assert_equal(@test[:wo_server], result.raw_content)
20
+ assert_kind_of(String, result.string)
21
+ assert_kind_of(String, result.server)
22
+ assert_equal('not.configured', result.server)
23
+ assert_equal('not.configured', result.string)
24
+ end
25
+
26
+ def test_w_server
27
+ assert_equal(:PING, @bot.factory.find_key(@test[:w_server]))
28
+ result = @bot.factory.handlers[@bot.factory.find_key(@test[:w_server])].process(@test[:w_server])
29
+ assert_kind_of(ModSpox::Messages::Incoming::Ping, result)
30
+ assert_equal(@test[:w_server], result.raw_content)
31
+ assert_kind_of(String, result.string)
32
+ assert_kind_of(String, result.server)
33
+ assert_equal('not.configured', result.server)
34
+ assert_equal('test', result.string)
35
+ end
36
+
37
+ def test_unexpected
38
+ assert_nil(@bot.factory.handlers[@bot.factory.find_key(@test[:bad])].process(@test[:bad]))
39
+ end
40
+ end