zendesk2 1.9.0 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/spec/organizations_spec.rb
CHANGED
@@ -1,65 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
|
-
describe
|
4
|
+
describe 'organizations' do
|
4
5
|
let(:client) { create_client }
|
5
6
|
|
6
|
-
include_examples
|
7
|
-
|
8
|
-
|
9
|
-
:update_params => lambda { { name: mock_uuid } },
|
10
|
-
}
|
7
|
+
include_examples 'zendesk#resource', collection: -> { client.organizations },
|
8
|
+
create_params: -> { { name: mock_uuid } },
|
9
|
+
update_params: -> { { name: mock_uuid } }
|
11
10
|
|
12
|
-
describe
|
11
|
+
describe 'with an organization' do
|
13
12
|
let(:organization) { client.organizations.create!(name: mock_uuid) }
|
14
13
|
|
15
|
-
it
|
14
|
+
it 'should get #users' do
|
16
15
|
user = client.users.create!(email: "#{mock_uuid}@example.org", name: mock_uuid, organization: organization)
|
17
16
|
expect(organization.users).to include user
|
18
17
|
end
|
19
18
|
|
20
|
-
it
|
19
|
+
it 'should get #tickets' do
|
21
20
|
user = client.users.create!(email: "#{mock_uuid}@example.org", name: mock_uuid, organization: organization)
|
22
21
|
ticket = client.tickets.create!(subject: "#{mock_uuid}@example.org", description: mock_uuid, requester: user)
|
23
22
|
expect(organization.tickets).to include ticket
|
24
23
|
end
|
25
24
|
|
26
|
-
it
|
25
|
+
it 'should hate non-unique names' do
|
27
26
|
# create
|
28
|
-
expect
|
27
|
+
expect do
|
29
28
|
client.organizations.create!(name: organization.name)
|
30
|
-
|
29
|
+
end.to raise_exception(Zendesk2::Error)
|
31
30
|
|
32
31
|
expect(
|
33
32
|
client.organizations.create(name: organization.name).errors
|
34
|
-
).to eq(
|
33
|
+
).to eq('name' => ['Name: has already been taken'])
|
35
34
|
|
36
35
|
expect(
|
37
36
|
client.organizations.create(name: organization.name.upcase).errors
|
38
|
-
).to eq(
|
37
|
+
).to eq('name' => ['Name: has already been taken'])
|
39
38
|
|
40
39
|
# update
|
41
40
|
model = client.organizations.create!(name: mock_uuid)
|
42
41
|
|
43
42
|
expect(
|
44
43
|
model.update(name: organization.name).errors
|
45
|
-
).to eq(
|
44
|
+
).to eq('name' => ['Name: has already been taken'])
|
46
45
|
|
47
46
|
expect(
|
48
47
|
model.update(name: organization.name.upcase).errors
|
49
|
-
).to eq(
|
48
|
+
).to eq('name' => ['Name: has already been taken'])
|
50
49
|
end
|
51
50
|
|
52
|
-
it
|
51
|
+
it 'should update name' do
|
53
52
|
old_name = organization.name
|
54
53
|
proxy = organization.dup
|
55
54
|
new_name = mock_uuid
|
56
55
|
|
57
|
-
expect
|
56
|
+
expect do
|
58
57
|
proxy.update!(name: new_name)
|
59
|
-
|
58
|
+
end.to change { organization.reload.name }.from(old_name).to(new_name)
|
60
59
|
end
|
61
60
|
|
62
|
-
it
|
61
|
+
it 'should be able to find organizations by external id' do
|
63
62
|
external_id = organization.external_id = mock_uuid
|
64
63
|
organization.save!
|
65
64
|
|
@@ -68,58 +67,59 @@ describe "organizations" do
|
|
68
67
|
end
|
69
68
|
end
|
70
69
|
|
71
|
-
describe
|
70
|
+
describe '#create_organization' do
|
72
71
|
let(:client) { create_client }
|
73
72
|
|
74
|
-
it
|
73
|
+
it 'should prevent duplicate external_ids' do
|
75
74
|
external_id = mock_uuid
|
76
75
|
|
77
|
-
client.create_organization(
|
78
|
-
client.create_organization(
|
79
|
-
client.create_organization(
|
76
|
+
client.create_organization('organization' => { 'name' => mock_uuid, external_id: nil }) # fine
|
77
|
+
client.create_organization('organization' => { 'name' => mock_uuid, external_id: nil }) # also fine
|
78
|
+
client.create_organization('organization' => { 'name' => mock_uuid, external_id: external_id }) # it's cool
|
80
79
|
|
81
|
-
expect
|
82
|
-
client.create_organization(
|
83
|
-
|
80
|
+
expect do
|
81
|
+
client.create_organization('organization' => { 'name' => mock_uuid, external_id: external_id })
|
82
|
+
end.to raise_exception(Zendesk2::Error, /External has already been taken/)
|
84
83
|
end
|
85
84
|
|
86
|
-
it
|
87
|
-
body = {
|
85
|
+
it 'should correctly respond' do
|
86
|
+
body = { 'organization' => { 'name' => (name = mock_uuid) } }
|
88
87
|
|
89
88
|
response = client.create_organization(body)
|
90
89
|
|
91
90
|
expect(response.status).to eq(201)
|
92
|
-
expect(response.env[:url].path).to eq(
|
91
|
+
expect(response.env[:url].path).to eq('/api/v2/organizations.json')
|
93
92
|
expect(response.env[:method]).to eq(:post)
|
94
93
|
expect(client.last_request).to match(body)
|
95
|
-
expect(response.env[:body][
|
94
|
+
expect(response.env[:body]['organization']).to match(
|
96
95
|
a_hash_including(
|
97
|
-
|
98
|
-
)
|
96
|
+
'name' => name
|
97
|
+
)
|
98
|
+
)
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
context
|
102
|
+
context 'with a organization' do
|
103
103
|
let(:client) { create_client }
|
104
104
|
let!(:organization) { client.organizations.create!(name: mock_uuid) }
|
105
105
|
|
106
|
-
describe
|
107
|
-
it
|
108
|
-
expect
|
106
|
+
describe '#destroy_organization' do
|
107
|
+
it 'should require a valid organization' do
|
108
|
+
expect do
|
109
109
|
client.destroy_organization(
|
110
|
-
|
111
|
-
|
110
|
+
'organization' => {
|
111
|
+
'id' => 999_999_999,
|
112
112
|
}
|
113
113
|
)
|
114
|
-
|
114
|
+
end.to raise_error(Zendesk2::Error) { |e|
|
115
115
|
expect(e.response[:status]).to eq(404)
|
116
116
|
}
|
117
117
|
end
|
118
118
|
|
119
|
-
it
|
119
|
+
it 'should correctly respond' do
|
120
120
|
response = client.destroy_organization(
|
121
|
-
|
122
|
-
|
121
|
+
'organization' => {
|
122
|
+
'id' => organization.id,
|
123
123
|
}
|
124
124
|
)
|
125
125
|
|
@@ -131,39 +131,40 @@ context "with a organization" do
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
describe
|
135
|
-
it
|
134
|
+
describe '#get_organizations' do
|
135
|
+
it 'should correctly respond' do
|
136
136
|
response = client.get_organizations
|
137
137
|
|
138
138
|
expect(response.status).to eq(200)
|
139
|
-
expect(response.env[:url].path).to eq(
|
139
|
+
expect(response.env[:url].path).to eq('/api/v2/organizations.json')
|
140
140
|
expect(response.env[:method]).to eq(:get)
|
141
141
|
expect(client.last_request).to eq(nil)
|
142
142
|
skip unless Zendesk2.mocking?
|
143
|
-
expect(response.env[:body][
|
144
|
-
|
145
|
-
|
146
|
-
|
143
|
+
expect(response.env[:body]['organizations']).to match([
|
144
|
+
a_hash_including(
|
145
|
+
'id' => organization.id
|
146
|
+
),
|
147
|
+
])
|
147
148
|
end
|
148
149
|
end
|
149
150
|
|
150
|
-
describe
|
151
|
-
it
|
152
|
-
expect
|
151
|
+
describe '#get_organization' do
|
152
|
+
it 'should require a valid organization' do
|
153
|
+
expect do
|
153
154
|
client.get_organization(
|
154
|
-
|
155
|
-
|
155
|
+
'organization' => {
|
156
|
+
'id' => 999_999_999,
|
156
157
|
}
|
157
158
|
)
|
158
|
-
|
159
|
+
end.to raise_error(Zendesk2::Error) { |e|
|
159
160
|
expect(e.response[:status]).to eq(404)
|
160
161
|
}
|
161
162
|
end
|
162
163
|
|
163
|
-
it
|
164
|
+
it 'should correctly respond' do
|
164
165
|
response = client.get_organization(
|
165
|
-
|
166
|
-
|
166
|
+
'organization' => {
|
167
|
+
'id' => organization.id,
|
167
168
|
}
|
168
169
|
)
|
169
170
|
|
@@ -171,60 +172,64 @@ context "with a organization" do
|
|
171
172
|
expect(response.env[:url].path).to eq("/api/v2/organizations/#{organization.id}.json")
|
172
173
|
expect(response.env[:method]).to eq(:get)
|
173
174
|
expect(client.last_request).to eq(nil)
|
174
|
-
expect(response.env[:body][
|
175
|
+
expect(response.env[:body]['organization']).to match(
|
175
176
|
a_hash_including(
|
176
|
-
|
177
|
-
|
178
|
-
)
|
177
|
+
'id' => organization.id,
|
178
|
+
'url' => response.env[:url].to_s
|
179
|
+
)
|
180
|
+
)
|
179
181
|
end
|
180
182
|
end
|
181
183
|
|
182
|
-
describe
|
183
|
-
it
|
184
|
-
expect
|
184
|
+
describe '#update_organization' do
|
185
|
+
it 'should require a valid organization' do
|
186
|
+
expect do
|
185
187
|
client.update_organization(
|
186
|
-
|
187
|
-
|
188
|
-
|
188
|
+
'organization' => {
|
189
|
+
'id' => 999_999_999,
|
190
|
+
'name' => mock_uuid,
|
189
191
|
}
|
190
192
|
)
|
191
|
-
|
193
|
+
end.to raise_error(Zendesk2::Error) { |e|
|
192
194
|
expect(e.response[:status]).to eq(404)
|
193
195
|
}
|
194
196
|
end
|
195
197
|
|
196
|
-
it
|
198
|
+
it 'should prevent duplicate external_ids' do
|
197
199
|
external_id = mock_uuid
|
198
200
|
|
199
201
|
organization = client.organizations.create!(name: mock_uuid)
|
200
202
|
another_organization = client.organizations.create!(name: mock_uuid)
|
201
203
|
|
202
|
-
|
203
|
-
client.update_organization(
|
204
|
+
# fine
|
205
|
+
client.update_organization('organization' => { 'id' => organization.id, external_id: nil })
|
206
|
+
# also fine
|
207
|
+
client.update_organization('organization' => { 'id' => another_organization.id, external_id: external_id })
|
204
208
|
|
205
|
-
expect
|
206
|
-
client.update_organization(
|
207
|
-
|
209
|
+
expect do
|
210
|
+
client.update_organization('organization' => { 'id' => organization.id, external_id: external_id })
|
211
|
+
end.to raise_exception(Zendesk2::Error, /External has already been taken/)
|
208
212
|
end
|
209
213
|
|
210
|
-
it
|
214
|
+
it 'should correctly respond' do
|
211
215
|
response = client.update_organization(
|
212
|
-
|
213
|
-
|
214
|
-
|
216
|
+
'organization' => {
|
217
|
+
'id' => organization.id,
|
218
|
+
'name' => (name = mock_uuid),
|
215
219
|
}
|
216
220
|
)
|
217
221
|
|
218
222
|
expect(response.status).to eq(200)
|
219
223
|
expect(response.env[:url].path).to eq("/api/v2/organizations/#{organization.id}.json")
|
220
224
|
expect(response.env[:method]).to eq(:put)
|
221
|
-
expect(client.last_request).to eq(
|
222
|
-
expect(response.env[:body][
|
225
|
+
expect(client.last_request).to eq('organization' => { 'name' => name })
|
226
|
+
expect(response.env[:body]['organization']).to match(
|
223
227
|
a_hash_including(
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
)
|
228
|
+
'id' => organization.id,
|
229
|
+
'url' => response.env[:url].to_s,
|
230
|
+
'name' => name
|
231
|
+
)
|
232
|
+
)
|
228
233
|
end
|
229
234
|
end
|
230
235
|
end
|
@@ -1,51 +1,52 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
shared_examples 'zendesk#resource' do |options = {}|
|
3
|
+
context 'as a resource' do
|
3
4
|
let!(:collection) { instance_exec(&options[:collection]) }
|
4
5
|
let(:create_params) { instance_exec(&options[:create_params]) || {} }
|
5
6
|
let(:update_params) { instance_exec(&options[:update_params]) }
|
6
|
-
let(:fetch_params) { options[:fetch_params] ||
|
7
|
+
let(:fetch_params) { options[:fetch_params] || ->(r) { r.identity } }
|
7
8
|
let(:search_params) { options[:search_params] ? instance_exec(&options[:search_params]) : create_params }
|
8
9
|
|
9
10
|
let(:record) { @record }
|
10
11
|
after(:each) { @record && @record.destroy }
|
11
12
|
|
12
|
-
it
|
13
|
+
it 'should be created' do
|
13
14
|
@record = collection.create!(create_params)
|
14
15
|
expect(record.identity).not_to be_nil
|
15
16
|
end
|
16
17
|
|
17
|
-
it
|
18
|
+
it 'should be fetched' do
|
18
19
|
@record = collection.create!(create_params)
|
19
20
|
expect(collection.get!(fetch_params.call(record))).to eq(record)
|
20
21
|
end
|
21
22
|
|
22
23
|
if options.fetch(:paged, true)
|
23
|
-
context
|
24
|
+
context 'paging' do
|
24
25
|
before(:each) do
|
25
|
-
@resources = 3
|
26
|
+
@resources = Array.new(3) { collection.create!(instance_exec(&options[:create_params])) }
|
26
27
|
end
|
27
28
|
|
28
|
-
after(:each) { (@resources || []).each
|
29
|
+
after(:each) { (@resources || []).each(&:destroy) }
|
29
30
|
|
30
|
-
it
|
31
|
-
expect(collection.all(
|
31
|
+
it 'should retrieve first page' do
|
32
|
+
expect(collection.all('per_page' => '1').size).to eq(1)
|
32
33
|
end
|
33
34
|
|
34
|
-
it
|
35
|
-
first_page = collection.all(
|
36
|
-
second_page = collection.all(
|
35
|
+
it 'should retrieve next page' do
|
36
|
+
first_page = collection.all('per_page' => 1)
|
37
|
+
second_page = collection.all('per_page' => 1).next_page
|
37
38
|
expect(second_page).not_to eq(first_page)
|
38
39
|
end
|
39
40
|
|
40
|
-
it
|
41
|
-
first_page = collection.all(
|
42
|
-
previous_to_second_page = collection.all(
|
41
|
+
it 'should retreive previous page' do
|
42
|
+
first_page = collection.all('per_page' => '1')
|
43
|
+
previous_to_second_page = collection.all('per_page' => 1).next_page.previous_page
|
43
44
|
expect(previous_to_second_page).to eq(first_page)
|
44
45
|
end
|
45
46
|
end
|
46
47
|
else
|
47
|
-
context
|
48
|
-
it
|
48
|
+
context 'paging' do
|
49
|
+
it 'should not be present' do
|
49
50
|
expect(collection.class.attributes).not_to have_key(:next_page_link)
|
50
51
|
expect(collection.class.attributes).not_to have_key(:previous_page_link)
|
51
52
|
expect(collection.class.attributes).to have_key(:count)
|
@@ -53,16 +54,30 @@ shared_examples "zendesk#resource" do |options={}|
|
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
57
|
+
context 'index' do
|
58
|
+
let!(:resource) { @resource = collection.create!(instance_exec(&options[:create_params])) }
|
59
|
+
|
60
|
+
after { @resource.destroy if @resource }
|
61
|
+
|
62
|
+
# real index actions sometimes have delays in population
|
63
|
+
it 'lists', mock_only: true do
|
64
|
+
expect(collection.all).to include(resource)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
56
68
|
if options.fetch(:update, true)
|
57
|
-
it
|
69
|
+
it 'should be updated' do
|
58
70
|
@record = collection.create!(create_params)
|
59
|
-
update_params.each { |k,v| record.send("#{k}=", v) }
|
71
|
+
update_params.each { |k, v| record.send("#{k}=", v) }
|
60
72
|
record.save
|
61
|
-
update_params.each
|
73
|
+
update_params.each do |k, to|
|
74
|
+
from = record.send(k)
|
75
|
+
expect(from).to eq(to), "Expected #{k} to be updated #{from.inspect} to #{to.inspect}"
|
76
|
+
end
|
62
77
|
end
|
63
78
|
end
|
64
79
|
|
65
|
-
it
|
80
|
+
it 'should be destroyed' do
|
66
81
|
@record = collection.create!(create_params)
|
67
82
|
expect(record.identity).not_to be_nil
|
68
83
|
record.destroy
|
@@ -74,14 +89,14 @@ shared_examples "zendesk#resource" do |options={}|
|
|
74
89
|
|
75
90
|
if options.fetch(:search, true) && Zendesk2.mocking?
|
76
91
|
# Search index takes 2-3 minutes according to the docs
|
77
|
-
it
|
92
|
+
it 'should search by hash' do
|
78
93
|
@record = collection.create!(create_params)
|
79
94
|
expect(collection.search(search_params).to_a).to eq([record])
|
80
95
|
end
|
81
96
|
|
82
|
-
it
|
97
|
+
it 'should search by string' do
|
83
98
|
@record = collection.create!(create_params)
|
84
|
-
expect(collection.search(search_params.map { |k,v| [k,v].join(
|
99
|
+
expect(collection.search(search_params.map { |k, v| [k, v].join(':') }.join(' ')).to_a).to eq([record])
|
85
100
|
end
|
86
101
|
end
|
87
102
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,26 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
ENV['MOCK_ZENDESK'] ||= 'true'
|
2
3
|
|
3
4
|
Bundler.require(:test)
|
4
5
|
|
5
|
-
require File.expand_path(
|
6
|
+
require File.expand_path('../../lib/zendesk2', __FILE__)
|
6
7
|
|
7
|
-
Dir[File.expand_path(
|
8
|
+
Dir[File.expand_path('../{support,shared}/**/*.rb', __FILE__)].each { |f| require f }
|
8
9
|
|
9
|
-
if ENV[
|
10
|
-
Zendesk2.mock!
|
11
|
-
end
|
10
|
+
Zendesk2.mock! if ENV['MOCK_ZENDESK'] == 'true'
|
12
11
|
|
13
12
|
Cistern.formatter = Cistern::Formatter::AwesomePrint
|
14
|
-
Cistern.deprecation_warnings =
|
13
|
+
Cistern.deprecation_warnings = ENV['DEBUG']
|
15
14
|
|
16
15
|
RSpec.configure do |config|
|
17
|
-
|
18
|
-
|
19
|
-
else
|
20
|
-
config.filter_run_excluding(mock_only: true)
|
21
|
-
end
|
22
|
-
config.filter_run(:focus => true)
|
16
|
+
Zendesk2.mocking? ? config.before(:each) { Zendesk2.reset! } : config.filter_run_excluding(mock_only: true)
|
17
|
+
config.filter_run(focus: true)
|
23
18
|
config.run_all_when_everything_filtered = true
|
24
19
|
|
25
|
-
config.order =
|
20
|
+
config.order = 'random'
|
26
21
|
end
|