lanej/zendesk2

View on GitHub
lib/zendesk2/create_user_identity.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true
class Zendesk2::CreateUserIdentity
  include Zendesk2::Request

  request_method :post
  request_path { |r| "/users/#{r.user_id}/identities.json" }
  request_body { |r| { 'identity' => r.user_identity_params } }

  def self.accepted_attributes
    %w(primary verified type value user_id)
  end

  def user_identity_params
    Cistern::Hash.slice(params.fetch('user_identity'), *self.class.accepted_attributes)
  end

  def user_id
    params.fetch('user_identity').fetch('user_id').to_i
  end

  def mock
    identity = cistern.serial_id

    record = {
      'id'         => identity,
      'url'        => url_for("/user/#{user_id}/identities/#{identity}.json"),
      'created_at' => timestamp,
      'updated_at' => timestamp,
      'verified'   => false,
      'primary'    => false,
      'user_id'    => user_id,
    }.merge(user_identity_params)

    record.merge('primary' => true) if cistern.data[:identities].values.find { |ui| ui['user_id'] == user_id }.nil?

    if cistern.data[:identities].values.find { |i| i['value'] == record['value'] }
      error!(:invalid, details: {
               'value' => [{ 'description' => "Value: #{record['value']} is already being used by another user" }],
             })
    end

    cistern.data[:identities][identity] = record

    mock_response('identity' => record)
  end
end