zendesk2 1.9.0 → 1.10.0

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 (222) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +30 -0
  3. data/.travis.yml +3 -1
  4. data/Gemfile +4 -5
  5. data/Guardfile +4 -3
  6. data/Rakefile +4 -3
  7. data/lib/zendesk2.rb +9 -6
  8. data/lib/zendesk2/attributes.rb +11 -8
  9. data/lib/zendesk2/audit_event.rb +5 -3
  10. data/lib/zendesk2/categories.rb +4 -3
  11. data/lib/zendesk2/category.rb +10 -5
  12. data/lib/zendesk2/client.rb +3 -3
  13. data/lib/zendesk2/collection.rb +35 -21
  14. data/lib/zendesk2/create_category.rb +10 -9
  15. data/lib/zendesk2/create_forum.rb +11 -10
  16. data/lib/zendesk2/create_group.rb +13 -12
  17. data/lib/zendesk2/create_membership.rb +21 -20
  18. data/lib/zendesk2/create_organization.rb +24 -18
  19. data/lib/zendesk2/create_ticket.rb +60 -56
  20. data/lib/zendesk2/create_ticket_field.rb +24 -22
  21. data/lib/zendesk2/create_topic.rb +11 -10
  22. data/lib/zendesk2/create_topic_comment.rb +12 -11
  23. data/lib/zendesk2/create_user.rb +54 -41
  24. data/lib/zendesk2/create_user_field.rb +22 -21
  25. data/lib/zendesk2/create_user_identity.rb +18 -15
  26. data/lib/zendesk2/create_view.rb +62 -62
  27. data/lib/zendesk2/destroy_category.rb +2 -1
  28. data/lib/zendesk2/destroy_forum.rb +2 -1
  29. data/lib/zendesk2/destroy_group.rb +3 -2
  30. data/lib/zendesk2/destroy_membership.rb +7 -5
  31. data/lib/zendesk2/destroy_organization.rb +3 -2
  32. data/lib/zendesk2/destroy_ticket.rb +3 -2
  33. data/lib/zendesk2/destroy_ticket_field.rb +3 -2
  34. data/lib/zendesk2/destroy_topic.rb +3 -2
  35. data/lib/zendesk2/destroy_topic_comment.rb +4 -3
  36. data/lib/zendesk2/destroy_user.rb +11 -10
  37. data/lib/zendesk2/destroy_user_field.rb +3 -2
  38. data/lib/zendesk2/destroy_user_identity.rb +4 -3
  39. data/lib/zendesk2/destroy_view.rb +3 -2
  40. data/lib/zendesk2/error.rb +1 -1
  41. data/lib/zendesk2/forum.rb +36 -18
  42. data/lib/zendesk2/forums.rb +4 -3
  43. data/lib/zendesk2/get_assignable_groups.rb +3 -2
  44. data/lib/zendesk2/get_categories.rb +2 -1
  45. data/lib/zendesk2/get_category.rb +3 -2
  46. data/lib/zendesk2/get_ccd_tickets.rb +4 -3
  47. data/lib/zendesk2/get_current_user.rb +3 -2
  48. data/lib/zendesk2/get_forum.rb +3 -2
  49. data/lib/zendesk2/get_forums.rb +2 -1
  50. data/lib/zendesk2/get_group.rb +3 -2
  51. data/lib/zendesk2/get_groups.rb +2 -1
  52. data/lib/zendesk2/get_membership.rb +3 -2
  53. data/lib/zendesk2/get_memberships.rb +3 -2
  54. data/lib/zendesk2/get_organization.rb +3 -2
  55. data/lib/zendesk2/get_organization_by_external_id.rb +8 -5
  56. data/lib/zendesk2/get_organization_memberships.rb +5 -2
  57. data/lib/zendesk2/get_organization_tickets.rb +7 -5
  58. data/lib/zendesk2/get_organization_users.rb +6 -5
  59. data/lib/zendesk2/get_organizations.rb +2 -1
  60. data/lib/zendesk2/get_requested_tickets.rb +5 -4
  61. data/lib/zendesk2/get_ticket.rb +3 -2
  62. data/lib/zendesk2/get_ticket_audit.rb +5 -4
  63. data/lib/zendesk2/get_ticket_audits.rb +4 -3
  64. data/lib/zendesk2/get_ticket_comments.rb +6 -5
  65. data/lib/zendesk2/get_ticket_field.rb +3 -2
  66. data/lib/zendesk2/get_ticket_fields.rb +2 -1
  67. data/lib/zendesk2/get_ticket_metric.rb +4 -3
  68. data/lib/zendesk2/get_ticket_metrics.rb +3 -2
  69. data/lib/zendesk2/get_tickets.rb +2 -1
  70. data/lib/zendesk2/get_topic.rb +3 -2
  71. data/lib/zendesk2/get_topic_comment.rb +4 -3
  72. data/lib/zendesk2/get_topic_comments.rb +5 -4
  73. data/lib/zendesk2/get_topics.rb +2 -1
  74. data/lib/zendesk2/get_user.rb +7 -7
  75. data/lib/zendesk2/get_user_field.rb +3 -2
  76. data/lib/zendesk2/get_user_fields.rb +3 -2
  77. data/lib/zendesk2/get_user_identities.rb +4 -3
  78. data/lib/zendesk2/get_user_identity.rb +4 -3
  79. data/lib/zendesk2/get_user_memberships.rb +4 -3
  80. data/lib/zendesk2/get_user_organizations.rb +5 -4
  81. data/lib/zendesk2/get_users.rb +3 -2
  82. data/lib/zendesk2/get_view.rb +3 -2
  83. data/lib/zendesk2/get_view_tickets.rb +19 -16
  84. data/lib/zendesk2/get_views.rb +2 -1
  85. data/lib/zendesk2/group.rb +6 -5
  86. data/lib/zendesk2/groups.rb +7 -6
  87. data/lib/zendesk2/help_center.rb +15 -0
  88. data/lib/zendesk2/help_center/access_policy.rb +3 -2
  89. data/lib/zendesk2/help_center/article.rb +10 -7
  90. data/lib/zendesk2/help_center/articles.rb +7 -7
  91. data/lib/zendesk2/help_center/categories.rb +3 -2
  92. data/lib/zendesk2/help_center/category.rb +8 -7
  93. data/lib/zendesk2/help_center/create_help_center_article.rb +31 -29
  94. data/lib/zendesk2/help_center/create_help_center_category.rb +17 -16
  95. data/lib/zendesk2/help_center/create_help_center_post.rb +37 -0
  96. data/lib/zendesk2/help_center/create_help_center_section.rb +32 -31
  97. data/lib/zendesk2/help_center/create_help_center_topic.rb +36 -0
  98. data/lib/zendesk2/help_center/create_help_center_translation.rb +15 -14
  99. data/lib/zendesk2/help_center/destroy_help_center_article.rb +3 -2
  100. data/lib/zendesk2/help_center/destroy_help_center_category.rb +3 -2
  101. data/lib/zendesk2/help_center/destroy_help_center_post.rb +15 -0
  102. data/lib/zendesk2/help_center/destroy_help_center_section.rb +3 -2
  103. data/lib/zendesk2/help_center/destroy_help_center_topic.rb +15 -0
  104. data/lib/zendesk2/help_center/destroy_help_center_translation.rb +2 -1
  105. data/lib/zendesk2/help_center/get_help_center_access_policy.rb +6 -5
  106. data/lib/zendesk2/help_center/get_help_center_article.rb +7 -9
  107. data/lib/zendesk2/help_center/get_help_center_articles.rb +3 -2
  108. data/lib/zendesk2/help_center/get_help_center_categories.rb +6 -2
  109. data/lib/zendesk2/help_center/get_help_center_categories_articles.rb +8 -7
  110. data/lib/zendesk2/help_center/get_help_center_categories_sections.rb +6 -5
  111. data/lib/zendesk2/help_center/get_help_center_category.rb +7 -9
  112. data/lib/zendesk2/help_center/get_help_center_post.rb +19 -0
  113. data/lib/zendesk2/help_center/get_help_center_posts.rb +28 -0
  114. data/lib/zendesk2/help_center/get_help_center_section.rb +8 -10
  115. data/lib/zendesk2/help_center/get_help_center_sections.rb +3 -2
  116. data/lib/zendesk2/help_center/get_help_center_sections_articles.rb +9 -8
  117. data/lib/zendesk2/help_center/get_help_center_topic.rb +14 -0
  118. data/lib/zendesk2/help_center/get_help_center_topics.rb +10 -0
  119. data/lib/zendesk2/help_center/get_help_center_translation.rb +5 -4
  120. data/lib/zendesk2/help_center/get_help_center_translations.rb +7 -6
  121. data/lib/zendesk2/help_center/post.rb +72 -0
  122. data/lib/zendesk2/help_center/posts.rb +18 -0
  123. data/lib/zendesk2/help_center/search_help_center_articles.rb +8 -7
  124. data/lib/zendesk2/help_center/section.rb +11 -11
  125. data/lib/zendesk2/help_center/sections.rb +7 -6
  126. data/lib/zendesk2/help_center/topic.rb +52 -0
  127. data/lib/zendesk2/help_center/topics.rb +13 -0
  128. data/lib/zendesk2/help_center/translation.rb +8 -5
  129. data/lib/zendesk2/help_center/translation_source.rb +16 -13
  130. data/lib/zendesk2/help_center/translations.rb +3 -2
  131. data/lib/zendesk2/help_center/update_help_center_access_policy.rb +8 -7
  132. data/lib/zendesk2/help_center/update_help_center_article.rb +9 -11
  133. data/lib/zendesk2/help_center/update_help_center_category.rb +9 -11
  134. data/lib/zendesk2/help_center/update_help_center_post.rb +20 -0
  135. data/lib/zendesk2/help_center/update_help_center_section.rb +9 -11
  136. data/lib/zendesk2/help_center/update_help_center_topic.rb +20 -0
  137. data/lib/zendesk2/help_center/update_help_center_translation.rb +4 -3
  138. data/lib/zendesk2/logger.rb +3 -2
  139. data/lib/zendesk2/mark_membership_default.rb +7 -6
  140. data/lib/zendesk2/mark_user_identity_primary.rb +7 -6
  141. data/lib/zendesk2/membership.rb +10 -8
  142. data/lib/zendesk2/memberships.rb +18 -12
  143. data/lib/zendesk2/mock.rb +39 -34
  144. data/lib/zendesk2/model.rb +14 -3
  145. data/lib/zendesk2/organization.rb +7 -7
  146. data/lib/zendesk2/organizations.rb +14 -12
  147. data/lib/zendesk2/paged_collection.rb +40 -36
  148. data/lib/zendesk2/rate_limit.rb +4 -3
  149. data/lib/zendesk2/real.rb +25 -22
  150. data/lib/zendesk2/request.rb +78 -82
  151. data/lib/zendesk2/search.rb +8 -7
  152. data/lib/zendesk2/search_organization.rb +14 -14
  153. data/lib/zendesk2/search_user.rb +41 -37
  154. data/lib/zendesk2/searchable.rb +36 -26
  155. data/lib/zendesk2/ticket.rb +20 -18
  156. data/lib/zendesk2/ticket_audit.rb +5 -4
  157. data/lib/zendesk2/ticket_audits.rb +10 -11
  158. data/lib/zendesk2/ticket_change.rb +10 -11
  159. data/lib/zendesk2/ticket_comment.rb +2 -1
  160. data/lib/zendesk2/ticket_comment_privacy_change.rb +12 -14
  161. data/lib/zendesk2/ticket_comments.rb +7 -6
  162. data/lib/zendesk2/ticket_create.rb +8 -9
  163. data/lib/zendesk2/ticket_field.rb +5 -4
  164. data/lib/zendesk2/ticket_fields.rb +4 -3
  165. data/lib/zendesk2/ticket_metric.rb +2 -2
  166. data/lib/zendesk2/ticket_metrics.rb +3 -2
  167. data/lib/zendesk2/ticket_notification.rb +12 -13
  168. data/lib/zendesk2/ticket_voice_comment.rb +28 -29
  169. data/lib/zendesk2/tickets.rb +8 -7
  170. data/lib/zendesk2/topic.rb +49 -22
  171. data/lib/zendesk2/topic_comment.rb +12 -9
  172. data/lib/zendesk2/topic_comments.rb +4 -3
  173. data/lib/zendesk2/topics.rb +4 -3
  174. data/lib/zendesk2/update_category.rb +8 -6
  175. data/lib/zendesk2/update_forum.rb +5 -4
  176. data/lib/zendesk2/update_group.rb +5 -4
  177. data/lib/zendesk2/update_organization.rb +18 -9
  178. data/lib/zendesk2/update_request.rb +6 -5
  179. data/lib/zendesk2/update_ticket.rb +39 -38
  180. data/lib/zendesk2/update_ticket_field.rb +5 -4
  181. data/lib/zendesk2/update_topic.rb +5 -4
  182. data/lib/zendesk2/update_user.rb +39 -31
  183. data/lib/zendesk2/update_user_field.rb +4 -3
  184. data/lib/zendesk2/update_user_identity.rb +7 -6
  185. data/lib/zendesk2/update_view.rb +38 -34
  186. data/lib/zendesk2/user.rb +41 -37
  187. data/lib/zendesk2/user_field.rb +9 -6
  188. data/lib/zendesk2/user_fields.rb +4 -3
  189. data/lib/zendesk2/user_identities.rb +4 -3
  190. data/lib/zendesk2/user_identity.rb +12 -9
  191. data/lib/zendesk2/users.rb +5 -4
  192. data/lib/zendesk2/version.rb +2 -1
  193. data/lib/zendesk2/view.rb +24 -13
  194. data/lib/zendesk2/views.rb +3 -2
  195. data/spec/categories_spec.rb +63 -60
  196. data/spec/client_spec.rb +6 -5
  197. data/spec/forums_spec.rb +64 -61
  198. data/spec/groups_spec.rb +7 -8
  199. data/spec/help_center/articles_spec.rb +22 -26
  200. data/spec/help_center/categories_spec.rb +26 -27
  201. data/spec/help_center/posts_spec.rb +39 -0
  202. data/spec/help_center/sections_spec.rb +32 -33
  203. data/spec/help_center/topics_spec.rb +13 -0
  204. data/spec/lib/paged_collection_spec.rb +11 -11
  205. data/spec/lib/rate_limit_spec.rb +9 -8
  206. data/spec/memberships_spec.rb +38 -27
  207. data/spec/organizations_spec.rb +92 -87
  208. data/spec/shared/zendesk_resource.rb +40 -25
  209. data/spec/spec_helper.rb +8 -13
  210. data/spec/support/client_helper.rb +5 -4
  211. data/spec/support/data_helper.rb +1 -0
  212. data/spec/ticket_fields_spec.rb +6 -7
  213. data/spec/tickets_spec.rb +69 -58
  214. data/spec/topic_comments_spec.rb +7 -8
  215. data/spec/topics_spec.rb +5 -6
  216. data/spec/user_fields_spec.rb +7 -7
  217. data/spec/user_identities_spec.rb +29 -25
  218. data/spec/users_spec.rb +88 -78
  219. data/spec/views_spec.rb +45 -34
  220. data/spec/zendesk2_spec.rb +3 -2
  221. data/zendesk2.gemspec +15 -14
  222. metadata +21 -2
@@ -1,11 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  require 'logger'
2
3
 
3
4
  module ClientHelper
4
- def create_client(options={})
5
- options.merge!(logger: Logger.new(STDOUT)) if ENV['VERBOSE']
5
+ def create_client(options = {})
6
+ options[:logger] = Logger.new(STDOUT) if ENV['VERBOSE']
6
7
  options = {
7
- :username => "zendesk2@example.org",
8
- :url => "https://www.zendesk.com",
8
+ username: 'zendesk2@example.org',
9
+ url: 'https://www.zendesk.com',
9
10
  }.merge(Zendesk2.defaults).merge(options)
10
11
 
11
12
  Zendesk2.new(options)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module DataHelper
2
3
  def mock_email
3
4
  "zendesk2+#{mock_uuid}@example.org"
@@ -1,12 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
- describe "ticket_fields" do
4
+ describe 'ticket_fields' do
4
5
  let(:client) { create_client }
5
6
 
6
- include_examples "zendesk#resource", {
7
- :collection => lambda { client.ticket_fields },
8
- :create_params => lambda { { title: mock_uuid, type: "text" } },
9
- :update_params => lambda { { title: mock_uuid } },
10
- :paged => false,
11
- }
7
+ include_examples 'zendesk#resource', collection: -> { client.ticket_fields },
8
+ create_params: -> { { title: mock_uuid, type: 'text' } },
9
+ update_params: -> { { title: mock_uuid } },
10
+ paged: false
12
11
  end
data/spec/tickets_spec.rb CHANGED
@@ -1,29 +1,33 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
- describe "Zendesk2" do
4
+ describe 'Zendesk2' do
4
5
  let(:client) { create_client }
5
6
 
6
- describe "tickets" do
7
- include_examples "zendesk#resource", {
8
- :collection => lambda { client.tickets },
9
- :create_params => lambda { {subject: mock_uuid, description: mock_uuid} },
10
- :update_params => lambda { {subject: mock_uuid} },
11
- }
7
+ describe 'tickets' do
8
+ include_examples 'zendesk#resource',
9
+ collection: -> { client.tickets },
10
+ create_params: -> { { subject: mock_uuid, description: mock_uuid } },
11
+ update_params: -> { { subject: mock_uuid } }
12
12
  end
13
13
 
14
- describe "#create_ticket" do
15
- it "should require a description" do
16
- expect {
17
- client.create_ticket("ticket" => {"subject" => mock_uuid})
18
- }.to raise_exception(Zendesk2::Error, /Description: cannot be blank/)
14
+ describe '#create_ticket' do
15
+ it 'should require a description' do
16
+ expect do
17
+ client.create_ticket('ticket' => { 'subject' => mock_uuid })
18
+ end.to raise_exception(Zendesk2::Error, /Description: cannot be blank/)
19
19
  end
20
20
  end
21
21
 
22
- describe "when creating a ticket" do
23
- it "should create requester" do
22
+ describe 'when creating a ticket' do
23
+ it 'should create requester' do
24
24
  requester_email = mock_email
25
25
 
26
- ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: {name: "Josh Lane", email: requester_email})
26
+ ticket = client.tickets.create!(
27
+ subject: mock_uuid,
28
+ description: mock_uuid,
29
+ requester: { name: 'Josh Lane', email: requester_email }
30
+ )
27
31
 
28
32
  if Zendesk2.mocking? # this takes some time for realsies
29
33
  requester = client.users.search(email: requester_email).first
@@ -37,13 +41,13 @@ describe "Zendesk2" do
37
41
 
38
42
  context 'valid requester exists' do
39
43
  it 'sets organization id' do
40
- ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester_id: 11111111111199)
44
+ ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester_id: 11_111_111_111_199)
41
45
 
42
46
  expect(ticket.organization_id).to be_nil
43
47
  end
44
48
  end
45
49
 
46
- it "should default to the requesters primary organization if organization is not specified" do
50
+ it 'should default to the requesters primary organization if organization is not specified' do
47
51
  organization = client.organizations.create!(name: mock_uuid)
48
52
  requester = client.users.create!(email: mock_email, name: mock_uuid, organization: organization)
49
53
 
@@ -53,64 +57,65 @@ describe "Zendesk2" do
53
57
  expect(organization.tickets).to contain_exactly(ticket)
54
58
  end
55
59
 
56
- it "should require requester name" do
57
- expect {
58
- client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: {email: mock_email})
59
- }.to raise_exception(Zendesk2::Error, /Requester Name: .* too short/)
60
+ it 'should require requester name' do
61
+ expect do
62
+ client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: { email: mock_email })
63
+ end.to raise_exception(Zendesk2::Error, /Requester Name: .* too short/)
60
64
  end
61
65
 
62
- it "should require a description" do
63
- expect {
66
+ it 'should require a description' do
67
+ expect do
64
68
  client.tickets.create!(subject: mock_uuid)
65
- }.to raise_exception(ArgumentError, /description is required/)
69
+ end.to raise_exception(ArgumentError, /description is required/)
66
70
 
67
- expect {
68
- client.tickets.create!(subject: mock_uuid, description: "")
69
- }.to raise_exception(ArgumentError, /description is required/)
71
+ expect do
72
+ client.tickets.create!(subject: mock_uuid, description: '')
73
+ end.to raise_exception(ArgumentError, /description is required/)
70
74
  end
71
75
 
72
- it "should set priority" do
73
- priority = "urgent"
76
+ it 'should set priority' do
77
+ priority = 'urgent'
74
78
 
75
79
  ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, priority: priority)
76
80
 
77
- expect(ticket.priority).to eq("urgent")
81
+ expect(ticket.priority).to eq('urgent')
78
82
  expect(client.tickets.get!(ticket.id).priority).to eq(priority)
79
83
  end
80
84
  end
81
85
 
82
- describe "with a created ticket" do
86
+ describe 'with a created ticket' do
83
87
  let(:ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
84
88
 
85
- it "should get requester" do
89
+ it 'should get requester' do
86
90
  expect(ticket.requester).to eq(client.users.current)
87
91
  end
88
92
 
89
- it "should get submitter" do
93
+ it 'should get submitter' do
90
94
  expect(ticket.submitter).to eq(client.users.current)
91
95
  end
92
96
 
93
- it "should have empty custom fields by default", mock_only: true do
97
+ it 'should have empty custom fields by default', mock_only: true do
94
98
  expect(ticket.custom_fields).to eq([])
95
99
  end
96
100
  end
97
101
 
98
- describe "ticket#comments" do
102
+ describe 'ticket#comments' do
99
103
  let!(:ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
100
- let!(:another_ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
104
+ let!(:another_ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
101
105
 
102
- it "should scope the comments to the source ticket" do
103
- target_comments = 2.times.map { ticket.comment(mock_uuid) }
104
- 2.times.map { another_ticket.comment(mock_uuid) }
106
+ it 'should scope the comments to the source ticket' do
107
+ target_comments = Array.new(2) { ticket.comment(mock_uuid) }
108
+ Array.new(2) { another_ticket.comment(mock_uuid) }
105
109
 
106
- expect(ticket.comments.all).to include(*target_comments) # @fixme model (subject + description) || (comment) on create_ticket as a comment
110
+ # @fixme model (subject + description) || (comment) on create_ticket as a comment
111
+ expect(ticket.comments.all).to include(*target_comments)
107
112
  end
108
113
  end
109
114
 
110
- describe "ticket comments" do
115
+ describe 'ticket comments' do
111
116
  let(:ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
112
117
 
113
- it "lists audits" do
118
+ it 'lists audits' do
114
119
  body = mock_uuid
115
120
  comment = ticket.comment(body)
116
121
  expect(comment.body).to eq(body)
@@ -120,9 +125,7 @@ describe "Zendesk2" do
120
125
 
121
126
  events = audit.events
122
127
 
123
- if Zendesk2.mocking?
124
- expect(events.size).to eq(1)
125
- end
128
+ expect(events.size).to eq(1) if Zendesk2.mocking?
126
129
 
127
130
  event = events.first
128
131
  expect(event.body).to eq(body)
@@ -130,32 +133,40 @@ describe "Zendesk2" do
130
133
  expect(event.ticket_audit).to eq(audit)
131
134
  end
132
135
 
133
- it "lists comments" do
136
+ it 'lists comments' do
134
137
  body = mock_uuid
135
138
  ticket.comment(body)
136
139
 
137
- expect(ticket.comments.find{|c| c.body == body}).not_to be_nil
140
+ expect(ticket.comments.find { |c| c.body == body }).not_to be_nil
138
141
  end
139
142
  end
140
143
 
141
- describe "ticket custom fields" do
142
- let!(:ticket_field) { client.ticket_fields.create!(title: SecureRandom.hex(3), type: "text") }
144
+ describe 'ticket custom fields' do
145
+ let!(:ticket_field) { client.ticket_fields.create!(title: SecureRandom.hex(3), type: 'text') }
143
146
 
144
- it "should be based on ticket_fields" do
147
+ it 'should be based on ticket_fields' do
145
148
  ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid)
146
- custom_field = ticket.custom_fields.find { |cf| cf["id"].to_s == ticket_field.identity.to_s }
149
+ custom_field = ticket.custom_fields.find { |cf| cf['id'].to_s == ticket_field.identity.to_s }
147
150
 
148
151
  expect(custom_field).not_to be_nil
149
- expect(custom_field["value"]).to be_nil
152
+ expect(custom_field['value']).to be_nil
150
153
 
151
- ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, custom_fields: [{"id" => ticket_field.identity, "value" => "jessicaspacekat"}])
152
- custom_field = ticket.custom_fields.find { |cf| cf["id"] == ticket_field.identity }
154
+ ticket = client.tickets.create!(
155
+ subject: mock_uuid,
156
+ description: mock_uuid,
157
+ custom_fields: [{ 'id' => ticket_field.identity, 'value' => 'jessicaspacekat' }]
158
+ )
159
+ custom_field = ticket.custom_fields.find { |cf| cf['id'] == ticket_field.identity }
153
160
 
154
161
  expect(custom_field).to be
155
- expect(custom_field["value"]).to eq("jessicaspacekat")
156
-
157
- ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, custom_fields: [{"id" => "-1", "value" => "fantasy"}])
158
- expect(ticket.custom_fields).not_to include({"id" => -1, "value" => "fantasy"})
162
+ expect(custom_field['value']).to eq('jessicaspacekat')
163
+
164
+ ticket = client.tickets.create!(
165
+ subject: mock_uuid,
166
+ description: mock_uuid,
167
+ custom_fields: [{ 'id' => '-1', 'value' => 'fantasy' }]
168
+ )
169
+ expect(ticket.custom_fields).not_to include('id' => -1, 'value' => 'fantasy')
159
170
  end
160
171
  end
161
172
  end
@@ -1,16 +1,15 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
- describe "topic_comments" do
4
+ describe 'topic_comments' do
4
5
  let!(:client) { create_client }
5
6
  let!(:user) { client.users.create!(email: mock_email, name: mock_uuid, verified: true) }
6
7
  let!(:forum) { client.forums.create!(name: mock_uuid) }
7
8
  let!(:topic) { client.topics.create!(title: mock_uuid, body: mock_uuid, forum: forum) }
8
9
 
9
- include_examples "zendesk#resource",
10
- {
11
- :create_params => lambda { { body: mock_uuid, topic_id: topic.identity, user_id: user.identity } },
12
- :update => false,
13
- :fetch_params => lambda { |tc| {"topic_id" => tc.topic_id, "id" => tc.identity} },
14
- :collection => lambda { client.topic_comments(topic_id: topic.identity) },
15
- }
10
+ include_examples 'zendesk#resource',
11
+ create_params: -> { { body: mock_uuid, topic_id: topic.identity, user_id: user.identity } },
12
+ update: false,
13
+ fetch_params: ->(tc) { { 'topic_id' => tc.topic_id, 'id' => tc.identity } },
14
+ collection: -> { client.topic_comments(topic_id: topic.identity) }
16
15
  end
data/spec/topics_spec.rb CHANGED
@@ -1,12 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
- describe "topics" do
4
+ describe 'topics' do
4
5
  let(:client) { create_client }
5
6
  let(:forum) { client.forums.create(name: mock_uuid) }
6
7
 
7
- include_examples "zendesk#resource", {
8
- :collection => lambda { client.topics },
9
- :create_params => lambda { { title: mock_uuid, body: mock_uuid, forum_id: forum.id } },
10
- :update_params => lambda { { title: mock_uuid, body: mock_uuid } },
11
- }
8
+ include_examples 'zendesk#resource', collection: -> { client.topics },
9
+ create_params: -> { { title: mock_uuid, body: mock_uuid, forum_id: forum.id } },
10
+ update_params: -> { { title: mock_uuid, body: mock_uuid } }
12
11
  end
@@ -1,12 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
- describe "user_fields" do
4
+ describe 'user_fields' do
4
5
  let(:client) { create_client }
5
6
 
6
- include_examples "zendesk#resource", {
7
- :collection => lambda { client.user_fields },
8
- :create_params => lambda { { title: mock_uuid, type: "text", key: "custom_#{SecureRandom.hex(3)}"} },
9
- :update_params => lambda { { title: mock_uuid } },
10
- :paged => false,
11
- }
7
+ include_examples 'zendesk#resource',
8
+ collection: -> { client.user_fields },
9
+ create_params: -> { { title: mock_uuid, type: 'text', key: "custom_#{SecureRandom.hex(3)}" } },
10
+ update_params: -> { { title: mock_uuid } },
11
+ paged: false
12
12
  end
@@ -1,46 +1,50 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
- describe "user_identities" do
4
+ describe 'user_identities' do
4
5
  let(:client) { create_client }
5
6
  let(:user) { client.users.create(email: mock_email, name: mock_uuid, verified: true) }
6
7
 
7
- include_examples "zendesk#resource", {
8
- :create_params => lambda { { value: "ey+#{mock_uuid}@example.org", type: "email", user_id: user.id } },
9
- :update_params => lambda { { verified: true } },
10
- :fetch_params => lambda { |uc| { "user_id" => uc.user_id, "id" => uc.id } },
11
- :collection => lambda { client.user_identities(user_id: user.id) },
12
- :paged => false,
13
- :search => false,
14
- }
8
+ include_examples 'zendesk#resource',
9
+ create_params: -> { { value: "ey+#{mock_uuid}@example.org", type: 'email', user_id: user.id } },
10
+ update_params: -> { { verified: true } },
11
+ fetch_params: ->(uc) { { 'user_id' => uc.user_id, 'id' => uc.id } },
12
+ collection: -> { client.user_identities(user_id: user.id) },
13
+ paged: false,
14
+ search: false
15
15
 
16
- describe "#create_user_identity" do
16
+ describe '#create_user_identity' do
17
17
  let(:another_user) { client.users.create(email: mock_email, name: mock_uuid, verified: true) }
18
18
 
19
- it "should prevent duplicate identities across users" do
20
- expect {
21
- client.create_user_identity("user_identity" => { "type" => "email", "value" => user.email, "user_id" => another_user.id })
22
- }.to raise_exception(Zendesk2::Error, /is already being used by another user/)
19
+ it 'should prevent duplicate identities across users' do
20
+ expect do
21
+ client.create_user_identity(
22
+ 'user_identity' => { 'type' => 'email', 'value' => user.email, 'user_id' => another_user.id }
23
+ )
24
+ end.to raise_exception(Zendesk2::Error, /is already being used by another user/)
23
25
  end
24
26
 
25
- it "should prevent duplicate identities on the same user" do
26
- expect {
27
- client.create_user_identity("user_identity" => { "type" => "email", "value" => user.email, "user_id" => user.id })
28
- }.to raise_exception(Zendesk2::Error, /is already being used by another user/)
27
+ it 'should prevent duplicate identities on the same user' do
28
+ expect do
29
+ client.create_user_identity(
30
+ 'user_identity' => { 'type' => 'email', 'value' => user.email, 'user_id' => user.id }
31
+ )
32
+ end.to raise_exception(Zendesk2::Error, /is already being used by another user/)
29
33
  end
30
34
 
31
- it "should be allowed if the user is deleted" do
35
+ it 'should be allowed if the user is deleted' do
32
36
  email = user.email
33
37
  user.destroy
34
38
 
35
- expect {
39
+ expect do
36
40
  client.create_user_identity(
37
- "user_identity" => {
38
- "type" => "email",
39
- "value" => email,
40
- "user_id" => another_user.id,
41
+ 'user_identity' => {
42
+ 'type' => 'email',
43
+ 'value' => email,
44
+ 'user_id' => another_user.id,
41
45
  }
42
46
  )
43
- }.to change { another_user.identities.all.count }.by(1)
47
+ end.to change { another_user.identities.all.count }.by(1)
44
48
  end
45
49
  end
46
50
  end
data/spec/users_spec.rb CHANGED
@@ -1,51 +1,51 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
- describe "users" do
4
+ describe 'users' do
4
5
  let(:client) { create_client }
5
6
 
6
- include_examples "zendesk#resource", {
7
- :collection => lambda { client.users },
8
- :create_params => lambda { { email: mock_email, name: mock_uuid, verified: true } },
9
- :update_params => lambda { { name: mock_uuid } },
10
- }
7
+ include_examples 'zendesk#resource',
8
+ collection: -> { client.users },
9
+ create_params: -> { { email: mock_email, name: mock_uuid, verified: true } },
10
+ update_params: -> { { name: mock_uuid } }
11
11
 
12
- it "should get current user" do
12
+ it 'should get current user' do
13
13
  current_user = client.users.current
14
14
  expect(current_user.email).to eq(client.username)
15
15
  end
16
16
 
17
- describe "#create_user" do
18
- it "should prevent duplicate external_ids" do
17
+ describe '#create_user' do
18
+ it 'should prevent duplicate external_ids' do
19
19
  external_id = mock_uuid
20
20
 
21
- client.create_user("user" => {:email => mock_email, :name => "a", :external_id => nil}) # fine
22
- client.create_user("user" => {:email => mock_email, :name => "b", :external_id => nil}) # also fine
23
- client.create_user("user" => {:email => mock_email, :name => "c", :external_id => external_id}) # it's cool
21
+ client.create_user('user' => { email: mock_email, name: 'a', external_id: nil }) # fine
22
+ client.create_user('user' => { email: mock_email, name: 'b', external_id: nil }) # also fine
23
+ client.create_user('user' => { email: mock_email, name: 'c', external_id: external_id }) # it's cool
24
24
 
25
- expect {
26
- client.create_user("user" => {:email => mock_email, :name => "d", :external_id => external_id})
27
- }.to raise_exception(Zendesk2::Error, /External has already been taken/)
25
+ expect do
26
+ client.create_user('user' => { email: mock_email, name: 'd', external_id: external_id })
27
+ end.to raise_exception(Zendesk2::Error, /External has already been taken/)
28
28
  end
29
29
  end
30
30
 
31
- describe "#update_user" do
32
- it "should prevent duplicate external_ids" do
33
- user = client.users.create(email: mock_email, name: "a")
34
- another_user = client.users.create(email: mock_email, name: "b")
31
+ describe '#update_user' do
32
+ it 'should prevent duplicate external_ids' do
33
+ user = client.users.create(email: mock_email, name: 'a')
34
+ another_user = client.users.create(email: mock_email, name: 'b')
35
35
 
36
36
  external_id = mock_uuid
37
37
 
38
- client.update_user("user" => {"id" => user.id, "external_id" => nil}) # fine
39
- client.update_user("user" => {"id" => another_user.id, "external_id" => external_id}) # also fine
38
+ client.update_user('user' => { 'id' => user.id, 'external_id' => nil }) # fine
39
+ client.update_user('user' => { 'id' => another_user.id, 'external_id' => external_id }) # also fine
40
40
 
41
- expect {
42
- client.update_user("user" => {"id" => user.id, "external_id" => external_id})
43
- }.to raise_exception(Zendesk2::Error, /External has already been taken/)
41
+ expect do
42
+ client.update_user('user' => { 'id' => user.id, 'external_id' => external_id })
43
+ end.to raise_exception(Zendesk2::Error, /External has already been taken/)
44
44
  end
45
45
  end
46
46
 
47
- describe "#search", :mock_only do
48
- it "should find a user based on details criteria with wildcards and by organization name" do
47
+ describe '#search', :mock_only do
48
+ it 'should find a user based on details criteria with wildcards and by organization name' do
49
49
  # detached user
50
50
  client.users.create!(email: mock_email, name: mock_uuid)
51
51
 
@@ -54,19 +54,24 @@ describe "users" do
54
54
  client.users.create!(email: mock_email, name: mock_uuid, organization: bad_org)
55
55
 
56
56
  org = client.organizations.create!(name: mock_uuid)
57
- user = client.users.create!(email: mock_email, name: mock_uuid, organization: org, details: "anything_hello-something-michelle")
57
+ user = client.users.create!(
58
+ email: mock_email,
59
+ name: mock_uuid,
60
+ organization: org,
61
+ details: 'anything_hello-something-michelle'
62
+ )
58
63
 
59
- expect(client.users.search(details: "*michelle*", organization: org.name)).to contain_exactly(user)
60
- expect(client.users.search(details: "*michelle*", organization: org.name[0..6])).to include(user)
64
+ expect(client.users.search(details: '*michelle*', organization: org.name)).to contain_exactly(user)
65
+ expect(client.users.search(details: '*michelle*', organization: org.name[0..6])).to include(user)
61
66
  end
62
67
 
63
- context "when a user has multiple identities and searching by email" do
64
- it "should display the primary email in the results" do
68
+ context 'when a user has multiple identities and searching by email' do
69
+ it 'should display the primary email in the results' do
65
70
  user = client.users.create!(email: (primary = mock_email), name: mock_uuid)
66
71
 
67
72
  # create some extra identities
68
- user.identities.create!(value: mock_email, type: "email")
69
- user.identities.create!(value: (target = mock_email), type: "email")
73
+ user.identities.create!(value: mock_email, type: 'email')
74
+ user.identities.create!(value: (target = mock_email), type: 'email')
70
75
 
71
76
  # primary email should be returned in the results
72
77
  expect(client.users.search(email: target).first.email).to eq(primary)
@@ -74,11 +79,11 @@ describe "users" do
74
79
  end
75
80
  end
76
81
 
77
- context "with a user" do
82
+ context 'with a user' do
78
83
  let!(:user) { client.users.create!(email: mock_email, name: mock_uuid) }
79
84
 
80
- describe "#save" do
81
- it "should update organization" do
85
+ describe '#save' do
86
+ it 'should update organization' do
82
87
  user.organization = organization = client.organizations.create!(name: mock_uuid)
83
88
 
84
89
  user.save!
@@ -87,27 +92,27 @@ describe "users" do
87
92
  end
88
93
  end
89
94
 
90
- it "should get requested tickets" do
95
+ it 'should get requested tickets' do
91
96
  another_user = client.users.create!(email: mock_email, name: mock_uuid)
92
97
 
93
- 2.times.each {
98
+ 2.times.each do
94
99
  another_user.tickets.create!(collaborators: [user], subject: mock_uuid, description: mock_uuid)
95
- }
100
+ end
96
101
 
97
- targets = 2.times.map {
102
+ targets = Array.new(2) do
98
103
  user.tickets.create!(requester: user, subject: mock_uuid, description: mock_uuid)
99
- }
104
+ end
100
105
 
101
106
  expect(user.requested_tickets.all(per_page: 1).all_entries).to match_array(targets)
102
107
  end
103
108
 
104
- it "should get ccd tickets", mock_only: true do
109
+ it 'should get ccd tickets', mock_only: true do
105
110
  ticket = client.tickets.create!(collaborators: [user], subject: mock_uuid, description: mock_uuid)
106
111
 
107
112
  expect(user.ccd_tickets).to contain_exactly(ticket)
108
113
  end
109
114
 
110
- it "cannot destroy a user with a ticket" do
115
+ it 'cannot destroy a user with a ticket' do
111
116
  client.tickets.create!(requester: user, subject: mock_uuid, description: mock_uuid)
112
117
 
113
118
  expect(user.destroy).to be_falsey
@@ -115,39 +120,39 @@ describe "users" do
115
120
  expect(user).not_to be_destroyed
116
121
  end
117
122
 
118
- it "should list identities" do
123
+ it 'should list identities' do
119
124
  identities = user.identities.all
120
125
  expect(identities.size).to eq(1)
121
126
 
122
127
  identity = identities.first
123
128
  expect(identity.primary).to be_truthy
124
129
  expect(identity.verified).to be_falsey
125
- expect(identity.type).to eq("email")
130
+ expect(identity.type).to eq('email')
126
131
  expect(identity.value).to eq(user.email)
127
132
  end
128
133
 
129
- it "should create a new identity" do
134
+ it 'should create a new identity' do
130
135
  email = "ey+#{mock_uuid}@example.org"
131
136
 
132
- new_identity = user.identities.create!(type: "email", value: email)
137
+ new_identity = user.identities.create!(type: 'email', value: email)
133
138
 
134
139
  expect(new_identity.primary).to be_falsey
135
140
  expect(new_identity.verified).to be_falsey
136
- expect(new_identity.type).to eq("email")
141
+ expect(new_identity.type).to eq('email')
137
142
  expect(new_identity.value).to eq(email)
138
143
  end
139
144
 
140
- it "should mark remaining identity as primary" do
145
+ it 'should mark remaining identity as primary' do
141
146
  email = "ey+#{mock_uuid}@example.org"
142
147
 
143
148
  initial_identity = user.identities.all.first
144
- new_identity = user.identities.create!(type: "email", value: email)
149
+ new_identity = user.identities.create!(type: 'email', value: email)
145
150
 
146
- expect {
151
+ expect do
147
152
  initial_identity.destroy
148
- }.to change { user.identities.all }.
149
- from(a_collection_containing_exactly(initial_identity, new_identity)).
150
- to(a_collection_containing_exactly(new_identity))
153
+ end.to change { user.identities.all }
154
+ .from(a_collection_containing_exactly(initial_identity, new_identity))
155
+ .to(a_collection_containing_exactly(new_identity))
151
156
 
152
157
  expect(new_identity.reload.primary).to be_falsey
153
158
 
@@ -156,11 +161,11 @@ describe "users" do
156
161
  expect(new_identity.reload.primary).to be_truthy
157
162
  end
158
163
 
159
- it "should not allow multiple primary identities" do
164
+ it 'should not allow multiple primary identities' do
160
165
  email = "ey+#{mock_uuid}@example.org"
161
166
 
162
167
  initial_identity = user.identities.all.first
163
- new_identity = user.identities.create!(type: "email", value: email)
168
+ new_identity = user.identities.create!(type: 'email', value: email)
164
169
  new_identity.primary!
165
170
  expect(new_identity.primary).to be_truthy
166
171
  expect(new_identity.reload.primary).to be_truthy
@@ -168,15 +173,15 @@ describe "users" do
168
173
  expect(initial_identity.reload.primary).to be_falsey
169
174
  end
170
175
 
171
- it "persists #user_fields" do
172
- user_fields = { "A" => 1 }
176
+ it 'persists #user_fields' do
177
+ user_fields = { 'A' => 1 }
173
178
 
174
179
  fields_user = client.users.create!(email: mock_email, name: mock_uuid, user_fields: user_fields)
175
180
  expect(fields_user.user_fields).to eq(user_fields)
176
181
  expect(fields_user.reload.user_fields).to eq(user_fields)
177
182
  end
178
183
 
179
- it "should hate non-unique emails" do
184
+ it 'should hate non-unique emails' do
180
185
  email = mock_email
181
186
  client.users.create!(email: email, name: mock_uuid)
182
187
  expect { client.users.create!(email: email, name: mock_uuid) }.to raise_exception(Zendesk2::Error)
@@ -184,16 +189,16 @@ describe "users" do
184
189
  user = client.users.create(email: email, name: mock_uuid)
185
190
 
186
191
  expect(user.identity).to eq(nil)
187
- expect(user.errors).to eq({"email" => ["Email: #{email} is already being used by another user"]})
192
+ expect(user.errors).to eq('email' => ["Email: #{email} is already being used by another user"])
188
193
  end
189
194
 
190
- it "should create another identity when updating email" do
195
+ it 'should create another identity when updating email' do
191
196
  original_email = user.email
192
197
  user.email = (new_email = mock_email)
193
198
 
194
- expect {
199
+ expect do
195
200
  user.save!
196
- }.to change { user.identities.size }.from(1).to(2)
201
+ end.to change { user.identities.size }.from(1).to(2)
197
202
 
198
203
  new_identity = user.identities.find { |i| i.value == new_email }
199
204
 
@@ -206,32 +211,37 @@ describe "users" do
206
211
  expect(original_identity.primary).to eq(true)
207
212
  expect(user.reload.email).to eq(original_email)
208
213
 
209
- expect {
214
+ expect do
210
215
  user.save!
211
- }.not_to change { user.identities.size }
216
+ end.not_to change { user.identities.size }
212
217
  end
213
218
 
214
219
  it "should form 'legacy' login url" do
215
- return_to = "http://engineyard.com"
216
- login_uri = user.login_url(Time.now.to_s, return_to: return_to, token: "in-case-you-dont-have-it-in ~/.zendesk2 (aka ci)")
220
+ return_to = 'http://engineyard.com'
221
+ login_uri = user.login_url(Time.now.to_s,
222
+ return_to: return_to,
223
+ token: 'in-case-you-dont-have-it-in ~/.zendesk2 (aka ci)')
217
224
  query = Faraday::NestedParamsEncoder.decode(URI.parse(login_uri).query)
218
225
 
219
- expect(query["return_to"]).to eq(return_to)
220
- expect(query["name"]).to eq user.name
221
- expect(query["email"]).to eq user.email
222
- expect(query["hash"]).not_to be_nil
226
+ expect(query['return_to']).to eq(return_to)
227
+ expect(query['name']).to eq user.name
228
+ expect(query['email']).to eq user.email
229
+ expect(query['hash']).not_to be_nil
223
230
  end
224
231
 
225
- it "should form jwt login url" do
226
- return_to = "http://engineyard.com"
232
+ it 'should form jwt login url' do
233
+ return_to = 'http://engineyard.com'
227
234
 
228
- jwt_login_uri = user.jwt_login_url(return_to: return_to, jwt_token: "in-case-you-dont-have-it-in ~/.zendesk2 (aka ci)")
235
+ jwt_login_uri = user.jwt_login_url(
236
+ return_to: return_to,
237
+ jwt_token: 'in-case-you-dont-have-it-in ~/.zendesk2 (aka ci)'
238
+ )
229
239
  query = Faraday::NestedParamsEncoder.decode(URI.parse(jwt_login_uri).query)
230
240
 
231
- expect(query["return_to"]).to eq(return_to)
232
- expect(query["name"]).to be_nil
233
- expect(query["email"]).to be_nil
234
- expect(query["jwt"]).not_to be_nil
241
+ expect(query['return_to']).to eq(return_to)
242
+ expect(query['name']).to be_nil
243
+ expect(query['email']).to be_nil
244
+ expect(query['jwt']).not_to be_nil
235
245
  end
236
246
  end
237
247
  end