zendesk2 1.4.2 → 1.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/lib/zendesk2/attributes.rb +1 -1
- data/lib/zendesk2/{collection.rb → client/collection.rb} +22 -17
- data/lib/zendesk2/client/collections/categories.rb +2 -1
- data/lib/zendesk2/client/collections/forums.rb +2 -1
- data/lib/zendesk2/client/collections/groups.rb +4 -3
- data/lib/zendesk2/client/collections/help_center/articles.rb +2 -1
- data/lib/zendesk2/client/collections/help_center/categories.rb +2 -1
- data/lib/zendesk2/client/collections/help_center/sections.rb +2 -1
- data/lib/zendesk2/client/collections/memberships.rb +9 -7
- data/lib/zendesk2/client/collections/organizations.rb +3 -2
- data/lib/zendesk2/client/collections/ticket_audits.rb +5 -4
- data/lib/zendesk2/client/collections/ticket_comments.rb +4 -3
- data/lib/zendesk2/client/collections/ticket_fields.rb +3 -1
- data/lib/zendesk2/client/collections/tickets.rb +2 -1
- data/lib/zendesk2/client/collections/topic_comments.rb +2 -1
- data/lib/zendesk2/client/collections/topics.rb +2 -1
- data/lib/zendesk2/client/collections/user_fields.rb +3 -1
- data/lib/zendesk2/client/collections/user_identities.rb +3 -1
- data/lib/zendesk2/client/collections/users.rb +3 -2
- data/lib/zendesk2/client/help_center.rb +3 -0
- data/lib/zendesk2/client/mock.rb +7 -130
- data/lib/zendesk2/{model.rb → client/model.rb} +7 -3
- data/lib/zendesk2/client/models/audit_event.rb +2 -2
- data/lib/zendesk2/client/models/category.rb +8 -8
- data/lib/zendesk2/client/models/forum.rb +11 -16
- data/lib/zendesk2/client/models/group.rb +8 -13
- data/lib/zendesk2/client/models/help_center/article.rb +12 -16
- data/lib/zendesk2/client/models/help_center/category.rb +12 -16
- data/lib/zendesk2/client/models/help_center/section.rb +12 -16
- data/lib/zendesk2/client/models/membership.rb +10 -12
- data/lib/zendesk2/client/models/organization.rb +13 -20
- data/lib/zendesk2/client/models/ticket.rb +21 -19
- data/lib/zendesk2/client/models/ticket_audit.rb +3 -3
- data/lib/zendesk2/client/models/ticket_comment.rb +1 -1
- data/lib/zendesk2/client/models/ticket_comment_privacy_change.rb +1 -1
- data/lib/zendesk2/client/models/ticket_field.rb +5 -13
- data/lib/zendesk2/client/models/ticket_metric.rb +1 -1
- data/lib/zendesk2/client/models/ticket_voice_comment.rb +1 -1
- data/lib/zendesk2/client/models/topic.rb +9 -14
- data/lib/zendesk2/client/models/topic_comment.rb +14 -19
- data/lib/zendesk2/client/models/user.rb +25 -32
- data/lib/zendesk2/client/models/user_field.rb +10 -18
- data/lib/zendesk2/client/models/user_identity.rb +9 -18
- data/lib/zendesk2/client/real.rb +7 -8
- data/lib/zendesk2/client/request.rb +271 -0
- data/lib/zendesk2/client/requests/create_category.rb +19 -27
- data/lib/zendesk2/client/requests/create_forum.rb +23 -28
- data/lib/zendesk2/client/requests/create_group.rb +25 -29
- data/lib/zendesk2/client/requests/create_help_center_article.rb +54 -60
- data/lib/zendesk2/client/requests/create_help_center_category.rb +35 -47
- data/lib/zendesk2/client/requests/create_help_center_section.rb +49 -55
- data/lib/zendesk2/client/requests/create_membership.rb +42 -42
- data/lib/zendesk2/client/requests/create_organization.rb +30 -40
- data/lib/zendesk2/client/requests/create_ticket.rb +76 -85
- data/lib/zendesk2/client/requests/create_ticket_field.rb +36 -40
- data/lib/zendesk2/client/requests/create_topic.rb +23 -28
- data/lib/zendesk2/client/requests/create_topic_comment.rb +27 -31
- data/lib/zendesk2/client/requests/create_user.rb +51 -56
- data/lib/zendesk2/client/requests/create_user_field.rb +36 -40
- data/lib/zendesk2/client/requests/create_user_identity.rb +39 -44
- data/lib/zendesk2/client/requests/destroy_category.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_forum.rb +8 -23
- data/lib/zendesk2/client/requests/destroy_group.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_help_center_article.rb +8 -18
- data/lib/zendesk2/client/requests/destroy_help_center_category.rb +8 -18
- data/lib/zendesk2/client/requests/destroy_help_center_section.rb +10 -18
- data/lib/zendesk2/client/requests/destroy_membership.rb +8 -22
- data/lib/zendesk2/client/requests/destroy_organization.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_ticket.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_ticket_field.rb +8 -21
- data/lib/zendesk2/client/requests/destroy_topic.rb +8 -23
- data/lib/zendesk2/client/requests/destroy_topic_comment.rb +11 -24
- data/lib/zendesk2/client/requests/destroy_user.rb +17 -43
- data/lib/zendesk2/client/requests/destroy_user_field.rb +7 -22
- data/lib/zendesk2/client/requests/destroy_user_identity.rb +10 -25
- data/lib/zendesk2/client/requests/get_assignable_groups.rb +8 -16
- data/lib/zendesk2/client/requests/get_categories.rb +7 -15
- data/lib/zendesk2/client/requests/get_category.rb +11 -22
- data/lib/zendesk2/client/requests/get_ccd_tickets.rb +11 -18
- data/lib/zendesk2/client/requests/get_current_user.rb +6 -16
- data/lib/zendesk2/client/requests/get_forum.rb +11 -23
- data/lib/zendesk2/client/requests/get_forums.rb +7 -15
- data/lib/zendesk2/client/requests/get_group.rb +9 -23
- data/lib/zendesk2/client/requests/get_groups.rb +7 -15
- data/lib/zendesk2/client/requests/get_help_center_article.rb +13 -37
- data/lib/zendesk2/client/requests/get_help_center_articles.rb +6 -15
- data/lib/zendesk2/client/requests/get_help_center_categories.rb +6 -15
- data/lib/zendesk2/client/requests/get_help_center_category.rb +13 -37
- data/lib/zendesk2/client/requests/get_help_center_section.rb +14 -37
- data/lib/zendesk2/client/requests/get_help_center_sections.rb +6 -15
- data/lib/zendesk2/client/requests/get_membership.rb +9 -24
- data/lib/zendesk2/client/requests/get_organization.rb +9 -22
- data/lib/zendesk2/client/requests/get_organization_by_external_id.rb +11 -20
- data/lib/zendesk2/client/requests/get_organization_memberships.rb +10 -16
- data/lib/zendesk2/client/requests/get_organization_tickets.rb +14 -21
- data/lib/zendesk2/client/requests/get_organization_users.rb +12 -20
- data/lib/zendesk2/client/requests/get_organizations.rb +7 -16
- data/lib/zendesk2/client/requests/get_requested_tickets.rb +12 -18
- data/lib/zendesk2/client/requests/get_ticket.rb +9 -23
- data/lib/zendesk2/client/requests/get_ticket_audits.rb +12 -18
- data/lib/zendesk2/client/requests/get_ticket_comments.rb +10 -19
- data/lib/zendesk2/client/requests/get_ticket_field.rb +9 -22
- data/lib/zendesk2/client/requests/get_ticket_fields.rb +7 -15
- data/lib/zendesk2/client/requests/get_tickets.rb +7 -15
- data/lib/zendesk2/client/requests/get_topic.rb +8 -23
- data/lib/zendesk2/client/requests/get_topic_comment.rb +12 -28
- data/lib/zendesk2/client/requests/get_topic_comments.rb +13 -18
- data/lib/zendesk2/client/requests/get_topics.rb +6 -15
- data/lib/zendesk2/client/requests/get_user.rb +15 -28
- data/lib/zendesk2/client/requests/get_user_field.rb +9 -22
- data/lib/zendesk2/client/requests/get_user_identities.rb +11 -18
- data/lib/zendesk2/client/requests/get_user_identity.rb +11 -21
- data/lib/zendesk2/client/requests/get_user_memberships.rb +12 -18
- data/lib/zendesk2/client/requests/get_users.rb +7 -15
- data/lib/zendesk2/client/requests/mark_membership_default.rb +17 -28
- data/lib/zendesk2/client/requests/mark_user_identity_primary.rb +17 -30
- data/lib/zendesk2/client/requests/search.rb +30 -19
- data/lib/zendesk2/client/requests/search_help_center_articles.rb +22 -18
- data/lib/zendesk2/client/requests/search_organization.rb +40 -28
- data/lib/zendesk2/client/requests/search_user.rb +56 -44
- data/lib/zendesk2/client/requests/update_category.rb +14 -24
- data/lib/zendesk2/client/requests/update_forum.rb +13 -25
- data/lib/zendesk2/client/requests/update_group.rb +12 -24
- data/lib/zendesk2/client/requests/update_help_center_article.rb +17 -42
- data/lib/zendesk2/client/requests/update_help_center_category.rb +17 -42
- data/lib/zendesk2/client/requests/update_help_center_section.rb +17 -42
- data/lib/zendesk2/client/requests/update_organization.rb +23 -35
- data/lib/zendesk2/client/requests/update_ticket.rb +63 -63
- data/lib/zendesk2/client/requests/update_ticket_field.rb +12 -24
- data/lib/zendesk2/client/requests/update_topic.rb +11 -25
- data/lib/zendesk2/client/requests/update_user.rb +47 -62
- data/lib/zendesk2/client/requests/update_user_field.rb +11 -23
- data/lib/zendesk2/client/requests/update_user_identity.rb +20 -28
- data/lib/zendesk2/client.rb +52 -28
- data/lib/zendesk2/paged_collection.rb +9 -9
- data/lib/zendesk2/searchable.rb +1 -1
- data/lib/zendesk2/version.rb +1 -1
- data/lib/zendesk2.rb +1 -13
- data/spec/categories_spec.rb +132 -0
- data/spec/forums_spec.rb +132 -0
- data/spec/lib/paged_collection_spec.rb +2 -2
- data/spec/memberships_spec.rb +5 -9
- data/spec/organizations_spec.rb +176 -25
- data/spec/spec_helper.rb +2 -0
- data/spec/tickets_spec.rb +2 -2
- data/spec/topic_comments_spec.rb +2 -2
- data/spec/user_identities_spec.rb +9 -6
- data/spec/users_spec.rb +22 -21
- data/zendesk2.gemspec +1 -2
- metadata +7 -21
- data/lib/zendesk2/client/requests/update_topic_comment.rb +0 -37
@@ -1,44 +1,40 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
:body => {"ticket_field" => params},
|
6
|
-
:method => :post,
|
7
|
-
:path => "/ticket_fields.json",
|
8
|
-
)
|
9
|
-
end
|
10
|
-
end # Real
|
1
|
+
class Zendesk2::Client::CreateTicketField < Zendesk2::Client::Request
|
2
|
+
request_method :post
|
3
|
+
request_path { |_| "/ticket_fields.json" }
|
4
|
+
request_body { |r| { "ticket_field" => r.ticket_field_params } }
|
11
5
|
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
def self.accepted_attributes
|
7
|
+
%w[type title description position active required collapsed_for_agents regexp_for_validation title_in_portal visible_in_portal editable_in_portal required_in_portal tag custom_field_options]
|
8
|
+
end
|
15
9
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
"created_at" => Time.now.iso8601,
|
20
|
-
"description" => params["title"],
|
21
|
-
"editable_in_portal" => false,
|
22
|
-
"id" => identity,
|
23
|
-
"position" => 9999,
|
24
|
-
"regexp_for_validation" => "",
|
25
|
-
"removable" => true,
|
26
|
-
"required" => false,
|
27
|
-
"required_in_portal" => false,
|
28
|
-
"tag" => "",
|
29
|
-
"title_in_portal" => params["title"],
|
30
|
-
"updated_at" => Time.now.iso8601,
|
31
|
-
"url" => url_for("/ticket_fields/#{identity}.json"),
|
32
|
-
"visible_in_portal" => false,
|
33
|
-
}.merge(params)
|
10
|
+
def ticket_field_params
|
11
|
+
Cistern::Hash.slice(params.fetch("ticket_field"), *self.class.accepted_attributes)
|
12
|
+
end
|
34
13
|
|
35
|
-
|
14
|
+
def mock
|
15
|
+
identity = service.serial_id
|
36
16
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
17
|
+
record = {
|
18
|
+
"active" => true,
|
19
|
+
"collapsed_for_agents" => false,
|
20
|
+
"created_at" => Time.now.iso8601,
|
21
|
+
"description" => params["title"],
|
22
|
+
"editable_in_portal" => false,
|
23
|
+
"id" => identity,
|
24
|
+
"position" => 9999,
|
25
|
+
"regexp_for_validation" => "",
|
26
|
+
"removable" => true,
|
27
|
+
"required" => false,
|
28
|
+
"required_in_portal" => false,
|
29
|
+
"tag" => "",
|
30
|
+
"title_in_portal" => params["title"],
|
31
|
+
"updated_at" => Time.now.iso8601,
|
32
|
+
"url" => url_for("/ticket_fields/#{identity}.json"),
|
33
|
+
"visible_in_portal" => false,
|
34
|
+
}.merge(ticket_field_params)
|
35
|
+
|
36
|
+
self.data[:ticket_fields][identity] = record
|
37
|
+
|
38
|
+
mock_response("ticket_field" => record)
|
39
|
+
end
|
40
|
+
end
|
@@ -1,33 +1,28 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
:body => {"topic" => params},
|
6
|
-
:method => :post,
|
7
|
-
:path => "/topics.json",
|
8
|
-
)
|
9
|
-
end
|
10
|
-
end # Real
|
1
|
+
class Zendesk2::Client::CreateTopic < Zendesk2::Client::Request
|
2
|
+
request_method :post
|
3
|
+
request_body { |r| { "topic" => r.topic_params } }
|
4
|
+
request_path { |_| "/topics.json" }
|
11
5
|
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
def self.accepted_attributes
|
7
|
+
%w[title body submitter_id updater_id forum_id locked pinned highlighted position tags]
|
8
|
+
end
|
15
9
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
"created_at" => Time.now.iso8601,
|
20
|
-
"updated_at" => Time.now.iso8601,
|
21
|
-
}.merge(params)
|
10
|
+
def topic_params
|
11
|
+
@_topic_params ||= Cistern::Hash.slice(params.fetch("topic"), *self.class.accepted_attributes)
|
12
|
+
end
|
22
13
|
|
23
|
-
|
24
|
-
|
14
|
+
def mock
|
15
|
+
identity = service.serial_id
|
25
16
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
17
|
+
record = {
|
18
|
+
"id" => identity,
|
19
|
+
"url" => url_for("/topics/#{identity}.json"),
|
20
|
+
"created_at" => Time.now.iso8601,
|
21
|
+
"updated_at" => Time.now.iso8601,
|
22
|
+
}.merge(topic_params)
|
23
|
+
|
24
|
+
self.data[:topics][identity] = record
|
25
|
+
|
26
|
+
mock_response("topic" => record)
|
27
|
+
end
|
33
28
|
end
|
@@ -1,37 +1,33 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
path = "/topics/#{topic_id}/comments.json"
|
1
|
+
class Zendesk2::Client::CreateTopicComment < Zendesk2::Client::Request
|
2
|
+
request_method :post
|
3
|
+
request_path { |r| "/topics/#{r.topic_id}/comments.json" }
|
4
|
+
request_body { |r| { "topic_comment" => r.topic_comment_params } }
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
:path => path,
|
11
|
-
)
|
12
|
-
end
|
13
|
-
end # Real
|
6
|
+
def self.accepted_attributes
|
7
|
+
%w[user_id body informative]
|
8
|
+
end
|
14
9
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
topic_id = params["topic_id"]
|
19
|
-
path = "/topics/#{topic_id}/comments.json"
|
10
|
+
def topic_id
|
11
|
+
params.fetch("topic_comment").fetch("topic_id").to_i
|
12
|
+
end
|
20
13
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
"created_at" => Time.now.iso8601,
|
25
|
-
"updated_at" => Time.now.iso8601,
|
26
|
-
}.merge(params)
|
14
|
+
def topic_comment_params
|
15
|
+
Cistern::Hash.slice(params.fetch("topic_comment"), *self.class.accepted_attributes)
|
16
|
+
end
|
27
17
|
|
28
|
-
|
18
|
+
def mock
|
19
|
+
identity = service.serial_id
|
29
20
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
21
|
+
record = {
|
22
|
+
"id" => identity,
|
23
|
+
"url" => url_for("/topics/#{topic_id}/comments/#{identity}.json"),
|
24
|
+
"created_at" => Time.now.iso8601,
|
25
|
+
"updated_at" => Time.now.iso8601,
|
26
|
+
"topic_id" => self.topic_id,
|
27
|
+
}.merge(topic_comment_params)
|
28
|
+
|
29
|
+
self.data[:topic_comments][identity] = record
|
30
|
+
|
31
|
+
mock_response("topic_comment" => record)
|
32
|
+
end
|
37
33
|
end
|
@@ -1,66 +1,61 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
:body => {"user" => params},
|
6
|
-
:method => :post,
|
7
|
-
:path => "/users.json",
|
8
|
-
)
|
9
|
-
end
|
10
|
-
end # Real
|
1
|
+
class Zendesk2::Client::CreateUser < Zendesk2::Client::Request
|
2
|
+
request_method :post
|
3
|
+
request_path { |_| "/users.json" }
|
4
|
+
request_body { |r| { "user" => r.user_params } }
|
11
5
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
user_id = self.class.new_id
|
16
|
-
path = "/users.json"
|
6
|
+
def self.accepted_attributes
|
7
|
+
%w[name email organization_id external_id alias verified locate_id time_zone phone signature details notes role custom_role_id moderator ticket_restriction only_private_comments]
|
8
|
+
end
|
17
9
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
10
|
+
def user_params
|
11
|
+
Cistern::Hash.slice(params.fetch("user"), *self.class.accepted_attributes)
|
12
|
+
end
|
22
13
|
|
23
|
-
|
24
|
-
|
25
|
-
"url" => url_for("/users/#{user_id}.json"),
|
26
|
-
"created_at" => Time.now.iso8601,
|
27
|
-
"updated_at" => Time.now.iso8601,
|
28
|
-
"active" => true,
|
29
|
-
}.merge(params)
|
14
|
+
def mock
|
15
|
+
user_id = service.serial_id
|
30
16
|
|
31
|
-
|
32
|
-
|
33
|
-
|
17
|
+
user = params.fetch("user")
|
18
|
+
|
19
|
+
if organization_id = user["organization_id"]
|
20
|
+
self.find!(:organizations, organization_id)
|
21
|
+
end
|
34
22
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
23
|
+
record = {
|
24
|
+
"id" => user_id,
|
25
|
+
"url" => url_for("/users/#{user_id}.json"),
|
26
|
+
"created_at" => Time.now.iso8601,
|
27
|
+
"updated_at" => Time.now.iso8601,
|
28
|
+
"active" => true,
|
29
|
+
}.merge(user_params)
|
42
30
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
"
|
51
|
-
|
52
|
-
|
53
|
-
|
31
|
+
if record["external_id"] && self.data[:users].values.find { |o| o["external_id"] == record["external_id"] }
|
32
|
+
error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
|
33
|
+
end
|
34
|
+
|
35
|
+
if (email = record["email"]) && self.data[:identities].find{|k,i| i["type"] == "email" && i["value"] == email}
|
36
|
+
error!(:invalid, :details => {
|
37
|
+
"email" => [ {
|
38
|
+
"description" => "Email: #{email} is already being used by another user"
|
39
|
+
}]})
|
40
|
+
else
|
41
|
+
user_identity_id = service.serial_id
|
42
|
+
|
43
|
+
user_identity = {
|
44
|
+
"id" => user_identity_id,
|
45
|
+
"url" => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
|
46
|
+
"created_at" => Time.now.iso8601,
|
47
|
+
"updated_at" => Time.now.iso8601,
|
48
|
+
"type" => "email",
|
49
|
+
"value" => record["email"],
|
50
|
+
"verified" => false,
|
51
|
+
"primary" => true,
|
52
|
+
"user_id" => user_id,
|
53
|
+
}
|
54
54
|
|
55
|
-
|
56
|
-
|
55
|
+
self.data[:identities][user_identity_id] = user_identity
|
56
|
+
self.data[:users][user_id] = record.reject { |k,v| k == "email" }
|
57
57
|
|
58
|
-
|
59
|
-
:method => :post,
|
60
|
-
:body => {"user" => record},
|
61
|
-
:path => path,
|
62
|
-
)
|
63
|
-
end
|
58
|
+
mock_response({"user" => record}, {status: 201})
|
64
59
|
end
|
65
|
-
end
|
60
|
+
end
|
66
61
|
end
|
@@ -1,44 +1,40 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
:body => {"user_field" => params},
|
6
|
-
:method => :post,
|
7
|
-
:path => "/user_fields.json",
|
8
|
-
)
|
9
|
-
end
|
10
|
-
end # Real
|
1
|
+
class Zendesk2::Client::CreateUserField < Zendesk2::Client::Request
|
2
|
+
request_method :post
|
3
|
+
request_path { |_| "/user_fields.json" }
|
4
|
+
request_body { |r| { "user_field" => r.user_field_params } }
|
11
5
|
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
def self.accepted_attributes
|
7
|
+
%w[key type title description position active, regexp_for_validation tag custom_field_options]
|
8
|
+
end
|
15
9
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
"created_at" => Time.now.iso8601,
|
20
|
-
"description" => params["title"],
|
21
|
-
"editable_in_portal" => false,
|
22
|
-
"id" => identity,
|
23
|
-
"position" => 9999,
|
24
|
-
"regexp_for_validation" => "",
|
25
|
-
"removable" => true,
|
26
|
-
"required" => false,
|
27
|
-
"required_in_portal" => false,
|
28
|
-
"tag" => "",
|
29
|
-
"title_in_portal" => params["title"],
|
30
|
-
"updated_at" => Time.now.iso8601,
|
31
|
-
"url" => url_for("/user_fields/#{identity}.json"),
|
32
|
-
"visible_in_portal" => false,
|
33
|
-
}.merge(params)
|
10
|
+
def user_field_params
|
11
|
+
Cistern::Hash.slice(params.fetch("user_field"), *self.class.accepted_attributes)
|
12
|
+
end
|
34
13
|
|
35
|
-
|
14
|
+
def mock
|
15
|
+
identity = service.serial_id
|
36
16
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
17
|
+
record = {
|
18
|
+
"active" => true,
|
19
|
+
"collapsed_for_agents" => false,
|
20
|
+
"created_at" => Time.now.iso8601,
|
21
|
+
"description" => params["title"],
|
22
|
+
"editable_in_portal" => false,
|
23
|
+
"id" => identity,
|
24
|
+
"position" => 9999,
|
25
|
+
"regexp_for_validation" => "",
|
26
|
+
"removable" => true,
|
27
|
+
"required" => false,
|
28
|
+
"required_in_portal" => false,
|
29
|
+
"tag" => "",
|
30
|
+
"title_in_portal" => params["title"],
|
31
|
+
"updated_at" => Time.now.iso8601,
|
32
|
+
"url" => url_for("/user_fields/#{identity}.json"),
|
33
|
+
"visible_in_portal" => false,
|
34
|
+
}.merge(user_field_params)
|
35
|
+
|
36
|
+
service.data[:user_fields][identity] = record
|
37
|
+
|
38
|
+
mock_response("user_field" => record)
|
39
|
+
end
|
40
|
+
end
|
@@ -1,46 +1,41 @@
|
|
1
|
-
class Zendesk2::Client
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
class Zendesk2::Client::CreateUserIdentity < Zendesk2::Client::Request
|
2
|
+
request_method :post
|
3
|
+
request_path { |r| "/users/#{r.user_id}/identities.json" }
|
4
|
+
request_body { |r| { "identity" => r.user_identity_params } }
|
5
|
+
|
6
|
+
def self.accepted_attributes
|
7
|
+
%w[primary verified type value user_id]
|
8
|
+
end
|
9
|
+
|
10
|
+
def user_identity_params
|
11
|
+
Cistern::Hash.slice(params.fetch("user_identity"), *self.class.accepted_attributes)
|
12
|
+
end
|
13
|
+
|
14
|
+
def user_id
|
15
|
+
params.fetch("user_identity").fetch("user_id").to_i
|
16
|
+
end
|
17
|
+
|
18
|
+
def mock
|
19
|
+
identity = service.serial_id
|
20
|
+
|
21
|
+
record = {
|
22
|
+
"id" => identity,
|
23
|
+
"url" => url_for("/user/#{user_id}/identities/#{identity}.json"),
|
24
|
+
"created_at" => Time.now.iso8601,
|
25
|
+
"updated_at" => Time.now.iso8601,
|
26
|
+
"verified" => false,
|
27
|
+
"primary" => false,
|
28
|
+
"user_id" => user_id,
|
29
|
+
}.merge(user_identity_params)
|
30
|
+
|
31
|
+
record.merge("primary" => true) if service.data[:identities].values.find { |ui| ui["user_id"] == user_id }.nil?
|
32
|
+
|
33
|
+
if service.data[:identities].values.find { |i| i["value"] == record["value"] }
|
34
|
+
error!(:invalid, details: { "value" => [ { "description" => "Value: #{record["value"]} is already being used by another user" } ] })
|
11
35
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
identity = self.class.new_id
|
19
|
-
user_id = params.delete("user_id").to_s
|
20
|
-
|
21
|
-
record = {
|
22
|
-
"id" => identity,
|
23
|
-
"url" => url_for("/user/#{user_id}/identities/#{identity}.json"),
|
24
|
-
"created_at" => Time.now.iso8601,
|
25
|
-
"updated_at" => Time.now.iso8601,
|
26
|
-
"verified" => false,
|
27
|
-
"primary" => false,
|
28
|
-
"user_id" => user_id,
|
29
|
-
}.merge(params)
|
30
|
-
|
31
|
-
record.merge("primary" => true) if self.data[:identities].values.find { |ui| ui["user_id"] == user_id }.nil?
|
32
|
-
|
33
|
-
if self.data[:identities].values.find { |i| i["value"] == record["value"] }
|
34
|
-
error!(:invalid, details: { "value"=> [ { "description"=>"Value: #{record["value"]} is already being used by another user" } ] })
|
35
|
-
end
|
36
|
-
|
37
|
-
self.data[:identities][identity] = record
|
38
|
-
|
39
|
-
response(
|
40
|
-
:method => :post,
|
41
|
-
:path => "/user/#{user_id}/identities.json",
|
42
|
-
:body => {"identity" => record}
|
43
|
-
)
|
44
|
-
end
|
45
|
-
end # Mock
|
36
|
+
|
37
|
+
service.data[:identities][identity] = record
|
38
|
+
|
39
|
+
mock_response("identity" => record)
|
40
|
+
end
|
46
41
|
end
|