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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rubocop.yml +5 -0
- data/.ruby-version +1 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/README.md +55 -0
- data/Rakefile +9 -0
- data/dump.rdb +0 -0
- data/lib/lita-service.rb +26 -0
- data/lib/lita/handlers/customer.rb +97 -0
- data/lib/lita/handlers/service.rb +78 -0
- data/lib/lita/helpers/messages_helper.rb +28 -0
- data/lib/lita/interactors/add_all.rb +66 -0
- data/lib/lita/interactors/add_quantity.rb +81 -0
- data/lib/lita/interactors/base_interactor.rb +19 -0
- data/lib/lita/interactors/change_value.rb +81 -0
- data/lib/lita/interactors/create_service.rb +57 -0
- data/lib/lita/interactors/delete_customer.rb +65 -0
- data/lib/lita/interactors/delete_service.rb +43 -0
- data/lib/lita/interactors/inscribe_customer.rb +81 -0
- data/lib/lita/interactors/list_services.rb +25 -0
- data/lib/lita/interactors/reset_quantity.rb +74 -0
- data/lib/lita/interactors/show_service.rb +41 -0
- data/lib/lita/repositories/redis.rb +38 -0
- data/lita-service.gemspec +28 -0
- data/locales/en.yml +32 -0
- data/spec/lita/handlers/customer_spec.rb +215 -0
- data/spec/lita/handlers/service_spec.rb +150 -0
- data/spec/lita/helpers/messages_helper_spec.rb +34 -0
- data/spec/lita/interactors/add_all_spec.rb +100 -0
- data/spec/lita/interactors/add_quantity_spec.rb +129 -0
- data/spec/lita/interactors/change_value_spec.rb +99 -0
- data/spec/lita/interactors/create_service_spec.rb +52 -0
- data/spec/lita/interactors/delete_customer_spec.rb +87 -0
- data/spec/lita/interactors/delete_service_spec.rb +49 -0
- data/spec/lita/interactors/inscribe_customer_spec.rb +119 -0
- data/spec/lita/interactors/list_services_spec.rb +51 -0
- data/spec/lita/interactors/reset_quantity_spec.rb +96 -0
- data/spec/lita/interactors/show_service_spec.rb +52 -0
- data/spec/lita/repositories/redis_spec.rb +71 -0
- data/spec/spec_helper.rb +19 -0
- data/templates/.gitkeep +0 -0
- data/templates/error.erb +1 -0
- data/templates/list_services.erb +10 -0
- data/templates/message.erb +1 -0
- data/templates/service_created.erb +1 -0
- data/templates/service_show.erb +30 -0
- 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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|