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.
- checksums.yaml +4 -4
- data/.rubocop.yml +30 -0
- data/.travis.yml +3 -1
- data/Gemfile +4 -5
- data/Guardfile +4 -3
- data/Rakefile +4 -3
- data/lib/zendesk2.rb +9 -6
- data/lib/zendesk2/attributes.rb +11 -8
- data/lib/zendesk2/audit_event.rb +5 -3
- data/lib/zendesk2/categories.rb +4 -3
- data/lib/zendesk2/category.rb +10 -5
- data/lib/zendesk2/client.rb +3 -3
- data/lib/zendesk2/collection.rb +35 -21
- data/lib/zendesk2/create_category.rb +10 -9
- data/lib/zendesk2/create_forum.rb +11 -10
- data/lib/zendesk2/create_group.rb +13 -12
- data/lib/zendesk2/create_membership.rb +21 -20
- data/lib/zendesk2/create_organization.rb +24 -18
- data/lib/zendesk2/create_ticket.rb +60 -56
- data/lib/zendesk2/create_ticket_field.rb +24 -22
- data/lib/zendesk2/create_topic.rb +11 -10
- data/lib/zendesk2/create_topic_comment.rb +12 -11
- data/lib/zendesk2/create_user.rb +54 -41
- data/lib/zendesk2/create_user_field.rb +22 -21
- data/lib/zendesk2/create_user_identity.rb +18 -15
- data/lib/zendesk2/create_view.rb +62 -62
- data/lib/zendesk2/destroy_category.rb +2 -1
- data/lib/zendesk2/destroy_forum.rb +2 -1
- data/lib/zendesk2/destroy_group.rb +3 -2
- data/lib/zendesk2/destroy_membership.rb +7 -5
- data/lib/zendesk2/destroy_organization.rb +3 -2
- data/lib/zendesk2/destroy_ticket.rb +3 -2
- data/lib/zendesk2/destroy_ticket_field.rb +3 -2
- data/lib/zendesk2/destroy_topic.rb +3 -2
- data/lib/zendesk2/destroy_topic_comment.rb +4 -3
- data/lib/zendesk2/destroy_user.rb +11 -10
- data/lib/zendesk2/destroy_user_field.rb +3 -2
- data/lib/zendesk2/destroy_user_identity.rb +4 -3
- data/lib/zendesk2/destroy_view.rb +3 -2
- data/lib/zendesk2/error.rb +1 -1
- data/lib/zendesk2/forum.rb +36 -18
- data/lib/zendesk2/forums.rb +4 -3
- data/lib/zendesk2/get_assignable_groups.rb +3 -2
- data/lib/zendesk2/get_categories.rb +2 -1
- data/lib/zendesk2/get_category.rb +3 -2
- data/lib/zendesk2/get_ccd_tickets.rb +4 -3
- data/lib/zendesk2/get_current_user.rb +3 -2
- data/lib/zendesk2/get_forum.rb +3 -2
- data/lib/zendesk2/get_forums.rb +2 -1
- data/lib/zendesk2/get_group.rb +3 -2
- data/lib/zendesk2/get_groups.rb +2 -1
- data/lib/zendesk2/get_membership.rb +3 -2
- data/lib/zendesk2/get_memberships.rb +3 -2
- data/lib/zendesk2/get_organization.rb +3 -2
- data/lib/zendesk2/get_organization_by_external_id.rb +8 -5
- data/lib/zendesk2/get_organization_memberships.rb +5 -2
- data/lib/zendesk2/get_organization_tickets.rb +7 -5
- data/lib/zendesk2/get_organization_users.rb +6 -5
- data/lib/zendesk2/get_organizations.rb +2 -1
- data/lib/zendesk2/get_requested_tickets.rb +5 -4
- data/lib/zendesk2/get_ticket.rb +3 -2
- data/lib/zendesk2/get_ticket_audit.rb +5 -4
- data/lib/zendesk2/get_ticket_audits.rb +4 -3
- data/lib/zendesk2/get_ticket_comments.rb +6 -5
- data/lib/zendesk2/get_ticket_field.rb +3 -2
- data/lib/zendesk2/get_ticket_fields.rb +2 -1
- data/lib/zendesk2/get_ticket_metric.rb +4 -3
- data/lib/zendesk2/get_ticket_metrics.rb +3 -2
- data/lib/zendesk2/get_tickets.rb +2 -1
- data/lib/zendesk2/get_topic.rb +3 -2
- data/lib/zendesk2/get_topic_comment.rb +4 -3
- data/lib/zendesk2/get_topic_comments.rb +5 -4
- data/lib/zendesk2/get_topics.rb +2 -1
- data/lib/zendesk2/get_user.rb +7 -7
- data/lib/zendesk2/get_user_field.rb +3 -2
- data/lib/zendesk2/get_user_fields.rb +3 -2
- data/lib/zendesk2/get_user_identities.rb +4 -3
- data/lib/zendesk2/get_user_identity.rb +4 -3
- data/lib/zendesk2/get_user_memberships.rb +4 -3
- data/lib/zendesk2/get_user_organizations.rb +5 -4
- data/lib/zendesk2/get_users.rb +3 -2
- data/lib/zendesk2/get_view.rb +3 -2
- data/lib/zendesk2/get_view_tickets.rb +19 -16
- data/lib/zendesk2/get_views.rb +2 -1
- data/lib/zendesk2/group.rb +6 -5
- data/lib/zendesk2/groups.rb +7 -6
- data/lib/zendesk2/help_center.rb +15 -0
- data/lib/zendesk2/help_center/access_policy.rb +3 -2
- data/lib/zendesk2/help_center/article.rb +10 -7
- data/lib/zendesk2/help_center/articles.rb +7 -7
- data/lib/zendesk2/help_center/categories.rb +3 -2
- data/lib/zendesk2/help_center/category.rb +8 -7
- data/lib/zendesk2/help_center/create_help_center_article.rb +31 -29
- data/lib/zendesk2/help_center/create_help_center_category.rb +17 -16
- data/lib/zendesk2/help_center/create_help_center_post.rb +37 -0
- data/lib/zendesk2/help_center/create_help_center_section.rb +32 -31
- data/lib/zendesk2/help_center/create_help_center_topic.rb +36 -0
- data/lib/zendesk2/help_center/create_help_center_translation.rb +15 -14
- data/lib/zendesk2/help_center/destroy_help_center_article.rb +3 -2
- data/lib/zendesk2/help_center/destroy_help_center_category.rb +3 -2
- data/lib/zendesk2/help_center/destroy_help_center_post.rb +15 -0
- data/lib/zendesk2/help_center/destroy_help_center_section.rb +3 -2
- data/lib/zendesk2/help_center/destroy_help_center_topic.rb +15 -0
- data/lib/zendesk2/help_center/destroy_help_center_translation.rb +2 -1
- data/lib/zendesk2/help_center/get_help_center_access_policy.rb +6 -5
- data/lib/zendesk2/help_center/get_help_center_article.rb +7 -9
- data/lib/zendesk2/help_center/get_help_center_articles.rb +3 -2
- data/lib/zendesk2/help_center/get_help_center_categories.rb +6 -2
- data/lib/zendesk2/help_center/get_help_center_categories_articles.rb +8 -7
- data/lib/zendesk2/help_center/get_help_center_categories_sections.rb +6 -5
- data/lib/zendesk2/help_center/get_help_center_category.rb +7 -9
- data/lib/zendesk2/help_center/get_help_center_post.rb +19 -0
- data/lib/zendesk2/help_center/get_help_center_posts.rb +28 -0
- data/lib/zendesk2/help_center/get_help_center_section.rb +8 -10
- data/lib/zendesk2/help_center/get_help_center_sections.rb +3 -2
- data/lib/zendesk2/help_center/get_help_center_sections_articles.rb +9 -8
- data/lib/zendesk2/help_center/get_help_center_topic.rb +14 -0
- data/lib/zendesk2/help_center/get_help_center_topics.rb +10 -0
- data/lib/zendesk2/help_center/get_help_center_translation.rb +5 -4
- data/lib/zendesk2/help_center/get_help_center_translations.rb +7 -6
- data/lib/zendesk2/help_center/post.rb +72 -0
- data/lib/zendesk2/help_center/posts.rb +18 -0
- data/lib/zendesk2/help_center/search_help_center_articles.rb +8 -7
- data/lib/zendesk2/help_center/section.rb +11 -11
- data/lib/zendesk2/help_center/sections.rb +7 -6
- data/lib/zendesk2/help_center/topic.rb +52 -0
- data/lib/zendesk2/help_center/topics.rb +13 -0
- data/lib/zendesk2/help_center/translation.rb +8 -5
- data/lib/zendesk2/help_center/translation_source.rb +16 -13
- data/lib/zendesk2/help_center/translations.rb +3 -2
- data/lib/zendesk2/help_center/update_help_center_access_policy.rb +8 -7
- data/lib/zendesk2/help_center/update_help_center_article.rb +9 -11
- data/lib/zendesk2/help_center/update_help_center_category.rb +9 -11
- data/lib/zendesk2/help_center/update_help_center_post.rb +20 -0
- data/lib/zendesk2/help_center/update_help_center_section.rb +9 -11
- data/lib/zendesk2/help_center/update_help_center_topic.rb +20 -0
- data/lib/zendesk2/help_center/update_help_center_translation.rb +4 -3
- data/lib/zendesk2/logger.rb +3 -2
- data/lib/zendesk2/mark_membership_default.rb +7 -6
- data/lib/zendesk2/mark_user_identity_primary.rb +7 -6
- data/lib/zendesk2/membership.rb +10 -8
- data/lib/zendesk2/memberships.rb +18 -12
- data/lib/zendesk2/mock.rb +39 -34
- data/lib/zendesk2/model.rb +14 -3
- data/lib/zendesk2/organization.rb +7 -7
- data/lib/zendesk2/organizations.rb +14 -12
- data/lib/zendesk2/paged_collection.rb +40 -36
- data/lib/zendesk2/rate_limit.rb +4 -3
- data/lib/zendesk2/real.rb +25 -22
- data/lib/zendesk2/request.rb +78 -82
- data/lib/zendesk2/search.rb +8 -7
- data/lib/zendesk2/search_organization.rb +14 -14
- data/lib/zendesk2/search_user.rb +41 -37
- data/lib/zendesk2/searchable.rb +36 -26
- data/lib/zendesk2/ticket.rb +20 -18
- data/lib/zendesk2/ticket_audit.rb +5 -4
- data/lib/zendesk2/ticket_audits.rb +10 -11
- data/lib/zendesk2/ticket_change.rb +10 -11
- data/lib/zendesk2/ticket_comment.rb +2 -1
- data/lib/zendesk2/ticket_comment_privacy_change.rb +12 -14
- data/lib/zendesk2/ticket_comments.rb +7 -6
- data/lib/zendesk2/ticket_create.rb +8 -9
- data/lib/zendesk2/ticket_field.rb +5 -4
- data/lib/zendesk2/ticket_fields.rb +4 -3
- data/lib/zendesk2/ticket_metric.rb +2 -2
- data/lib/zendesk2/ticket_metrics.rb +3 -2
- data/lib/zendesk2/ticket_notification.rb +12 -13
- data/lib/zendesk2/ticket_voice_comment.rb +28 -29
- data/lib/zendesk2/tickets.rb +8 -7
- data/lib/zendesk2/topic.rb +49 -22
- data/lib/zendesk2/topic_comment.rb +12 -9
- data/lib/zendesk2/topic_comments.rb +4 -3
- data/lib/zendesk2/topics.rb +4 -3
- data/lib/zendesk2/update_category.rb +8 -6
- data/lib/zendesk2/update_forum.rb +5 -4
- data/lib/zendesk2/update_group.rb +5 -4
- data/lib/zendesk2/update_organization.rb +18 -9
- data/lib/zendesk2/update_request.rb +6 -5
- data/lib/zendesk2/update_ticket.rb +39 -38
- data/lib/zendesk2/update_ticket_field.rb +5 -4
- data/lib/zendesk2/update_topic.rb +5 -4
- data/lib/zendesk2/update_user.rb +39 -31
- data/lib/zendesk2/update_user_field.rb +4 -3
- data/lib/zendesk2/update_user_identity.rb +7 -6
- data/lib/zendesk2/update_view.rb +38 -34
- data/lib/zendesk2/user.rb +41 -37
- data/lib/zendesk2/user_field.rb +9 -6
- data/lib/zendesk2/user_fields.rb +4 -3
- data/lib/zendesk2/user_identities.rb +4 -3
- data/lib/zendesk2/user_identity.rb +12 -9
- data/lib/zendesk2/users.rb +5 -4
- data/lib/zendesk2/version.rb +2 -1
- data/lib/zendesk2/view.rb +24 -13
- data/lib/zendesk2/views.rb +3 -2
- data/spec/categories_spec.rb +63 -60
- data/spec/client_spec.rb +6 -5
- data/spec/forums_spec.rb +64 -61
- data/spec/groups_spec.rb +7 -8
- data/spec/help_center/articles_spec.rb +22 -26
- data/spec/help_center/categories_spec.rb +26 -27
- data/spec/help_center/posts_spec.rb +39 -0
- data/spec/help_center/sections_spec.rb +32 -33
- data/spec/help_center/topics_spec.rb +13 -0
- data/spec/lib/paged_collection_spec.rb +11 -11
- data/spec/lib/rate_limit_spec.rb +9 -8
- data/spec/memberships_spec.rb +38 -27
- data/spec/organizations_spec.rb +92 -87
- data/spec/shared/zendesk_resource.rb +40 -25
- data/spec/spec_helper.rb +8 -13
- data/spec/support/client_helper.rb +5 -4
- data/spec/support/data_helper.rb +1 -0
- data/spec/ticket_fields_spec.rb +6 -7
- data/spec/tickets_spec.rb +69 -58
- data/spec/topic_comments_spec.rb +7 -8
- data/spec/topics_spec.rb +5 -6
- data/spec/user_fields_spec.rb +7 -7
- data/spec/user_identities_spec.rb +29 -25
- data/spec/users_spec.rb +88 -78
- data/spec/views_spec.rb +45 -34
- data/spec/zendesk2_spec.rb +3 -2
- data/zendesk2.gemspec +15 -14
- 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
|
5
|
+
def create_client(options = {})
|
6
|
+
options[:logger] = Logger.new(STDOUT) if ENV['VERBOSE']
|
6
7
|
options = {
|
7
|
-
:
|
8
|
-
:
|
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)
|
data/spec/support/data_helper.rb
CHANGED
data/spec/ticket_fields_spec.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
|
-
describe
|
4
|
+
describe 'ticket_fields' do
|
4
5
|
let(:client) { create_client }
|
5
6
|
|
6
|
-
include_examples
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
4
|
+
describe 'Zendesk2' do
|
4
5
|
let(:client) { create_client }
|
5
6
|
|
6
|
-
describe
|
7
|
-
include_examples
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
15
|
-
it
|
16
|
-
expect
|
17
|
-
client.create_ticket(
|
18
|
-
|
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
|
23
|
-
it
|
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!(
|
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:
|
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
|
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
|
57
|
-
expect
|
58
|
-
client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: {email: mock_email})
|
59
|
-
|
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
|
63
|
-
expect
|
66
|
+
it 'should require a description' do
|
67
|
+
expect do
|
64
68
|
client.tickets.create!(subject: mock_uuid)
|
65
|
-
|
69
|
+
end.to raise_exception(ArgumentError, /description is required/)
|
66
70
|
|
67
|
-
expect
|
68
|
-
client.tickets.create!(subject: mock_uuid, description:
|
69
|
-
|
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
|
73
|
-
priority =
|
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(
|
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
|
86
|
+
describe 'with a created ticket' do
|
83
87
|
let(:ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
|
84
88
|
|
85
|
-
it
|
89
|
+
it 'should get requester' do
|
86
90
|
expect(ticket.requester).to eq(client.users.current)
|
87
91
|
end
|
88
92
|
|
89
|
-
it
|
93
|
+
it 'should get submitter' do
|
90
94
|
expect(ticket.submitter).to eq(client.users.current)
|
91
95
|
end
|
92
96
|
|
93
|
-
it
|
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
|
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
|
103
|
-
target_comments = 2
|
104
|
-
2
|
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
|
-
|
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
|
115
|
+
describe 'ticket comments' do
|
111
116
|
let(:ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
|
112
117
|
|
113
|
-
it
|
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
|
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
|
142
|
-
let!(:ticket_field) { client.ticket_fields.create!(title: SecureRandom.hex(3), type:
|
144
|
+
describe 'ticket custom fields' do
|
145
|
+
let!(:ticket_field) { client.ticket_fields.create!(title: SecureRandom.hex(3), type: 'text') }
|
143
146
|
|
144
|
-
it
|
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[
|
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[
|
152
|
+
expect(custom_field['value']).to be_nil
|
150
153
|
|
151
|
-
ticket = client.tickets.create!(
|
152
|
-
|
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[
|
156
|
-
|
157
|
-
ticket = client.tickets.create!(
|
158
|
-
|
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
|
data/spec/topic_comments_spec.rb
CHANGED
@@ -1,16 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
|
-
describe
|
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
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
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
|
8
|
-
|
9
|
-
|
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
|
data/spec/user_fields_spec.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
|
-
describe
|
4
|
+
describe 'user_fields' do
|
4
5
|
let(:client) { create_client }
|
5
6
|
|
6
|
-
include_examples
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
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
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
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
|
20
|
-
expect
|
21
|
-
client.create_user_identity(
|
22
|
-
|
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
|
26
|
-
expect
|
27
|
-
client.create_user_identity(
|
28
|
-
|
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
|
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
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
+
'user_identity' => {
|
42
|
+
'type' => 'email',
|
43
|
+
'value' => email,
|
44
|
+
'user_id' => another_user.id,
|
41
45
|
}
|
42
46
|
)
|
43
|
-
|
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
|
4
|
+
describe 'users' do
|
4
5
|
let(:client) { create_client }
|
5
6
|
|
6
|
-
include_examples
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
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
|
18
|
-
it
|
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(
|
22
|
-
client.create_user(
|
23
|
-
client.create_user(
|
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(
|
27
|
-
|
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
|
32
|
-
it
|
33
|
-
user = client.users.create(email: mock_email, name:
|
34
|
-
another_user = client.users.create(email: mock_email, name:
|
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(
|
39
|
-
client.update_user(
|
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(
|
43
|
-
|
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
|
48
|
-
it
|
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!(
|
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:
|
60
|
-
expect(client.users.search(details:
|
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
|
64
|
-
it
|
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:
|
69
|
-
user.identities.create!(value: (target = mock_email), type:
|
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
|
82
|
+
context 'with a user' do
|
78
83
|
let!(:user) { client.users.create!(email: mock_email, name: mock_uuid) }
|
79
84
|
|
80
|
-
describe
|
81
|
-
it
|
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
|
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
|
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
|
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
|
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
|
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(
|
130
|
+
expect(identity.type).to eq('email')
|
126
131
|
expect(identity.value).to eq(user.email)
|
127
132
|
end
|
128
133
|
|
129
|
-
it
|
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:
|
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(
|
141
|
+
expect(new_identity.type).to eq('email')
|
137
142
|
expect(new_identity.value).to eq(email)
|
138
143
|
end
|
139
144
|
|
140
|
-
it
|
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:
|
149
|
+
new_identity = user.identities.create!(type: 'email', value: email)
|
145
150
|
|
146
|
-
expect
|
151
|
+
expect do
|
147
152
|
initial_identity.destroy
|
148
|
-
|
149
|
-
|
150
|
-
|
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
|
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:
|
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
|
172
|
-
user_fields = {
|
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
|
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(
|
192
|
+
expect(user.errors).to eq('email' => ["Email: #{email} is already being used by another user"])
|
188
193
|
end
|
189
194
|
|
190
|
-
it
|
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
|
-
|
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
|
-
|
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 =
|
216
|
-
login_uri = user.login_url(Time.now.to_s,
|
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[
|
220
|
-
expect(query[
|
221
|
-
expect(query[
|
222
|
-
expect(query[
|
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
|
226
|
-
return_to =
|
232
|
+
it 'should form jwt login url' do
|
233
|
+
return_to = 'http://engineyard.com'
|
227
234
|
|
228
|
-
jwt_login_uri = user.jwt_login_url(
|
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[
|
232
|
-
expect(query[
|
233
|
-
expect(query[
|
234
|
-
expect(query[
|
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
|