lib/zendesk2/create_user_identity.rb
# 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