lita-service 0.1.0

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 (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rubocop.yml +5 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +9 -0
  6. data/Gemfile +4 -0
  7. data/README.md +55 -0
  8. data/Rakefile +9 -0
  9. data/dump.rdb +0 -0
  10. data/lib/lita-service.rb +26 -0
  11. data/lib/lita/handlers/customer.rb +97 -0
  12. data/lib/lita/handlers/service.rb +78 -0
  13. data/lib/lita/helpers/messages_helper.rb +28 -0
  14. data/lib/lita/interactors/add_all.rb +66 -0
  15. data/lib/lita/interactors/add_quantity.rb +81 -0
  16. data/lib/lita/interactors/base_interactor.rb +19 -0
  17. data/lib/lita/interactors/change_value.rb +81 -0
  18. data/lib/lita/interactors/create_service.rb +57 -0
  19. data/lib/lita/interactors/delete_customer.rb +65 -0
  20. data/lib/lita/interactors/delete_service.rb +43 -0
  21. data/lib/lita/interactors/inscribe_customer.rb +81 -0
  22. data/lib/lita/interactors/list_services.rb +25 -0
  23. data/lib/lita/interactors/reset_quantity.rb +74 -0
  24. data/lib/lita/interactors/show_service.rb +41 -0
  25. data/lib/lita/repositories/redis.rb +38 -0
  26. data/lita-service.gemspec +28 -0
  27. data/locales/en.yml +32 -0
  28. data/spec/lita/handlers/customer_spec.rb +215 -0
  29. data/spec/lita/handlers/service_spec.rb +150 -0
  30. data/spec/lita/helpers/messages_helper_spec.rb +34 -0
  31. data/spec/lita/interactors/add_all_spec.rb +100 -0
  32. data/spec/lita/interactors/add_quantity_spec.rb +129 -0
  33. data/spec/lita/interactors/change_value_spec.rb +99 -0
  34. data/spec/lita/interactors/create_service_spec.rb +52 -0
  35. data/spec/lita/interactors/delete_customer_spec.rb +87 -0
  36. data/spec/lita/interactors/delete_service_spec.rb +49 -0
  37. data/spec/lita/interactors/inscribe_customer_spec.rb +119 -0
  38. data/spec/lita/interactors/list_services_spec.rb +51 -0
  39. data/spec/lita/interactors/reset_quantity_spec.rb +96 -0
  40. data/spec/lita/interactors/show_service_spec.rb +52 -0
  41. data/spec/lita/repositories/redis_spec.rb +71 -0
  42. data/spec/spec_helper.rb +19 -0
  43. data/templates/.gitkeep +0 -0
  44. data/templates/error.erb +1 -0
  45. data/templates/list_services.erb +10 -0
  46. data/templates/message.erb +1 -0
  47. data/templates/service_created.erb +1 -0
  48. data/templates/service_show.erb +30 -0
  49. metadata +233 -0
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::DeleteService do
5
+ let(:interactor) { described_class.new(handler, data) }
6
+ let(:handler) { double('handler') }
7
+ let(:data) { ['delete awesome-service', 'delete', name] }
8
+ let(:name) { 'awesome-service' }
9
+ let(:fake_repository) { double('redis-repository') }
10
+
11
+ before do
12
+ allow(interactor).to receive(:repository).and_return(fake_repository)
13
+ end
14
+
15
+ describe '#perform' do
16
+ describe 'when the service does not exist' do
17
+ let(:error_message) do
18
+ I18n.t('lita.handlers.service.errors.not_found', service_name: name)
19
+ end
20
+
21
+ before do
22
+ allow(fake_repository).to receive(:exists?).with(name).and_return(false)
23
+ end
24
+
25
+ it 'shows error message' do
26
+ interactor.perform
27
+ expect(interactor.success?).to eq false
28
+ expect(interactor.error).to eq error_message
29
+ end
30
+ end
31
+
32
+ describe 'when service exists' do
33
+ let(:success_message) do
34
+ I18n.t('lita.handlers.service.delete.success', service_name: name)
35
+ end
36
+
37
+ before do
38
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
39
+ end
40
+
41
+ it 'deletes the service' do
42
+ expect(fake_repository).to receive(:delete).with(name).and_return(true)
43
+ interactor.perform
44
+ expect(interactor.success?).to eq true
45
+ expect(interactor.message).to eq success_message
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::InscribeCustomer do
5
+ let(:data) { ['the-service inscribe @erlinis', name, '@erlinis', nil] }
6
+ let(:interactor) { described_class.new(handler, data) }
7
+ let(:handler) { double('handler') }
8
+ let(:fake_repository) { double('redis-repository') }
9
+
10
+ before do
11
+ allow(interactor).to receive(:repository).and_return(fake_repository)
12
+ end
13
+
14
+ describe '#perform' do
15
+ let(:name) { 'the-service' }
16
+
17
+ describe 'when the service does not exist' do
18
+ let(:error_message) do
19
+ I18n.t('lita.handlers.service.errors.not_found', service_name: name)
20
+ end
21
+
22
+ before do
23
+ allow(fake_repository).to receive(:exists?).with(name).and_return(false)
24
+ end
25
+
26
+ it 'shows an error message' do
27
+ interactor.perform
28
+ expect(interactor.success?).to eq false
29
+ expect(interactor.error).to eq error_message
30
+ end
31
+ end
32
+
33
+ describe 'when service exists' do
34
+ describe 'when customer already in service' do
35
+ let(:service) do
36
+ { name: name,
37
+ value: 2000,
38
+ state: 'active',
39
+ customers: { erlinis: { quantity: 1, value: 2000 } } }
40
+ end
41
+
42
+ let(:error_message) do
43
+ I18n.t('lita.handlers.service.customer.duplicated',
44
+ service_name: name, customer_name: 'erlinis')
45
+ end
46
+
47
+ before do
48
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
49
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
50
+ end
51
+
52
+ it 'shows an error message' do
53
+ interactor.perform
54
+ expect(interactor.success?).to eq false
55
+ expect(interactor.error).to eq error_message
56
+ end
57
+ end
58
+
59
+ describe 'when customer not in service' do
60
+ let(:service) do
61
+ { name: name,
62
+ value: 2000,
63
+ state: 'active',
64
+ customers: {} }
65
+ end
66
+
67
+ let(:success_message) do
68
+ I18n.t('lita.handlers.service.inscribe.success',
69
+ service_name: name, customer_name: 'erlinis')
70
+ end
71
+
72
+ before do
73
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
74
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
75
+ end
76
+
77
+ describe 'with custom service value' do
78
+ let(:data) do
79
+ ['the-service inscribe @erlinis 3000', name, '@erlinis', '3000']
80
+ end
81
+
82
+ let(:service_with_customer) do
83
+ { name: name,
84
+ value: 2000,
85
+ state: 'active',
86
+ customers: {
87
+ erlinis: { quantity: 0, value: 3000 }
88
+ } }
89
+ end
90
+
91
+ it 'adds the customer setting the custom value' do
92
+ expect(fake_repository).to receive(:update).with(service_with_customer)
93
+ interactor.perform
94
+ expect(interactor.success?).to eq true
95
+ expect(interactor.message).to eq success_message
96
+ end
97
+ end
98
+
99
+ describe 'without custom service value' do
100
+ let(:service_with_customer) do
101
+ { name: name,
102
+ value: 2000,
103
+ state: 'active',
104
+ customers: {
105
+ erlinis: { quantity: 0, value: 2000 }
106
+ } }
107
+ end
108
+
109
+ it 'adds the customer setting the custom value' do
110
+ expect(fake_repository).to receive(:update).with(service_with_customer)
111
+ interactor.perform
112
+ expect(interactor.success?).to eq true
113
+ expect(interactor.message).to eq success_message
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::ListServices do
5
+ let(:interactor) { described_class.new(handler, data) }
6
+ let(:handler) { double('handler') }
7
+ let(:data) { ['list'] }
8
+ let(:fake_repository) { double('redis-repository') }
9
+
10
+ before do
11
+ allow(interactor).to receive(:repository).and_return(fake_repository)
12
+ end
13
+
14
+ describe '#perform' do
15
+ describe 'without services' do
16
+ it 'returns an empty list' do
17
+ expect(fake_repository).to receive(:all).and_return([])
18
+ interactor.perform
19
+ expect(interactor.success?).to eq true
20
+ expect(interactor.message).to eq []
21
+ end
22
+ end
23
+
24
+ describe 'with services' do
25
+ let(:services) do
26
+ [
27
+ { name: 'service_one',
28
+ value: 2000,
29
+ state: 'active',
30
+ customers: {
31
+ jhon: { quantity: 2, value: 2000 },
32
+ arya: { quantity: 2, value: 2000 }
33
+ } },
34
+ { name: 'service_two',
35
+ value: 2000,
36
+ state: 'active',
37
+ customers: {
38
+ khal: { quantity: 1, value: 2000 }
39
+ } }
40
+ ]
41
+ end
42
+
43
+ it 'returns a list of services' do
44
+ expect(fake_repository).to receive(:all).and_return(services)
45
+ interactor.perform
46
+ expect(interactor.success?).to eq true
47
+ expect(interactor.message).to eq services
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::ResetQuantity do
5
+ let(:data) { ['service the-service reset @erlinis', name, 'erlinis'] }
6
+ let(:interactor) { described_class.new(handler, data) }
7
+ let(:handler) { double('handler') }
8
+ let(:fake_repository) { double('redis-repository') }
9
+
10
+ before do
11
+ allow(interactor).to receive(:repository).and_return(fake_repository)
12
+ end
13
+
14
+ describe '#perform' do
15
+ let(:name) { 'the-service' }
16
+
17
+ describe 'when the service does not exist' do
18
+ let(:error_message) do
19
+ I18n.t('lita.handlers.service.errors.not_found', service_name: name)
20
+ end
21
+
22
+ before do
23
+ allow(fake_repository).to receive(:exists?).with(name).and_return(false)
24
+ end
25
+
26
+ it 'shows an error message' do
27
+ interactor.perform
28
+ expect(interactor.success?).to eq false
29
+ expect(interactor.error).to eq error_message
30
+ end
31
+ end
32
+
33
+ describe 'when service exists' do
34
+ describe 'when customer is not in the service' do
35
+ let(:service) do
36
+ { name: name,
37
+ value: 2000,
38
+ state: 'active',
39
+ customers: { khal: { quantity: 1, value: 2000 } } }
40
+ end
41
+
42
+ let(:error_message) do
43
+ I18n.t('lita.handlers.service.customer.not_found',
44
+ service_name: name, customer_name: 'erlinis')
45
+ end
46
+
47
+ before do
48
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
49
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
50
+ end
51
+
52
+ it 'shows an error message' do
53
+ interactor.perform
54
+ expect(interactor.success?).to eq false
55
+ expect(interactor.error).to eq error_message
56
+ end
57
+ end
58
+
59
+ describe 'when customer is in service' do
60
+ let(:success_message) do
61
+ I18n.t('lita.handlers.service.reset.success', customer_name: 'erlinis')
62
+ end
63
+
64
+ before do
65
+ service = {
66
+ name: name,
67
+ value: 2000,
68
+ state: 'active',
69
+ customers: {
70
+ erlinis: { quantity: 3, value: 2000 }
71
+ }
72
+ }
73
+
74
+ service_customer_updated = {
75
+ name: name,
76
+ value: 2000,
77
+ state: 'active',
78
+ customers: {
79
+ erlinis: { quantity: 0, value: 2000 }
80
+ }
81
+ }
82
+
83
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
84
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
85
+ allow(fake_repository).to receive(:update).with(service_customer_updated)
86
+ end
87
+
88
+ it 'reset the customer quantity to zero' do
89
+ interactor.perform
90
+ expect(interactor.success?).to eq true
91
+ expect(interactor.message).to eq success_message
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::ShowService do
5
+ let(:interactor) { described_class.new(handler, data) }
6
+ let(:handler) { double('handler') }
7
+ let(:data) { ['show awesome-service', name] }
8
+ let(:name) { 'awesome-service' }
9
+ let(:fake_repository) { double('redis-repository') }
10
+
11
+ before do
12
+ allow(interactor).to receive(:repository).and_return(fake_repository)
13
+ end
14
+
15
+ describe '#perform' do
16
+ describe 'when the service does not exist' do
17
+ let(:error_message) do
18
+ I18n.t('lita.handlers.service.errors.not_found', service_name: name)
19
+ end
20
+
21
+ before do
22
+ allow(fake_repository).to receive(:exists?).with(name).and_return(false)
23
+ end
24
+
25
+ it 'shows an error message' do
26
+ interactor.perform
27
+ expect(interactor.success?).to eq false
28
+ expect(interactor.error).to eq error_message
29
+ end
30
+ end
31
+
32
+ describe 'when service exists' do
33
+ let(:service) do
34
+ { name: name,
35
+ value: 2000,
36
+ state: 'active',
37
+ customers: { erlinis: { quantity: 1, value: 2000 } } }
38
+ end
39
+
40
+ before do
41
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
42
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
43
+ end
44
+
45
+ it 'returns the service' do
46
+ interactor.perform
47
+ expect(interactor.success?).to eq true
48
+ expect(interactor.message).to eq service
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Repositories::Redis do
5
+ let(:redis) { double('redis') }
6
+ let(:repository) { described_class.new(redis) }
7
+
8
+ describe 'methods' do
9
+ describe 'exists?' do
10
+ before do
11
+ allow(redis).to receive(:exists).with('key').and_return(false)
12
+ end
13
+ it { expect(repository.exists?('key')).to eq false }
14
+ end
15
+
16
+ describe 'all' do
17
+ let(:resources) { %w(key1 key2) }
18
+
19
+ before do
20
+ allow(redis).to receive(:keys)
21
+ .and_return(resources)
22
+ end
23
+ it { expect(repository.all).to eq resources }
24
+ end
25
+
26
+ describe 'add' do
27
+ let(:resource) do
28
+ { name: 'key', attr: '1' }
29
+ end
30
+ before do
31
+ allow(redis).to receive(:set)
32
+ .with('key', MultiJson.dump(resource))
33
+ .and_return('OK')
34
+ end
35
+ it { expect(repository.add(resource)).to eq 'OK' }
36
+ end
37
+
38
+ describe 'update' do
39
+ let(:resource) do
40
+ { name: 'key', attr: '1' }
41
+ end
42
+ before do
43
+ allow(redis).to receive(:set)
44
+ .with('key', MultiJson.dump(resource))
45
+ .and_return('OK')
46
+ end
47
+ it { expect(repository.update(resource)).to eq 'OK' }
48
+ end
49
+
50
+ describe 'delete' do
51
+ before do
52
+ allow(redis).to receive(:del)
53
+ .with('key')
54
+ .and_return('OK')
55
+ end
56
+ it { expect(repository.delete('key')).to eq 'OK' }
57
+ end
58
+
59
+ describe 'find' do
60
+ let(:resource) do
61
+ { name: 'key', attr: '1' }
62
+ end
63
+ before do
64
+ allow(redis).to receive(:get)
65
+ .with('key')
66
+ .and_return(MultiJson.dump(resource))
67
+ end
68
+ it { expect(repository.find('key')).to eq resource }
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ require 'simplecov'
3
+ require 'coveralls'
4
+
5
+ SimpleCov.formatters = [
6
+ SimpleCov::Formatter::HTMLFormatter,
7
+ Coveralls::SimpleCov::Formatter
8
+ ]
9
+
10
+ SimpleCov.start
11
+
12
+ require 'lita-service'
13
+ require 'lita/rspec'
14
+ require 'pry'
15
+
16
+ # A compatibility mode is provided for older plugins upgrading from
17
+ # Lita 3. Since this plugin was generated with Lita 4,
18
+ # the compatibility mode should be left disabled.
19
+ Lita.version_3_compatibility_mode = false