gds-api-adapters 71.6.0 → 72.0.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
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1f884f8a2e2cd91ddec2d467ae503ae442ce852b033a5dfc3cf7d374f8fd60a0
         | 
| 4 | 
            +
              data.tar.gz: aa34f87913d8ff559a85b99dd5c1fecf82bfddffad74fa2fea19fefbc3f2128d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d6ca46bd2cd504c1a434d6fbf7f91399b4542beb2ddc996452236e429abf66530f43ddf00b6078630fc034b9f533f91ae8ca59ba4937a9b31dcb2aea936dc0ea
         | 
| 7 | 
            +
              data.tar.gz: d31a33695afd0f60cdedc7cd70babbc0f01db7fa4abda227d7d0de8f0e5d237ee260e47a0e528ac90db220de1a4ebc1ab9ba6a3dd62a1c86272cf9fc4ddcf7a5
         | 
    
        data/lib/gds_api/account_api.rb
    CHANGED
    
    | @@ -11,15 +11,13 @@ class GdsApi::AccountApi < GdsApi::Base | |
| 11 11 | 
             
              # Get an OAuth sign-in URL to redirect the user to
         | 
| 12 12 | 
             
              #
         | 
| 13 13 | 
             
              # @param [String, nil] redirect_path path on GOV.UK to send the user to after authentication
         | 
| 14 | 
            -
              # @param [String, nil] state_id identifier originally returned by #create_registration_state
         | 
| 15 14 | 
             
              # @param [String, nil] level_of_authentication either "level1" (require MFA) or "level0" (do not require MFA)
         | 
| 16 15 | 
             
              #
         | 
| 17 16 | 
             
              # @return [Hash] An authentication URL and the OAuth state parameter (for CSRF protection)
         | 
| 18 | 
            -
              def get_sign_in_url(redirect_path: nil,  | 
| 17 | 
            +
              def get_sign_in_url(redirect_path: nil, level_of_authentication: nil)
         | 
| 19 18 | 
             
                querystring = nested_query_string(
         | 
| 20 19 | 
             
                  {
         | 
| 21 20 | 
             
                    redirect_path: redirect_path,
         | 
| 22 | 
            -
                    state_id: state_id,
         | 
| 23 21 | 
             
                    level_of_authentication: level_of_authentication,
         | 
| 24 22 | 
             
                  }.compact,
         | 
| 25 23 | 
             
                )
         | 
| @@ -36,15 +34,6 @@ class GdsApi::AccountApi < GdsApi::Base | |
| 36 34 | 
             
                post_json("#{endpoint}/api/oauth2/callback", code: code, state: state)
         | 
| 37 35 | 
             
              end
         | 
| 38 36 |  | 
| 39 | 
            -
              # Register some initial state, to pass to get_sign_in_url, which is used to initialise the account if the user signs up
         | 
| 40 | 
            -
              #
         | 
| 41 | 
            -
              # @param [Hash, nil] attributes Initial attributes to store
         | 
| 42 | 
            -
              #
         | 
| 43 | 
            -
              # @return [Hash] The state ID to pass to get_sign_in_url
         | 
| 44 | 
            -
              def create_registration_state(attributes:)
         | 
| 45 | 
            -
                post_json("#{endpoint}/api/oauth2/state", attributes: attributes)
         | 
| 46 | 
            -
              end
         | 
| 47 | 
            -
             | 
| 48 37 | 
             
              # Get all the information about a user needed to render the account home page
         | 
| 49 38 | 
             
              #
         | 
| 50 39 | 
             
              # @param [String] govuk_account_session Value of the session header
         | 
| @@ -72,25 +61,6 @@ class GdsApi::AccountApi < GdsApi::Base | |
| 72 61 | 
             
                patch_json("#{endpoint}/api/oidc-users/#{subject_identifier}", params)
         | 
| 73 62 | 
             
              end
         | 
| 74 63 |  | 
| 75 | 
            -
              # Check if a user has an email subscription for the Transition Checker
         | 
| 76 | 
            -
              #
         | 
| 77 | 
            -
              # @param [String] govuk_account_session Value of the session header
         | 
| 78 | 
            -
              #
         | 
| 79 | 
            -
              # @return [Hash] Whether the user has a subscription, and a new session header
         | 
| 80 | 
            -
              def check_for_email_subscription(govuk_account_session:)
         | 
| 81 | 
            -
                get_json("#{endpoint}/api/transition-checker-email-subscription", auth_headers(govuk_account_session))
         | 
| 82 | 
            -
              end
         | 
| 83 | 
            -
             | 
| 84 | 
            -
              # Create or update a user's email subscription for the Transition Checker
         | 
| 85 | 
            -
              #
         | 
| 86 | 
            -
              # @param [String] govuk_account_session Value of the session header
         | 
| 87 | 
            -
              # @param [String] slug The email topic slug
         | 
| 88 | 
            -
              #
         | 
| 89 | 
            -
              # @return [Hash] Whether the user has a subscription, and a new session header
         | 
| 90 | 
            -
              def set_email_subscription(govuk_account_session:, slug:)
         | 
| 91 | 
            -
                post_json("#{endpoint}/api/transition-checker-email-subscription", { slug: slug }, auth_headers(govuk_account_session))
         | 
| 92 | 
            -
              end
         | 
| 93 | 
            -
             | 
| 94 64 | 
             
              # Look up the values of a user's attributes
         | 
| 95 65 | 
             
              #
         | 
| 96 66 | 
             
              # @param [String] attributes Names of the attributes to check
         | 
| @@ -156,10 +156,10 @@ class GdsApi::EmailAlertApi < GdsApi::Base | |
| 156 156 | 
             
              # @param [string] Subscriber new_address
         | 
| 157 157 | 
             
              #
         | 
| 158 158 | 
             
              # @return [Hash] subscriber
         | 
| 159 | 
            -
              def change_subscriber(id:, new_address:)
         | 
| 159 | 
            +
              def change_subscriber(id:, new_address:, on_conflict: nil)
         | 
| 160 160 | 
             
                patch_json(
         | 
| 161 161 | 
             
                  "#{endpoint}/subscribers/#{uri_encode(id)}",
         | 
| 162 | 
            -
                  new_address: new_address,
         | 
| 162 | 
            +
                  { new_address: new_address, on_conflict: on_conflict }.compact,
         | 
| 163 163 | 
             
                )
         | 
| 164 164 | 
             
              end
         | 
| 165 165 |  | 
| @@ -188,6 +188,32 @@ class GdsApi::EmailAlertApi < GdsApi::Base | |
| 188 188 | 
             
                )
         | 
| 189 189 | 
             
              end
         | 
| 190 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 | 
            +
             | 
| 191 217 | 
             
              # Verify a subscriber has control of a provided email
         | 
| 192 218 | 
             
              #
         | 
| 193 219 | 
             
              # @param [string]       address       Address to send verification email to
         | 
    
        data/lib/gds_api/exceptions.rb
    CHANGED
    
    | @@ -3,7 +3,7 @@ module GdsApi | |
| 3 3 | 
             
              class BaseError < StandardError
         | 
| 4 4 | 
             
                # Give Sentry extra context about this event
         | 
| 5 5 | 
             
                # https://docs.sentry.io/clients/ruby/context/
         | 
| 6 | 
            -
                def  | 
| 6 | 
            +
                def sentry_context
         | 
| 7 7 | 
             
                  {
         | 
| 8 8 | 
             
                    # Make Sentry group exceptions by type instead of message, so all
         | 
| 9 9 | 
             
                    # exceptions like `GdsApi::TimedOutException` will get grouped as one
         | 
| @@ -19,8 +19,8 @@ module GdsApi | |
| 19 19 | 
             
                  #########################
         | 
| 20 20 | 
             
                  # GET /api/oauth2/sign-in
         | 
| 21 21 | 
             
                  #########################
         | 
| 22 | 
            -
                  def stub_account_api_get_sign_in_url(redirect_path: nil,  | 
| 23 | 
            -
                    querystring = Rack::Utils.build_nested_query({ redirect_path: redirect_path,  | 
| 22 | 
            +
                  def stub_account_api_get_sign_in_url(redirect_path: nil, level_of_authentication: nil, auth_uri: "http://auth/provider", state: "state")
         | 
| 23 | 
            +
                    querystring = Rack::Utils.build_nested_query({ redirect_path: redirect_path, level_of_authentication: level_of_authentication }.compact)
         | 
| 24 24 | 
             
                    stub_request(:get, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/sign-in?#{querystring}")
         | 
| 25 25 | 
             
                      .to_return(
         | 
| 26 26 | 
             
                        status: 200,
         | 
| @@ -31,12 +31,12 @@ module GdsApi | |
| 31 31 | 
             
                  ###########################
         | 
| 32 32 | 
             
                  # POST /api/oauth2/callback
         | 
| 33 33 | 
             
                  ###########################
         | 
| 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")
         | 
| 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", cookie_consent: false)
         | 
| 35 35 | 
             
                    stub_request(:post, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/callback")
         | 
| 36 36 | 
             
                      .with(body: hash_including({ code: code, state: state }.compact))
         | 
| 37 37 | 
             
                      .to_return(
         | 
| 38 38 | 
             
                        status: 200,
         | 
| 39 | 
            -
                        body: { govuk_account_session: govuk_account_session, redirect_path: redirect_path, ga_client_id: ga_client_id }.to_json,
         | 
| 39 | 
            +
                        body: { govuk_account_session: govuk_account_session, redirect_path: redirect_path, ga_client_id: ga_client_id, cookie_consent: cookie_consent }.to_json,
         | 
| 40 40 | 
             
                      )
         | 
| 41 41 | 
             
                  end
         | 
| 42 42 |  | 
| @@ -46,26 +46,15 @@ module GdsApi | |
| 46 46 | 
             
                      .to_return(status: 401)
         | 
| 47 47 | 
             
                  end
         | 
| 48 48 |  | 
| 49 | 
            -
                  ########################
         | 
| 50 | 
            -
                  # POST /api/oauth2/state
         | 
| 51 | 
            -
                  ########################
         | 
| 52 | 
            -
                  def stub_account_api_create_registration_state(attributes: nil, state_id: "state-id")
         | 
| 53 | 
            -
                    stub_request(:post, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/state")
         | 
| 54 | 
            -
                      .with(body: hash_including({ attributes: attributes }.compact))
         | 
| 55 | 
            -
                      .to_return(
         | 
| 56 | 
            -
                        status: 200,
         | 
| 57 | 
            -
                        body: { state_id: state_id }.to_json,
         | 
| 58 | 
            -
                      )
         | 
| 59 | 
            -
                  end
         | 
| 60 | 
            -
             | 
| 61 49 | 
             
                  ###############
         | 
| 62 50 | 
             
                  # GET /api/user
         | 
| 63 51 | 
             
                  ###############
         | 
| 64 | 
            -
                  def stub_account_api_user_info(level_of_authentication: "level0", email: "email@example.com", email_verified: true, has_unconfirmed_email: false, services: {}, **options)
         | 
| 52 | 
            +
                  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 53 | 
             
                    stub_account_api_request(
         | 
| 66 54 | 
             
                      :get,
         | 
| 67 55 | 
             
                      "/api/user",
         | 
| 68 56 | 
             
                      response_body: {
         | 
| 57 | 
            +
                        id: id,
         | 
| 69 58 | 
             
                        level_of_authentication: level_of_authentication,
         | 
| 70 59 | 
             
                        email: email,
         | 
| 71 60 | 
             
                        email_verified: email_verified,
         | 
| @@ -137,7 +126,7 @@ module GdsApi | |
| 137 126 | 
             
                    )
         | 
| 138 127 | 
             
                  end
         | 
| 139 128 |  | 
| 140 | 
            -
                  def  | 
| 129 | 
            +
                  def stub_account_api_unauthorized_get_email_subscription(name:, **options)
         | 
| 141 130 | 
             
                    stub_account_api_request(
         | 
| 142 131 | 
             
                      :get,
         | 
| 143 132 | 
             
                      "/api/email-subscriptions/#{name}",
         | 
| @@ -204,79 +193,6 @@ module GdsApi | |
| 204 193 | 
             
                    )
         | 
| 205 194 | 
             
                  end
         | 
| 206 195 |  | 
| 207 | 
            -
                  ################################################
         | 
| 208 | 
            -
                  # GET /api/transition-checker-email-subscription
         | 
| 209 | 
            -
                  ################################################
         | 
| 210 | 
            -
                  def stub_account_api_has_email_subscription(**options)
         | 
| 211 | 
            -
                    stub_account_api_request(
         | 
| 212 | 
            -
                      :get,
         | 
| 213 | 
            -
                      "/api/transition-checker-email-subscription",
         | 
| 214 | 
            -
                      response_body: { has_subscription: true },
         | 
| 215 | 
            -
                      **options,
         | 
| 216 | 
            -
                    )
         | 
| 217 | 
            -
                  end
         | 
| 218 | 
            -
             | 
| 219 | 
            -
                  def stub_account_api_does_not_have_email_subscription(**options)
         | 
| 220 | 
            -
                    stub_account_api_request(
         | 
| 221 | 
            -
                      :get,
         | 
| 222 | 
            -
                      "/api/transition-checker-email-subscription",
         | 
| 223 | 
            -
                      response_body: { has_subscription: false },
         | 
| 224 | 
            -
                      **options,
         | 
| 225 | 
            -
                    )
         | 
| 226 | 
            -
                  end
         | 
| 227 | 
            -
             | 
| 228 | 
            -
                  def stub_account_api_unauthorized_get_email_subscription(**options)
         | 
| 229 | 
            -
                    stub_account_api_request(
         | 
| 230 | 
            -
                      :get,
         | 
| 231 | 
            -
                      "/api/transition-checker-email-subscription",
         | 
| 232 | 
            -
                      response_status: 401,
         | 
| 233 | 
            -
                      **options,
         | 
| 234 | 
            -
                    )
         | 
| 235 | 
            -
                  end
         | 
| 236 | 
            -
             | 
| 237 | 
            -
                  def stub_account_api_forbidden_get_email_subscription(needed_level_of_authentication: "level1", **options)
         | 
| 238 | 
            -
                    stub_account_api_request(
         | 
| 239 | 
            -
                      :get,
         | 
| 240 | 
            -
                      "/api/transition-checker-email-subscription",
         | 
| 241 | 
            -
                      response_status: 403,
         | 
| 242 | 
            -
                      response_body: { needed_level_of_authentication: needed_level_of_authentication },
         | 
| 243 | 
            -
                      **options,
         | 
| 244 | 
            -
                    )
         | 
| 245 | 
            -
                  end
         | 
| 246 | 
            -
             | 
| 247 | 
            -
                  #################################################
         | 
| 248 | 
            -
                  # POST /api/transition-checker-email-subscription
         | 
| 249 | 
            -
                  #################################################
         | 
| 250 | 
            -
                  def stub_account_api_set_email_subscription(slug: nil, **options)
         | 
| 251 | 
            -
                    stub_account_api_request(
         | 
| 252 | 
            -
                      :post,
         | 
| 253 | 
            -
                      "/api/transition-checker-email-subscription",
         | 
| 254 | 
            -
                      with: { body: hash_including({ slug: slug }.compact) },
         | 
| 255 | 
            -
                      **options,
         | 
| 256 | 
            -
                    )
         | 
| 257 | 
            -
                  end
         | 
| 258 | 
            -
             | 
| 259 | 
            -
                  def stub_account_api_unauthorized_set_email_subscription(slug: nil, **options)
         | 
| 260 | 
            -
                    stub_account_api_request(
         | 
| 261 | 
            -
                      :post,
         | 
| 262 | 
            -
                      "/api/transition-checker-email-subscription",
         | 
| 263 | 
            -
                      with: { body: hash_including({ slug: slug }.compact) },
         | 
| 264 | 
            -
                      response_status: 401,
         | 
| 265 | 
            -
                      **options,
         | 
| 266 | 
            -
                    )
         | 
| 267 | 
            -
                  end
         | 
| 268 | 
            -
             | 
| 269 | 
            -
                  def stub_account_api_forbidden_set_email_subscription(slug: nil, needed_level_of_authentication: "level1", **options)
         | 
| 270 | 
            -
                    stub_account_api_request(
         | 
| 271 | 
            -
                      :post,
         | 
| 272 | 
            -
                      "/api/transition-checker-email-subscription",
         | 
| 273 | 
            -
                      with: { body: hash_including({ slug: slug }.compact) },
         | 
| 274 | 
            -
                      response_status: 403,
         | 
| 275 | 
            -
                      response_body: { needed_level_of_authentication: needed_level_of_authentication },
         | 
| 276 | 
            -
                      **options,
         | 
| 277 | 
            -
                    )
         | 
| 278 | 
            -
                  end
         | 
| 279 | 
            -
             | 
| 280 196 | 
             
                  #####################
         | 
| 281 197 | 
             
                  # GET /api/attributes
         | 
| 282 198 | 
             
                  #####################
         | 
| @@ -506,7 +422,7 @@ module GdsApi | |
| 506 422 | 
             
                    )
         | 
| 507 423 | 
             
                  end
         | 
| 508 424 |  | 
| 509 | 
            -
                  def  | 
| 425 | 
            +
                  def stub_account_api_unauthorized_delete_saved_page(page_path:, **options)
         | 
| 510 426 | 
             
                    stub_account_api_request(
         | 
| 511 427 | 
             
                      :delete,
         | 
| 512 428 | 
             
                      "/api/saved-pages/#{CGI.escape(page_path)}",
         | 
| @@ -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,7 +283,12 @@ module GdsApi | |
| 283 283 | 
             
                      .to_return(status: 404)
         | 
| 284 284 | 
             
                  end
         | 
| 285 285 |  | 
| 286 | 
            -
                  def  | 
| 286 | 
            +
                  def stub_email_alert_api_subscriber_verification_email_linked_to_govuk_account
         | 
| 287 | 
            +
                    stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/auth-token")
         | 
| 288 | 
            +
                      .to_return(status: 403)
         | 
| 289 | 
            +
                  end
         | 
| 290 | 
            +
             | 
| 291 | 
            +
                  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 292 | 
             
                    stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account")
         | 
| 288 293 | 
             
                      .with(
         | 
| 289 294 | 
             
                        body: { govuk_account_session: govuk_account_session }.to_json,
         | 
| @@ -291,7 +296,7 @@ module GdsApi | |
| 291 296 | 
             
                        status: 200,
         | 
| 292 297 | 
             
                        body: {
         | 
| 293 298 | 
             
                          govuk_account_session: new_govuk_account_session,
         | 
| 294 | 
            -
                        }.compact.merge(get_subscriber_response(subscriber_id, address)).to_json,
         | 
| 299 | 
            +
                        }.compact.merge(get_subscriber_response(subscriber_id, address, govuk_account_id)).to_json,
         | 
| 295 300 | 
             
                      )
         | 
| 296 301 | 
             
                  end
         | 
| 297 302 |  | 
| @@ -328,6 +333,52 @@ module GdsApi | |
| 328 333 | 
             
                      )
         | 
| 329 334 | 
             
                  end
         | 
| 330 335 |  | 
| 336 | 
            +
                  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)
         | 
| 337 | 
            +
                    stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/link")
         | 
| 338 | 
            +
                      .with(
         | 
| 339 | 
            +
                        body: { govuk_account_session: govuk_account_session }.to_json,
         | 
| 340 | 
            +
                      ).to_return(
         | 
| 341 | 
            +
                        status: 200,
         | 
| 342 | 
            +
                        body: {
         | 
| 343 | 
            +
                          govuk_account_session: new_govuk_account_session,
         | 
| 344 | 
            +
                        }.compact.merge(get_subscriber_response(subscriber_id, address, govuk_account_id)).to_json,
         | 
| 345 | 
            +
                      )
         | 
| 346 | 
            +
                  end
         | 
| 347 | 
            +
             | 
| 348 | 
            +
                  def stub_email_alert_api_link_subscriber_to_govuk_account_session_invalid(govuk_account_session)
         | 
| 349 | 
            +
                    stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/link")
         | 
| 350 | 
            +
                      .with(
         | 
| 351 | 
            +
                        body: { govuk_account_session: govuk_account_session }.to_json,
         | 
| 352 | 
            +
                      ).to_return(
         | 
| 353 | 
            +
                        status: 401,
         | 
| 354 | 
            +
                      )
         | 
| 355 | 
            +
                  end
         | 
| 356 | 
            +
             | 
| 357 | 
            +
                  def stub_email_alert_api_link_subscriber_to_govuk_account_email_unverified(govuk_account_session, new_govuk_account_session: nil)
         | 
| 358 | 
            +
                    stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/link")
         | 
| 359 | 
            +
                      .with(
         | 
| 360 | 
            +
                        body: { govuk_account_session: govuk_account_session }.to_json,
         | 
| 361 | 
            +
                      ).to_return(
         | 
| 362 | 
            +
                        status: 403,
         | 
| 363 | 
            +
                        body: {
         | 
| 364 | 
            +
                          govuk_account_session: new_govuk_account_session,
         | 
| 365 | 
            +
                        }.compact.to_json,
         | 
| 366 | 
            +
                      )
         | 
| 367 | 
            +
                  end
         | 
| 368 | 
            +
             | 
| 369 | 
            +
                  def stub_email_alert_api_find_subscriber_by_govuk_account(govuk_account_id, subscriber_id, address)
         | 
| 370 | 
            +
                    stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/#{govuk_account_id}")
         | 
| 371 | 
            +
                      .to_return(
         | 
| 372 | 
            +
                        status: 200,
         | 
| 373 | 
            +
                        body: get_subscriber_response(subscriber_id, address, govuk_account_id).to_json,
         | 
| 374 | 
            +
                      )
         | 
| 375 | 
            +
                  end
         | 
| 376 | 
            +
             | 
| 377 | 
            +
                  def stub_email_alert_api_find_subscriber_by_govuk_account_no_subscriber(govuk_account_id)
         | 
| 378 | 
            +
                    stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/govuk-account/#{govuk_account_id}")
         | 
| 379 | 
            +
                      .to_return(status: 404)
         | 
| 380 | 
            +
                  end
         | 
| 381 | 
            +
             | 
| 331 382 | 
             
                  def assert_unsubscribed(uuid)
         | 
| 332 383 | 
             
                    assert_requested(:post, "#{EMAIL_ALERT_API_ENDPOINT}/unsubscribe/#{uuid}", times: 1)
         | 
| 333 384 | 
             
                  end
         | 
| @@ -359,11 +410,12 @@ module GdsApi | |
| 359 410 |  | 
| 360 411 | 
             
                private
         | 
| 361 412 |  | 
| 362 | 
            -
                  def get_subscriber_response(id, address)
         | 
| 413 | 
            +
                  def get_subscriber_response(id, address, govuk_account_id)
         | 
| 363 414 | 
             
                    {
         | 
| 364 415 | 
             
                      "subscriber" => {
         | 
| 365 416 | 
             
                        "id" => id,
         | 
| 366 417 | 
             
                        "address" => address,
         | 
| 418 | 
            +
                        "govuk_account_id" => govuk_account_id,
         | 
| 367 419 | 
             
                      },
         | 
| 368 420 | 
             
                    }
         | 
| 369 421 | 
             
                  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:  | 
| 4 | 
            +
              version: 72.0.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-07-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: addressable
         |