defra_ruby_mocks 1.4.0 → 2.1.0

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.
data/spec/examples.txt ADDED
@@ -0,0 +1,99 @@
1
+ example_id | status | run_time |
2
+ ------------------------------------------------------------------- | ------ | --------------- |
3
+ ./spec/defra_ruby_mocks_spec.rb[1:1:1] | passed | 0.00123 seconds |
4
+ ./spec/defra_ruby_mocks_spec.rb[1:2:1:1] | passed | 0.00062 seconds |
5
+ ./spec/defra_ruby_mocks_spec.rb[1:2:2:1] | passed | 0.00012 seconds |
6
+ ./spec/lib/configuration_spec.rb[1:1:1:1] | passed | 0.00008 seconds |
7
+ ./spec/lib/configuration_spec.rb[1:1:2:1] | passed | 0.00008 seconds |
8
+ ./spec/lib/configuration_spec.rb[1:1:3:1] | passed | 0.0001 seconds |
9
+ ./spec/lib/configuration_spec.rb[1:1:4:1] | passed | 0.00008 seconds |
10
+ ./spec/lib/configuration_spec.rb[1:2:1:1] | passed | 0.0001 seconds |
11
+ ./spec/lib/configuration_spec.rb[1:2:2:1] | passed | 0.00157 seconds |
12
+ ./spec/lib/configuration_spec.rb[1:2:3:1] | passed | 0.00009 seconds |
13
+ ./spec/lib/configuration_spec.rb[1:2:4:1] | passed | 0.00011 seconds |
14
+ ./spec/requests/company_spec.rb[1:1:1:1] | passed | 0.00337 seconds |
15
+ ./spec/requests/company_spec.rb[1:1:2:1] | passed | 0.00603 seconds |
16
+ ./spec/requests/company_spec.rb[1:1:3:1:1] | passed | 0.00406 seconds |
17
+ ./spec/requests/company_spec.rb[1:1:3:2:1] | passed | 0.00906 seconds |
18
+ ./spec/requests/company_spec.rb[1:2:1] | passed | 0.00374 seconds |
19
+ ./spec/requests/worldpay_spec.rb[1:1:1:1:1:1] | passed | 0.00694 seconds |
20
+ ./spec/requests/worldpay_spec.rb[1:1:1:1:2:1] | passed | 0.0037 seconds |
21
+ ./spec/requests/worldpay_spec.rb[1:1:1:2:1:1] | passed | 0.00561 seconds |
22
+ ./spec/requests/worldpay_spec.rb[1:1:2:1:1:1] | passed | 0.00692 seconds |
23
+ ./spec/requests/worldpay_spec.rb[1:1:2:1:2:1] | passed | 0.03455 seconds |
24
+ ./spec/requests/worldpay_spec.rb[1:1:2:2:1:1] | passed | 0.00329 seconds |
25
+ ./spec/requests/worldpay_spec.rb[1:2:1:1] | passed | 0.00155 seconds |
26
+ ./spec/requests/worldpay_spec.rb[1:2:2:1] | passed | 0.01827 seconds |
27
+ ./spec/services/companies_house_service_spec.rb[1:1:1:1] | passed | 0.00133 seconds |
28
+ ./spec/services/companies_house_service_spec.rb[1:1:2:1:1] | passed | 0.00008 seconds |
29
+ ./spec/services/companies_house_service_spec.rb[1:1:2:2:1] | passed | 0.0001 seconds |
30
+ ./spec/services/companies_house_service_spec.rb[1:1:2:3:1] | passed | 0.00009 seconds |
31
+ ./spec/services/companies_house_service_spec.rb[1:1:2:4:1] | passed | 0.00008 seconds |
32
+ ./spec/services/companies_house_service_spec.rb[1:1:2:5:1] | passed | 0.119 seconds |
33
+ ./spec/services/companies_house_service_spec.rb[1:1:2:6:1] | passed | 0.00009 seconds |
34
+ ./spec/services/companies_house_service_spec.rb[1:1:2:7:1] | passed | 0.00008 seconds |
35
+ ./spec/services/companies_house_service_spec.rb[1:1:2:8:1] | passed | 0.00016 seconds |
36
+ ./spec/services/companies_house_service_spec.rb[1:1:2:9:1] | passed | 0.00009 seconds |
37
+ ./spec/services/companies_house_service_spec.rb[1:1:3:1:1] | passed | 0.00012 seconds |
38
+ ./spec/services/companies_house_service_spec.rb[1:1:3:2:1] | passed | 0.00012 seconds |
39
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:1:1] | passed | 0.00015 seconds |
40
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:2:1:1] | passed | 0.00032 seconds |
41
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:2:1:2] | passed | 0.00035 seconds |
42
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:2:1:3] | passed | 0.00031 seconds |
43
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:2:1:4] | passed | 0.00033 seconds |
44
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:2:1:5:1] | passed | 0.00028 seconds |
45
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:2:1:5:2] | passed | 0.00032 seconds |
46
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:2:1:5:3] | passed | 0.00042 seconds |
47
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:2:1:6:1] | passed | 0.00029 seconds |
48
+ ./spec/services/worldpay_payment_service_spec.rb[1:1:3:1] | passed | 0.00026 seconds |
49
+ ./spec/services/worldpay_refund_service_spec.rb[1:1:1:1:1] | passed | 0.00035 seconds |
50
+ ./spec/services/worldpay_refund_service_spec.rb[1:1:1:1:2] | passed | 0.00034 seconds |
51
+ ./spec/services/worldpay_refund_service_spec.rb[1:1:1:1:3] | passed | 0.00036 seconds |
52
+ ./spec/services/worldpay_refund_service_spec.rb[1:1:1:1:4] | passed | 0.00034 seconds |
53
+ ./spec/services/worldpay_refund_service_spec.rb[1:1:1:1:5] | passed | 0.0004 seconds |
54
+ ./spec/services/worldpay_refund_service_spec.rb[1:1:1:1:6] | passed | 0.0004 seconds |
55
+ ./spec/services/worldpay_refund_service_spec.rb[1:1:1:1:7] | passed | 0.00035 seconds |
56
+ ./spec/services/worldpay_refund_service_spec.rb[1:1:2:1] | passed | 0.00069 seconds |
57
+ ./spec/services/worldpay_request_handler_service_spec.rb[1:1:1:1:1] | passed | 0.00169 seconds |
58
+ ./spec/services/worldpay_request_handler_service_spec.rb[1:1:1:1:2] | passed | 0.00133 seconds |
59
+ ./spec/services/worldpay_request_handler_service_spec.rb[1:1:1:2:1] | passed | 0.00062 seconds |
60
+ ./spec/services/worldpay_request_handler_service_spec.rb[1:1:1:2:2] | passed | 0.00074 seconds |
61
+ ./spec/services/worldpay_request_handler_service_spec.rb[1:1:1:3:1] | passed | 0.00082 seconds |
62
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:1:1] | passed | 0.00547 seconds |
63
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:1:2] | passed | 0.00091 seconds |
64
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:1:3] | passed | 0.00076 seconds |
65
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:1:4] | passed | 0.00126 seconds |
66
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:2:1] | passed | 0.0034 seconds |
67
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:2:2] | passed | 0.0011 seconds |
68
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:2:3] | passed | 0.00105 seconds |
69
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:2:4] | passed | 0.00093 seconds |
70
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:3:1] | passed | 0.00153 seconds |
71
+ ./spec/services/worldpay_resource_service_spec.rb[1:1:4:1] | passed | 0.00087 seconds |
72
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:1] | passed | 0.00048 seconds |
73
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:2] | passed | 0.00068 seconds |
74
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:3:1] | passed | 0.00058 seconds |
75
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:3:2] | passed | 0.00064 seconds |
76
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:4:1] | passed | 0.00053 seconds |
77
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:4:2] | passed | 0.00066 seconds |
78
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:5:1] | passed | 0.00048 seconds |
79
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:5:2] | passed | 0.00056 seconds |
80
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:6:1] | passed | 0.00068 seconds |
81
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:6:2] | passed | 0.00059 seconds |
82
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:7:1] | passed | 0.00115 seconds |
83
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:7:2] | passed | 0.00119 seconds |
84
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:8:1] | passed | 0.0006 seconds |
85
+ ./spec/services/worldpay_response_service_spec.rb[1:1:1:1:8:2] | passed | 0.00057 seconds |
86
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:1] | passed | 0.00054 seconds |
87
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:2] | passed | 0.00058 seconds |
88
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:3:1] | passed | 0.00063 seconds |
89
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:3:2] | passed | 0.00065 seconds |
90
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:4:1] | passed | 0.00063 seconds |
91
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:4:2] | passed | 0.00066 seconds |
92
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:5:1] | passed | 0.00056 seconds |
93
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:5:2] | passed | 0.00056 seconds |
94
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:6:1] | passed | 0.00054 seconds |
95
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:6:2] | passed | 0.00058 seconds |
96
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:7:1] | passed | 0.00078 seconds |
97
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:7:2] | passed | 0.00081 seconds |
98
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:8:1] | passed | 0.00053 seconds |
99
+ ./spec/services/worldpay_response_service_spec.rb[1:1:2:1:8:2] | passed | 0.00056 seconds |
@@ -18,7 +18,7 @@ module DefraRubyMocks
18
18
  get "#{path}/#{company_number}"
19
19
  content = JSON.parse(response.body)
20
20
 
21
- expect(response.content_type).to eq("application/json")
21
+ expect(response.media_type).to eq("application/json")
22
22
  expect(response.code).to eq("404")
23
23
  expect(content).to include("errors")
24
24
  end
@@ -31,7 +31,7 @@ module DefraRubyMocks
31
31
  get "#{path}/#{company_number}"
32
32
  company_status = JSON.parse(response.body)["company_status"]
33
33
 
34
- expect(response.content_type).to eq("application/json")
34
+ expect(response.media_type).to eq("application/json")
35
35
  expect(response.code).to eq("200")
36
36
  expect(company_status).not_to eq("active")
37
37
  end
@@ -45,7 +45,7 @@ module DefraRubyMocks
45
45
  get "#{path}/#{company_number}"
46
46
  company_status = JSON.parse(response.body)["company_status"]
47
47
 
48
- expect(response.content_type).to eq("application/json")
48
+ expect(response.media_type).to eq("application/json")
49
49
  expect(response.code).to eq("200")
50
50
  expect(company_status).to eq("active")
51
51
  end
@@ -58,7 +58,7 @@ module DefraRubyMocks
58
58
  get "#{path}/#{company_number}"
59
59
  content = JSON.parse(response.body)
60
60
 
61
- expect(response.content_type).to eq("application/json")
61
+ expect(response.media_type).to eq("application/json")
62
62
  expect(response.code).to eq("404")
63
63
  expect(content).to include("errors")
64
64
  end
@@ -24,9 +24,9 @@ module DefraRubyMocks
24
24
  let(:data) { File.read("spec/fixtures/payment_request_valid.xml") }
25
25
 
26
26
  it "returns an XML response with a 200 code" do
27
- get path, {}, "RAW_POST_DATA" => data
27
+ get path, headers: { "RAW_POST_DATA" => data }
28
28
 
29
- expect(response.content_type).to eq("application/xml")
29
+ expect(response.media_type).to eq("application/xml")
30
30
  expect(response.code).to eq("200")
31
31
  expect(response.body).to be_xml
32
32
  end
@@ -36,7 +36,7 @@ module DefraRubyMocks
36
36
  let(:data) { File.read("spec/fixtures/payment_request_invalid.xml") }
37
37
 
38
38
  it "returns a response with a 500 code" do
39
- get path, {}, "RAW_POST_DATA" => data
39
+ get path, headers: { "RAW_POST_DATA" => data }
40
40
 
41
41
  expect(response.code).to eq("500")
42
42
  end
@@ -48,9 +48,9 @@ module DefraRubyMocks
48
48
  let(:data) { File.read("spec/fixtures/refund_request_valid.xml") }
49
49
 
50
50
  it "returns an XML response with a 200 code" do
51
- get path, {}, "RAW_POST_DATA" => data
51
+ get path, headers: { "RAW_POST_DATA" => data }
52
52
 
53
- expect(response.content_type).to eq("application/xml")
53
+ expect(response.media_type).to eq("application/xml")
54
54
  expect(response.code).to eq("200")
55
55
  expect(response.body).to be_xml
56
56
  end
@@ -59,8 +59,22 @@ module DefraRubyMocks
59
59
  end
60
60
 
61
61
  context "#dispatcher" do
62
+ let(:success_url) { "http://example.com/fo/12345/worldpay/success" }
63
+ let(:failure_url) { "http://example.com/fo/12345/worldpay/failure" }
64
+ let(:pending_url) { "http://example.com/fo/12345/worldpay/pending" }
65
+ let(:cancel_url) { "http://example.com/fo/12345/worldpay/cancel" }
66
+ let(:error_url) { "http://example.com/fo/12345/worldpay/error" }
62
67
  let(:response_url) { "#{success_url}?orderKey=admincode1^^987654&paymentStatus=#{status}&paymentAmount=10500&paymentCurrency=GBP&mac=0ba5271e1ed1b26f9bb428ef7fb536a4&source=WP" }
63
- let(:path) { "/defra_ruby_mocks/worldpay/dispatcher?successURL=#{CGI.escape(success_url)}" }
68
+ let(:path) do
69
+ root = "/defra_ruby_mocks/worldpay/dispatcher"
70
+ escaped_success = CGI.escape(success_url)
71
+ escaped_failure = CGI.escape(failure_url)
72
+ escaped_pending = CGI.escape(pending_url)
73
+ escaped_cancel = CGI.escape(cancel_url)
74
+ escaped_error = CGI.escape(error_url)
75
+
76
+ "#{root}?successURL=#{escaped_success}&failureURL=#{escaped_failure}&pendingURL=#{escaped_pending}&cancelURL=#{escaped_cancel}&errorURL=#{escaped_error}"
77
+ end
64
78
  let(:service_response) do
65
79
  double(
66
80
  :response,
@@ -76,9 +90,16 @@ module DefraRubyMocks
76
90
  end
77
91
 
78
92
  context "and the request is valid" do
79
- before(:each) { allow(WorldpayResponseService).to receive(:run) { service_response } }
80
-
81
- let(:success_url) { "http://example.com/fo/12345/worldpay/success" }
93
+ before(:each) do
94
+ allow(WorldpayResponseService).to receive(:run)
95
+ .with(
96
+ success_url: success_url,
97
+ failure_url: failure_url,
98
+ pending_url: pending_url,
99
+ cancel_url: cancel_url,
100
+ error_url: error_url
101
+ ) { service_response }
102
+ end
82
103
 
83
104
  context "and a response is expected" do
84
105
  let(:status) { "AUTHORISED" }
@@ -30,17 +30,7 @@ module DefraRubyMocks
30
30
 
31
31
  let(:order) { double(:order, order_code: order_code, total_amount: order_value) }
32
32
 
33
- let(:mac) do
34
- data = [
35
- order_key,
36
- order_value,
37
- "GBP",
38
- payment_status,
39
- mac_secret
40
- ]
41
-
42
- Digest::MD5.hexdigest(data.join).to_s
43
- end
33
+ let(:mac) { Digest::MD5.hexdigest(mac_data.join).to_s }
44
34
 
45
35
  let(:query_string) do
46
36
  [
@@ -53,15 +43,27 @@ module DefraRubyMocks
53
43
  ].join("&")
54
44
  end
55
45
 
56
- let(:args) { { success_url: success_url, failure_url: failure_url } }
46
+ let(:args) do
47
+ {
48
+ success_url: success_url,
49
+ failure_url: failure_url,
50
+ pending_url: pending_url,
51
+ cancel_url: cancel_url,
52
+ error_url: error_url
53
+ }
54
+ end
57
55
 
58
56
  describe ".run" do
59
57
  context "when the request comes from the waste-carriers-front-office" do
60
58
  let(:success_url) { "http://example.com/fo/#{reference}/worldpay/success" }
61
59
  let(:failure_url) { "http://example.com/fo/#{reference}/worldpay/failure" }
60
+ let(:pending_url) { "http://example.com/fo/#{reference}/worldpay/pending" }
61
+ let(:cancel_url) { "http://example.com/fo/#{reference}/worldpay/cancel" }
62
+ let(:error_url) { "http://example.com/fo/#{reference}/worldpay/error" }
62
63
 
63
64
  context "and is valid" do
64
65
  let(:relation) { double(:relation, first: registration) }
66
+ let(:mac_data) { [order_key, order_value, "GBP", payment_status, mac_secret] }
65
67
 
66
68
  it "can extract the reference from the `success_url`" do
67
69
  expect(described_class.run(args).reference).to eq(reference)
@@ -71,11 +73,12 @@ module DefraRubyMocks
71
73
  expect(described_class.run(args).order_key).to eq(order_key)
72
74
  end
73
75
 
74
- it "can generate a valid mac" do
75
- expect(described_class.run(args).mac).to eq(mac)
76
- end
77
-
78
76
  context "and is for a successful payment" do
77
+ it "can generate a valid mac" do
78
+ puts "Test data #{mac_data.join}"
79
+ expect(described_class.run(args).mac).to eq(mac)
80
+ end
81
+
79
82
  it "returns a url in the expected format" do
80
83
  expected_response_url = "#{success_url}?#{query_string}"
81
84
 
@@ -87,6 +90,10 @@ module DefraRubyMocks
87
90
  let(:payment_status) { :REFUSED }
88
91
  let(:company_name) { "Reject for the thing" }
89
92
 
93
+ it "can generate a valid mac" do
94
+ expect(described_class.run(args).mac).to eq(mac)
95
+ end
96
+
90
97
  it "returns a url in the expected format" do
91
98
  expected_response_url = "#{failure_url}?#{query_string}"
92
99
 
@@ -95,21 +102,76 @@ module DefraRubyMocks
95
102
  end
96
103
 
97
104
  context "and is for a stuck payment" do
105
+ let(:payment_status) { :STUCK }
98
106
  let(:company_name) { "Give me a stuck thing" }
99
107
 
108
+ it "can generate a valid mac" do
109
+ expect(described_class.run(args).mac).to eq(mac)
110
+ end
111
+
100
112
  it "returns a status of :STUCK" do
101
113
  expect(described_class.run(args).status).to eq(:STUCK)
102
114
  end
103
115
  end
116
+
117
+ context "and is for a pending payment" do
118
+ let(:payment_status) { :SENT_FOR_AUTHORISATION }
119
+ let(:company_name) { "Pending for the thing" }
120
+
121
+ it "can generate a valid mac" do
122
+ expect(described_class.run(args).mac).to eq(mac)
123
+ end
124
+
125
+ it "returns a url in the expected format" do
126
+ expected_response_url = "#{pending_url}?#{query_string}"
127
+
128
+ expect(described_class.run(args).url).to eq(expected_response_url)
129
+ end
130
+ end
131
+
132
+ context "and is for a cancelled payment" do
133
+ let(:payment_status) { :CANCELLED }
134
+ let(:company_name) { "Cancel the thing" }
135
+ let(:mac_data) { [order_key, order_value, "GBP", mac_secret] }
136
+
137
+ it "can generate a valid mac" do
138
+ expect(described_class.run(args).mac).to eq(mac)
139
+ end
140
+
141
+ it "returns a url in the expected format" do
142
+ expected_response_url = "#{cancel_url}?#{query_string}"
143
+
144
+ expect(described_class.run(args).url).to eq(expected_response_url)
145
+ end
146
+ end
147
+
148
+ context "and is for an errored payment" do
149
+ let(:payment_status) { :ERROR }
150
+ let(:company_name) { "Error the thing" }
151
+
152
+ it "can generate a valid mac" do
153
+ expect(described_class.run(args).mac).to eq(mac)
154
+ end
155
+
156
+ it "returns a url in the expected format" do
157
+ expected_response_url = "#{error_url}?#{query_string}"
158
+
159
+ expect(described_class.run(args).url).to eq(expected_response_url)
160
+ end
161
+ end
104
162
  end
105
163
  end
106
164
 
107
165
  context "when the request comes from the waste-carriers-frontend" do
108
166
  let(:success_url) { "http://example.com/your-registration/#{reference}/worldpay/success/54321/NEWREG?locale=en" }
109
167
  let(:failure_url) { "http://example.com/your-registration/#{reference}/worldpay/failure/54321/NEWREG?locale=en" }
168
+ let(:pending_url) { "http://example.com/your-registration/#{reference}/worldpay/pending/54321/NEWREG?locale=en" }
169
+ let(:cancel_url) { "http://example.com/your-registration/#{reference}/worldpay/cancel/54321/NEWREG?locale=en" }
170
+ let(:error_url) { "http://example.com/your-registration/#{reference}/worldpay/error/54321/NEWREG?locale=en" }
110
171
 
111
172
  context "and is valid" do
112
173
  let(:relation) { double(:relation, first: registration) }
174
+ let(:mac_data) { [order_key, order_value, "GBP", payment_status, mac_secret] }
113
175
 
114
176
  it "can extract the reference from the `success_url`" do
115
177
  expect(described_class.run(args).reference).to eq(reference)
@@ -119,11 +181,11 @@ module DefraRubyMocks
119
181
  expect(described_class.run(args).order_key).to eq(order_key)
120
182
  end
121
183
 
122
- it "can generate a valid mac" do
123
- expect(described_class.run(args).mac).to eq(mac)
124
- end
125
-
126
184
  context "and is for a successful payment" do
185
+ it "can generate a valid mac" do
186
+ expect(described_class.run(args).mac).to eq(mac)
187
+ end
188
+
127
189
  it "returns a url in the expected format" do
128
190
  expected_response_url = "#{success_url}&#{query_string}"
129
191
 
@@ -135,6 +197,10 @@ module DefraRubyMocks
135
197
  let(:payment_status) { :REFUSED }
136
198
  let(:company_name) { "Reject for the thing" }
137
199
 
200
+ it "can generate a valid mac" do
201
+ expect(described_class.run(args).mac).to eq(mac)
202
+ end
203
+
138
204
  it "returns a url in the expected format" do
139
205
  expected_response_url = "#{failure_url}&#{query_string}"
140
206
 
@@ -143,12 +209,63 @@ module DefraRubyMocks
143
209
  end
144
210
 
145
211
  context "and is for a stuck payment" do
212
+ let(:payment_status) { :STUCK }
146
213
  let(:company_name) { "Give me a stuck thing" }
147
214
 
215
+ it "can generate a valid mac" do
216
+ expect(described_class.run(args).mac).to eq(mac)
217
+ end
218
+
148
219
  it "returns a status of :STUCK" do
149
220
  expect(described_class.run(args).status).to eq(:STUCK)
150
221
  end
151
222
  end
223
+
224
+ context "and is for a pending payment" do
225
+ let(:payment_status) { :SENT_FOR_AUTHORISATION }
226
+ let(:company_name) { "Pending for the thing" }
227
+
228
+ it "can generate a valid mac" do
229
+ expect(described_class.run(args).mac).to eq(mac)
230
+ end
231
+
232
+ it "returns a url in the expected format" do
233
+ expected_response_url = "#{pending_url}&#{query_string}"
234
+
235
+ expect(described_class.run(args).url).to eq(expected_response_url)
236
+ end
237
+ end
238
+
239
+ context "and is for a cancelled payment" do
240
+ let(:payment_status) { :CANCELLED }
241
+ let(:company_name) { "Cancel the thing" }
242
+ let(:mac_data) { [order_key, order_value, "GBP", mac_secret] }
243
+
244
+ it "can generate a valid mac" do
245
+ expect(described_class.run(args).mac).to eq(mac)
246
+ end
247
+
248
+ it "returns a url in the expected format" do
249
+ expected_response_url = "#{cancel_url}&#{query_string}"
250
+
251
+ expect(described_class.run(args).url).to eq(expected_response_url)
252
+ end
253
+ end
254
+
255
+ context "and is for an errored payment" do
256
+ let(:payment_status) { :ERROR }
257
+ let(:company_name) { "Error the thing" }
258
+
259
+ it "can generate a valid mac" do
260
+ expect(described_class.run(args).mac).to eq(mac)
261
+ end
262
+
263
+ it "returns a url in the expected format" do
264
+ expected_response_url = "#{error_url}&#{query_string}"
265
+
266
+ expect(described_class.run(args).url).to eq(expected_response_url)
267
+ end
268
+ end
152
269
  end
153
270
  end
154
271
  end