contentful-webhook-listener 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 382b718018bfcb1215a64a6aeb222c7d54bf9417
4
- data.tar.gz: ed7e2df879c2878252b5fb56722bbc69408fba49
3
+ metadata.gz: c8b4a6280628a73f9bbd6ca719228b5cbcbc7398
4
+ data.tar.gz: 92e8e9344d9f42c84ebea75180744f94d21fede4
5
5
  SHA512:
6
- metadata.gz: e5eccc8b497c478a1ee20e18abd252bca1b603b5e694357fe9008cad6ccc76d1043a1bba52166a4b453170ff85ff1109e14f819dcb2ff64800639eff64e77302
7
- data.tar.gz: 29ef8f044881f404f0c1cdc870a9c600be03b5095798f93005a50265001641c6917fc2be0ef18d3b269ec75d66192763137194171c1c1a463eeb504df3c0b590
6
+ metadata.gz: 7e7b67146a95642319490f8664f56828063ed9d7bf79ba92977fbeec9784f86c4d1496aa07134d08332d0dc5fa6bf6192047704387f68bb65bb05fb6b4dc12bf
7
+ data.tar.gz: b659e728a75d5ca1f2addf41796f7da3e68c5be2e2fc920cb0cbfd8446833afd58c3d57836dd6a8837f86771b8c1ca69176f3f9b5a9cd84738ec0345909e6893
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v0.1.0
6
+ ### Added
7
+ * Full Spec Coverage
8
+
9
+ ### Changed
10
+ * Small refactor on Server
11
+
5
12
  ## v0.0.4
6
13
  ### Added
7
14
  * `logger` now available from Controllers
data/Rakefile CHANGED
@@ -1,3 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
- task default: :install
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec) do |t|
6
+ t.rspec_opts = '--format documentation --color'
7
+ end
8
+ task default: :spec
9
+ rescue LoadError
10
+ end
11
+
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
23
24
  end
@@ -34,7 +34,7 @@ module Contentful
34
34
  Thread.new { Server.new(config).start }
35
35
  end
36
36
 
37
- attr_reader :port, :address, :endpoints, :logger
37
+ attr_reader :port, :address, :endpoints, :logger, :server
38
38
 
39
39
  def initialize(config = {})
40
40
  @port = config.fetch(:port, DEFAULT_PORT)
@@ -49,15 +49,16 @@ module Contentful
49
49
  def start
50
50
  logger.info "Webhook server starting at: http://#{@address}:#{@port}"
51
51
 
52
+ @server = create_server
52
53
  mount_endpoints
53
54
 
54
- server.start
55
+ @server.start
55
56
  end
56
57
 
57
58
  protected
58
59
 
59
- def server
60
- @server ||= WEBrick::HTTPServer.new(
60
+ def create_server
61
+ WEBrick::HTTPServer.new(
61
62
  Port: @port,
62
63
  BindAddress: @address,
63
64
  AccessLog: [],
@@ -68,7 +69,7 @@ module Contentful
68
69
  def mount_endpoints
69
70
  logger.info 'Available Endpoints:'
70
71
  @endpoints.each do |endpoint_config|
71
- server.mount(
72
+ @server.mount(
72
73
  endpoint_config[:endpoint],
73
74
  endpoint_config[:controller],
74
75
  @logger,
@@ -2,7 +2,7 @@ module Contentful
2
2
  module Webhook
3
3
  # Webhook Listener
4
4
  module Listener
5
- VERSION = '0.0.4'
5
+ VERSION = '0.1.0'
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Contentful::Webhook::Listener::Controllers::Base do
4
+ let(:server) { MockServer.new }
5
+ let(:logger) { Contentful::Webhook::Listener::Support::NullLogger.new }
6
+ let(:base) { Contentful::Webhook::Listener::Controllers::Base.new server, logger }
7
+
8
+ describe "instance methods" do
9
+ [:do_GET, :do_POST, :respond].each do |name|
10
+ it "##{name} spawn a background job" do
11
+ expect(Thread).to receive(:new)
12
+
13
+ base.send(name, MockRequest.new, MockResponse.new)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ class Contentful::Webhook::Listener::Controllers::Wait
4
+ @@sleeping = false
5
+
6
+ def sleep(time)
7
+ @@sleeping = true
8
+ end
9
+
10
+ def self.sleeping
11
+ value = @@sleeping
12
+ @@sleeping = false
13
+ value
14
+ end
15
+ end
16
+
17
+ describe Contentful::Webhook::Listener::Controllers::Wait do
18
+ let(:server) { MockServer.new }
19
+ let(:logger) { Contentful::Webhook::Listener::Support::NullLogger.new }
20
+ let(:timeout) { 10 }
21
+ let(:wait) { Contentful::Webhook::Listener::Controllers::Wait.new server, logger, timeout }
22
+
23
+ describe "instance methods" do
24
+ [:do_GET, :do_POST, :respond].each do |name|
25
+ it "##{name} spawn a background job" do
26
+ expect(Thread).to receive(:new)
27
+
28
+ wait.send(name, MockRequest.new, MockResponse.new)
29
+ end
30
+
31
+ # This spec requires to read/erase a Class Variable
32
+ # because RSpec doesn't know how to test within spawned Threads
33
+ it "##{name} wait on background" do
34
+ wait.send(name, MockRequest.new, MockResponse.new)
35
+
36
+ sleep(0.1) # Wait for Thread to actually run
37
+
38
+ expect(wait.class.sleeping).to be_truthy
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe Contentful::Webhook::Listener::Server do
4
+ let(:server) { Contentful::Webhook::Listener::Server.new }
5
+
6
+ describe 'class methods' do
7
+ describe '::start' do
8
+ it 'spawns a brackground thread' do
9
+ expect(Thread).to receive(:new)
10
+
11
+ Contentful::Webhook::Listener::Server.start
12
+ end
13
+ end
14
+ end
15
+
16
+ describe 'instance methods' do
17
+ describe "#start" do
18
+ before do
19
+ expect_any_instance_of(WEBrick::HTTPServer).to receive(:start)
20
+ expect(WEBrick::Utils).to receive(:create_listeners) { [] } # Mock TCP Port binding
21
+ end
22
+
23
+ it "logs server messages" do
24
+ expect(server.logger).to receive(:info).once.ordered.with("Webhook server starting at: http://#{server.address}:#{server.port}")
25
+ expect(server.logger).to receive(:info).once.ordered.with("Available Endpoints:")
26
+ expect(server.logger).to receive(:info).once.ordered.with("\t/receive - Controller: Contentful::Webhook::Listener::Controllers::Wait - Timeout: 300")
27
+
28
+ server.start
29
+ end
30
+
31
+ it "mounts endpoints" do
32
+ expect_any_instance_of(WEBrick::HTTPServer).to receive(:mount).with(
33
+ "/receive",
34
+ Contentful::Webhook::Listener::Controllers::Wait,
35
+ Contentful::Webhook::Listener::Support::NullLogger,
36
+ 300
37
+ )
38
+
39
+ server.start
40
+ end
41
+ end
42
+ end
43
+
44
+ describe "defaults" do
45
+ it ":port" do
46
+ expect(server.port).to eq 5678
47
+ end
48
+
49
+ it ":address" do
50
+ expect(server.address).to eq "0.0.0.0"
51
+ end
52
+
53
+ it ":endpoints" do
54
+ expected = [
55
+ {
56
+ endpoint: '/receive',
57
+ controller: Contentful::Webhook::Listener::Controllers::Wait,
58
+ timeout: 300
59
+ }
60
+ ]
61
+
62
+ expect(server.endpoints).to match_array expected
63
+ end
64
+
65
+ it ":logger" do
66
+ expect(server.logger).to be_a Contentful::Webhook::Listener::Support::NullLogger
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Contentful::Webhook::Listener::Support::NullLogger do
4
+ let(:logger) { Contentful::Webhook::Listener::Support::NullLogger.new }
5
+
6
+ describe "instance methods" do
7
+ [:info, :debug, :warn, :error, :write].each do |name|
8
+ it "##{name} returns nil" do
9
+ expect(logger.send(name, "foo")).to eq nil
10
+ end
11
+
12
+ it "##{name} doesn't output to STDOUT" do
13
+ expect { logger.send(name, "foo") }.to_not output("foo").to_stdout
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ $LOAD_PATH.unshift File.expand_path('lib', __FILE__)
2
+
3
+ require 'contentful/webhook/listener'
4
+ require 'rspec'
5
+ require 'rspec/mocks'
6
+
7
+ class MockServer
8
+ def [](key)
9
+ nil
10
+ end
11
+ end
12
+
13
+ class MockRequest
14
+ end
15
+
16
+ class MockResponse
17
+ attr_accessor :status, :body
18
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contentful-webhook-listener
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Contentful GmbH (David Litvak Bruno)
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: A Simple HTTP Webserver with pluggable behavior for listening to Contentful
42
56
  API Webhooks
43
57
  email:
@@ -64,6 +78,11 @@ files:
64
78
  - lib/contentful/webhook/listener/support.rb
65
79
  - lib/contentful/webhook/listener/support/null_logger.rb
66
80
  - lib/contentful/webhook/listener/version.rb
81
+ - spec/contentful/webhook/listener/controllers/base_spec.rb
82
+ - spec/contentful/webhook/listener/controllers/wait_spec.rb
83
+ - spec/contentful/webhook/listener/server_spec.rb
84
+ - spec/contentful/webhook/listener/support/null_logger_spec.rb
85
+ - spec/spec_helper.rb
67
86
  homepage: https://github.com/contentful/contentful-webhook-listener.rb
68
87
  licenses:
69
88
  - MIT
@@ -89,4 +108,9 @@ signing_key:
89
108
  specification_version: 4
90
109
  summary: A Simple HTTP Webserver with pluggable behavior for listening to Contentful
91
110
  API Webhooks
92
- test_files: []
111
+ test_files:
112
+ - spec/contentful/webhook/listener/controllers/base_spec.rb
113
+ - spec/contentful/webhook/listener/controllers/wait_spec.rb
114
+ - spec/contentful/webhook/listener/server_spec.rb
115
+ - spec/contentful/webhook/listener/support/null_logger_spec.rb
116
+ - spec/spec_helper.rb