pact 1.0.9 → 1.0.10

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 (86) hide show
  1. data/CHANGELOG.md +20 -0
  2. data/Gemfile.lock +3 -3
  3. data/example/animal-service/Gemfile +14 -0
  4. data/example/animal-service/Gemfile.lock +67 -0
  5. data/example/animal-service/Rakefile +3 -0
  6. data/example/animal-service/spec/service_consumers/pact_helper.rb +24 -0
  7. data/example/animal-service/spec/service_consumers/provider_states_for_zoo_app.rb +9 -0
  8. data/example/zoo-app/Gemfile.lock +2 -15
  9. data/example/zoo-app/spec/pacts/zoo_app-animal_service.json +21 -6
  10. data/example/zoo-app/spec/service_providers/animal_service_spec.rb +1 -1
  11. data/lib/pact/consumer.rb +10 -11
  12. data/lib/pact/consumer/app_manager.rb +1 -0
  13. data/lib/pact/consumer/configuration.rb +179 -0
  14. data/lib/pact/consumer/interaction_builder.rb +1 -2
  15. data/lib/pact/consumer/mock_service.rb +1 -370
  16. data/lib/pact/consumer/mock_service/app.rb +70 -0
  17. data/lib/pact/consumer/mock_service/interaction_delete.rb +28 -0
  18. data/lib/pact/consumer/mock_service/interaction_list.rb +57 -0
  19. data/lib/pact/consumer/mock_service/interaction_post.rb +25 -0
  20. data/lib/pact/consumer/mock_service/interaction_replay.rb +126 -0
  21. data/lib/pact/consumer/mock_service/missing_interactions_get.rb +26 -0
  22. data/lib/pact/consumer/mock_service/rack_request_helper.rb +51 -0
  23. data/lib/pact/consumer/mock_service/startup_poll.rb +22 -0
  24. data/lib/pact/consumer/mock_service/verification_get.rb +35 -0
  25. data/lib/pact/consumer/mock_service_client.rb +3 -1
  26. data/lib/pact/consumer/mock_service_interaction_expectation.rb +33 -0
  27. data/lib/pact/consumer/request.rb +27 -0
  28. data/lib/pact/consumer/rspec.rb +1 -4
  29. data/lib/pact/consumer_contract/consumer_contract.rb +11 -8
  30. data/lib/pact/consumer_contract/interaction.rb +9 -22
  31. data/lib/pact/consumer_contract/request.rb +68 -0
  32. data/lib/pact/consumer_contract/service_consumer.rb +6 -2
  33. data/lib/pact/consumer_contract/service_provider.rb +6 -2
  34. data/lib/pact/matchers/index_not_found.rb +20 -0
  35. data/lib/pact/matchers/matchers.rb +14 -28
  36. data/lib/pact/matchers/unexpected_index.rb +17 -0
  37. data/lib/pact/matchers/unexpected_key.rb +17 -0
  38. data/lib/pact/provider.rb +1 -1
  39. data/lib/pact/provider/configuration.rb +129 -0
  40. data/lib/pact/provider/request.rb +59 -0
  41. data/lib/pact/provider/rspec.rb +4 -5
  42. data/lib/pact/provider/test_methods.rb +14 -52
  43. data/lib/pact/shared/dsl.rb +20 -0
  44. data/lib/pact/shared/key_not_found.rb +24 -0
  45. data/lib/pact/shared/null_expectation.rb +31 -0
  46. data/lib/pact/shared/request.rb +68 -0
  47. data/lib/pact/something_like.rb +7 -1
  48. data/lib/pact/symbolize_keys.rb +12 -0
  49. data/lib/pact/tasks.rb +1 -1
  50. data/lib/pact/tasks/task_helper.rb +23 -0
  51. data/lib/pact/{verification_task.rb → tasks/verification_task.rb} +4 -4
  52. data/lib/pact/version.rb +1 -1
  53. data/lib/tasks/pact.rake +5 -4
  54. data/pact.gemspec +1 -1
  55. data/spec/features/consumption_spec.rb +1 -73
  56. data/spec/features/production_spec.rb +3 -0
  57. data/spec/integration/consumer_spec.rb +170 -0
  58. data/spec/integration/pact/consumer_configuration_spec.rb +1 -1
  59. data/spec/lib/pact/consumer/{dsl_spec.rb → configuration_spec.rb} +10 -9
  60. data/spec/lib/pact/consumer/consumer_contract_builder_spec.rb +2 -2
  61. data/spec/lib/pact/consumer/interaction_builder_spec.rb +1 -1
  62. data/spec/lib/pact/consumer/mock_service/interaction_list_spec.rb +66 -0
  63. data/spec/lib/pact/consumer/mock_service/rack_request_helper_spec.rb +82 -0
  64. data/spec/lib/pact/consumer/mock_service_interaction_expectation_spec.rb +54 -0
  65. data/spec/lib/pact/consumer/request_spec.rb +24 -0
  66. data/spec/lib/pact/consumer_contract/consumer_contract_spec.rb +1 -1
  67. data/spec/lib/pact/consumer_contract/interaction_spec.rb +0 -34
  68. data/spec/lib/pact/{request_spec.rb → consumer_contract/request_spec.rb} +45 -121
  69. data/spec/lib/pact/matchers/matchers_spec.rb +29 -13
  70. data/spec/lib/pact/provider/configuration_spec.rb +163 -0
  71. data/spec/lib/pact/provider/request_spec.rb +78 -0
  72. data/spec/lib/pact/provider/test_methods_spec.rb +0 -30
  73. data/spec/lib/pact/verification_task_spec.rb +1 -1
  74. data/spec/spec_helper.rb +3 -0
  75. data/spec/support/factories.rb +5 -1
  76. data/spec/support/pact_helper.rb +6 -0
  77. data/spec/support/shared_examples_for_request.rb +83 -0
  78. data/spec/support/test_app_fail.json +3 -0
  79. data/spec/support/test_app_pass.json +18 -1
  80. metadata +68 -31
  81. data/lib/pact/consumer/dsl.rb +0 -157
  82. data/lib/pact/pact_task_helper.rb +0 -21
  83. data/lib/pact/provider/dsl.rb +0 -115
  84. data/lib/pact/request.rb +0 -167
  85. data/spec/lib/pact/consumer/mock_service_spec.rb +0 -143
  86. data/spec/lib/pact/provider/dsl_spec.rb +0 -179
@@ -1,179 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/provider/dsl'
3
-
4
- module Pact::Provider
5
- describe DSL do
6
-
7
- class MockConfig
8
- include Pact::Provider::DSL
9
- end
10
-
11
- describe "service_provider" do
12
-
13
- before do
14
- Pact.clear_configuration
15
- end
16
-
17
- let(:mock_config) { MockConfig.new }
18
- context "when a provider is configured" do
19
- before do
20
- mock_config.service_provider "Fred" do
21
- app { "An app" }
22
- end
23
- end
24
- it "should allow configuration of the name" do
25
- expect(Pact.configuration.provider.name).to eql "Fred"
26
- end
27
- it "should allow configuration of the test app" do
28
- expect(Pact.configuration.provider.app).to eql "An app"
29
- end
30
- end
31
- #Move this test to configuration
32
- context "when a provider is not configured" do
33
- it "raises an error" do
34
- expect{ Pact.configuration.provider }.to raise_error(/Please configure your provider/)
35
- end
36
- end
37
- end
38
-
39
-
40
- module DSL
41
-
42
- describe VerificationDSL do
43
-
44
-
45
- describe 'create_verification' do
46
- let(:url) {'http://some/uri'}
47
- let(:consumer_name) {'some consumer'}
48
- let(:ref) {:prod}
49
- let(:options) { {:ref => :prod} }
50
- context "with valid values" do
51
- subject do
52
- uri = url
53
- VerificationDSL.new(consumer_name, options) do
54
- pact_uri uri
55
- end
56
- end
57
-
58
- it "creates a Verification" do
59
- Pact::Provider::PactVerification.should_receive(:new).with(consumer_name, url, ref)
60
- subject.create_verification
61
- end
62
-
63
- it "returns a Verification" do
64
- Pact::Provider::PactVerification.should_receive(:new).and_return('a verification')
65
- expect(subject.create_verification).to eq('a verification')
66
- end
67
- end
68
-
69
- context "with a nil uri" do
70
- subject do
71
- VerificationDSL.new(consumer_name, options) do
72
- pact_uri nil
73
- end
74
- end
75
-
76
- it "raises a validation error" do
77
- expect{ subject.create_verification}.to raise_error /Please provide a pact_uri/
78
- end
79
- end
80
- end
81
- end
82
-
83
- describe ServiceProviderDSL do
84
-
85
- describe "initialize" do
86
-
87
- context "with an object instead of a block" do
88
- subject do
89
- ServiceProviderDSL.new 'name' do
90
- app 'blah'
91
- end
92
- end
93
- it "raises an error" do
94
- expect{ subject }.to raise_error /wrong number of arguments/
95
- end
96
- end
97
-
98
- end
99
- describe "validate" do
100
- context "when no name is provided" do
101
- subject do
102
- ServiceProviderDSL.new ' ' do
103
- app { Object.new }
104
- end
105
- end
106
- it "raises an error" do
107
- expect{ subject.validate}.to raise_error("Please provide a name for the Provider")
108
- end
109
- end
110
- context "when nil name is provided" do
111
- subject do
112
- ServiceProviderDSL.new nil do
113
- app { Object.new }
114
- end
115
- end
116
- it "raises an error" do
117
- expect{ subject.validate}.to raise_error("Please provide a name for the Provider")
118
- end
119
- end
120
- context "when no app is provided" do
121
- subject do
122
- ServiceProviderDSL.new 'Blah' do
123
- end
124
- end
125
- it "raises an error" do
126
- expect{ subject.validate }.to raise_error("Please configure an app for the Provider")
127
- end
128
- end
129
- end
130
-
131
- describe 'honours_pact_with' do
132
- before do
133
- Pact.clear_configuration
134
- end
135
-
136
- context "with no optional params" do
137
- subject do
138
- ServiceProviderDSL.new '' do
139
- honours_pact_with 'some-consumer' do
140
- pact_uri 'blah'
141
- end
142
- end
143
- end
144
- it 'adds a verification to the Pact.configuration' do
145
- subject
146
- expect(Pact.configuration.pact_verifications.first).to eq(Pact::Provider::PactVerification.new('some-consumer', 'blah', :head))
147
- end
148
- end
149
-
150
- context "with all params specified" do
151
- subject do
152
- ServiceProviderDSL.new '' do
153
- honours_pact_with 'some-consumer', :ref => :prod do
154
- pact_uri 'blah'
155
- end
156
- end
157
- end
158
- it 'adds a verification to the Pact.configuration' do
159
- subject
160
- expect(Pact.configuration.pact_verifications.first).to eq(Pact::Provider::PactVerification.new('some-consumer', 'blah', :prod))
161
- end
162
-
163
- end
164
-
165
- end
166
- end
167
-
168
- describe ServiceProviderConfig do
169
- describe "app" do
170
- subject { ServiceProviderConfig.new("blah") { Object.new } }
171
- it "should execute the app_block each time" do
172
- expect(subject.app.object_id).to_not equal(subject.app.object_id)
173
- end
174
- end
175
- end
176
-
177
- end
178
- end
179
- end