pacto 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec CHANGED
@@ -1,2 +1,4 @@
1
1
  --colour
2
2
  --require spec_helper
3
+ --pattern spec/unit/**/*_spec.rb
4
+ --require unit/spec_helper
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --require spec_helper
3
+ --pattern spec/integration/**/*_spec.rb
4
+ --require integration/spec_helper
data/Rakefile CHANGED
@@ -2,6 +2,15 @@ require "bundler/gem_tasks"
2
2
  require 'rspec/core/rake_task'
3
3
 
4
4
  if defined?(RSpec)
5
- RSpec::Core::RakeTask.new('spec')
6
- task :default => :spec
5
+ desc "Run unit tests"
6
+ task :spec do
7
+ abort unless system('rspec --option .rspec')
8
+ end
9
+
10
+ desc "Run integration tests"
11
+ task :integration do
12
+ abort unless system('rspec --option .rspec_integration')
13
+ end
14
+
15
+ task :default => [:spec, :integration]
7
16
  end
data/lib/pacto.rb CHANGED
@@ -15,15 +15,12 @@ require "pacto/response_adapter"
15
15
  require "pacto/response"
16
16
  require "pacto/instantiated_contract"
17
17
  require "pacto/contract"
18
+ require "pacto/contract_factory"
18
19
  require "pacto/file_pre_processor"
19
20
 
20
21
  module Pacto
21
22
  def self.build_from_file(contract_path, host, file_pre_processor=FilePreProcessor.new)
22
- contract_definition_expanded = file_pre_processor.process(File.read(contract_path))
23
- definition = JSON.parse(contract_definition_expanded)
24
- request = Request.new(host, definition["request"])
25
- response = Response.new(definition["response"])
26
- Contract.new(request, response)
23
+ ContractFactory.build_from_file(contract_path, host, file_pre_processor)
27
24
  end
28
25
 
29
26
  def self.register(name, contract)
@@ -0,0 +1,11 @@
1
+ module Pacto
2
+ class ContractFactory
3
+ def self.build_from_file(contract_path, host, file_pre_processor)
4
+ contract_definition_expanded = file_pre_processor.process(File.read(contract_path))
5
+ definition = JSON.parse(contract_definition_expanded)
6
+ request = Request.new(host, definition["request"])
7
+ response = Response.new(definition["response"])
8
+ Contract.new(request, response)
9
+ end
10
+ end
11
+ end
data/lib/pacto/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pacto
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -0,0 +1,25 @@
1
+ {
2
+ "request": {
3
+ "method": "GET",
4
+ "path": "/simple_contract.json",
5
+ "headers": {
6
+ "Accept": "application/json"
7
+ },
8
+ "params": {}
9
+ },
10
+
11
+ "response": {
12
+ "status": 200,
13
+ "headers": {
14
+ "Content-Type": "application/json"
15
+ },
16
+ "body": {
17
+ "type": "object",
18
+ "properties": {
19
+ "message": {
20
+ "type": "string"
21
+ }
22
+ }
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,26 @@
1
+ describe "Pacto" do
2
+ before :all do
3
+ @server = DummyServer.new
4
+ @server.start
5
+ end
6
+
7
+ after :all do
8
+ @server.terminate
9
+ end
10
+
11
+ let(:contract_path) { 'spec/integration/data/simple_contract.json' }
12
+ let(:end_point_address) { 'http://localhost:8000' }
13
+
14
+ it "validates a contract against a server" do
15
+ WebMock.allow_net_connect!
16
+ contract = Pacto.build_from_file(contract_path, end_point_address)
17
+ contract.validate.should == []
18
+ end
19
+
20
+ pending "generates a mocked response based on a contract specification" do
21
+ contract = Pacto.build_from_file(contract_path, end_point_address)
22
+ Pacto.register('my_contract', contract)
23
+ Pacto.use('my_contract')
24
+
25
+ end
26
+ end
@@ -0,0 +1 @@
1
+ require_relative 'utils/dummy_server'
@@ -0,0 +1,34 @@
1
+ require 'webrick'
2
+
3
+ class Servlet < WEBrick::HTTPServlet::AbstractServlet
4
+ def initialize(server, json)
5
+ super(server)
6
+ @json = json
7
+ end
8
+
9
+ def do_GET(request, response)
10
+ response.status = 200
11
+ response['Content-Type'] = 'application/json'
12
+ response.body = @json
13
+ end
14
+ end
15
+
16
+ class DummyServer
17
+ def initialize
18
+ @server = WEBrick::HTTPServer.new :Port => 8000,
19
+ :AccessLog => [],
20
+ :Logger => WEBrick::Log::new("/dev/null", 7)
21
+ @server.mount "/simple_contract.json", Servlet, '{"message": "Hello World!"}'
22
+ end
23
+
24
+ def start
25
+ @pid = fork do
26
+ trap 'INT' do @server.shutdown end
27
+ @server.start
28
+ end
29
+ end
30
+
31
+ def terminate
32
+ Process.kill('INT', @pid)
33
+ end
34
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1 @@
1
- require 'coveralls'
2
- Coveralls.wear!
3
-
4
1
  require 'pacto'
File without changes
@@ -0,0 +1,22 @@
1
+ module Pacto
2
+ describe ContractFactory do
3
+ let(:host) { 'http://localhost' }
4
+ let(:contract_name) { 'contract' }
5
+ let(:contract_path) { File.join('spec', 'unit', 'data', "#{contract_name}.json") }
6
+ let(:file_pre_processor) { double('file_pre_processor') }
7
+ let(:file_content) { File.read(contract_path)}
8
+
9
+ describe '.build_from_file' do
10
+ it 'should build a contract given a JSON file path and a host' do
11
+ file_pre_processor.stub(:process).and_return(file_content)
12
+ described_class.build_from_file(contract_path, host, file_pre_processor).
13
+ should be_a_kind_of(Pacto::Contract)
14
+ end
15
+
16
+ it 'should process files using File Pre Processor module' do
17
+ file_pre_processor.should_receive(:process).with(file_content).and_return(file_content)
18
+ described_class.build_from_file(contract_path, host, file_pre_processor)
19
+ end
20
+ end
21
+ end
22
+ end
File without changes
File without changes
@@ -1,5 +1,4 @@
1
1
  describe Pacto do
2
- let(:host) { 'http://localhost' }
3
2
  let(:contract_name) { 'contract' }
4
3
  let(:contract) { double('contract') }
5
4
 
@@ -24,19 +23,19 @@ describe Pacto do
24
23
  end
25
24
 
26
25
  describe '.build_from_file' do
27
- let(:contract_path) { File.join('spec', 'data', "#{contract_name}.json") }
28
- let(:file_pre_processor) { double('file_pre_processor') }
29
- let(:file_content) {File.read(contract_path)}
30
-
31
- it 'should build a contract given a JSON file path and a host' do
32
- file_pre_processor.stub(:process).and_return(file_content)
33
- described_class.build_from_file(contract_path, host, file_pre_processor).
34
- should be_a_kind_of(Pacto::Contract)
26
+ let(:path) { 'contract/path' }
27
+ let(:host) { 'http://localhost' }
28
+ let(:file_pre_processor) { double('file_pre_processor') }
29
+ let(:instantiated_contract) { double(:instantiated_contract) }
30
+
31
+ it 'delegates to ContractFactory' do
32
+ Pacto::ContractFactory.should_receive(:build_from_file).with(path, host, file_pre_processor)
33
+ described_class.build_from_file(path, host, file_pre_processor)
35
34
  end
36
-
37
- it 'should process files using File Pre Processor module' do
38
- file_pre_processor.should_receive(:process).with(file_content).and_return(file_content)
39
- described_class.build_from_file(contract_path, host, file_pre_processor)
35
+
36
+ it 'returns whatever the factory returns' do
37
+ Pacto::ContractFactory.stub(:build_from_file => instantiated_contract)
38
+ described_class.build_from_file(path, host, file_pre_processor).should == instantiated_contract
40
39
  end
41
40
  end
42
41
 
File without changes
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pacto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-14 00:00:00.000000000 Z
12
+ date: 2013-08-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: webmock
@@ -229,6 +229,7 @@ extra_rdoc_files: []
229
229
  files:
230
230
  - .gitignore
231
231
  - .rspec
232
+ - .rspec_integration
232
233
  - .travis.yml
233
234
  - Gemfile
234
235
  - Guardfile
@@ -238,6 +239,7 @@ files:
238
239
  - TODO.md
239
240
  - lib/pacto.rb
240
241
  - lib/pacto/contract.rb
242
+ - lib/pacto/contract_factory.rb
241
243
  - lib/pacto/extensions.rb
242
244
  - lib/pacto/file_pre_processor.rb
243
245
  - lib/pacto/instantiated_contract.rb
@@ -247,16 +249,22 @@ files:
247
249
  - lib/pacto/response_adapter.rb
248
250
  - lib/pacto/version.rb
249
251
  - pacto.gemspec
250
- - spec/data/contract.json
251
- - spec/pacto/contract_spec.rb
252
- - spec/pacto/extensions_spec.rb
253
- - spec/pacto/file_pre_processor_spec.rb
254
- - spec/pacto/instantiated_contract_spec.rb
255
- - spec/pacto/pacto_spec.rb
256
- - spec/pacto/request_spec.rb
257
- - spec/pacto/response_adapter_spec.rb
258
- - spec/pacto/response_spec.rb
252
+ - spec/integration/data/simple_contract.json
253
+ - spec/integration/e2e_spec.rb
254
+ - spec/integration/spec_helper.rb
255
+ - spec/integration/utils/dummy_server.rb
259
256
  - spec/spec_helper.rb
257
+ - spec/unit/data/contract.json
258
+ - spec/unit/pacto/contract_factory_spec.rb
259
+ - spec/unit/pacto/contract_spec.rb
260
+ - spec/unit/pacto/extensions_spec.rb
261
+ - spec/unit/pacto/file_pre_processor_spec.rb
262
+ - spec/unit/pacto/instantiated_contract_spec.rb
263
+ - spec/unit/pacto/pacto_spec.rb
264
+ - spec/unit/pacto/request_spec.rb
265
+ - spec/unit/pacto/response_adapter_spec.rb
266
+ - spec/unit/pacto/response_spec.rb
267
+ - spec/unit/spec_helper.rb
260
268
  homepage: https://github.com/thoughtworks/pacto
261
269
  licenses:
262
270
  - MIT
@@ -283,13 +291,19 @@ signing_key:
283
291
  specification_version: 3
284
292
  summary: Consumer-Driven Contracts implementation
285
293
  test_files:
286
- - spec/data/contract.json
287
- - spec/pacto/contract_spec.rb
288
- - spec/pacto/extensions_spec.rb
289
- - spec/pacto/file_pre_processor_spec.rb
290
- - spec/pacto/instantiated_contract_spec.rb
291
- - spec/pacto/pacto_spec.rb
292
- - spec/pacto/request_spec.rb
293
- - spec/pacto/response_adapter_spec.rb
294
- - spec/pacto/response_spec.rb
294
+ - spec/integration/data/simple_contract.json
295
+ - spec/integration/e2e_spec.rb
296
+ - spec/integration/spec_helper.rb
297
+ - spec/integration/utils/dummy_server.rb
295
298
  - spec/spec_helper.rb
299
+ - spec/unit/data/contract.json
300
+ - spec/unit/pacto/contract_factory_spec.rb
301
+ - spec/unit/pacto/contract_spec.rb
302
+ - spec/unit/pacto/extensions_spec.rb
303
+ - spec/unit/pacto/file_pre_processor_spec.rb
304
+ - spec/unit/pacto/instantiated_contract_spec.rb
305
+ - spec/unit/pacto/pacto_spec.rb
306
+ - spec/unit/pacto/request_spec.rb
307
+ - spec/unit/pacto/response_adapter_spec.rb
308
+ - spec/unit/pacto/response_spec.rb
309
+ - spec/unit/spec_helper.rb