pact 1.1.0 → 1.1.1

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 (66) hide show
  1. data/CHANGELOG.md +31 -20
  2. data/Gemfile.lock +12 -12
  3. data/README.md +32 -16
  4. data/Rakefile +3 -3
  5. data/documentation/README.md +1 -0
  6. data/documentation/development-workflow.md +22 -0
  7. data/documentation/faq.md +8 -0
  8. data/documentation/provider-states.md +2 -0
  9. data/documentation/troubleshooting.md +4 -0
  10. data/documentation/verifying-pacts.md +97 -0
  11. data/lib/pact/app.rb +98 -4
  12. data/lib/pact/consumer/rspec.rb +3 -2
  13. data/lib/pact/doc/doc_file.rb +4 -4
  14. data/lib/pact/doc/generator.rb +3 -3
  15. data/lib/pact/doc/interaction_view_model.rb +1 -0
  16. data/lib/pact/doc/markdown/{interactions_renderer.rb → consumer_contract_renderer.rb} +1 -1
  17. data/lib/pact/doc/markdown/generator.rb +2 -2
  18. data/lib/pact/matchers/unix_diff_formatter.rb +1 -1
  19. data/lib/pact/project_root.rb +7 -0
  20. data/lib/pact/provider.rb +0 -1
  21. data/lib/pact/provider/context.rb +0 -0
  22. data/lib/pact/provider/matchers/messages.rb +15 -13
  23. data/lib/pact/provider/pact_spec_runner.rb +21 -22
  24. data/lib/pact/provider/rspec.rb +22 -15
  25. data/lib/pact/provider/rspec/custom_options_file +0 -0
  26. data/lib/pact/provider/{matchers.rb → rspec/matchers.rb} +2 -1
  27. data/lib/pact/rspec.rb +20 -0
  28. data/lib/pact/shared/request.rb +1 -1
  29. data/lib/pact/tasks/task_helper.rb +18 -15
  30. data/lib/pact/tasks/verification_task.rb +26 -32
  31. data/lib/pact/version.rb +1 -1
  32. data/lib/tasks/pact.rake +5 -11
  33. data/spec/integration/pact/consumer_configuration_spec.rb +3 -3
  34. data/spec/lib/pact/app_spec.rb +47 -0
  35. data/spec/lib/pact/consumer/app_manager_spec.rb +1 -1
  36. data/spec/lib/pact/consumer/mock_service/interaction_list_spec.rb +3 -3
  37. data/spec/lib/pact/consumer/mock_service/verification_get_spec.rb +10 -2
  38. data/spec/lib/pact/consumer/mock_service_interaction_expectation_spec.rb +2 -2
  39. data/spec/lib/pact/consumer_contract/consumer_contract_spec.rb +1 -1
  40. data/spec/lib/pact/consumer_contract/interaction_spec.rb +4 -4
  41. data/spec/lib/pact/consumer_contract/request_spec.rb +23 -23
  42. data/spec/lib/pact/doc/generator_spec.rb +4 -4
  43. data/spec/lib/pact/doc/markdown/{interactions_renderer_spec.rb → consumer_contract_renderer_spec.rb} +4 -4
  44. data/spec/lib/pact/matchers/unix_diff_formatter_spec.rb +8 -8
  45. data/spec/lib/pact/provider/configuration/configuration_extension_spec.rb +2 -2
  46. data/spec/lib/pact/provider/matchers/messages_spec.rb +17 -6
  47. data/spec/lib/pact/provider/rspec/formatter_spec.rb +3 -1
  48. data/spec/lib/pact/shared/dsl_spec.rb +1 -1
  49. data/spec/lib/pact/shared/request_spec.rb +8 -0
  50. data/spec/lib/pact/tasks/task_helper_spec.rb +39 -54
  51. data/spec/lib/pact/tasks/verification_task_spec.rb +75 -0
  52. data/spec/pact_specification/compliance-1.0.0.rb +47 -0
  53. data/spec/spec_helper.rb +2 -6
  54. data/spec/standalone/consumer_fail_test.rb +1 -0
  55. data/spec/standalone/consumer_pass_test.rb +1 -0
  56. data/spec/support/active_support_if_configured.rb +6 -0
  57. data/spec/support/pact_helper.rb +2 -1
  58. data/spec/support/shared_examples_for_request.rb +15 -4
  59. data/spec/support/spec_support.rb +3 -0
  60. data/spec/support/stubbing_using_allow.rb +1 -0
  61. data/spec/support/term.json +13 -1
  62. data/tasks/pact-test.rake +45 -26
  63. metadata +23 -13
  64. data/lib/pact/provider/client_project_pact_helper.rb +0 -4
  65. data/spec/lib/pact/provider/pact_spec_runner_spec.rb +0 -7
  66. data/spec/lib/pact/verification_task_spec.rb +0 -99
@@ -6,15 +6,11 @@ require 'pact'
6
6
  require 'webmock/rspec'
7
7
  require_relative 'support/factories'
8
8
  require_relative 'support/spec_support'
9
+ require 'pact/provider/rspec'
9
10
 
10
11
  WebMock.disable_net_connect!(allow_localhost: true)
11
12
 
12
- if ENV['LOAD_ACTIVE_SUPPORT']
13
- puts 'LOADING ACTIVE SUPPORT!!!! Hopefully it all still works'
14
- require 'active_support/all'
15
- require 'active_support'
16
- require 'active_support/json'
17
- end
13
+ require './spec/support/active_support_if_configured'
18
14
 
19
15
  RSpec.configure do | config |
20
16
  config.include(FakeFS::SpecHelpers, :fakefs => true)
@@ -1,4 +1,5 @@
1
1
  require 'pact/consumer/rspec'
2
+ require './spec/support/active_support_if_configured'
2
3
 
3
4
  Pact.service_consumer "Standalone Consumer" do
4
5
  has_pact_with "Standalone Provider" do
@@ -1,4 +1,5 @@
1
1
  require 'pact/consumer/rspec'
2
+ require './spec/support/active_support_if_configured'
2
3
 
3
4
  Pact.service_consumer "Standalone Consumer" do
4
5
  has_pact_with "Standalone Provider" do
@@ -0,0 +1,6 @@
1
+ if ENV['LOAD_ACTIVE_SUPPORT']
2
+ puts 'LOADING ACTIVE SUPPORT!!!! Hopefully it all still works'
3
+ require 'active_support/all'
4
+ require 'active_support'
5
+ require 'active_support/json'
6
+ end
@@ -1,6 +1,7 @@
1
+ # This is the pact_helper for rake pact:tests
1
2
  require 'json'
2
3
  require 'pact/provider/rspec'
3
- # pact_helper for rake pact:tests
4
+ require './spec/support/active_support_if_configured'
4
5
 
5
6
  module Pact
6
7
  module Test
@@ -59,10 +59,21 @@ shared_examples "a request" do
59
59
 
60
60
  subject { described_class.from_hash(raw_request) }
61
61
 
62
- its(:method) { should == 'get' }
63
- its(:path) { should == '/mallory' }
64
- its(:body) { should == 'hello mallory' }
65
- its(:query) { should eq 'query'}
62
+ it "extracts the method" do
63
+ expect(subject.method).to eq 'get'
64
+ end
65
+
66
+ it "extracts the path" do
67
+ expect(subject.path).to eq '/mallory'
68
+ end
69
+
70
+ it "extracts the body" do
71
+ expect(subject.body).to eq 'hello mallory'
72
+ end
73
+
74
+ it "extracts the query" do
75
+ expect(subject.query).to eq 'query'
76
+ end
66
77
 
67
78
  it "blows up if method is absent" do
68
79
  raw_request.delete 'method'
@@ -1,5 +1,8 @@
1
1
  module Pact
2
2
  module SpecSupport
3
+
4
+ extend self
5
+
3
6
  def remove_ansicolor string
4
7
  string.gsub(/\e\[(\d+)m/, '')
5
8
  end
@@ -1,5 +1,6 @@
1
1
  require 'pact/provider/rspec'
2
2
  require 'rspec/mocks'
3
+ require './spec/support/active_support_if_configured'
3
4
 
4
5
  class StubbedThing
5
6
  def self.stub_me
@@ -15,7 +15,19 @@
15
15
  },
16
16
  "response": {
17
17
  "status": 200,
18
- "headers" : {"Content-type": "application/json"},
18
+ "headers" : {
19
+ "Content-type": {
20
+ "json_class": "Pact::Term",
21
+ "data": {
22
+ "generate": "text/plain",
23
+ "matcher": {
24
+ "json_class": "Regexp",
25
+ "o": 0,
26
+ "s": "text"
27
+ }
28
+ }
29
+ }
30
+ },
19
31
  "body": {
20
32
  "message" : {
21
33
  "json_class": "Pact::Term",
@@ -1,7 +1,8 @@
1
- require 'pact/tasks'
1
+ require 'pact/tasks/verification_task'
2
+ require 'open3'
2
3
 
3
4
  Pact::VerificationTask.new(:stubbing) do | pact |
4
- pact.uri './spec/support/stubbing.json', :pact_helper => './spec/support/stubbing.rb'
5
+ pact.uri './spec/support/stubbing.json', :pact_helper => './spec/support/stubbing'
5
6
  end
6
7
 
7
8
  Pact::VerificationTask.new(:stubbing_using_allow) do | pact |
@@ -13,6 +14,7 @@ Pact::VerificationTask.new(:pass) do | pact |
13
14
  end
14
15
 
15
16
  Pact::VerificationTask.new(:fail) do | pact |
17
+ pact.uri './spec/support/test_app_pass.json'
16
18
  pact.uri './spec/support/test_app_fail.json'
17
19
  end
18
20
 
@@ -28,49 +30,66 @@ RSpec::Core::RakeTask.new('spec:standalone:pass') do | task |
28
30
  task.pattern = FileList["spec/standalone/**/*_pass_test.rb"]
29
31
  end
30
32
 
33
+ Pact::VerificationTask.new('test_app:pass') do | pact |
34
+ pact.uri './spec/support/test_app_pass.json'
35
+ end
36
+
37
+ Pact::VerificationTask.new('test_app:fail') do | pact |
38
+ pact.uri './spec/support/test_app_fail.json', pact_helper: './spec/support/pact_helper.rb'
39
+ end
40
+
41
+ task :bethtest => ['pact:tests:all','pact:tests:all:with_active_support']
42
+
31
43
  namespace :pact do
32
44
 
45
+ desc "All the verification tests"
46
+ task "tests:all" do
47
+ Rake::Task['pact:verify:stubbing'].execute
48
+ Rake::Task['pact:verify:stubbing_using_allow'].execute
49
+ Rake::Task['spec:standalone:pass'].execute
50
+ Rake::Task['pact:verify'].execute
51
+ Rake::Task['pact:verify:test_app:pass'].execute
52
+ Rake::Task['pact:test:fail'].execute
53
+ end
54
+
55
+ desc "All the verification tests with active support loaded"
56
+ task 'tests:all:with_active_support' => :set_active_support_on do
57
+ Rake::Task['pact:tests:all'].execute
58
+ end
59
+
33
60
  desc 'Runs pact tests against a sample application, testing failure and success.'
34
- task :tests => ['pact:verify:stubbing','pact:verify:stubbing_using_allow'] do
61
+ task 'test:fail' do
35
62
 
36
- require 'pact/provider/pact_spec_runner'
37
63
  require 'open3'
38
64
 
39
65
  silent = true
40
- puts "Running task pact:tests"
41
66
  # Run these specs silently, otherwise expected failures will be written to stdout and look like unexpected failures.
42
- Pact.configuration.output_stream = StringIO.new if silent
43
-
44
- result = Pact::Provider::PactSpecRunner.new([{ uri: './spec/support/test_app_pass.json' }], silent: silent).run
45
- fail 'Expected pact to pass' unless (result == 0)
46
-
47
- result = Pact::Provider::PactSpecRunner.new([{ uri: './spec/support/test_app_fail.json', pact_helper: './spec/support/pact_helper.rb' }], silent: silent).run
48
- fail 'Expected pact to fail' if (result == 0)
49
-
50
- expect_to_pass "bundle exec rake pact:verify"
51
- expect_to_pass "bundle exec rake pact:verify:at[./spec/support/test_app_pass.json]"
52
- expect_to_fail "bundle exec rake pact:verify:at[./spec/support/test_app_fail.json]"
53
- expect_to_fail "bundle exec rake spec:standalone:fail"
67
+ #Pact.configuration.output_stream = StringIO.new if silent
54
68
 
55
- puts "Task pact:tests completed succesfully."
69
+ expect_to_fail "bundle exec rake pact:verify:test_app:fail", with: [/Could not find one or more provider states/]
70
+ expect_to_fail "bundle exec rake spec:standalone:fail", with: [/Actual interactions do not match expected interactions/]
71
+ expect_to_fail "bundle exec rake pact:verify:term", with: [%r{"Content-type" with value /text/}]
56
72
  end
57
73
 
58
- def expect_to_fail command
59
- success = execute_command command
74
+ def expect_to_fail command, options = {}
75
+ success = execute_command command, options
60
76
  fail "Expected '#{command}' to fail" if success
61
77
  end
62
78
 
63
- def expect_to_pass command
64
- success = execute_command command
65
- fail "Expected '#{command}' to pass" unless success
66
- end
67
-
68
- def execute_command command
79
+ def execute_command command, options
69
80
  result = nil
70
81
  Open3.popen3(command) {|stdin, stdout, stderr, wait_thr|
71
82
  result = wait_thr.value
83
+ ensure_patterns_present(options, stdout, stderr) if options[:with]
72
84
  }
73
85
  result.success?
74
86
  end
75
87
 
88
+ def ensure_patterns_present options, stdout, stderr
89
+ output = stdout.read + stderr.read
90
+ options[:with].each do | pattern |
91
+ raise (::Term::ANSIColor.red("Could not find #{pattern.inspect} in output of #{command}").red + "\n\n#{output}") unless output =~ pattern
92
+ end
93
+ end
94
+
76
95
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-05-05 00:00:00.000000000 Z
16
+ date: 2014-06-02 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: randexp
@@ -302,6 +302,7 @@ files:
302
302
  - documentation/Testing with pact.png
303
303
  - documentation/best-practices.md
304
304
  - documentation/configuration.md
305
+ - documentation/development-workflow.md
305
306
  - documentation/diff_formatter_embedded.png
306
307
  - documentation/diff_formatter_list.png
307
308
  - documentation/diff_formatter_unix.png
@@ -309,6 +310,8 @@ files:
309
310
  - documentation/provider-states.md
310
311
  - documentation/raq.md
311
312
  - documentation/terminology.md
313
+ - documentation/troubleshooting.md
314
+ - documentation/verifying-pacts.md
312
315
  - example/animal-service/Gemfile
313
316
  - example/animal-service/Gemfile.lock
314
317
  - example/animal-service/Rakefile
@@ -375,11 +378,11 @@ files:
375
378
  - lib/pact/doc/generate.rb
376
379
  - lib/pact/doc/generator.rb
377
380
  - lib/pact/doc/interaction_view_model.rb
381
+ - lib/pact/doc/markdown/consumer_contract_renderer.rb
378
382
  - lib/pact/doc/markdown/generator.rb
379
383
  - lib/pact/doc/markdown/index_renderer.rb
380
384
  - lib/pact/doc/markdown/interaction.erb
381
385
  - lib/pact/doc/markdown/interaction_renderer.rb
382
- - lib/pact/doc/markdown/interactions_renderer.rb
383
386
  - lib/pact/doc/sort_interactions.rb
384
387
  - lib/pact/logging.rb
385
388
  - lib/pact/matchers.rb
@@ -399,15 +402,15 @@ files:
399
402
  - lib/pact/matchers/unexpected_index.rb
400
403
  - lib/pact/matchers/unexpected_key.rb
401
404
  - lib/pact/matchers/unix_diff_formatter.rb
405
+ - lib/pact/project_root.rb
402
406
  - lib/pact/provider.rb
403
- - lib/pact/provider/client_project_pact_helper.rb
404
407
  - lib/pact/provider/configuration.rb
405
408
  - lib/pact/provider/configuration/configuration_extension.rb
406
409
  - lib/pact/provider/configuration/dsl.rb
407
410
  - lib/pact/provider/configuration/pact_verification.rb
408
411
  - lib/pact/provider/configuration/service_provider_config.rb
409
412
  - lib/pact/provider/configuration/service_provider_dsl.rb
410
- - lib/pact/provider/matchers.rb
413
+ - lib/pact/provider/context.rb
411
414
  - lib/pact/provider/matchers/messages.rb
412
415
  - lib/pact/provider/pact_helper_locator.rb
413
416
  - lib/pact/provider/pact_spec_runner.rb
@@ -415,7 +418,9 @@ files:
415
418
  - lib/pact/provider/print_missing_provider_states.rb
416
419
  - lib/pact/provider/request.rb
417
420
  - lib/pact/provider/rspec.rb
421
+ - lib/pact/provider/rspec/custom_options_file
418
422
  - lib/pact/provider/rspec/formatter.rb
423
+ - lib/pact/provider/rspec/matchers.rb
419
424
  - lib/pact/provider/rspec/silent_json_formatter.rb
420
425
  - lib/pact/provider/state/provider_state.rb
421
426
  - lib/pact/provider/state/provider_state_configured_modules.rb
@@ -425,6 +430,7 @@ files:
425
430
  - lib/pact/provider/verification_report.rb
426
431
  - lib/pact/provider/world.rb
427
432
  - lib/pact/reification.rb
433
+ - lib/pact/rspec.rb
428
434
  - lib/pact/shared/active_support_support.rb
429
435
  - lib/pact/shared/dsl.rb
430
436
  - lib/pact/shared/jruby_support.rb
@@ -448,6 +454,7 @@ files:
448
454
  - spec/integration/consumer_spec.rb
449
455
  - spec/integration/pact/consumer_configuration_spec.rb
450
456
  - spec/integration/pact/provider_configuration_spec.rb
457
+ - spec/lib/pact/app_spec.rb
451
458
  - spec/lib/pact/configuration_spec.rb
452
459
  - spec/lib/pact/consumer/app_manager_spec.rb
453
460
  - spec/lib/pact/consumer/configuration_spec.rb
@@ -469,8 +476,8 @@ files:
469
476
  - spec/lib/pact/consumer_contract/request_spec.rb
470
477
  - spec/lib/pact/doc/generator_spec.rb
471
478
  - spec/lib/pact/doc/interaction_view_model_spec.rb
479
+ - spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb
472
480
  - spec/lib/pact/doc/markdown/index_renderer_spec.rb
473
- - spec/lib/pact/doc/markdown/interactions_renderer_spec.rb
474
481
  - spec/lib/pact/matchers/differ_spec.rb
475
482
  - spec/lib/pact/matchers/difference_spec.rb
476
483
  - spec/lib/pact/matchers/embedded_diff_formatter_spec.rb
@@ -489,7 +496,6 @@ files:
489
496
  - spec/lib/pact/provider/configuration_spec.rb
490
497
  - spec/lib/pact/provider/matchers/messages_spec.rb
491
498
  - spec/lib/pact/provider/pact_helper_locator_spec.rb
492
- - spec/lib/pact/provider/pact_spec_runner_spec.rb
493
499
  - spec/lib/pact/provider/print_missing_provider_states_spec.rb
494
500
  - spec/lib/pact/provider/request_spec.rb
495
501
  - spec/lib/pact/provider/rspec/formatter_spec.rb
@@ -504,13 +510,15 @@ files:
504
510
  - spec/lib/pact/shared/request_spec.rb
505
511
  - spec/lib/pact/something_like_spec.rb
506
512
  - spec/lib/pact/tasks/task_helper_spec.rb
513
+ - spec/lib/pact/tasks/verification_task_spec.rb
507
514
  - spec/lib/pact/term_spec.rb
508
- - spec/lib/pact/verification_task_spec.rb
515
+ - spec/pact_specification/compliance-1.0.0.rb
509
516
  - spec/spec_helper.rb
510
517
  - spec/standalone/consumer_fail_test.rb
511
518
  - spec/standalone/consumer_pass_test.rb
512
519
  - spec/support/a_consumer-a_producer.json
513
520
  - spec/support/a_consumer-a_provider.json
521
+ - spec/support/active_support_if_configured.rb
514
522
  - spec/support/app_for_config_ru.rb
515
523
  - spec/support/consumer_contract_template.json
516
524
  - spec/support/dsl_spec_support.rb
@@ -547,7 +555,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
547
555
  version: '0'
548
556
  segments:
549
557
  - 0
550
- hash: 3889300722258368097
558
+ hash: 3393348357730131022
551
559
  required_rubygems_version: !ruby/object:Gem::Requirement
552
560
  none: false
553
561
  requirements:
@@ -556,7 +564,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
556
564
  version: '0'
557
565
  segments:
558
566
  - 0
559
- hash: 3889300722258368097
567
+ hash: 3393348357730131022
560
568
  requirements: []
561
569
  rubyforge_project:
562
570
  rubygems_version: 1.8.23
@@ -572,6 +580,7 @@ test_files:
572
580
  - spec/integration/consumer_spec.rb
573
581
  - spec/integration/pact/consumer_configuration_spec.rb
574
582
  - spec/integration/pact/provider_configuration_spec.rb
583
+ - spec/lib/pact/app_spec.rb
575
584
  - spec/lib/pact/configuration_spec.rb
576
585
  - spec/lib/pact/consumer/app_manager_spec.rb
577
586
  - spec/lib/pact/consumer/configuration_spec.rb
@@ -593,8 +602,8 @@ test_files:
593
602
  - spec/lib/pact/consumer_contract/request_spec.rb
594
603
  - spec/lib/pact/doc/generator_spec.rb
595
604
  - spec/lib/pact/doc/interaction_view_model_spec.rb
605
+ - spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb
596
606
  - spec/lib/pact/doc/markdown/index_renderer_spec.rb
597
- - spec/lib/pact/doc/markdown/interactions_renderer_spec.rb
598
607
  - spec/lib/pact/matchers/differ_spec.rb
599
608
  - spec/lib/pact/matchers/difference_spec.rb
600
609
  - spec/lib/pact/matchers/embedded_diff_formatter_spec.rb
@@ -613,7 +622,6 @@ test_files:
613
622
  - spec/lib/pact/provider/configuration_spec.rb
614
623
  - spec/lib/pact/provider/matchers/messages_spec.rb
615
624
  - spec/lib/pact/provider/pact_helper_locator_spec.rb
616
- - spec/lib/pact/provider/pact_spec_runner_spec.rb
617
625
  - spec/lib/pact/provider/print_missing_provider_states_spec.rb
618
626
  - spec/lib/pact/provider/request_spec.rb
619
627
  - spec/lib/pact/provider/rspec/formatter_spec.rb
@@ -628,13 +636,15 @@ test_files:
628
636
  - spec/lib/pact/shared/request_spec.rb
629
637
  - spec/lib/pact/something_like_spec.rb
630
638
  - spec/lib/pact/tasks/task_helper_spec.rb
639
+ - spec/lib/pact/tasks/verification_task_spec.rb
631
640
  - spec/lib/pact/term_spec.rb
632
- - spec/lib/pact/verification_task_spec.rb
641
+ - spec/pact_specification/compliance-1.0.0.rb
633
642
  - spec/spec_helper.rb
634
643
  - spec/standalone/consumer_fail_test.rb
635
644
  - spec/standalone/consumer_pass_test.rb
636
645
  - spec/support/a_consumer-a_producer.json
637
646
  - spec/support/a_consumer-a_provider.json
647
+ - spec/support/active_support_if_configured.rb
638
648
  - spec/support/app_for_config_ru.rb
639
649
  - spec/support/consumer_contract_template.json
640
650
  - spec/support/dsl_spec_support.rb
@@ -1,4 +0,0 @@
1
- require 'pact/provider/pact_helper_locator'
2
- pact_helper_path = Pact::Provider::PactHelperLocater.pact_helper_path
3
- load pact_helper_path
4
- puts "Using #{pact_helper_path}"
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/provider/pact_spec_runner'
3
-
4
- module Pact::Provider
5
- describe PactSpecRunner do
6
- end
7
- end
@@ -1,99 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/tasks/verification_task'
3
-
4
- module Pact
5
- describe VerificationTask do
6
- before :all do
7
- @support_file = nil
8
- @pact_helper = '/custom/path/support_file.rb'
9
- @pact_uri = 'http://example.org/pact.json'
10
- @task_name = 'pact:verify:pact_rake_spec'
11
- @task_name_with_explict_support_file = 'pact:verify:pact_rake_spec_with_explict_support_file'
12
- @consumer = 'some-consumer'
13
- @criteria = {:description => /wiffle/}
14
-
15
- VerificationTask.new(:pact_rake_spec_with_explict_support_file) do | pact |
16
- pact.uri @pact_uri, support_file: @support_file, pact_helper: @pact_helper
17
- end
18
-
19
- VerificationTask.new(:pact_rake_spec) do | pact |
20
- pact.uri @pact_uri
21
- end
22
- end
23
-
24
- after :each do
25
- ENV.delete 'PACT_DESCRIPTION'
26
- end
27
-
28
- before do
29
- ENV['PACT_DESCRIPTION'] = 'wiffle'
30
- VerificationTask.any_instance.stub(:publish_report)
31
- Provider::PactSpecRunner.stub(:new).with(consumer_contract, options).and_return(pact_spec_runner)
32
- end
33
-
34
- let(:pact_spec_runner) { double('PactSpecRunner', :run => exit_code, :output => nil)}
35
- let(:exit_code) {0}
36
- let(:consumer_contract) { [ uri: @pact_uri, support_file: nil, pact_helper: nil ] }
37
- let(:options) { {criteria: @criteria} }
38
-
39
-
40
- describe '.initialize' do
41
- context 'with an explict support_file' do
42
- it 'creates the tasks' do
43
- Rake::Task.tasks.should include_task @task_name
44
- end
45
- end
46
- context 'with no explict support_file' do
47
- it 'creates the tasks' do
48
- Rake::Task.tasks.should include_task @task_name_with_explict_support_file
49
- end
50
- end
51
- end
52
-
53
- describe 'execute' do
54
-
55
-
56
- context "with no explicit support file " do
57
- it 'verifies the pacts using PactSpecRunner' do
58
- Rake::Task[@task_name].execute
59
- end
60
- end
61
-
62
- context "with an explict support_file" do
63
- let(:consumer_contract) { [ uri: @pact_uri, support_file: @support_file, pact_helper: @pact_helper] }
64
- it 'verifies the pacts using PactSpecRunner' do
65
- Rake::Task[@task_name_with_explict_support_file].execute
66
- end
67
- end
68
-
69
- context "with criteria" do
70
- it 'passes the criteria to the PactSpecRunner as regexes' do
71
- ENV.delete 'PACT_DESCRIPTION'
72
- Provider::PactSpecRunner.should_receive(:new).with(
73
- consumer_contract, {
74
- criteria: {
75
- description: /stuff/,
76
- provider_state: /things/
77
- }
78
- }
79
- ).and_return(pact_spec_runner)
80
- Rake::Task[@task_name].execute(description: 'stuff', provider_state: 'things')
81
- end
82
- end
83
-
84
- context 'when all specs pass' do
85
-
86
- it 'does not raise an exception' do
87
- Rake::Task[@task_name].execute
88
- end
89
- end
90
-
91
- end
92
- end
93
- end
94
-
95
- RSpec::Matchers.define :include_task do |expected|
96
- match do |actual|
97
- actual.any? { |task| task.name == expected }
98
- end
99
- end