zendesk2 1.4.2 → 1.5.3

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.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -1
  3. data/lib/zendesk2/attributes.rb +1 -1
  4. data/lib/zendesk2/{collection.rb → client/collection.rb} +22 -17
  5. data/lib/zendesk2/client/collections/categories.rb +2 -1
  6. data/lib/zendesk2/client/collections/forums.rb +2 -1
  7. data/lib/zendesk2/client/collections/groups.rb +4 -3
  8. data/lib/zendesk2/client/collections/help_center/articles.rb +2 -1
  9. data/lib/zendesk2/client/collections/help_center/categories.rb +2 -1
  10. data/lib/zendesk2/client/collections/help_center/sections.rb +2 -1
  11. data/lib/zendesk2/client/collections/memberships.rb +9 -7
  12. data/lib/zendesk2/client/collections/organizations.rb +3 -2
  13. data/lib/zendesk2/client/collections/ticket_audits.rb +5 -4
  14. data/lib/zendesk2/client/collections/ticket_comments.rb +4 -3
  15. data/lib/zendesk2/client/collections/ticket_fields.rb +3 -1
  16. data/lib/zendesk2/client/collections/tickets.rb +2 -1
  17. data/lib/zendesk2/client/collections/topic_comments.rb +2 -1
  18. data/lib/zendesk2/client/collections/topics.rb +2 -1
  19. data/lib/zendesk2/client/collections/user_fields.rb +3 -1
  20. data/lib/zendesk2/client/collections/user_identities.rb +3 -1
  21. data/lib/zendesk2/client/collections/users.rb +3 -2
  22. data/lib/zendesk2/client/help_center.rb +3 -0
  23. data/lib/zendesk2/client/mock.rb +7 -130
  24. data/lib/zendesk2/{model.rb → client/model.rb} +7 -3
  25. data/lib/zendesk2/client/models/audit_event.rb +2 -2
  26. data/lib/zendesk2/client/models/category.rb +8 -8
  27. data/lib/zendesk2/client/models/forum.rb +11 -16
  28. data/lib/zendesk2/client/models/group.rb +8 -13
  29. data/lib/zendesk2/client/models/help_center/article.rb +12 -16
  30. data/lib/zendesk2/client/models/help_center/category.rb +12 -16
  31. data/lib/zendesk2/client/models/help_center/section.rb +12 -16
  32. data/lib/zendesk2/client/models/membership.rb +10 -12
  33. data/lib/zendesk2/client/models/organization.rb +13 -20
  34. data/lib/zendesk2/client/models/ticket.rb +21 -19
  35. data/lib/zendesk2/client/models/ticket_audit.rb +3 -3
  36. data/lib/zendesk2/client/models/ticket_comment.rb +1 -1
  37. data/lib/zendesk2/client/models/ticket_comment_privacy_change.rb +1 -1
  38. data/lib/zendesk2/client/models/ticket_field.rb +5 -13
  39. data/lib/zendesk2/client/models/ticket_metric.rb +1 -1
  40. data/lib/zendesk2/client/models/ticket_voice_comment.rb +1 -1
  41. data/lib/zendesk2/client/models/topic.rb +9 -14
  42. data/lib/zendesk2/client/models/topic_comment.rb +14 -19
  43. data/lib/zendesk2/client/models/user.rb +25 -32
  44. data/lib/zendesk2/client/models/user_field.rb +10 -18
  45. data/lib/zendesk2/client/models/user_identity.rb +9 -18
  46. data/lib/zendesk2/client/real.rb +7 -8
  47. data/lib/zendesk2/client/request.rb +271 -0
  48. data/lib/zendesk2/client/requests/create_category.rb +19 -27
  49. data/lib/zendesk2/client/requests/create_forum.rb +23 -28
  50. data/lib/zendesk2/client/requests/create_group.rb +25 -29
  51. data/lib/zendesk2/client/requests/create_help_center_article.rb +54 -60
  52. data/lib/zendesk2/client/requests/create_help_center_category.rb +35 -47
  53. data/lib/zendesk2/client/requests/create_help_center_section.rb +49 -55
  54. data/lib/zendesk2/client/requests/create_membership.rb +42 -42
  55. data/lib/zendesk2/client/requests/create_organization.rb +30 -40
  56. data/lib/zendesk2/client/requests/create_ticket.rb +76 -85
  57. data/lib/zendesk2/client/requests/create_ticket_field.rb +36 -40
  58. data/lib/zendesk2/client/requests/create_topic.rb +23 -28
  59. data/lib/zendesk2/client/requests/create_topic_comment.rb +27 -31
  60. data/lib/zendesk2/client/requests/create_user.rb +51 -56
  61. data/lib/zendesk2/client/requests/create_user_field.rb +36 -40
  62. data/lib/zendesk2/client/requests/create_user_identity.rb +39 -44
  63. data/lib/zendesk2/client/requests/destroy_category.rb +8 -21
  64. data/lib/zendesk2/client/requests/destroy_forum.rb +8 -23
  65. data/lib/zendesk2/client/requests/destroy_group.rb +8 -21
  66. data/lib/zendesk2/client/requests/destroy_help_center_article.rb +8 -18
  67. data/lib/zendesk2/client/requests/destroy_help_center_category.rb +8 -18
  68. data/lib/zendesk2/client/requests/destroy_help_center_section.rb +10 -18
  69. data/lib/zendesk2/client/requests/destroy_membership.rb +8 -22
  70. data/lib/zendesk2/client/requests/destroy_organization.rb +8 -21
  71. data/lib/zendesk2/client/requests/destroy_ticket.rb +8 -21
  72. data/lib/zendesk2/client/requests/destroy_ticket_field.rb +8 -21
  73. data/lib/zendesk2/client/requests/destroy_topic.rb +8 -23
  74. data/lib/zendesk2/client/requests/destroy_topic_comment.rb +11 -24
  75. data/lib/zendesk2/client/requests/destroy_user.rb +17 -43
  76. data/lib/zendesk2/client/requests/destroy_user_field.rb +7 -22
  77. data/lib/zendesk2/client/requests/destroy_user_identity.rb +10 -25
  78. data/lib/zendesk2/client/requests/get_assignable_groups.rb +8 -16
  79. data/lib/zendesk2/client/requests/get_categories.rb +7 -15
  80. data/lib/zendesk2/client/requests/get_category.rb +11 -22
  81. data/lib/zendesk2/client/requests/get_ccd_tickets.rb +11 -18
  82. data/lib/zendesk2/client/requests/get_current_user.rb +6 -16
  83. data/lib/zendesk2/client/requests/get_forum.rb +11 -23
  84. data/lib/zendesk2/client/requests/get_forums.rb +7 -15
  85. data/lib/zendesk2/client/requests/get_group.rb +9 -23
  86. data/lib/zendesk2/client/requests/get_groups.rb +7 -15
  87. data/lib/zendesk2/client/requests/get_help_center_article.rb +13 -37
  88. data/lib/zendesk2/client/requests/get_help_center_articles.rb +6 -15
  89. data/lib/zendesk2/client/requests/get_help_center_categories.rb +6 -15
  90. data/lib/zendesk2/client/requests/get_help_center_category.rb +13 -37
  91. data/lib/zendesk2/client/requests/get_help_center_section.rb +14 -37
  92. data/lib/zendesk2/client/requests/get_help_center_sections.rb +6 -15
  93. data/lib/zendesk2/client/requests/get_membership.rb +9 -24
  94. data/lib/zendesk2/client/requests/get_organization.rb +9 -22
  95. data/lib/zendesk2/client/requests/get_organization_by_external_id.rb +11 -20
  96. data/lib/zendesk2/client/requests/get_organization_memberships.rb +10 -16
  97. data/lib/zendesk2/client/requests/get_organization_tickets.rb +14 -21
  98. data/lib/zendesk2/client/requests/get_organization_users.rb +12 -20
  99. data/lib/zendesk2/client/requests/get_organizations.rb +7 -16
  100. data/lib/zendesk2/client/requests/get_requested_tickets.rb +12 -18
  101. data/lib/zendesk2/client/requests/get_ticket.rb +9 -23
  102. data/lib/zendesk2/client/requests/get_ticket_audits.rb +12 -18
  103. data/lib/zendesk2/client/requests/get_ticket_comments.rb +10 -19
  104. data/lib/zendesk2/client/requests/get_ticket_field.rb +9 -22
  105. data/lib/zendesk2/client/requests/get_ticket_fields.rb +7 -15
  106. data/lib/zendesk2/client/requests/get_tickets.rb +7 -15
  107. data/lib/zendesk2/client/requests/get_topic.rb +8 -23
  108. data/lib/zendesk2/client/requests/get_topic_comment.rb +12 -28
  109. data/lib/zendesk2/client/requests/get_topic_comments.rb +13 -18
  110. data/lib/zendesk2/client/requests/get_topics.rb +6 -15
  111. data/lib/zendesk2/client/requests/get_user.rb +15 -28
  112. data/lib/zendesk2/client/requests/get_user_field.rb +9 -22
  113. data/lib/zendesk2/client/requests/get_user_identities.rb +11 -18
  114. data/lib/zendesk2/client/requests/get_user_identity.rb +11 -21
  115. data/lib/zendesk2/client/requests/get_user_memberships.rb +12 -18
  116. data/lib/zendesk2/client/requests/get_users.rb +7 -15
  117. data/lib/zendesk2/client/requests/mark_membership_default.rb +17 -28
  118. data/lib/zendesk2/client/requests/mark_user_identity_primary.rb +17 -30
  119. data/lib/zendesk2/client/requests/search.rb +30 -19
  120. data/lib/zendesk2/client/requests/search_help_center_articles.rb +22 -18
  121. data/lib/zendesk2/client/requests/search_organization.rb +40 -28
  122. data/lib/zendesk2/client/requests/search_user.rb +56 -44
  123. data/lib/zendesk2/client/requests/update_category.rb +14 -24
  124. data/lib/zendesk2/client/requests/update_forum.rb +13 -25
  125. data/lib/zendesk2/client/requests/update_group.rb +12 -24
  126. data/lib/zendesk2/client/requests/update_help_center_article.rb +17 -42
  127. data/lib/zendesk2/client/requests/update_help_center_category.rb +17 -42
  128. data/lib/zendesk2/client/requests/update_help_center_section.rb +17 -42
  129. data/lib/zendesk2/client/requests/update_organization.rb +23 -35
  130. data/lib/zendesk2/client/requests/update_ticket.rb +63 -63
  131. data/lib/zendesk2/client/requests/update_ticket_field.rb +12 -24
  132. data/lib/zendesk2/client/requests/update_topic.rb +11 -25
  133. data/lib/zendesk2/client/requests/update_user.rb +47 -62
  134. data/lib/zendesk2/client/requests/update_user_field.rb +11 -23
  135. data/lib/zendesk2/client/requests/update_user_identity.rb +20 -28
  136. data/lib/zendesk2/client.rb +52 -28
  137. data/lib/zendesk2/paged_collection.rb +9 -9
  138. data/lib/zendesk2/searchable.rb +1 -1
  139. data/lib/zendesk2/version.rb +1 -1
  140. data/lib/zendesk2.rb +1 -13
  141. data/spec/categories_spec.rb +132 -0
  142. data/spec/forums_spec.rb +132 -0
  143. data/spec/lib/paged_collection_spec.rb +2 -2
  144. data/spec/memberships_spec.rb +5 -9
  145. data/spec/organizations_spec.rb +176 -25
  146. data/spec/spec_helper.rb +2 -0
  147. data/spec/tickets_spec.rb +2 -2
  148. data/spec/topic_comments_spec.rb +2 -2
  149. data/spec/user_identities_spec.rb +9 -6
  150. data/spec/users_spec.rb +22 -21
  151. data/zendesk2.gemspec +1 -2
  152. metadata +7 -21
  153. data/lib/zendesk2/client/requests/update_topic_comment.rb +0 -37
@@ -1,44 +1,40 @@
1
- class Zendesk2::Client
2
- class Real
3
- def create_ticket_field(params={})
4
- request(
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
- class Mock
13
- def create_ticket_field(params={})
14
- identity = self.class.new_id
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
- record = {
17
- "active" => true,
18
- "collapsed_for_agents" => false,
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
- self.data[:ticket_fields][identity] = record
14
+ def mock
15
+ identity = service.serial_id
36
16
 
37
- response(
38
- :method => :post,
39
- :body => {"ticket_field" => record},
40
- :path => "/ticket_fields.json"
41
- )
42
- end
43
- end # Mock
44
- end # Zendesk2::Client
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
- class Real
3
- def create_topic(params={})
4
- request(
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
- class Mock
13
- def create_topic(params={})
14
- identity = self.class.new_id
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
- record = {
17
- "id" => identity,
18
- "url" => url_for("/topics/#{identity}.json"),
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
- path = "/topics.json"
24
- self.data[:topics][identity]= record
14
+ def mock
15
+ identity = service.serial_id
25
16
 
26
- response(
27
- :method => :post,
28
- :body => {"topic" => record},
29
- :path => path,
30
- )
31
- end
32
- end # Mock
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
- class Real
3
- def create_topic_comment(params={})
4
- topic_id = params.delete("topic_id")
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
- request(
8
- :body => {"topic_comment" => params},
9
- :method => :post,
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
- class Mock
16
- def create_topic_comment(params={})
17
- identity = self.class.new_id
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
- 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
- }.merge(params)
14
+ def topic_comment_params
15
+ Cistern::Hash.slice(params.fetch("topic_comment"), *self.class.accepted_attributes)
16
+ end
27
17
 
28
- self.data[:topic_comments][identity]= record
18
+ def mock
19
+ identity = service.serial_id
29
20
 
30
- response(
31
- :method => :post,
32
- :body => {"topic_comment" => record},
33
- :path => path,
34
- )
35
- end
36
- end # Mock
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
- class Real
3
- def create_user(params={})
4
- request(
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
- class Mock
13
- def create_user(_params={})
14
- params = Cistern::Hash.stringify_keys(_params)
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
- if organization_id = params.delete("organization_id")
19
- self.find!(:organizations, organization_id)
20
- params["organization_id"] = organization_id.to_s
21
- end
10
+ def user_params
11
+ Cistern::Hash.slice(params.fetch("user"), *self.class.accepted_attributes)
12
+ end
22
13
 
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(params)
14
+ def mock
15
+ user_id = service.serial_id
30
16
 
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
17
+ user = params.fetch("user")
18
+
19
+ if organization_id = user["organization_id"]
20
+ self.find!(:organizations, organization_id)
21
+ end
34
22
 
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 = self.class.new_id
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
- 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
- }
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
- self.data[:identities][user_identity_id] = user_identity
56
- self.data[:users][user_id] = record.reject { |k,v| k == "email" }
55
+ self.data[:identities][user_identity_id] = user_identity
56
+ self.data[:users][user_id] = record.reject { |k,v| k == "email" }
57
57
 
58
- response(
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 # Mock
60
+ end
66
61
  end
@@ -1,44 +1,40 @@
1
- class Zendesk2::Client
2
- class Real
3
- def create_user_field(params={})
4
- request(
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
- class Mock
13
- def create_user_field(params={})
14
- identity = self.class.new_id
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
- record = {
17
- "active" => true,
18
- "collapsed_for_agents" => false,
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
- self.data[:user_fields][identity] = record
14
+ def mock
15
+ identity = service.serial_id
36
16
 
37
- response(
38
- :method => :post,
39
- :body => {"user_field" => record},
40
- :path => "/user_fields.json"
41
- )
42
- end
43
- end # Mock
44
- end # Zendesk2::Client
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
- class Real
3
- def create_user_identity(params={})
4
- user_id = params.delete("user_id")
5
-
6
- request(
7
- :body => {"identity" => params},
8
- :method => :post,
9
- :path => "/users/#{user_id}/identities.json",
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
- end # Real
13
-
14
- class Mock
15
- def create_user_identity(params={})
16
- params = Cistern::Hash.stringify_keys(params)
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