gds-api-adapters 71.2.0 → 71.7.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.
- checksums.yaml +4 -4
- data/lib/gds_api/account_api.rb +61 -5
- data/lib/gds_api/email_alert_api.rb +38 -0
- data/lib/gds_api/json_client.rb +4 -4
- data/lib/gds_api/test_helpers/account_api.rb +212 -29
- data/lib/gds_api/test_helpers/email_alert_api.rb +97 -5
- data/lib/gds_api/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1177b1955f1d71f876486faf8932550ff11330dbc69bfcf4b3e04eea88ce2fa
|
4
|
+
data.tar.gz: ca001da8d98cab308f0ce695aa46700c3c07d2fd2cd63e3ceea51868013ef4ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75a3f20f1364ecf6d0e76f02622b95337b2ec4a8dbb2bc77e4a46a99787c855063454fe92835dee4b105b03ab066c2b0d85c16b98bb57bce0e34009aadbf9a4b
|
7
|
+
data.tar.gz: 282abe1e9269b6fa087f1a6e7205f49eef22f12670d3d7592f3a56acce50a97fab79c68a227be7d2b7a4a1e8e29cd1805738769d2a41e5399199a8c117352ee9
|
data/lib/gds_api/account_api.rb
CHANGED
@@ -45,6 +45,33 @@ class GdsApi::AccountApi < GdsApi::Base
|
|
45
45
|
post_json("#{endpoint}/api/oauth2/state", attributes: attributes)
|
46
46
|
end
|
47
47
|
|
48
|
+
# Get all the information about a user needed to render the account home page
|
49
|
+
#
|
50
|
+
# @param [String] govuk_account_session Value of the session header
|
51
|
+
#
|
52
|
+
# @return [Hash] Information about the user and the services they've used, and a new session header
|
53
|
+
def get_user(govuk_account_session:)
|
54
|
+
get_json("#{endpoint}/api/user", auth_headers(govuk_account_session))
|
55
|
+
end
|
56
|
+
|
57
|
+
# Update the user record with privileged information from the auth service. Only the auth service will call this.
|
58
|
+
#
|
59
|
+
# @param [String] subject_identifier The identifier of the user, shared between the auth service and GOV.UK.
|
60
|
+
# @param [String, nil] email The user's current
|
61
|
+
# @param [Boolean, nil] email_verified Whether the user's current email address is verified
|
62
|
+
# @param [Boolean, nil] has_unconfirmed_email Whether the user has a new, pending, email address
|
63
|
+
#
|
64
|
+
# @return [Hash] The user's subject identifier and email attributes
|
65
|
+
def update_user_by_subject_identifier(subject_identifier:, email: nil, email_verified: nil, has_unconfirmed_email: nil)
|
66
|
+
params = {
|
67
|
+
email: email,
|
68
|
+
email_verified: email_verified,
|
69
|
+
has_unconfirmed_email: has_unconfirmed_email,
|
70
|
+
}.compact
|
71
|
+
|
72
|
+
patch_json("#{endpoint}/api/oidc-users/#{subject_identifier}", params)
|
73
|
+
end
|
74
|
+
|
48
75
|
# Check if a user has an email subscription for the Transition Checker
|
49
76
|
#
|
50
77
|
# @param [String] govuk_account_session Value of the session header
|
@@ -96,13 +123,42 @@ class GdsApi::AccountApi < GdsApi::Base
|
|
96
123
|
get_json("#{endpoint}/api/attributes/names?#{querystring}", auth_headers(govuk_account_session))
|
97
124
|
end
|
98
125
|
|
126
|
+
# Get the details of an account-linked email subscription.
|
127
|
+
#
|
128
|
+
# @param [String] name Name of the subscription
|
129
|
+
# @param [String] govuk_account_session Value of the session header
|
130
|
+
#
|
131
|
+
# @return [Hash] Details of the subscription, if it exists.
|
132
|
+
def get_email_subscription(name:, govuk_account_session:)
|
133
|
+
get_json("#{endpoint}/api/email-subscriptions/#{CGI.escape(name)}", auth_headers(govuk_account_session))
|
134
|
+
end
|
135
|
+
|
136
|
+
# Create or update an account-linked email subscription.
|
137
|
+
#
|
138
|
+
# @param [String] name Name of the subscription
|
139
|
+
# @param [String] topic_slug The email-alert-api topic slug to subscribe to
|
140
|
+
# @param [String] govuk_account_session Value of the session header
|
141
|
+
#
|
142
|
+
# @return [Hash] Details of the newly created subscription.
|
143
|
+
def put_email_subscription(name:, topic_slug:, govuk_account_session:)
|
144
|
+
put_json("#{endpoint}/api/email-subscriptions/#{CGI.escape(name)}", { topic_slug: topic_slug }, auth_headers(govuk_account_session))
|
145
|
+
end
|
146
|
+
|
147
|
+
# Unsubscribe and delete an account-linked email subscription.
|
148
|
+
#
|
149
|
+
# @param [String] name Name of the subscription
|
150
|
+
# @param [String] govuk_account_session Value of the session header
|
151
|
+
def delete_email_subscription(name:, govuk_account_session:)
|
152
|
+
delete_json("#{endpoint}/api/email-subscriptions/#{CGI.escape(name)}", {}, auth_headers(govuk_account_session))
|
153
|
+
end
|
154
|
+
|
99
155
|
# Look up all pages saved by a user in their Account
|
100
156
|
#
|
101
157
|
# @param [String] govuk_account_session Value of the session header
|
102
158
|
#
|
103
|
-
# @return [Hash] containing :saved_pages, an array of single saved page hashes
|
159
|
+
# @return [Hash] containing :saved_pages, an array of single saved page hashes
|
104
160
|
def get_saved_pages(govuk_account_session:)
|
105
|
-
get_json("#{endpoint}/api/
|
161
|
+
get_json("#{endpoint}/api/saved-pages", auth_headers(govuk_account_session))
|
106
162
|
end
|
107
163
|
|
108
164
|
# Return a single page by unique URL
|
@@ -112,7 +168,7 @@ class GdsApi::AccountApi < GdsApi::Base
|
|
112
168
|
#
|
113
169
|
# @return [Hash] containing :saved_page, a hash of a single saved page value
|
114
170
|
def get_saved_page(page_path:, govuk_account_session:)
|
115
|
-
get_json("#{endpoint}/api/
|
171
|
+
get_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", auth_headers(govuk_account_session))
|
116
172
|
end
|
117
173
|
|
118
174
|
# Upsert a single saved page entry in a users account
|
@@ -122,7 +178,7 @@ class GdsApi::AccountApi < GdsApi::Base
|
|
122
178
|
#
|
123
179
|
# @return [Hash] A single saved page value (if sucessful)
|
124
180
|
def save_page(page_path:, govuk_account_session:)
|
125
|
-
put_json("#{endpoint}/api/
|
181
|
+
put_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", {}, auth_headers(govuk_account_session))
|
126
182
|
end
|
127
183
|
|
128
184
|
# Delete a single saved page entry from a users account
|
@@ -133,7 +189,7 @@ class GdsApi::AccountApi < GdsApi::Base
|
|
133
189
|
# @return [GdsApi::Response] A status code of 204 indicates the saved page has been successfully deleted.
|
134
190
|
# A status code of 404 indicates there is no saved page with this path.
|
135
191
|
def delete_saved_page(page_path:, govuk_account_session:)
|
136
|
-
delete_json("#{endpoint}/api/
|
192
|
+
delete_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", {}, auth_headers(govuk_account_session))
|
137
193
|
end
|
138
194
|
|
139
195
|
private
|
@@ -176,6 +176,44 @@ class GdsApi::EmailAlertApi < GdsApi::Base
|
|
176
176
|
)
|
177
177
|
end
|
178
178
|
|
179
|
+
# Verify a GOV.UK Account-holder has a corresponding subscriber
|
180
|
+
#
|
181
|
+
# @param [string] govuk_account_session The request's session identifier
|
182
|
+
#
|
183
|
+
# @return [Hash] subscriber
|
184
|
+
def authenticate_subscriber_by_govuk_account(govuk_account_session:)
|
185
|
+
post_json(
|
186
|
+
"#{endpoint}/subscribers/govuk-account",
|
187
|
+
govuk_account_session: govuk_account_session,
|
188
|
+
)
|
189
|
+
end
|
190
|
+
|
191
|
+
# Mark a subscriber as "linked" to its corresponding GOV.UK Account.
|
192
|
+
# In practice "linking" will mean that email-alert-frontend and
|
193
|
+
# account-api will treat the subscriber specially (eg, only allowing
|
194
|
+
# address changes via the account).
|
195
|
+
#
|
196
|
+
# @param [string] govuk_account_session The request's session identifier
|
197
|
+
#
|
198
|
+
# @return [Hash] subscriber
|
199
|
+
def link_subscriber_to_govuk_account(govuk_account_session:)
|
200
|
+
post_json(
|
201
|
+
"#{endpoint}/subscribers/govuk-account/link",
|
202
|
+
govuk_account_session: govuk_account_session,
|
203
|
+
)
|
204
|
+
end
|
205
|
+
|
206
|
+
# Find a subscriber which has been "linked" to a GOV.UK Account.
|
207
|
+
#
|
208
|
+
# @param [String] govuk_account_id An ID for the account.
|
209
|
+
#
|
210
|
+
# @return [Hash] subscriber
|
211
|
+
def find_subscriber_by_govuk_account(govuk_account_id:)
|
212
|
+
get_json(
|
213
|
+
"#{endpoint}/subscribers/govuk-account/#{govuk_account_id}",
|
214
|
+
)
|
215
|
+
end
|
216
|
+
|
179
217
|
# Verify a subscriber has control of a provided email
|
180
218
|
#
|
181
219
|
# @param [string] address Address to send verification email to
|
data/lib/gds_api/json_client.rb
CHANGED
@@ -180,10 +180,10 @@ module GdsApi
|
|
180
180
|
raise GdsApi::EndpointNotFound, "Could not connect to #{url}"
|
181
181
|
rescue RestClient::Exceptions::Timeout => e
|
182
182
|
logger.error loggable.merge(status: "timeout", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json
|
183
|
-
raise GdsApi::TimedOutException
|
183
|
+
raise GdsApi::TimedOutException, e.message
|
184
184
|
rescue URI::InvalidURIError => e
|
185
185
|
logger.error loggable.merge(status: "invalid_uri", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json
|
186
|
-
raise GdsApi::InvalidUrl
|
186
|
+
raise GdsApi::InvalidUrl, e.message
|
187
187
|
rescue RestClient::Exception => e
|
188
188
|
# Log the error here, since we have access to loggable, but raise the
|
189
189
|
# exception up to the calling method to deal with
|
@@ -192,10 +192,10 @@ module GdsApi
|
|
192
192
|
raise
|
193
193
|
rescue Errno::ECONNRESET => e
|
194
194
|
logger.error loggable.merge(status: "connection_reset", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json
|
195
|
-
raise GdsApi::TimedOutException
|
195
|
+
raise GdsApi::TimedOutException, e.message
|
196
196
|
rescue SocketError => e
|
197
197
|
logger.error loggable.merge(status: "socket_error", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json
|
198
|
-
raise GdsApi::SocketErrorException
|
198
|
+
raise GdsApi::SocketErrorException, e.message
|
199
199
|
end
|
200
200
|
end
|
201
201
|
end
|
@@ -5,6 +5,20 @@ module GdsApi
|
|
5
5
|
module AccountApi
|
6
6
|
ACCOUNT_API_ENDPOINT = Plek.find("account-api")
|
7
7
|
|
8
|
+
def stub_account_api_request(method, path, with: {}, response_status: 200, response_body: {}, govuk_account_session: nil, new_govuk_account_session: nil)
|
9
|
+
with.merge!(headers: { GdsApi::AccountApi::AUTH_HEADER_NAME => govuk_account_session }) if govuk_account_session
|
10
|
+
new_govuk_account_session = nil if response_status >= 400
|
11
|
+
to_return = { status: response_status, body: response_body.merge(govuk_account_session: new_govuk_account_session).compact.to_json }
|
12
|
+
if with.empty?
|
13
|
+
stub_request(method, "#{ACCOUNT_API_ENDPOINT}#{path}").to_return(**to_return)
|
14
|
+
else
|
15
|
+
stub_request(method, "#{ACCOUNT_API_ENDPOINT}#{path}").with(**with).to_return(**to_return)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
#########################
|
20
|
+
# GET /api/oauth2/sign-in
|
21
|
+
#########################
|
8
22
|
def stub_account_api_get_sign_in_url(redirect_path: nil, state_id: nil, level_of_authentication: nil, auth_uri: "http://auth/provider", state: "state")
|
9
23
|
querystring = Rack::Utils.build_nested_query({ redirect_path: redirect_path, state_id: state_id, level_of_authentication: level_of_authentication }.compact)
|
10
24
|
stub_request(:get, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/sign-in?#{querystring}")
|
@@ -14,6 +28,9 @@ module GdsApi
|
|
14
28
|
)
|
15
29
|
end
|
16
30
|
|
31
|
+
###########################
|
32
|
+
# POST /api/oauth2/callback
|
33
|
+
###########################
|
17
34
|
def stub_account_api_validates_auth_response(code: nil, state: nil, govuk_account_session: "govuk-account-session", redirect_path: "/", ga_client_id: "ga-client-id")
|
18
35
|
stub_request(:post, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/callback")
|
19
36
|
.with(body: hash_including({ code: code, state: state }.compact))
|
@@ -29,6 +46,9 @@ module GdsApi
|
|
29
46
|
.to_return(status: 401)
|
30
47
|
end
|
31
48
|
|
49
|
+
########################
|
50
|
+
# POST /api/oauth2/state
|
51
|
+
########################
|
32
52
|
def stub_account_api_create_registration_state(attributes: nil, state_id: "state-id")
|
33
53
|
stub_request(:post, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/state")
|
34
54
|
.with(body: hash_including({ attributes: attributes }.compact))
|
@@ -38,6 +58,156 @@ module GdsApi
|
|
38
58
|
)
|
39
59
|
end
|
40
60
|
|
61
|
+
###############
|
62
|
+
# GET /api/user
|
63
|
+
###############
|
64
|
+
def stub_account_api_user_info(id: "user-id", level_of_authentication: "level0", email: "email@example.com", email_verified: true, has_unconfirmed_email: false, services: {}, **options)
|
65
|
+
stub_account_api_request(
|
66
|
+
:get,
|
67
|
+
"/api/user",
|
68
|
+
response_body: {
|
69
|
+
id: id,
|
70
|
+
level_of_authentication: level_of_authentication,
|
71
|
+
email: email,
|
72
|
+
email_verified: email_verified,
|
73
|
+
has_unconfirmed_email: has_unconfirmed_email,
|
74
|
+
services: services,
|
75
|
+
},
|
76
|
+
**options,
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
def stub_account_api_user_info_service_state(service:, service_state: "yes", **options)
|
81
|
+
stub_account_api_user_info(
|
82
|
+
**options.merge(
|
83
|
+
services: options.fetch(:services, {}).merge(service => service_state),
|
84
|
+
),
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
def stub_account_api_unauthorized_user_info(**options)
|
89
|
+
stub_account_api_request(
|
90
|
+
:get,
|
91
|
+
"/api/user",
|
92
|
+
response_status: 401,
|
93
|
+
**options,
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
###########################################
|
98
|
+
# PATCH /api/oidc-users/:subject_identifier
|
99
|
+
###########################################
|
100
|
+
def stub_update_user_by_subject_identifier(subject_identifier:, email: nil, email_verified: nil, has_unconfirmed_email: nil, old_email: nil, old_email_verified: nil, old_has_unconfirmed_email: nil)
|
101
|
+
stub_account_api_request(
|
102
|
+
:patch,
|
103
|
+
"/api/oidc-users/#{subject_identifier}",
|
104
|
+
with: { body: hash_including({ email: email, email_verified: email_verified, has_unconfirmed_email: has_unconfirmed_email }.compact) },
|
105
|
+
response_body: {
|
106
|
+
sub: subject_identifier,
|
107
|
+
email: email || old_email,
|
108
|
+
email_verified: email_verified || old_email_verified,
|
109
|
+
has_unconfirmed_email: has_unconfirmed_email || old_has_unconfirmed_email,
|
110
|
+
},
|
111
|
+
)
|
112
|
+
end
|
113
|
+
|
114
|
+
####################################
|
115
|
+
# GET /api/email-subscriptions/:name
|
116
|
+
####################################
|
117
|
+
def stub_account_api_get_email_subscription(name:, topic_slug: "slug", email_alert_api_subscription_id: "12345", **options)
|
118
|
+
stub_account_api_request(
|
119
|
+
:get,
|
120
|
+
"/api/email-subscriptions/#{name}",
|
121
|
+
response_body: {
|
122
|
+
email_subscription: {
|
123
|
+
name: name,
|
124
|
+
topic_slug: topic_slug,
|
125
|
+
email_alert_api_subscription_id: email_alert_api_subscription_id,
|
126
|
+
},
|
127
|
+
},
|
128
|
+
**options,
|
129
|
+
)
|
130
|
+
end
|
131
|
+
|
132
|
+
def stub_account_api_get_email_subscription_does_not_exist(name:, **options)
|
133
|
+
stub_account_api_request(
|
134
|
+
:get,
|
135
|
+
"/api/email-subscriptions/#{name}",
|
136
|
+
response_status: 404,
|
137
|
+
**options,
|
138
|
+
)
|
139
|
+
end
|
140
|
+
|
141
|
+
def stub_account_api_get_email_subscription_unauthorized(name:, **options)
|
142
|
+
stub_account_api_request(
|
143
|
+
:get,
|
144
|
+
"/api/email-subscriptions/#{name}",
|
145
|
+
response_status: 401,
|
146
|
+
**options,
|
147
|
+
)
|
148
|
+
end
|
149
|
+
|
150
|
+
####################################
|
151
|
+
# PUT /api/email-subscriptions/:name
|
152
|
+
####################################
|
153
|
+
def stub_account_api_put_email_subscription(name:, topic_slug: nil, **options)
|
154
|
+
stub_account_api_request(
|
155
|
+
:put,
|
156
|
+
"/api/email-subscriptions/#{name}",
|
157
|
+
with: { body: hash_including({ topic_slug: topic_slug }.compact) },
|
158
|
+
response_body: {
|
159
|
+
email_subscription: {
|
160
|
+
name: name,
|
161
|
+
topic_slug: topic_slug || "slug",
|
162
|
+
},
|
163
|
+
},
|
164
|
+
**options,
|
165
|
+
)
|
166
|
+
end
|
167
|
+
|
168
|
+
def stub_account_api_unauthorized_put_email_subscription(name:, topic_slug: nil, **options)
|
169
|
+
stub_account_api_request(
|
170
|
+
:put,
|
171
|
+
"/api/email-subscriptions/#{name}",
|
172
|
+
with: { body: hash_including({ topic_slug: topic_slug }.compact) },
|
173
|
+
response_status: 401,
|
174
|
+
**options,
|
175
|
+
)
|
176
|
+
end
|
177
|
+
|
178
|
+
#######################################
|
179
|
+
# DELETE /api/email-subscriptions/:name
|
180
|
+
#######################################
|
181
|
+
def stub_account_api_delete_email_subscription(name:, **options)
|
182
|
+
stub_account_api_request(
|
183
|
+
:delete,
|
184
|
+
"/api/email-subscriptions/#{name}",
|
185
|
+
response_status: 204,
|
186
|
+
**options,
|
187
|
+
)
|
188
|
+
end
|
189
|
+
|
190
|
+
def stub_account_api_delete_email_subscription_does_not_exist(name:, **options)
|
191
|
+
stub_account_api_request(
|
192
|
+
:delete,
|
193
|
+
"/api/email-subscriptions/#{name}",
|
194
|
+
response_status: 404,
|
195
|
+
**options,
|
196
|
+
)
|
197
|
+
end
|
198
|
+
|
199
|
+
def stub_account_api_unauthorized_delete_email_subscription(name:, **options)
|
200
|
+
stub_account_api_request(
|
201
|
+
:delete,
|
202
|
+
"/api/email-subscriptions/#{name}",
|
203
|
+
response_status: 401,
|
204
|
+
**options,
|
205
|
+
)
|
206
|
+
end
|
207
|
+
|
208
|
+
################################################
|
209
|
+
# GET /api/transition-checker-email-subscription
|
210
|
+
################################################
|
41
211
|
def stub_account_api_has_email_subscription(**options)
|
42
212
|
stub_account_api_request(
|
43
213
|
:get,
|
@@ -75,6 +245,9 @@ module GdsApi
|
|
75
245
|
)
|
76
246
|
end
|
77
247
|
|
248
|
+
#################################################
|
249
|
+
# POST /api/transition-checker-email-subscription
|
250
|
+
#################################################
|
78
251
|
def stub_account_api_set_email_subscription(slug: nil, **options)
|
79
252
|
stub_account_api_request(
|
80
253
|
:post,
|
@@ -105,6 +278,9 @@ module GdsApi
|
|
105
278
|
)
|
106
279
|
end
|
107
280
|
|
281
|
+
#####################
|
282
|
+
# GET /api/attributes
|
283
|
+
#####################
|
108
284
|
def stub_account_api_has_attributes(attributes: [], values: {}, **options)
|
109
285
|
querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
|
110
286
|
stub_account_api_request(
|
@@ -136,6 +312,9 @@ module GdsApi
|
|
136
312
|
)
|
137
313
|
end
|
138
314
|
|
315
|
+
#######################
|
316
|
+
# PATCH /api/attributes
|
317
|
+
#######################
|
139
318
|
def stub_account_api_set_attributes(attributes: nil, **options)
|
140
319
|
stub_account_api_request(
|
141
320
|
:patch,
|
@@ -166,6 +345,9 @@ module GdsApi
|
|
166
345
|
)
|
167
346
|
end
|
168
347
|
|
348
|
+
###########################
|
349
|
+
# GET /api/attributes/names
|
350
|
+
###########################
|
169
351
|
def stub_account_api_get_attributes_names(attributes: [], **options)
|
170
352
|
querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
|
171
353
|
stub_account_api_request(
|
@@ -197,24 +379,13 @@ module GdsApi
|
|
197
379
|
)
|
198
380
|
end
|
199
381
|
|
200
|
-
def stub_account_api_request(method, path, with: {}, response_status: 200, response_body: {}, govuk_account_session: nil, new_govuk_account_session: nil)
|
201
|
-
with.merge!(headers: { GdsApi::AccountApi::AUTH_HEADER_NAME => govuk_account_session }) if govuk_account_session
|
202
|
-
new_govuk_account_session = nil if response_status >= 400
|
203
|
-
to_return = { status: response_status, body: response_body.merge(govuk_account_session: new_govuk_account_session).compact.to_json }
|
204
|
-
if with.empty?
|
205
|
-
stub_request(method, "#{ACCOUNT_API_ENDPOINT}#{path}").to_return(**to_return)
|
206
|
-
else
|
207
|
-
stub_request(method, "#{ACCOUNT_API_ENDPOINT}#{path}").with(**with).to_return(**to_return)
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
382
|
######################
|
212
|
-
# GET /api/
|
383
|
+
# GET /api/saved-pages
|
213
384
|
######################
|
214
385
|
def stub_account_api_returning_saved_pages(saved_pages: [], **options)
|
215
386
|
stub_account_api_request(
|
216
387
|
:get,
|
217
|
-
"/api/
|
388
|
+
"/api/saved-pages",
|
218
389
|
response_body: { saved_pages: saved_pages },
|
219
390
|
**options,
|
220
391
|
)
|
@@ -223,7 +394,7 @@ module GdsApi
|
|
223
394
|
def stub_account_api_unauthorized_get_saved_pages(**options)
|
224
395
|
stub_account_api_request(
|
225
396
|
:get,
|
226
|
-
"/api/
|
397
|
+
"/api/saved-pages",
|
227
398
|
response_status: 401,
|
228
399
|
**options,
|
229
400
|
)
|
@@ -232,11 +403,17 @@ module GdsApi
|
|
232
403
|
#################################
|
233
404
|
# GET /api/saved_pages/:page_path
|
234
405
|
#################################
|
235
|
-
def stub_account_api_get_saved_page(page_path:, **options)
|
406
|
+
def stub_account_api_get_saved_page(page_path:, content_id: "46163ed2-1777-4ee6-bdd4-6a2007e49d8f", title: "Ministry of Magic", **options)
|
236
407
|
stub_account_api_request(
|
237
408
|
:get,
|
238
|
-
"/api/
|
239
|
-
response_body: {
|
409
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
410
|
+
response_body: {
|
411
|
+
saved_page: {
|
412
|
+
page_path: page_path,
|
413
|
+
content_id: content_id,
|
414
|
+
title: title,
|
415
|
+
},
|
416
|
+
},
|
240
417
|
**options,
|
241
418
|
)
|
242
419
|
end
|
@@ -244,7 +421,7 @@ module GdsApi
|
|
244
421
|
def stub_account_api_does_not_have_saved_page(page_path:, **options)
|
245
422
|
stub_account_api_request(
|
246
423
|
:get,
|
247
|
-
"/api/
|
424
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
248
425
|
response_status: 404,
|
249
426
|
**options,
|
250
427
|
)
|
@@ -253,20 +430,26 @@ module GdsApi
|
|
253
430
|
def stub_account_api_unauthorized_get_saved_page(page_path:, **options)
|
254
431
|
stub_account_api_request(
|
255
432
|
:get,
|
256
|
-
"/api/
|
433
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
257
434
|
response_status: 401,
|
258
435
|
**options,
|
259
436
|
)
|
260
437
|
end
|
261
438
|
|
262
439
|
#################################
|
263
|
-
# PUT /api/
|
440
|
+
# PUT /api/saved-pages/:page_path
|
264
441
|
#################################
|
265
|
-
def stub_account_api_save_page(page_path:, **options)
|
442
|
+
def stub_account_api_save_page(page_path:, content_id: "c840bfa2-011a-42cc-ac7a-a6da990aff0b", title: "Ministry of Magic", **options)
|
266
443
|
stub_account_api_request(
|
267
444
|
:put,
|
268
|
-
"/api/
|
269
|
-
response_body: {
|
445
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
446
|
+
response_body: {
|
447
|
+
saved_page: {
|
448
|
+
page_path: page_path,
|
449
|
+
content_id: content_id,
|
450
|
+
title: title,
|
451
|
+
},
|
452
|
+
},
|
270
453
|
**options,
|
271
454
|
)
|
272
455
|
end
|
@@ -278,9 +461,9 @@ module GdsApi
|
|
278
461
|
def stub_account_api_save_page_cannot_save_page(page_path:, **options)
|
279
462
|
stub_account_api_request(
|
280
463
|
:put,
|
281
|
-
"/api/
|
464
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
282
465
|
response_status: 422,
|
283
|
-
response_body:
|
466
|
+
response_body: cannot_save_page_problem_detail({ page_path: page_path }),
|
284
467
|
**options,
|
285
468
|
)
|
286
469
|
end
|
@@ -288,7 +471,7 @@ module GdsApi
|
|
288
471
|
def stub_account_api_unauthorized_save_page(page_path:, **options)
|
289
472
|
stub_account_api_request(
|
290
473
|
:put,
|
291
|
-
"/api/
|
474
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
292
475
|
response_status: 401,
|
293
476
|
**options,
|
294
477
|
)
|
@@ -309,7 +492,7 @@ module GdsApi
|
|
309
492
|
def stub_account_api_delete_saved_page(page_path:, **options)
|
310
493
|
stub_account_api_request(
|
311
494
|
:delete,
|
312
|
-
"/api/
|
495
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
313
496
|
response_status: 204,
|
314
497
|
**options,
|
315
498
|
)
|
@@ -318,7 +501,7 @@ module GdsApi
|
|
318
501
|
def stub_account_api_delete_saved_page_does_not_exist(page_path:, **options)
|
319
502
|
stub_account_api_request(
|
320
503
|
:delete,
|
321
|
-
"/api/
|
504
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
322
505
|
response_status: 404,
|
323
506
|
**options,
|
324
507
|
)
|
@@ -327,7 +510,7 @@ module GdsApi
|
|
327
510
|
def stub_account_api_delete_saved_page_unauthorised(page_path:, **options)
|
328
511
|
stub_account_api_request(
|
329
512
|
:delete,
|
330
|
-
"/api/
|
513
|
+
"/api/saved-pages/#{CGI.escape(page_path)}",
|
331
514
|
response_status: 401,
|
332
515
|
**options,
|
333
516
|
)
|
@@ -6,11 +6,11 @@ module GdsApi
|
|
6
6
|
module EmailAlertApi
|
7
7
|
EMAIL_ALERT_API_ENDPOINT = Plek.find("email-alert-api")
|
8
8
|
|
9
|
-
def stub_email_alert_api_has_updated_subscriber(id, new_address)
|
9
|
+
def stub_email_alert_api_has_updated_subscriber(id, new_address, govuk_account_id: nil)
|
10
10
|
stub_request(:patch, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/#{id}")
|
11
11
|
.to_return(
|
12
12
|
status: 200,
|
13
|
-
body: get_subscriber_response(id, new_address).to_json,
|
13
|
+
body: get_subscriber_response(id, new_address, govuk_account_id).to_json,
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
@@ -265,11 +265,11 @@ module GdsApi
|
|
265
265
|
).to_return(status: 422)
|
266
266
|
end
|
267
267
|
|
268
|
-
def stub_email_alert_api_sends_subscriber_verification_email(subscriber_id, address)
|
268
|
+
def stub_email_alert_api_sends_subscriber_verification_email(subscriber_id, address, govuk_account_id: nil)
|
269
269
|
stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/auth-token")
|
270
270
|
.to_return(
|
271
271
|
status: 201,
|
272
|
-
body: get_subscriber_response(subscriber_id, address).to_json,
|
272
|
+
body: get_subscriber_response(subscriber_id, address, govuk_account_id).to_json,
|
273
273
|
)
|
274
274
|
end
|
275
275
|
|
@@ -283,6 +283,97 @@ module GdsApi
|
|
283
283
|
.to_return(status: 404)
|
284
284
|
end
|
285
285
|
|
286
|
+
def stub_email_alert_api_authenticate_subscriber_by_govuk_account(govuk_account_session, subscriber_id, address, govuk_account_id: "user-id", new_govuk_account_session: nil)
|
287
|
+
stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account")
|
288
|
+
.with(
|
289
|
+
body: { govuk_account_session: govuk_account_session }.to_json,
|
290
|
+
).to_return(
|
291
|
+
status: 200,
|
292
|
+
body: {
|
293
|
+
govuk_account_session: new_govuk_account_session,
|
294
|
+
}.compact.merge(get_subscriber_response(subscriber_id, address, govuk_account_id)).to_json,
|
295
|
+
)
|
296
|
+
end
|
297
|
+
|
298
|
+
def stub_email_alert_api_authenticate_subscriber_by_govuk_account_session_invalid(govuk_account_session)
|
299
|
+
stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account")
|
300
|
+
.with(
|
301
|
+
body: { govuk_account_session: govuk_account_session }.to_json,
|
302
|
+
).to_return(
|
303
|
+
status: 401,
|
304
|
+
)
|
305
|
+
end
|
306
|
+
|
307
|
+
def stub_email_alert_api_authenticate_subscriber_by_govuk_account_email_unverified(govuk_account_session, new_govuk_account_session: nil)
|
308
|
+
stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account")
|
309
|
+
.with(
|
310
|
+
body: { govuk_account_session: govuk_account_session }.to_json,
|
311
|
+
).to_return(
|
312
|
+
status: 403,
|
313
|
+
body: {
|
314
|
+
govuk_account_session: new_govuk_account_session,
|
315
|
+
}.compact.to_json,
|
316
|
+
)
|
317
|
+
end
|
318
|
+
|
319
|
+
def stub_email_alert_api_authenticate_subscriber_by_govuk_account_no_subscriber(govuk_account_session, new_govuk_account_session: nil)
|
320
|
+
stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account")
|
321
|
+
.with(
|
322
|
+
body: { govuk_account_session: govuk_account_session }.to_json,
|
323
|
+
).to_return(
|
324
|
+
status: 404,
|
325
|
+
body: {
|
326
|
+
govuk_account_session: new_govuk_account_session,
|
327
|
+
}.compact.to_json,
|
328
|
+
)
|
329
|
+
end
|
330
|
+
|
331
|
+
def stub_email_alert_api_link_subscriber_to_govuk_account(govuk_account_session, subscriber_id, address, govuk_account_id: "user-id", new_govuk_account_session: nil)
|
332
|
+
stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/link")
|
333
|
+
.with(
|
334
|
+
body: { govuk_account_session: govuk_account_session }.to_json,
|
335
|
+
).to_return(
|
336
|
+
status: 200,
|
337
|
+
body: {
|
338
|
+
govuk_account_session: new_govuk_account_session,
|
339
|
+
}.compact.merge(get_subscriber_response(subscriber_id, address, govuk_account_id)).to_json,
|
340
|
+
)
|
341
|
+
end
|
342
|
+
|
343
|
+
def stub_email_alert_api_link_subscriber_to_govuk_account_session_invalid(govuk_account_session)
|
344
|
+
stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/link")
|
345
|
+
.with(
|
346
|
+
body: { govuk_account_session: govuk_account_session }.to_json,
|
347
|
+
).to_return(
|
348
|
+
status: 401,
|
349
|
+
)
|
350
|
+
end
|
351
|
+
|
352
|
+
def stub_email_alert_api_link_subscriber_to_govuk_account_email_unverified(govuk_account_session, new_govuk_account_session: nil)
|
353
|
+
stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/link")
|
354
|
+
.with(
|
355
|
+
body: { govuk_account_session: govuk_account_session }.to_json,
|
356
|
+
).to_return(
|
357
|
+
status: 403,
|
358
|
+
body: {
|
359
|
+
govuk_account_session: new_govuk_account_session,
|
360
|
+
}.compact.to_json,
|
361
|
+
)
|
362
|
+
end
|
363
|
+
|
364
|
+
def stub_email_alert_api_find_subscriber_by_govuk_account(govuk_account_id, subscriber_id, address)
|
365
|
+
stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/#{govuk_account_id}")
|
366
|
+
.to_return(
|
367
|
+
status: 200,
|
368
|
+
body: get_subscriber_response(subscriber_id, address, govuk_account_id).to_json,
|
369
|
+
)
|
370
|
+
end
|
371
|
+
|
372
|
+
def stub_email_alert_api_find_subscriber_by_govuk_account_no_subscriber(govuk_account_id)
|
373
|
+
stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/#{govuk_account_id}")
|
374
|
+
.to_return(status: 404)
|
375
|
+
end
|
376
|
+
|
286
377
|
def assert_unsubscribed(uuid)
|
287
378
|
assert_requested(:post, "#{EMAIL_ALERT_API_ENDPOINT}/unsubscribe/#{uuid}", times: 1)
|
288
379
|
end
|
@@ -314,11 +405,12 @@ module GdsApi
|
|
314
405
|
|
315
406
|
private
|
316
407
|
|
317
|
-
def get_subscriber_response(id, address)
|
408
|
+
def get_subscriber_response(id, address, govuk_account_id)
|
318
409
|
{
|
319
410
|
"subscriber" => {
|
320
411
|
"id" => id,
|
321
412
|
"address" => address,
|
413
|
+
"govuk_account_id" => govuk_account_id,
|
322
414
|
},
|
323
415
|
}
|
324
416
|
end
|
data/lib/gds_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gds-api-adapters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 71.
|
4
|
+
version: 71.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -445,7 +445,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
445
445
|
- !ruby/object:Gem::Version
|
446
446
|
version: '0'
|
447
447
|
requirements: []
|
448
|
-
rubygems_version: 3.
|
448
|
+
rubygems_version: 3.0.3
|
449
449
|
signing_key:
|
450
450
|
specification_version: 4
|
451
451
|
summary: Adapters to work with GDS APIs
|