banter 1.4.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +1 -1
  4. data/Gemfile +1 -4
  5. data/README.md +0 -33
  6. data/Rakefile +0 -28
  7. data/banter.gemspec +2 -5
  8. data/lib/banter.rb +1 -1
  9. data/lib/banter/configuration.rb +2 -4
  10. data/lib/banter/notifier.rb +16 -0
  11. data/lib/banter/publisher.rb +1 -1
  12. data/lib/banter/railtie.rb +0 -4
  13. data/lib/banter/server/client_queue_listener.rb +4 -37
  14. data/lib/banter/server/rabbit_mq_subscriber.rb +6 -6
  15. data/lib/banter/server/subscriber_server.rb +0 -13
  16. data/lib/banter/version.rb +1 -1
  17. data/spec/banter/notifier_spec.rb +40 -0
  18. data/spec/banter/server/client_queue_listener_spec.rb +36 -84
  19. data/spec/banter/server/rabbitmq_subscriber_spec.rb +14 -10
  20. data/spec/banter/server/subscriber_server_spec.rb +0 -60
  21. data/spec/banter/subscriber_spec.rb +0 -81
  22. data/spec/spec_helper.rb +1 -8
  23. data/spec/support/test_notifier.rb +17 -0
  24. metadata +33 -100
  25. data/.ruby-version +0 -1
  26. data/lib/banter/web.rb +0 -34
  27. data/lib/banter/web/application.rb +0 -85
  28. data/lib/banter/web/helpers.rb +0 -13
  29. data/lib/banter/web/models/banter_message.rb +0 -124
  30. data/lib/banter/web/models/banter_worker.rb +0 -72
  31. data/lib/banter/web/serializers/banter_message_serializer.rb +0 -35
  32. data/lib/banter/web/serializers/banter_worker_serializer.rb +0 -40
  33. data/lib/banter/web/serializers/subscriber_serializer.rb +0 -26
  34. data/spec/banter/web/application_spec.rb +0 -181
  35. data/spec/banter/web/serializers/banter_message_serializer_spec.rb +0 -42
  36. data/spec/banter/web/serializers/banter_worker_serializer_spec.rb +0 -44
  37. data/spec/factories/banter_messages.rb +0 -28
  38. data/spec/factories/banter_workers.rb +0 -17
  39. data/spec/mongoid.yml +0 -7
  40. data/web/assets/javascripts/banter.js +0 -449
  41. data/web/assets/javascripts/dashboard_app/app.coffee +0 -4
  42. data/web/assets/javascripts/dashboard_app/controllers/message_controller.coffee +0 -28
  43. data/web/assets/javascripts/dashboard_app/controllers/messages_controller.coffee +0 -58
  44. data/web/assets/javascripts/dashboard_app/controllers/subscribers_controller.coffee +0 -25
  45. data/web/assets/javascripts/dashboard_app/controllers/worker_controller.coffee +0 -30
  46. data/web/assets/javascripts/dashboard_app/controllers/workers_list_controller.coffee +0 -28
  47. data/web/assets/javascripts/dashboard_app/routes.coffee +0 -82
  48. data/web/assets/javascripts/dashboard_app/services/common_methods_service.coffee +0 -6
  49. data/web/assets/javascripts/dashboard_app/services/message_methods_service.coffee +0 -18
  50. data/web/assets/javascripts/dashboard_app/services/messages_service.coffee +0 -17
  51. data/web/assets/javascripts/dashboard_app/services/subscribers_service.coffee +0 -8
  52. data/web/assets/javascripts/dashboard_app/services/worker_methods_service.coffee +0 -11
  53. data/web/assets/javascripts/dashboard_app/services/worker_service.coffee +0 -15
  54. data/web/assets/javascripts/ng-prettyjson.js +0 -15
  55. data/web/assets/stylesheets/banter.css +0 -78
  56. data/web/views/_message.haml +0 -74
  57. data/web/views/_messages.haml +0 -77
  58. data/web/views/_subscribers.haml +0 -22
  59. data/web/views/_worker.haml +0 -52
  60. data/web/views/_workers_list.haml +0 -35
  61. data/web/views/index.haml +0 -19
  62. data/web/views/layout.haml +0 -51
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbcfd4c67610fef0339ce5fb31e14fd975e89d69
4
- data.tar.gz: 626912b7090d2cd191f1c87d846f2c2c3f62d9d7
3
+ metadata.gz: c03308431cc8b88c19125424eb68bb908a3d4371
4
+ data.tar.gz: 40e04814acf8a8bf45890e02340eadf06442a6c6
5
5
  SHA512:
6
- metadata.gz: b35cd93ce40832b90000c56d054587a7ea49f5e2c651a3d9b960fd68ab041645ed19f17860868821619fa8f0cf1df115a49823dc4a8e743f498b5d68d4303572
7
- data.tar.gz: a9cc50ad7416642328b91c463266e7eb0db72c18d0dbd7ca0c93fef0bd8ccf91edfe9ddf9d547b8ead606b4df985dcf9f912e55b23b82b8499e7bb5746289c79
6
+ metadata.gz: df196c9fa5a9ba80aedf5bddf922f6b148522cb2a1c57b8c953ff180d87d7021d4b12f708d667e8b31edd0df1dbfd5abb1ca0f70dae448bfed5da9c32be0012e
7
+ data.tar.gz: c192baefaf7eb97f48f0cf3e879f727e8087cd118f33f626556bcf4363520460824d454eb9fb400476e3f707c57c789ebbf79beaec3f1cef90968334ef0a3111
data/.gitignore CHANGED
@@ -5,6 +5,7 @@
5
5
  .yardoc
6
6
  .project
7
7
  .ruby-gemset
8
+ .ruby-version
8
9
  Gemfile.lock
9
10
  InstalledFiles
10
11
  _yardoc
@@ -20,3 +21,4 @@ tmp
20
21
  .rspec
21
22
  .idea
22
23
  *.log
24
+ .byebug-history
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
5
4
  - 2.1.0
5
+ - 2.2.1
6
6
  services:
7
7
  - mongodb
8
8
  before_script:
data/Gemfile CHANGED
@@ -3,14 +3,11 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in banter.gemspec
4
4
  gemspec
5
5
 
6
- gem 'coffee-script'
7
6
  gem 'json'
8
7
  group :test do
9
8
  gem 'rack-test'
10
9
  gem 'rspec-its'
11
- gem 'sinatra'
12
- gem 'haml'
13
- gem 'mongoid', "~>4.0"
14
10
  gem 'timecop'
11
+ gem 'awesome_print', '~> 1.6', '>= 1.6.1'
15
12
  gem "factory_girl", "~> 4.0"
16
13
  end
data/README.md CHANGED
@@ -108,39 +108,6 @@ class UserWelcomeSubscriber < Banter::Subscriber
108
108
  end
109
109
  ```
110
110
 
111
- ### Dashboards!!!
112
-
113
- Banter provides dashboards that can be easily enabled in any Rack application.
114
-
115
- For a Rails application
116
-
117
- ```
118
- # config/application.rb
119
- config.banter.web_enabled = true
120
- ```
121
-
122
- ```
123
- #config/routes.rb
124
- mount Banter::Web::Application => '/banter'
125
- ```
126
-
127
- or
128
-
129
- ```
130
- #config.routes.rb
131
- authenticate :admin do
132
- mount Banter::Web::Application => '/banter'
133
- end
134
- ```
135
-
136
- Dashboards currently use Mongo DB (Mongoid gem) to store data, so the following gems should be added to your gemfile
137
- ```
138
- gem 'mongoid'
139
- gem 'haml'
140
- gem 'sinatra'
141
- ```
142
-
143
-
144
111
  ## Contributing
145
112
 
146
113
  1. Fork it
data/Rakefile CHANGED
@@ -6,31 +6,3 @@ begin
6
6
  task :default => :spec
7
7
  end
8
8
 
9
- begin
10
- require 'coffee-script'
11
-
12
- namespace :js do
13
- def add_javascript(js_file, output_file)
14
- js_file_souce = File.read("#{File.dirname(__FILE__)}/web/assets/javascripts/#{js_file}.js")
15
- output_file.puts js_file_souce
16
- end
17
-
18
- desc "compile coffee-scripts from ./assets/javascripts"
19
- task :compile do
20
- source = "#{File.dirname(__FILE__)}/web/assets/javascripts/**/*.coffee"
21
- target = "#{File.dirname(__FILE__)}/web/assets/javascripts/banter.js"
22
- file = File.open(target, 'w+')
23
-
24
- add_javascript("ng-prettyjson", file)
25
-
26
- Dir.glob(source) do |cf|
27
- puts cf
28
- file.puts CoffeeScript.compile File.read(cf)
29
- end
30
-
31
- file.close
32
- end
33
- end
34
-
35
-
36
- end
@@ -2,7 +2,6 @@
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
- # require all files in the folder?
6
5
  require 'banter/version'
7
6
 
8
7
  Gem::Specification.new do |spec|
@@ -20,13 +19,11 @@ Gem::Specification.new do |spec|
20
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
20
  spec.require_paths = ["lib"]
22
21
 
23
- spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "bundler", ">= 1.3"
24
23
  spec.add_development_dependency "rake", "~> 10.0"
25
24
  spec.add_development_dependency "rspec", "~> 3.0.0"
26
- spec.add_runtime_dependency "activesupport", "~> 4.1"
27
- spec.add_runtime_dependency "awesome_print", "~> 1.2.0"
25
+ spec.add_development_dependency "awesome_print", '>= 1.6.1'
28
26
  spec.add_runtime_dependency "bunny", "~> 1.2"
29
- spec.add_runtime_dependency "airbrake", "~> 3.1"
30
27
  spec.add_runtime_dependency "hashie", ">= 1.2"
31
28
  spec.add_runtime_dependency "json", ">= 1.8"
32
29
  spec.add_runtime_dependency "celluloid", ">= 0.15"
@@ -1,7 +1,6 @@
1
1
  require "active_support/all"
2
2
  require "bunny"
3
3
  require "yaml"
4
- require "airbrake"
5
4
 
6
5
  require "banter/configuration"
7
6
  require "banter/context"
@@ -14,6 +13,7 @@ require "banter/version"
14
13
  require "banter/exceptions/payload_validation_error"
15
14
  require 'banter/server'
16
15
  require 'banter/subscriber'
16
+ require 'banter/notifier'
17
17
  require 'banter/delay_publish_model'
18
18
 
19
19
  if defined?(Rails::Railtie)
@@ -29,6 +29,8 @@ module Banter
29
29
 
30
30
  mattr_accessor :logger
31
31
 
32
+ mattr_accessor :notifier
33
+
32
34
  # RabbitMQ push and subscribe logging toggle
33
35
  # @default true
34
36
  mattr_accessor :logging_enabled
@@ -44,10 +46,6 @@ module Banter
44
46
  mattr_accessor :batch_messages
45
47
  @@batch_messages = false
46
48
 
47
- # Enable web monitoring
48
- # @default false
49
- mattr_accessor :web_enabled
50
- @@web_enabled = false
51
49
 
52
50
  mattr_accessor :application_name
53
51
  @@application_name = nil
@@ -0,0 +1,16 @@
1
+ module Banter
2
+ module Notifier
3
+ def self.notify(error, params_hash)
4
+ ::Banter::Configuration.notifier.notify(error, params_hash)
5
+ end
6
+
7
+ class StdOutNotifier
8
+ def self.notify(error, params_hash)
9
+ STDOUT.puts("Error caught: #{error}, #{params_hash}")
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ # Is this legit to just load up and assign as default for now?
16
+ ::Banter::Configuration.notifier ||= Banter::Notifier::StdOutNotifier
@@ -52,7 +52,7 @@ module Banter
52
52
  @publisher = @channel.send(@exchange_type, @exchange, :durable => true, :auto_delete => false)
53
53
 
54
54
  rescue => e
55
- Airbrake.notify(e, parameters: { message: e.message }, environment_name: ENV['RAILS_ENV'])
55
+ ::Banter::Notifier.notify(e, parameters: { message: e.message }, environment_name: ENV['RAILS_ENV'])
56
56
  return
57
57
  end
58
58
 
@@ -17,10 +17,6 @@ module Banter
17
17
  config.after_initialize do
18
18
  Banter.logger = config.banter.logger if config.banter.logger
19
19
 
20
- if Banter::Configuration.web_enabled
21
- require 'banter/web'
22
- end
23
-
24
20
  end
25
21
 
26
22
  console do
@@ -30,33 +30,17 @@ module Banter
30
30
  Banter::RabbitLogger.log(::Logger::DEBUG, "Message received by listener on #{worker_class.name} with payload: #{envelope[:payload]}")
31
31
  worker = worker_class.new(delivery_info, properties, envelope[:context], envelope)
32
32
  payload = envelope[:payload]
33
- track_message_received(worker, payload)
34
33
  worker.perform!(payload)
35
- track_message_successful
36
34
  clear_dead_letter(worker_class.config.dead_letter_queue_name, envelope)
37
35
  rescue ::Banter::PayloadValidationError => banter_error
38
- track_message_failed(banter_error, false)
39
36
  Banter::RabbitLogger.log(::Logger::ERROR, { worker: worker_class.name, message: banter_error.message, envelope: envelope })
40
- Airbrake.notify(banter_error,
41
- parameters: {
42
- info: delivery_info,
43
- properties: properties,
44
- context: envelope[:context],
45
- payload: envelope[:payload],
46
- message: "Validation error for #{worker_class.name}"
47
- })
37
+
38
+ ::Banter::Notifier.notify(banter_error, { delivery_info: delivery_info, properties: properties, envelope: envelope})
48
39
  raise banter_error
49
40
  rescue => e
50
- track_message_failed(e, true)
51
41
  Banter::RabbitLogger.log(::Logger::ERROR, "Failed message for #{worker_class.name} #{e.message}")
52
- Airbrake.notify(e,
53
- parameters: {
54
- info: delivery_info,
55
- properties: properties,
56
- context: envelope[:context],
57
- payload: envelope[:payload],
58
- message: "Failed perform for #{worker_class.name}"
59
- })
42
+
43
+ ::Banter::Notifier.notify(e, { delivery_info: delivery_info, properties: properties, envelope: envelope})
60
44
  raise e
61
45
  end
62
46
 
@@ -67,23 +51,6 @@ module Banter
67
51
  end
68
52
  end
69
53
 
70
- protected
71
-
72
- def track_message_successful
73
- return unless Banter::Configuration.web_enabled
74
- BanterMessage.message_successful
75
- end
76
-
77
- def track_message_failed(error, errored = true)
78
- return unless Banter::Configuration.web_enabled
79
- status = errored ? BanterMessage::STATUS_ERROR : BanterMessage::STATUS_VALIDATION_FAILED
80
- BanterMessage.message_failed(error, status)
81
- end
82
-
83
- def track_message_received(worker, payload)
84
- return unless Banter::Configuration.web_enabled
85
- BanterMessage.message_received(worker_class, worker, payload)
86
- end
87
54
  end
88
55
  end
89
56
  end
@@ -28,7 +28,6 @@ module Banter
28
28
  elsif @topic.present?
29
29
  @routing_key = "#{@topic}.#"
30
30
  end
31
-
32
31
  end
33
32
 
34
33
  def start(&block)
@@ -37,7 +36,7 @@ module Banter
37
36
  @connection.start
38
37
  rescue => e
39
38
  Banter::RabbitLogger.log(Logger::ERROR, "Cannot connect to rabbitmq")
40
- Airbrake.notify(e, parameters: { message: e.message, what_happened: "RabbitMQ unreachable!" }, environment_name: environment)
39
+ ::Banter::Notifier.notify(e, parameters: { message: e.message, what_happened: "RabbitMQ unreachable!" }, environment_name: environment)
41
40
  raise e
42
41
  end
43
42
 
@@ -70,7 +69,7 @@ module Banter
70
69
 
71
70
  if delivery_info[:redelivered]
72
71
  e = StandardError.new("PubSub Message redelivery")
73
- Airbrake.notify(e, parameters: { info: delivery_info, props: properties, contents: contents }, backtrace: caller)
72
+ ::Banter::Notifier.notify(e, parameters: { info: delivery_info, props: properties, contents: contents }, backtrace: caller)
74
73
  end
75
74
 
76
75
  Banter::RabbitLogger.log_receive(delivery_info[:routing_key], envelope)
@@ -89,14 +88,14 @@ module Banter
89
88
  # Does not get put back on the queue, and instead, will need to be processed either by the log parser
90
89
  # later or by dead letter exchange
91
90
  @channel.reject(token, false)
92
- Airbrake.notify(e, parameters: { delivery_info: delivery_info, properties: properties, contents: contents, error: e.message }, environment_name: environment)
91
+ ::Banter::Notifier.notify(e, parameters: { delivery_info: delivery_info, properties: properties, contents: contents, error: e.message }, environment_name: environment)
93
92
  end
94
93
  end
95
94
 
96
95
  def notify_error(error, consumer)
97
96
  Banter::RabbitLogger.log(Logger::WARN, "Error with the message: #{error.message}: #{consumer}")
98
97
  Banter::RabbitLogger.log(Logger::WARN, "#{caller.inspect}")
99
- Airbrake.notify(error, parameters: { consumer: consumer, error: error.message }, environment_name: environment)
98
+ ::Banter::Notifier.notify(error, parameters: { consumer: consumer, error: error.message }, environment_name: environment)
100
99
  end
101
100
 
102
101
  def teardown
@@ -104,13 +103,14 @@ module Banter
104
103
  @consumer.cancel if @consumer.present?
105
104
  @connection.close if @connection.present?
106
105
  rescue => e
107
- Airbrake.notify(e, parameters: { error: e.message }, environment_name: environment)
106
+ ::Banter::Notifier.notify(e, parameters: { error: e.message }, environment_name: environment)
108
107
  end
109
108
  end
110
109
 
111
110
  def environment
112
111
  ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
113
112
  end
113
+
114
114
  end
115
115
  end
116
116
  end
@@ -1,7 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'celluloid/autostart'
3
3
  require 'celluloid/io'
4
- require 'awesome_print'
5
4
  require 'active_support/all'
6
5
  require 'optparse'
7
6
  require 'fileutils'
@@ -29,7 +28,6 @@ module Banter
29
28
 
30
29
  def start
31
30
  set_information
32
- register_workers
33
31
  start_workers
34
32
  handle_interrupts
35
33
  handle_teardown
@@ -37,16 +35,10 @@ module Banter
37
35
  stop_worker
38
36
  end
39
37
 
40
- def register_workers
41
- return unless Banter::Configuration.web_enabled
42
- BanterWorker.worker_started
43
- end
44
-
45
38
  private
46
39
 
47
40
  def handle_teardown
48
41
  ::Banter::RabbitLogger.log_service("all_services", "Starting shutdown of all services")
49
- unregister_current_worker
50
42
 
51
43
  workers.each do |worker|
52
44
  ::Banter::RabbitLogger.log_service("all_services", "Tearing down worker: #{worker.worker_class.name}")
@@ -59,11 +51,6 @@ module Banter
59
51
  end
60
52
  end
61
53
 
62
- def unregister_current_worker
63
- return unless Banter::Configuration.web_enabled
64
- BanterWorker.worker_stopped
65
- end
66
-
67
54
  def handle_interrupts
68
55
  thread = Thread.current
69
56
  interrupts = ["HUP", "INT", "QUIT", "ABRT", "TERM"]
@@ -1,3 +1,3 @@
1
1
  module Banter
2
- VERSION = "1.4.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'bunny'
3
+
4
+
5
+ describe Banter::Notifier do
6
+
7
+ describe "self.notify" do
8
+ before do
9
+ notifier
10
+ prehook
11
+ Banter::Configuration.application_name = "TestSuite"
12
+ subject
13
+ end
14
+
15
+ let(:error) { StandardError.new("TestStandardError") }
16
+ let(:hash_error) { { keyerr1: "value1err" } }
17
+ let(:prehook) { }
18
+
19
+ subject { ::Banter::Notifier.notify(error, hash_error) }
20
+ context "without a notification class" do
21
+ let(:notifier) { }
22
+ let(:prehook) {
23
+ allow(STDOUT).to receive(:puts).and_call_original
24
+ ::Banter::Configuration.notifier = Banter::Notifier::StdOutNotifier
25
+ }
26
+ it { expect(STDOUT).to have_received(:puts).with(/Error caught/)}
27
+
28
+ end
29
+
30
+ context "with a notification class" do
31
+ let(:notifier) {
32
+ Banter::Configuration.notifier = TestNotifier
33
+ }
34
+
35
+ it { expect(TestNotifier.instance.error).to eq(error) }
36
+ it { expect(TestNotifier.instance.hash).to eq(hash_error) }
37
+ end
38
+
39
+ end
40
+ end
@@ -1,6 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
-
4
3
  class TestSubscriber < Banter::Subscriber
5
4
  subscribe_to "some.test.key"
6
5
  end
@@ -27,35 +26,9 @@ describe Banter::Server::ClientQueueListener do
27
26
  let(:context_before) { }
28
27
  let(:validators) { [] }
29
28
  let(:banter_worker) { FactoryGirl.create(:banter_worker, process_name: 'test') }
30
- let(:enable_banter_web) {
31
- Banter::Configuration.web_enabled = true
32
- allow(BanterWorker).to receive(:current).and_return(banter_worker)
33
- }
34
29
  let!(:application_name) { "testapplication" }
35
- let(:banter_message) { BanterMessage.last }
36
30
  let(:subscriber_options) {{}}
37
31
 
38
- after(:each) { Banter::Configuration.web_enabled = false }
39
-
40
- def self.banter_message_fields_are_correct(status, error_message = nil)
41
- it { expect(BanterMessage.count).to eq 1 }
42
- it { expect(banter_message.subscriber_class).to eq('Klass') }
43
- it { expect(banter_message.queue_name).to eq("test.foo_#{application_name}") }
44
- it { expect(banter_message.subscribed_key).to eq('test.foo') }
45
- it { expect(banter_message.payload).to eq({ "hello" => "moto" }) }
46
- it { expect(banter_message.started_at.to_s).to eq(Time.now.to_s) }
47
- it { expect(banter_message.done_at.to_s).to eq(Time.now.to_s) }
48
- it { expect(banter_message.worker_id).to eq(BanterWorker.current.id) }
49
- it { expect(banter_message.status).to eq(status) }
50
- if error_message
51
- it { expect(banter_message.error_message).to eq(error_message) }
52
- it { expect(banter_message.error_backtrace).not_to be_blank }
53
- else
54
- it { expect(banter_message.error_message).to be_nil }
55
- it { expect(banter_message.error_backtrace).to be_nil }
56
- end
57
- end
58
-
59
32
  before do
60
33
  Banter::Configuration.application_name = application_name
61
34
  context_before
@@ -88,34 +61,17 @@ describe Banter::Server::ClientQueueListener do
88
61
  instance
89
62
  }
90
63
 
91
-
92
64
  before do
93
- subject.call unless respond_to? :no_call
65
+ safe_call unless respond_to? :no_call
94
66
  end
95
67
 
96
- context "banter web disabled" do
97
- context "test exception" do
98
- let(:no_call) { true }
99
- it { should_not raise_exception }
100
- end
101
-
102
- context "call" do
103
- it { expect(klass_instance).to have_received(:perform!).with(payload) }
104
- it { expect(BanterMessage.count).to eq(0) }
105
- end
68
+ context "test exception" do
69
+ let(:no_call) { true }
70
+ it { should_not raise_exception }
106
71
  end
107
72
 
108
- context "banter web enabled" do
109
- let(:context_before) { enable_banter_web }
110
-
111
- context "test exception" do
112
- let(:no_call) { true }
113
- it { should_not raise_exception }
114
- end
115
-
116
- context "call" do
117
- banter_message_fields_are_correct(BanterMessage::STATUS_SUCCESS)
118
- end
73
+ context "call" do
74
+ it { expect(klass_instance).to have_received(:perform!).with(payload) }
119
75
  end
120
76
 
121
77
  end
@@ -128,27 +84,31 @@ describe Banter::Server::ClientQueueListener do
128
84
  }
129
85
  instance
130
86
  }
87
+ let(:prehook) {}
131
88
 
132
- context "web disabled" do
133
- before do
134
- allow(Banter::RabbitLogger).to receive(:log)
135
- end
136
- it { should raise_exception }
137
- it { expect(BanterMessage.count).to eq(0) }
89
+ before do
90
+ prehook
91
+ allow(Banter::RabbitLogger).to receive(:log).and_call_original
92
+ safe_call
138
93
  end
139
94
 
140
- context "banter web enabled" do
141
- let(:context_before) { enable_banter_web }
95
+ context "without a notifier" do
96
+ let(:prehook) {
97
+ allow(STDOUT).to receive(:puts).and_call_original
98
+ }
99
+ it { expect(@raised_error).not_to be_nil }
100
+ end
142
101
 
143
- before do
144
- safe_call
145
- end
102
+ context "with a notifier" do
103
+ let(:prehook) {
104
+ Banter::Configuration.notifier = TestNotifier
105
+ allow(TestNotifier).to receive(:notify).and_call_original
106
+ }
146
107
 
147
- it { should raise_exception }
148
- it "should have called perform" do
149
- expect(klass_instance).to have_received(:perform!).with(payload)
150
- end
151
- banter_message_fields_are_correct(BanterMessage::STATUS_ERROR, 'test exception')
108
+ it { expect(@raised_error).not_to be_nil }
109
+ it { expect(TestNotifier).to have_received(:notify) }
110
+ it { expect(TestNotifier.instance.error.to_s).to match(/test exception/) }
111
+ it { expect(TestNotifier.instance.hash.keys).to match_array([:delivery_info, :envelope, :properties]) }
152
112
  end
153
113
  end
154
114
 
@@ -158,31 +118,23 @@ describe Banter::Server::ClientQueueListener do
158
118
  allow(instance).to receive(:perform!).and_raise(Banter::PayloadValidationError.new("validation failed"))
159
119
  instance
160
120
  }
161
-
162
121
  let(:result) { subject.call }
122
+ let(:prehook) {
123
+ Banter::Configuration.notifier = TestNotifier
124
+ allow(TestNotifier).to receive(:notify).and_call_original
125
+ }
126
+
163
127
 
164
128
  before do
129
+ prehook
165
130
  safe_call
166
131
  end
167
132
 
168
133
  let!(:validators) { [lambda { |payload| false }] }
169
- context "web disabled" do
170
- let(:context_before) { allow(Airbrake).to receive(:notify) }
171
- it { should raise_exception }
172
- it { expect(Airbrake).to have_received(:notify) }
173
- end
174
-
175
- context "web enabled" do
176
- let(:context_before) do
177
- allow(Airbrake).to receive(:notify)
178
- enable_banter_web
179
- end
180
-
181
- it { expect(Airbrake).to have_received(:notify) }
182
- it { should raise_exception }
183
- it { expect(klass_instance).to have_received(:perform!).with(payload) }
184
- banter_message_fields_are_correct(BanterMessage::STATUS_VALIDATION_FAILED, "validation failed")
185
- end
134
+ it { should raise_exception }
135
+ it { expect(TestNotifier).to have_received(:notify) }
136
+ it { expect(TestNotifier.instance.error.to_s).to match(/validation failed/) }
137
+ it { expect(TestNotifier.instance.hash.keys).to match_array([:delivery_info, :envelope, :properties]) }
186
138
  end
187
139
 
188
140
  context "reprocessing message" do