lita-poll 1.0.1 → 1.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e95ca628bcd95e09d55a7b3f7ad6fb50010d65fd
4
- data.tar.gz: e36cd4ade813e7daa1e705840313f98ca0762f4e
3
+ metadata.gz: a841e0cca4684cbda447fbda0c3d5160c8194c38
4
+ data.tar.gz: 350e0171517ccebd1dab8fff1dfdfff676da9fb1
5
5
  SHA512:
6
- metadata.gz: 4b21154eafd2c2cb9bce025467109b035921a732c8634457481266a1bbd46c0494a86044bd3473d27596532ccfacc8844eec870a4811bad78031988cf9d3e11e
7
- data.tar.gz: 37329aea6401158078f04dbc971b8b9517df28945e2f454bdd0cc15f9c07a1e5cc4d78575a199ff17db9bb06410e34b143368bad09ce8a97e400c89341826085
6
+ metadata.gz: dc9eeff602562d8f6b9d2e97e673d106af10c977290659de47e8f8e75838e7b6ec18bf4956faa1d48b2af76928bd35e15cd867d1827edb837617ef9b4e455d4c
7
+ data.tar.gz: 153ec113bf1958ffec3744e03e7ce348369a90301dbcbc802ba4582597a23fcfdf13993ed467e4af335760b42120ba48dcfc974be9e890fdd8723a8c1646a1cd
@@ -68,7 +68,7 @@ module Lita
68
68
  poll = Poll.json_create(JSON.parse(poll))
69
69
  idx = 0
70
70
  response.reply(t("replies.info.header", poll_topic: poll.topic))
71
- every(1) do |timer|
71
+ every(0.5) do |timer|
72
72
  if idx >= poll.options.length
73
73
  timer.stop
74
74
  else
@@ -92,7 +92,7 @@ module Lita
92
92
  response.reply(t("replies.general.poll_not_found", id: id))
93
93
  else
94
94
  poll = Poll.json_create(JSON.parse(poll))
95
- if poll.valid_vote(optNum)
95
+ if poll.valid_vote?(optNum)
96
96
  poll.vote(response.user, optNum)
97
97
  redis.set(poll.id, poll.to_json)
98
98
  response.reply_privately(t(
@@ -123,7 +123,7 @@ module Lita
123
123
 
124
124
  idx = 0
125
125
  response.reply(t("replies.tally.header"))
126
- every(1) do |timer|
126
+ every(0.5) do |timer|
127
127
  if idx >= poll.options.length
128
128
  timer.stop
129
129
  else
@@ -148,4 +148,4 @@ module Lita
148
148
 
149
149
  Lita.register_handler(PollHandler)
150
150
  end
151
- end
151
+ end
data/lita-poll.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-poll"
3
- spec.version = "1.0.1"
3
+ spec.version = "1.0.2"
4
4
  spec.authors = ["Michael Chua"]
5
5
  spec.email = ["chua.mbt@gmail.com"]
6
6
  spec.summary = %q{Plugin that enables polling functionality for a lita bot.}
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
14
14
  spec.require_paths = ["lib"]
15
15
 
16
- spec.add_runtime_dependency "lita", ">= 3.3"
16
+ spec.add_runtime_dependency "lita", ">= 4.2.1"
17
17
 
18
18
  spec.add_development_dependency "bundler", "~> 1.3"
19
19
  spec.add_development_dependency "rake"
@@ -1,4 +1,140 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Lita::Handlers::Poll, lita_handler: true do
3
+ describe Lita::Handlers::PollHandler, lita_handler: true do
4
+ ph = Lita::Handlers::PollHandler
5
+ topics = ['Topic1', 'Topic2']
6
+ options = ['Option1', 'Option2', 'Option3']
7
+ topic1Id = Poll.new(topics.first).id
8
+
9
+ let(:poll_admin) do
10
+ user = Lita::User.create(1, name: "Poll Admin")
11
+ Lita::Authorization.new(registry.config).add_user_to_group!(user, :poll_admins)
12
+ user
13
+ end
14
+ let(:poll_user1) { Lita::User.create(2, name: "Poll User1") }
15
+ let(:poll_user2) { Lita::User.create(3, name: "Poll User2") }
16
+
17
+ it { is_expected.to route_command("poll list").to(:list) }
18
+ topics.map { |topic|
19
+ poll = Poll.new(topic)
20
+ it { is_expected.to route_command("poll make "+topic).to(:make) }
21
+ it { is_expected.to route_command("poll option "+poll.id+" Option 1").to(:option) }
22
+ it { is_expected.to route_command("poll info "+poll.id).to(:info) }
23
+ it { is_expected.to route_command("poll vote "+poll.id+" 1").to(:vote) }
24
+ it { is_expected.to route_command("poll tally "+poll.id).to(:tally) }
25
+ it { is_expected.not_to route_command("poll complete "+poll.id).to(:complete) }
26
+ it { is_expected.to route_command("poll complete "+poll.id).with_authorization_for(:poll_admins).to(:complete) }
27
+
28
+ }
29
+ it { is_expected.to route_command("poll clear").with_authorization_for(:poll_admins).to(:clear) }
30
+ it { is_expected.not_to route_command("poll clear").to(:clear) }
31
+
32
+ describe "polling for users" do
33
+ it "no polls" do
34
+ send_command('poll list', as: poll_user1)
35
+ expect(replies.last).to eq(ph::translate("replies.list.no_polls"))
36
+ end
37
+
38
+ it "invalid poll" do
39
+ dummy_topic = 'Dummy'
40
+ dummy_poll = Poll.new(dummy_topic)
41
+ send_command('poll option '+dummy_poll.id+' DummyOption', as: poll_user1)
42
+ send_command('poll vote '+dummy_poll.id+' 1', as: poll_user1)
43
+ send_command('poll info '+dummy_poll.id, as: poll_user1)
44
+ send_command('poll tally '+dummy_poll.id, as: poll_user1)
45
+ replies.map { |reply| expect(reply).to eq(ph::translate("replies.general.poll_not_found", id: dummy_poll.id))
46
+ }
47
+ end
48
+
49
+ it "make and use polls" do
50
+ # make
51
+ topics.map { |topic|
52
+ poll = Poll.new(topic)
53
+ send_command('poll make '+topic, as: poll_user1)
54
+ success = ph::translate("replies.make.success", poll_id: poll.id, poll_topic: poll.topic)
55
+ expect(replies.last).to eq(success)
56
+ }
57
+ # list
58
+ send_command('poll list', as: poll_user2)
59
+ list_reply = replies.last(topics.length+1)
60
+ expect(list_reply.first).to eq(ph::translate("replies.list.header"))
61
+ topics.map { |topic, reply|
62
+ poll = Poll.new(topic)
63
+ success = ph::translate("replies.list.poll", poll_id: poll.id, poll_topic: poll.topic)
64
+ expect(list_reply.drop(1)).to include(success)
65
+ }
66
+ # add options
67
+ options.map { |option|
68
+ topic = topics.first
69
+ poll = Poll.new(topic)
70
+ send_command('poll option '+poll.id+' '+option, as: poll_user1)
71
+ success = ph::translate("replies.option.success", option: option, poll_id: poll.id)
72
+ expect(replies.last).to eq(success)
73
+ }
74
+ # check poll info
75
+ send_command('poll info '+topic1Id, as: poll_user2)
76
+ sleep(2)
77
+ info_reply = replies.last(options.length+1)
78
+ expect(info_reply.first).to eq(ph::translate("replies.info.header", poll_topic: topics.first))
79
+ options.zip(info_reply.drop(1)).each_with_index.map { |pair, idx|
80
+ option = pair.first
81
+ reply = pair.last
82
+ success = ph::translate("replies.info.option", idx: idx+1, option: option)
83
+ expect(reply).to eq(success)
84
+ }
85
+ # voting and tallying
86
+ send_command('poll vote '+topic1Id+' 1', as: poll_user1)
87
+ expect(replies.last).to eq(ph::translate("replies.vote.success", option: options[0]))
88
+ send_command('poll vote '+topic1Id+' 2', as: poll_user2)
89
+ expect(replies.last).to eq(ph::translate("replies.vote.success", option: options[1]))
90
+ send_command('poll tally '+topic1Id, as: poll_user2)
91
+ sleep(2)
92
+ tally_reply = replies.last(options.length+1)
93
+ expect(tally_reply[0]).to eq(ph::translate("replies.tally.header"))
94
+ expect(tally_reply[1]).to eq(ph::translate("replies.tally.option", option: options[0], votes: 1))
95
+ expect(tally_reply[2]).to eq(ph::translate("replies.tally.option", option: options[1], votes: 1))
96
+ expect(tally_reply[3]).to eq(ph::translate("replies.tally.option", option: options[2], votes: 0))
97
+ # change vote
98
+ send_command('poll vote '+topic1Id+' 3', as: poll_user1)
99
+ expect(replies.last).to eq(ph::translate("replies.vote.success", option: options[2]))
100
+ send_command('poll tally '+topic1Id, as: poll_user2)
101
+ sleep(2)
102
+ tally_reply = replies.last(options.length+1)
103
+ expect(tally_reply[0]).to eq(ph::translate("replies.tally.header"))
104
+ expect(tally_reply[1]).to eq(ph::translate("replies.tally.option", option: options[0], votes: 0))
105
+ expect(tally_reply[2]).to eq(ph::translate("replies.tally.option", option: options[1], votes: 1))
106
+ expect(tally_reply[3]).to eq(ph::translate("replies.tally.option", option: options[2], votes: 1))
107
+ # voting for non-existent options
108
+ send_command('poll vote '+topic1Id+' 4', as: poll_user1)
109
+ expect(replies.last).to eq(ph::translate("replies.vote.not_found"))
110
+ end
111
+ end
112
+
113
+ describe "poll administration" do
114
+ it "complete poll" do
115
+ topics.map { |topic|
116
+ poll = Poll.new(topic)
117
+ send_command('poll make '+topic, as: poll_user1)
118
+ }
119
+ send_command('poll complete '+topic1Id, as: poll_admin)
120
+ expect(replies.last).to eq(ph::translate("replies.complete.success"))
121
+ send_command('poll list', as: poll_user1)
122
+ sleep(2)
123
+ list_reply = replies.last(topics.length)
124
+ expect(list_reply.first).to eq(ph::translate("replies.list.header"))
125
+ puts list_reply
126
+ end
127
+
128
+ it "clear polls" do
129
+ topics.map { |topic|
130
+ poll = Poll.new(topic)
131
+ send_command('poll make '+topic, as: poll_user1)
132
+ }
133
+ send_command('poll clear', as: poll_admin)
134
+ expect(replies.last).to eq(ph::translate("replies.clear.success"))
135
+ send_command('poll list', as: poll_user1)
136
+ expect(replies.last).to eq(ph::translate("replies.list.no_polls"))
137
+ end
138
+ end
139
+
4
140
  end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,4 @@
1
1
  require "lita-poll"
2
2
  require "lita/rspec"
3
+
4
+ Lita.version_3_compatibility_mode = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-poll
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Chua
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-07 00:00:00.000000000 Z
11
+ date: 2015-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.3'
19
+ version: 4.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.3'
26
+ version: 4.2.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  version: '0'
107
107
  requirements: []
108
108
  rubyforge_project:
109
- rubygems_version: 2.2.2
109
+ rubygems_version: 2.4.6
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: Plugin that enables polling functionality for a lita bot.