zendesk2 1.4.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
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