pact 1.0.9 → 1.0.10

Sign up to get free protection for your applications and to get access to all the features.
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