pact 1.0.39 → 1.1.0.rc1

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 (44) hide show
  1. data/CHANGELOG.md +1 -17
  2. data/Gemfile.lock +2 -2
  3. data/README.md +18 -27
  4. data/bethtest.rb +30 -0
  5. data/documentation/faq.md +6 -36
  6. data/lib/pact/configuration.rb +0 -4
  7. data/lib/pact/consumer/consumer_contract_builder.rb +1 -1
  8. data/lib/pact/consumer_contract/active_support_support.rb +0 -4
  9. data/lib/pact/matchers/diff_decorator.rb +1 -1
  10. data/lib/pact/matchers/index_not_found.rb +12 -3
  11. data/lib/pact/matchers/matchers.rb +2 -1
  12. data/lib/pact/matchers/nested_json_diff_decorator.rb +48 -0
  13. data/lib/pact/matchers/plus_minus_diff_decorator.rb +92 -0
  14. data/lib/pact/matchers/unexpected_index.rb +13 -3
  15. data/lib/pact/matchers/unexpected_key.rb +12 -3
  16. data/lib/pact/provider/configuration.rb +31 -0
  17. data/lib/pact/provider/matchers.rb +4 -4
  18. data/lib/pact/provider/pact_spec_runner.rb +28 -35
  19. data/lib/pact/provider/print_missing_provider_states.rb +2 -2
  20. data/lib/pact/provider/rspec.rb +7 -16
  21. data/lib/pact/provider/world.rb +0 -6
  22. data/lib/pact/shared/key_not_found.rb +16 -3
  23. data/lib/pact/tasks/task_helper.rb +18 -15
  24. data/lib/pact/templates/provider_state.erb +1 -0
  25. data/lib/pact/version.rb +1 -1
  26. data/spec/lib/pact/matchers/matchers_spec.rb +9 -0
  27. data/spec/lib/pact/matchers/nested_json_diff_decorator_spec.rb +48 -0
  28. data/spec/lib/pact/matchers/plus_minus_diff_decorator_spec.rb +186 -0
  29. data/spec/lib/pact/provider/configuration_spec.rb +131 -102
  30. data/spec/lib/pact/verification_task_spec.rb +10 -0
  31. data/spec/support/pact_helper.rb +2 -5
  32. data/spec/support/stubbing.json +1 -1
  33. data/spec/support/test_app_fail.json +2 -29
  34. data/spec/support/test_app_pass.json +4 -4
  35. data/tasks/pact-test.rake +0 -8
  36. metadata +13 -22
  37. data/lib/pact/matchers/difference_indicator.rb +0 -26
  38. data/lib/pact/provider/rspec/formatter.rb +0 -63
  39. data/lib/pact/provider/rspec/silent_json_formatter.rb +0 -18
  40. data/spec/lib/pact/matchers/index_not_found_spec.rb +0 -21
  41. data/spec/lib/pact/matchers/unexpected_index_spec.rb +0 -20
  42. data/spec/lib/pact/matchers/unexpected_key_spec.rb +0 -20
  43. data/spec/lib/pact/shared/key_not_found_spec.rb +0 -20
  44. data/spec/lib/pact/tasks/task_helper_spec.rb +0 -80
@@ -88,6 +88,16 @@ module Pact
88
88
  end
89
89
  end
90
90
 
91
+ context 'when one or more specs fail' do
92
+
93
+ let(:exit_code) {1}
94
+
95
+ it 'raises an exception' do
96
+ $stderr.should_receive(:puts) #Confusing if this shows on the screen!
97
+ expect { Rake::Task[@task_name].execute }.to raise_error RuntimeError
98
+ end
99
+
100
+ end
91
101
  end
92
102
  end
93
103
  end
@@ -28,16 +28,12 @@ module Pact
28
28
  end
29
29
  end
30
30
 
31
- Pact.set_up do
32
- WEATHER ||= {}
33
- end
34
31
 
35
32
  #one with a top level consumer
36
33
  Pact.provider_states_for 'some-test-consumer' do
37
-
38
34
  provider_state "the weather is sunny" do
39
35
  set_up do
40
-
36
+ WEATHER ||= {}
41
37
  WEATHER[:current_state] = 'sunny'
42
38
  end
43
39
  end
@@ -46,6 +42,7 @@ module Pact
46
42
  #one without a top level consumer
47
43
  Pact.provider_state "the weather is cloudy" do
48
44
  set_up do
45
+ WEATHER ||= {}
49
46
  WEATHER[:current_state] = 'cloudy'
50
47
  end
51
48
  end
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "interactions": [
9
9
  {
10
- "description": "a test request",
10
+ "description": "A test request",
11
11
  "request": {
12
12
  "method": "get",
13
13
  "path": "/"
@@ -4,10 +4,10 @@
4
4
  },
5
5
  "provider": {
6
6
  "name": "an unknown provider"
7
- },
7
+ },
8
8
  "interactions": [
9
9
  {
10
- "description": "a test request",
10
+ "description": "A test request",
11
11
  "request": {
12
12
  "method": "get",
13
13
  "path": "/weather",
@@ -20,33 +20,6 @@
20
20
 
21
21
  },
22
22
  "provider_state": "the weather is cloudy"
23
- },{
24
- "description": "another test request",
25
- "request": {
26
- "method": "get",
27
- "path": "/weather",
28
- "query": ""
29
- },
30
- "response": {
31
- "status": 200,
32
- "headers" : {"Content-type": "application/json"},
33
- "body": {"message" : "this is not the weather you are looking for"}
34
-
35
- }
36
- },{
37
- "description": "another test request",
38
- "provider_state": "a missing provider state",
39
- "request": {
40
- "method": "get",
41
- "path": "/weather",
42
- "query": ""
43
- },
44
- "response": {
45
- "status": 200,
46
- "headers" : {"Content-type": "application/json"},
47
- "body": {"message" : "this is not the weather you are looking for"}
48
-
49
- }
50
23
  }
51
24
  ]
52
25
  }
@@ -4,10 +4,10 @@
4
4
  },
5
5
  "provider": {
6
6
  "name": "an unknown provider"
7
- },
7
+ },
8
8
  "interactions": [
9
9
  {
10
- "description": "a test request",
10
+ "description": "A test request",
11
11
  "request": {
12
12
  "method": "get",
13
13
  "path": "/weather",
@@ -21,7 +21,7 @@
21
21
  "provider_state": "the weather is sunny"
22
22
  },
23
23
  {
24
- "description": "a test request for text",
24
+ "description": "A test request for text",
25
25
  "request": {
26
26
  "method": "get",
27
27
  "path": "/sometext",
@@ -33,6 +33,6 @@
33
33
  "headers" : {"Content-type": "text/plain"},
34
34
  "body": "some text"
35
35
  }
36
- }
36
+ }
37
37
  ]
38
38
  }
@@ -8,13 +8,6 @@ Pact::VerificationTask.new(:stubbing_using_allow) do | pact |
8
8
  pact.uri './spec/support/stubbing.json', :pact_helper => './spec/support/stubbing_using_allow.rb'
9
9
  end
10
10
 
11
- Pact::VerificationTask.new(:pass) do | pact |
12
- pact.uri './spec/support/test_app_pass.json'
13
- end
14
-
15
- Pact::VerificationTask.new(:fail) do | pact |
16
- pact.uri './spec/support/test_app_fail.json'
17
- end
18
11
 
19
12
  namespace :pact do
20
13
 
@@ -27,7 +20,6 @@ namespace :pact do
27
20
  silent = true
28
21
  puts "Running task pact:tests"
29
22
  # Run these specs silently, otherwise expected failures will be written to stdout and look like unexpected failures.
30
- Pact.configuration.output_stream = StringIO.new if silent
31
23
 
32
24
  result = Pact::Provider::PactSpecRunner.new([{ uri: './spec/support/test_app_pass.json' }], silent: silent).run
33
25
  fail 'Expected pact to pass' unless (result == 0)
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.39
5
- prerelease:
4
+ version: 1.1.0.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - James Fraser
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-04-07 00:00:00.000000000 Z
16
+ date: 2014-03-20 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: randexp
@@ -295,6 +295,7 @@ files:
295
295
  - LICENSE.txt
296
296
  - README.md
297
297
  - Rakefile
298
+ - bethtest.rb
298
299
  - bin/pact
299
300
  - config.ru
300
301
  - documentation/Testing with pact.png
@@ -361,9 +362,10 @@ files:
361
362
  - lib/pact/logging.rb
362
363
  - lib/pact/matchers.rb
363
364
  - lib/pact/matchers/diff_decorator.rb
364
- - lib/pact/matchers/difference_indicator.rb
365
365
  - lib/pact/matchers/index_not_found.rb
366
366
  - lib/pact/matchers/matchers.rb
367
+ - lib/pact/matchers/nested_json_diff_decorator.rb
368
+ - lib/pact/matchers/plus_minus_diff_decorator.rb
367
369
  - lib/pact/matchers/unexpected_index.rb
368
370
  - lib/pact/matchers/unexpected_key.rb
369
371
  - lib/pact/provider.rb
@@ -376,8 +378,6 @@ files:
376
378
  - lib/pact/provider/print_missing_provider_states.rb
377
379
  - lib/pact/provider/request.rb
378
380
  - lib/pact/provider/rspec.rb
379
- - lib/pact/provider/rspec/formatter.rb
380
- - lib/pact/provider/rspec/silent_json_formatter.rb
381
381
  - lib/pact/provider/state/provider_state.rb
382
382
  - lib/pact/provider/state/provider_state_configured_modules.rb
383
383
  - lib/pact/provider/state/provider_state_manager.rb
@@ -426,10 +426,9 @@ files:
426
426
  - spec/lib/pact/consumer_contract/interaction_spec.rb
427
427
  - spec/lib/pact/consumer_contract/request_spec.rb
428
428
  - spec/lib/pact/matchers/diff_decorator_spec.rb
429
- - spec/lib/pact/matchers/index_not_found_spec.rb
430
429
  - spec/lib/pact/matchers/matchers_spec.rb
431
- - spec/lib/pact/matchers/unexpected_index_spec.rb
432
- - spec/lib/pact/matchers/unexpected_key_spec.rb
430
+ - spec/lib/pact/matchers/nested_json_diff_decorator_spec.rb
431
+ - spec/lib/pact/matchers/plus_minus_diff_decorator_spec.rb
433
432
  - spec/lib/pact/provider/configuration_spec.rb
434
433
  - spec/lib/pact/provider/pact_helper_locator_spec.rb
435
434
  - spec/lib/pact/provider/pact_spec_runner_spec.rb
@@ -442,9 +441,7 @@ files:
442
441
  - spec/lib/pact/provider/world_spec.rb
443
442
  - spec/lib/pact/reification_spec.rb
444
443
  - spec/lib/pact/shared/dsl_spec.rb
445
- - spec/lib/pact/shared/key_not_found_spec.rb
446
444
  - spec/lib/pact/something_like_spec.rb
447
- - spec/lib/pact/tasks/task_helper_spec.rb
448
445
  - spec/lib/pact/term_spec.rb
449
446
  - spec/lib/pact/verification_task_spec.rb
450
447
  - spec/spec_helper.rb
@@ -479,16 +476,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
479
476
  version: '0'
480
477
  segments:
481
478
  - 0
482
- hash: 780584884635013301
479
+ hash: -3201059694268013519
483
480
  required_rubygems_version: !ruby/object:Gem::Requirement
484
481
  none: false
485
482
  requirements:
486
- - - ! '>='
483
+ - - ! '>'
487
484
  - !ruby/object:Gem::Version
488
- version: '0'
489
- segments:
490
- - 0
491
- hash: 780584884635013301
485
+ version: 1.3.1
492
486
  requirements: []
493
487
  rubyforge_project:
494
488
  rubygems_version: 1.8.23
@@ -523,10 +517,9 @@ test_files:
523
517
  - spec/lib/pact/consumer_contract/interaction_spec.rb
524
518
  - spec/lib/pact/consumer_contract/request_spec.rb
525
519
  - spec/lib/pact/matchers/diff_decorator_spec.rb
526
- - spec/lib/pact/matchers/index_not_found_spec.rb
527
520
  - spec/lib/pact/matchers/matchers_spec.rb
528
- - spec/lib/pact/matchers/unexpected_index_spec.rb
529
- - spec/lib/pact/matchers/unexpected_key_spec.rb
521
+ - spec/lib/pact/matchers/nested_json_diff_decorator_spec.rb
522
+ - spec/lib/pact/matchers/plus_minus_diff_decorator_spec.rb
530
523
  - spec/lib/pact/provider/configuration_spec.rb
531
524
  - spec/lib/pact/provider/pact_helper_locator_spec.rb
532
525
  - spec/lib/pact/provider/pact_spec_runner_spec.rb
@@ -539,9 +532,7 @@ test_files:
539
532
  - spec/lib/pact/provider/world_spec.rb
540
533
  - spec/lib/pact/reification_spec.rb
541
534
  - spec/lib/pact/shared/dsl_spec.rb
542
- - spec/lib/pact/shared/key_not_found_spec.rb
543
535
  - spec/lib/pact/something_like_spec.rb
544
- - spec/lib/pact/tasks/task_helper_spec.rb
545
536
  - spec/lib/pact/term_spec.rb
546
537
  - spec/lib/pact/verification_task_spec.rb
547
538
  - spec/spec_helper.rb
@@ -1,26 +0,0 @@
1
- require 'pact/consumer_contract/active_support_support'
2
-
3
- module Pact
4
- class DifferenceIndicator
5
-
6
- include ActiveSupportSupport
7
-
8
- def == other
9
- other.is_a? self.class
10
- end
11
-
12
- def eql? other
13
- self == other
14
- end
15
-
16
- def to_json options = {}
17
- remove_unicode as_json.to_json(options)
18
- end
19
-
20
- def as_json options = {}
21
- to_s
22
- end
23
-
24
- end
25
-
26
- end
@@ -1,63 +0,0 @@
1
- require 'pact/provider/print_missing_provider_states'
2
- require 'rspec/core/formatters'
3
- require 'colored'
4
-
5
- module Pact
6
- module Provider
7
- module RSpec
8
- class Formatter < ::RSpec::Core::Formatters::DocumentationFormatter
9
-
10
-
11
- def dump_commands_to_rerun_failed_examples
12
- return if failed_examples.empty?
13
-
14
- print_rerun_commands
15
- print_failure_message
16
- print_missing_provider_states
17
-
18
- end
19
-
20
- def print_rerun_commands
21
- output.puts("\n")
22
- interaction_failure_messages.each do | message |
23
- output.puts(message)
24
- end
25
- end
26
-
27
- def print_missing_provider_states
28
- PrintMissingProviderStates.call Pact.world.provider_states.missing_provider_states, output
29
- end
30
-
31
- def interaction_failure_messages
32
- failed_examples.collect do |example|
33
- interaction_failure_message_for example
34
- end.uniq
35
- end
36
-
37
- def interaction_failure_message_for example
38
- provider_state = example.metadata[:pact_interaction].provider_state
39
- description = example.metadata[:pact_interaction].description
40
- pactfile_uri = example.metadata[:pactfile_uri]
41
- example_description = example.metadata[:pact_interaction_example_description]
42
- failure_color("rake pact:verify:at[#{pactfile_uri}] PACT_DESCRIPTION=\"#{description}\" PACT_PROVIDER_STATE=\"#{provider_state}\"") + " " + detail_color("# #{example_description}")
43
- end
44
-
45
- def print_failure_message
46
- output.puts failure_message
47
- end
48
-
49
- def failure_message
50
-
51
- "\n" + "For assistance debugging failures, please note:".underline.yellow + "\n\n" +
52
- "The pact files have been stored locally in the following temp directory:\n #{Pact.configuration.tmp_dir}\n\n" +
53
- "The requests and responses are logged in the following log file:\n #{Pact.configuration.log_path}\n\n"
54
- end
55
-
56
- end
57
-
58
- end
59
-
60
- end
61
- end
62
-
63
-
@@ -1,18 +0,0 @@
1
- require 'rspec/core/formatters'
2
-
3
- module Pact
4
- module Provider
5
- module RSpec
6
- class SilentJsonFormatter < ::RSpec::Core::Formatters::JsonFormatter
7
-
8
- def initialize stream
9
- # Don't want to display this to the screen,
10
- # not sure how else to set a custom stream for a particular formatter
11
- # Store a reference to this so it can be inspected afterwards.
12
- super(Pact.world.json_formatter_stream)
13
- end
14
-
15
- end
16
- end
17
- end
18
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/matchers/index_not_found'
3
-
4
- module Pact
5
- describe IndexNotFound do
6
-
7
- describe "#as_json" do
8
- it "returns a string representation of the object" do
9
- expect(subject.as_json).to eq subject.to_s
10
- end
11
- end
12
-
13
- describe "#to_json" do
14
- it "serialises the object to JSON" do
15
- expect(subject.to_json).to eq "\"#{subject.to_s}\""
16
- end
17
- end
18
-
19
- end
20
-
21
- end
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/matchers/unexpected_index'
3
-
4
- module Pact
5
- describe UnexpectedIndex do
6
-
7
- describe "#as_json" do
8
- it "returns a string representation of the object" do
9
- expect(subject.as_json).to eq subject.to_s
10
- end
11
- end
12
-
13
- describe "#to_json" do
14
- it "serialises the object to JSON" do
15
- expect(subject.to_json).to eq "\"#{subject.to_s}\""
16
- end
17
- end
18
-
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/matchers/unexpected_key'
3
-
4
- module Pact
5
- describe UnexpectedKey do
6
-
7
- describe "#as_json" do
8
- it "returns a string representation of the object" do
9
- expect(subject.as_json).to eq subject.to_s
10
- end
11
- end
12
-
13
- describe "#to_json" do
14
- it "serialises the object to JSON" do
15
- expect(subject.to_json).to eq "\"#{subject.to_s}\""
16
- end
17
- end
18
-
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/shared/key_not_found'
3
-
4
- module Pact
5
- describe KeyNotFound do
6
-
7
- describe "#as_json" do
8
- it "returns a string representation of the object" do
9
- expect(subject.as_json).to eq subject.to_s
10
- end
11
- end
12
-
13
- describe "#to_json" do
14
- it "serialises the object to JSON" do
15
- expect(subject.to_json).to eq "\"#{subject.to_s}\""
16
- end
17
- end
18
-
19
- end
20
- end