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,34 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Helpers::MessagesHelper do
5
+ let(:subject) { Object.new }
6
+ let(:service) { 'TheService' }
7
+
8
+ before do
9
+ subject.extend(Lita::Helpers::MessagesHelper)
10
+ end
11
+
12
+ it '#duplicated' do
13
+ msg = I18n.t('lita.handlers.service.errors.duplicated', service_name: service)
14
+ expect(subject.msg_duplicated(service_name: service)).to eq msg
15
+ end
16
+
17
+ it '#not_found' do
18
+ msg = I18n.t('lita.handlers.service.errors.not_found', service_name: service)
19
+ expect(subject.msg_not_found(service_name: service)).to eq msg
20
+ end
21
+
22
+ it '#customer_not_found' do
23
+ msg = I18n.t('lita.handlers.service.customer.not_found', service_name: service,
24
+ customer_name: 'erlinis')
25
+ expect(subject.msg_customer_not_found(service_name: service,
26
+ customer_name: 'erlinis')).to eq msg
27
+ end
28
+ it '#customer_duplicated' do
29
+ msg = I18n.t('lita.handlers.service.customer.duplicated', service_name: service,
30
+ customer_name: 'erlinis')
31
+ expect(subject.msg_customer_duplicated(service_name: service,
32
+ customer_name: 'erlinis')).to eq msg
33
+ end
34
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::AddAll do
5
+ let(:data) { ['the-service add all', name, 'add', 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
+ let(:service) do
35
+ { name: name,
36
+ value: 2000,
37
+ state: 'active',
38
+ customers: {
39
+ erlinis: { quantity: 3, value: 2000 },
40
+ khal: { quantity: 2, value: 2000 }
41
+ } }
42
+ end
43
+
44
+ let(:service_quantities_updated) do
45
+ { name: name,
46
+ value: 2000,
47
+ state: 'active',
48
+ customers: {
49
+ erlinis: { quantity: (3 + quantity), value: 2000 },
50
+ khal: { quantity: (2 + quantity), value: 2000 }
51
+ } }
52
+ end
53
+
54
+ let(:success_message) do
55
+ I18n.t('lita.handlers.service.add_all.success',
56
+ quantity: quantity)
57
+ end
58
+
59
+ before do
60
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
61
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
62
+ end
63
+
64
+ describe 'with a given quantity' do
65
+ let(:data) { ['the-service add all 3', name, 'add', '3'] }
66
+ let(:quantity) { 3 }
67
+
68
+ it 'increments the quantity to all' do
69
+ expect(fake_repository).to receive(:update).with(service_quantities_updated)
70
+ interactor.perform
71
+ expect(interactor.success?).to eq true
72
+ expect(interactor.message).to eq success_message
73
+ end
74
+ end
75
+
76
+ describe 'with a negative quantity' do
77
+ let(:data) { ['the-service add all -1', name, 'add', '-1'] }
78
+ let(:quantity) { -1 }
79
+
80
+ it 'decrease the quantity to all' do
81
+ expect(fake_repository).to receive(:update).with(service_quantities_updated)
82
+ interactor.perform
83
+ expect(interactor.success?).to eq true
84
+ expect(interactor.message).to eq success_message
85
+ end
86
+ end
87
+
88
+ describe 'without a quantity' do
89
+ let(:quantity) { 1 }
90
+
91
+ it 'increments the quantity to all with default value' do
92
+ expect(fake_repository).to receive(:update).with(service_quantities_updated)
93
+ interactor.perform
94
+ expect(interactor.success?).to eq true
95
+ expect(interactor.message).to eq success_message
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::AddQuantity do
5
+ let(:data) { ['the-service add @erlinis', name, 'add', '@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 is not in the service' do
35
+ let(:data) { ['the-service add erlinis 1', name, 'add', 'erlinis', 1] }
36
+
37
+ let(:service) do
38
+ { name: name,
39
+ value: 2000,
40
+ state: 'active',
41
+ customers: { khal: { quantity: 1, value: 2000 } } }
42
+ end
43
+
44
+ let(:error_message) do
45
+ I18n.t('lita.handlers.service.customer.not_found',
46
+ service_name: name, customer_name: 'erlinis')
47
+ end
48
+
49
+ before do
50
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
51
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
52
+ end
53
+
54
+ it 'shows an error message' do
55
+ interactor.perform
56
+ expect(interactor.success?).to eq false
57
+ expect(interactor.error).to eq error_message
58
+ end
59
+ end
60
+
61
+ describe 'when customer is in service' do
62
+ let(:service) do
63
+ { name: name,
64
+ value: 2000,
65
+ state: 'active',
66
+ customers: { erlinis: { quantity: 3, value: 2000 } } }
67
+ end
68
+
69
+ let(:service_customer_updated) do
70
+ { name: name,
71
+ value: 2000,
72
+ state: 'active',
73
+ customers: {
74
+ erlinis: { quantity: customer_quantity, value: 2000 }
75
+ } }
76
+ end
77
+
78
+ let(:success_message) do
79
+ I18n.t('lita.handlers.service.add.success',
80
+ customer_name: 'erlinis',
81
+ customer_quantity: customer_quantity,
82
+ quantity: quantity)
83
+ end
84
+
85
+ before do
86
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
87
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
88
+ allow(fake_repository).to receive(:update).with(service_customer_updated)
89
+ end
90
+
91
+ describe 'with a given quantity' do
92
+ let(:data) { ['the-service add @erlinis 3', name, 'add', '@erlinis', '3'] }
93
+ let(:customer_quantity) { 6 }
94
+ let(:quantity) { 3 }
95
+
96
+ it 'increments the customer quantity' do
97
+ interactor.perform
98
+ expect(interactor.success?).to eq true
99
+ expect(interactor.message).to eq success_message
100
+ end
101
+ end
102
+
103
+ describe 'with a negative quantity' do
104
+ let(:data) { ['the-service add @erlinis -1', name, 'add', '@erlinis', '-1'] }
105
+ let(:customer_quantity) { 2 }
106
+ let(:quantity) { -1 }
107
+
108
+ it 'decrease the customer quantity' do
109
+ interactor.perform
110
+ expect(interactor.success?).to eq true
111
+ expect(interactor.message).to eq success_message
112
+ end
113
+ end
114
+
115
+ describe 'without a quantity' do
116
+ let(:data) { ['the-service add @erlinis', name, 'add', '@erlinis', nil] }
117
+ let(:customer_quantity) { 4 }
118
+ let(:quantity) { 1 }
119
+
120
+ it 'increments the customer quantity with default value' do
121
+ interactor.perform
122
+ expect(interactor.success?).to eq true
123
+ expect(interactor.message).to eq success_message
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::ChangeValue do
5
+ let(:data) { ['the-service value @erlinis 2000', name, '@erlinis', '2000'] }
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(:service) do
61
+ { name: name,
62
+ value: 2000,
63
+ state: 'active',
64
+ customers: { erlinis: { quantity: 1, value: 1000 } } }
65
+ end
66
+
67
+ let(:service_customer_updated) do
68
+ { name: name,
69
+ value: 2000,
70
+ state: 'active',
71
+ customers: { erlinis: { quantity: 1, value: 2000 } } }
72
+ end
73
+
74
+ let(:success_message) do
75
+ I18n.t('lita.handlers.service.set_value.success',
76
+ customer_name: 'erlinis',
77
+ customer_value: customer_value,
78
+ old_value: 1000)
79
+ end
80
+
81
+ before do
82
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
83
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
84
+ allow(fake_repository).to receive(:update).with(service_customer_updated)
85
+ end
86
+
87
+ describe 'updates customer value' do
88
+ let(:customer_value) { 2000 }
89
+
90
+ it 'update users value' do
91
+ interactor.perform
92
+ expect(interactor.success?).to eq true
93
+ expect(interactor.message).to eq success_message
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::CreateService do
5
+ let(:interactor) { described_class.new(handler, data) }
6
+ let(:handler) { double('handler') }
7
+ let(:data) { ['create new-service', name, 2000] }
8
+ let(:name) { 'new-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(:service) do
18
+ { name: name,
19
+ value: 2000,
20
+ state: 'active',
21
+ customers: {} }
22
+ end
23
+
24
+ before do
25
+ allow(fake_repository).to receive(:exists?).with(name).and_return(false)
26
+ end
27
+
28
+ it 'creates the service' do
29
+ expect(fake_repository).to receive(:add).with(service)
30
+ interactor.perform
31
+ expect(interactor.success?).to eq true
32
+ expect(interactor.message).to eq service
33
+ end
34
+ end
35
+
36
+ describe 'when service exists' do
37
+ let(:error_message) do
38
+ I18n.t('lita.handlers.service.errors.duplicated', service_name: name)
39
+ end
40
+
41
+ before do
42
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
43
+ end
44
+
45
+ it 'does not create the service' do
46
+ interactor.perform
47
+ expect(interactor.success?).to eq false
48
+ expect(interactor.error).to eq error_message
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: false
2
+ require 'spec_helper'
3
+
4
+ describe Lita::Interactors::DeleteCustomer do
5
+ let(:data) { ['the-service delete @erlinis', name, 'delete', '@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
+ let(:service) do
35
+ { name: name,
36
+ value: 2000,
37
+ state: 'active',
38
+ customers: { erlinis: { quantity: 1, value: 2000 } } }
39
+ end
40
+
41
+ let(:service_without_customer) do
42
+ { name: name,
43
+ value: 2000,
44
+ state: 'active',
45
+ customers: {} }
46
+ end
47
+
48
+ describe 'customer is in service' do
49
+ let(:success_message) do
50
+ I18n.t('lita.handlers.service.delete_customer.success',
51
+ service_name: name, customer_name: 'erlinis')
52
+ end
53
+
54
+ before do
55
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
56
+ allow(fake_repository).to receive(:find).with(name).and_return(service)
57
+ end
58
+
59
+ it 'removes customer from service' do
60
+ expect(fake_repository).to receive(:update).with(service_without_customer)
61
+ interactor.perform
62
+ expect(interactor.success?).to eq true
63
+ expect(interactor.message).to eq success_message
64
+ end
65
+ end
66
+
67
+ describe 'customer not in service' do
68
+ let(:error_message) do
69
+ I18n.t('lita.handlers.service.customer.not_found',
70
+ service_name: name, customer_name: 'erlinis')
71
+ end
72
+
73
+ before do
74
+ allow(fake_repository).to receive(:exists?).with(name).and_return(true)
75
+ allow(fake_repository).to receive(:find).with(name)
76
+ .and_return(service_without_customer)
77
+ end
78
+
79
+ it 'shows a customer not found error' do
80
+ interactor.perform
81
+ expect(interactor.success?).to eq false
82
+ expect(interactor.error).to eq error_message
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end