zendesk2 1.2.6 → 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e6ea470972636be5e8e0d86bc3e98456a0a101ff
4
- data.tar.gz: 8520078c62556e06b0fbd8f71e573816eb97cb45
3
+ metadata.gz: fbedbdbd2cc1fb5d7181d274138df03c74caf78a
4
+ data.tar.gz: d1b795649c0ecc16cf9142bc7c527b9f9048c81c
5
5
  SHA512:
6
- metadata.gz: a3542c32f34512ec1725eac770b7f68b1db059d39e3fa538cce82aef6065e6c9bdaba7400a0aad4f191accd0291718e8944197b401f3140d78a83cf4d7a1a9d5
7
- data.tar.gz: 05b3f36b1f86358e09a4a4fa80124e749707bd55a359c1cabf222ad08bb0fae28b09182e6e3d290ee6e37bb7741995a803efab547e43947c3e925726da9e8f94
6
+ metadata.gz: 93400647817f08b86d3322a4dc24282bd5b0ce04218cb8d3e782da177d84312f552ca85eeccb020ea5b71fa419dbc96bfb8ed4ed6ed32bef42d41f52ed912e20
7
+ data.tar.gz: 7864462a046770514e143cf51d0ba2af739c21c968e327523087445ab3af25a70e5d198fbb7bbf5ea7372bb35bcf21745887d812610be29ba61b00b83e0fbc79
@@ -10,7 +10,8 @@ class Zendesk2::Client
10
10
  end # Real
11
11
 
12
12
  class Mock
13
- def create_organization(params={})
13
+ def create_organization(_params={})
14
+ params = Cistern::Hash.stringify_keys(_params)
14
15
  identity = self.class.new_id
15
16
 
16
17
  record = {
@@ -20,15 +21,20 @@ class Zendesk2::Client
20
21
  "updated_at" => Time.now.iso8601,
21
22
  }.merge(params)
22
23
 
24
+
23
25
  unless record["name"]
24
26
  error!(:invalid, details: { "name" => [ { "description" => "Name cannot be blank" } ]})
25
27
  end
26
28
 
27
- if self.data[:organizations].values.find{|o| o["name"] == record["name"]}
29
+ if self.data[:organizations].values.find { |o| o["name"] == record["name"]}
28
30
  error!(:invalid, details: {"name" => [ { "description" => "Name: has already been taken" } ]})
29
31
  end
30
32
 
31
- self.data[:organizations][identity]= record
33
+ if record["external_id"] && self.data[:organizations].values.find { |o| o["external_id"] == record["external_id"] }
34
+ error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
35
+ end
36
+
37
+ self.data[:organizations][identity] = record
32
38
 
33
39
  response(
34
40
  :method => :post,
@@ -10,7 +10,8 @@ class Zendesk2::Client
10
10
  end # Real
11
11
 
12
12
  class Mock
13
- def create_user(params={})
13
+ def create_user(_params={})
14
+ params = Cistern::Hash.stringify_keys(_params)
14
15
  user_id = self.class.new_id
15
16
  path = "/users.json"
16
17
 
@@ -22,6 +23,10 @@ class Zendesk2::Client
22
23
  "active" => true,
23
24
  }.merge(params)
24
25
 
26
+ if record["external_id"] && self.data[:users].values.find { |o| o["external_id"] == record["external_id"] }
27
+ error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
28
+ end
29
+
25
30
  if (email = record["email"]) && self.data[:identities].find{|k,i| i["type"] == "email" && i["value"] == email}
26
31
  error!(:invalid, :details => {
27
32
  "email" => [ {
@@ -13,15 +13,23 @@ class Zendesk2::Client
13
13
  end
14
14
  end
15
15
  class Mock
16
- def update_organization(params={})
17
- id = params.delete("id")
16
+ def update_organization(_params={})
17
+ params = Cistern::Hash.stringify_keys(_params)
18
+ id = params.delete("id")
18
19
 
19
20
  organization = self.find!(:organizations, id)
20
21
 
21
- if self.data[:organizations].values.find { |o| o["name"] == params["name"] && o["id"] != id }
22
+ other_organizations = self.data[:organizations].dup
23
+ other_organizations.delete(id)
24
+
25
+ if other_organizations.values.find { |o| o["name"] == params["name"] }
22
26
  error!(:invalid, details: {"name" => [ { "description" => "Name: has already been taken" } ]})
23
27
  end
24
28
 
29
+ if params["external_id"] && other_organizations.values.find { |o| o["external_id"] == params["external_id"] }
30
+ error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
31
+ end
32
+
25
33
  body = organization.merge!(params)
26
34
 
27
35
  response(
@@ -13,15 +13,25 @@ class Zendesk2::Client
13
13
  end
14
14
  end
15
15
  class Mock
16
- def update_user(params={})
16
+ def update_user(_params={})
17
+ params = Cistern::Hash.stringify_keys(_params)
17
18
  user_id = params.delete("id")
18
19
  path = "/users/#{user_id}.json"
19
20
 
20
21
  email = params["email"]
21
22
 
23
+ other_users = self.data[:users].dup
24
+ other_users.delete(user_id)
25
+
26
+ if params["external_id"] && other_users.values.find { |o| o["external_id"] == params["external_id"] }
27
+ error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
28
+ end
29
+
22
30
  existing_identity = self.data[:identities].values.find { |i| i["type"] == "email" && i["value"] == email }
23
31
 
24
- if existing_identity && existing_identity["user_id"] != user_id
32
+ if !email
33
+ # nvm
34
+ elsif existing_identity && existing_identity["user_id"] != user_id
25
35
  # email not allowed to conflict across users
26
36
  error!(:invalid, details: { "email" => [ {
27
37
  "description" => "Email #{params["email"]} is already being used by another user",
@@ -30,7 +40,7 @@ class Zendesk2::Client
30
40
  # no-op email already used
31
41
  else
32
42
  # add a new identity
33
- user_identity_id = self.class.new_id # ugh
43
+ user_identity_id = self.class.new_id
34
44
 
35
45
  user_identity = {
36
46
  "id" => user_identity_id,
@@ -48,6 +58,7 @@ class Zendesk2::Client
48
58
  end
49
59
 
50
60
  body = self.data[:users][user_id].merge!(params)
61
+
51
62
  response(
52
63
  :method => :put,
53
64
  :path => path,
@@ -1,3 +1,3 @@
1
1
  module Zendesk2
2
- VERSION = "1.2.6"
2
+ VERSION = "1.2.7"
3
3
  end
data/lib/zendesk2.rb CHANGED
@@ -34,10 +34,6 @@ module Zendesk2
34
34
  Cistern::Hash.slice(params, "page", "per_page")
35
35
  end
36
36
 
37
- def self.uuid
38
- SecureRandom.uuid
39
- end
40
-
41
37
  def self.stringify_keys(hash)
42
38
  hash.inject({}) { |r,(k,v)| r.merge(k.to_s => v) }
43
39
  end
@@ -5,7 +5,7 @@ describe "categories" do
5
5
 
6
6
  include_examples "zendesk resource", {
7
7
  :collection => lambda { client.categories },
8
- :create_params => lambda { { name: Zendesk2.uuid } },
9
- :update_params => lambda { { name: Zendesk2.uuid } },
8
+ :create_params => lambda { { name: mock_uuid } },
9
+ :update_params => lambda { { name: mock_uuid } },
10
10
  }
11
11
  end
data/spec/forums_spec.rb CHANGED
@@ -5,8 +5,8 @@ describe "forums" do
5
5
 
6
6
  include_examples "zendesk resource", {
7
7
  :collection => lambda { client.forums },
8
- :create_params => lambda { { name: Zendesk2.uuid } },
9
- :update_params => lambda { { name: Zendesk2.uuid } },
8
+ :create_params => lambda { { name: mock_uuid } },
9
+ :update_params => lambda { { name: mock_uuid } },
10
10
  :delayed_destroy => true,
11
11
  }
12
12
  end
data/spec/groups_spec.rb CHANGED
@@ -5,12 +5,12 @@ describe "groups" do
5
5
 
6
6
  include_examples "zendesk resource", {
7
7
  :collection => lambda { client.groups },
8
- :create_params => lambda { { name: Zendesk2.uuid } },
9
- :update_params => lambda { { name: Zendesk2.uuid } },
8
+ :create_params => lambda { { name: mock_uuid } },
9
+ :update_params => lambda { { name: mock_uuid } },
10
10
  }
11
11
 
12
12
  it "should list assignable groups" do
13
- client.groups.create(name: Zendesk2.uuid) # assignable by default
13
+ client.groups.create(name: mock_uuid) # assignable by default
14
14
 
15
15
  expect(client.groups.assignable).to be_all{|g| !g.deleted}
16
16
  end
@@ -3,10 +3,10 @@ require 'spec_helper'
3
3
  describe "help_center/articles" do
4
4
  let(:client) { create_client }
5
5
  let!(:section) do
6
- category = client.help_center_categories.create!(name: Zendesk2.uuid,
6
+ category = client.help_center_categories.create!(name: mock_uuid,
7
7
  locale: "en-us",
8
8
  )
9
- client.help_center_sections.create!(:name => Zendesk2.uuid,
9
+ client.help_center_sections.create!(:name => mock_uuid,
10
10
  :locale => "en-us",
11
11
  :category => category,
12
12
  )
@@ -14,8 +14,8 @@ describe "help_center/articles" do
14
14
 
15
15
  include_examples "zendesk resource", {
16
16
  :collection => lambda { client.help_center_articles },
17
- :create_params => lambda { { title: Zendesk2.uuid, locale: "en-us", section: section } },
18
- :update_params => lambda { { title: Zendesk2.uuid } },
17
+ :create_params => lambda { { title: mock_uuid, locale: "en-us", section: section } },
18
+ :update_params => lambda { { title: mock_uuid } },
19
19
  :search_params => lambda { Cistern::Hash.slice(create_params, :title) },
20
20
  :search => true,
21
21
  }
@@ -5,8 +5,8 @@ describe "help_center/categories" do
5
5
 
6
6
  include_examples "zendesk resource", {
7
7
  :collection => lambda { client.help_center_categories },
8
- :create_params => lambda { { name: Zendesk2.uuid, locale: "en-us" } },
9
- :update_params => lambda { { name: Zendesk2.uuid } },
8
+ :create_params => lambda { { name: mock_uuid, locale: "en-us" } },
9
+ :update_params => lambda { { name: mock_uuid } },
10
10
  :search => false,
11
11
  }
12
12
  end
@@ -3,15 +3,15 @@ require 'spec_helper'
3
3
  describe "help_center/sections" do
4
4
  let(:client) { create_client }
5
5
  let!(:category) do
6
- client.help_center_categories.create!(name: Zendesk2.uuid,
6
+ client.help_center_categories.create!(name: mock_uuid,
7
7
  locale: "en-us",
8
8
  )
9
9
  end
10
10
 
11
11
  include_examples "zendesk resource", {
12
12
  :collection => lambda { client.help_center_sections },
13
- :create_params => lambda { { name: Zendesk2.uuid, locale: "en-us", category: category } },
14
- :update_params => lambda { { name: Zendesk2.uuid } },
13
+ :create_params => lambda { { name: mock_uuid, locale: "en-us", category: category } },
14
+ :update_params => lambda { { name: mock_uuid } },
15
15
  :search => false,
16
16
  }
17
17
  end
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe "memberships" do
4
4
  let(:client) { create_client }
5
- let(:user) { client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true) }
6
- let(:organization) { client.organizations.create!(name: Zendesk2.uuid) }
5
+ let(:user) { client.users.create!(email: mock_email, name: mock_uuid, verified: true) }
6
+ let(:organization) { client.organizations.create!(name: mock_uuid) }
7
7
 
8
8
  include_examples "zendesk resource", {
9
9
  :create_params => lambda { {organization_id: organization.id, user_id: user.id} },
@@ -15,7 +15,7 @@ describe "memberships" do
15
15
 
16
16
  it "should be marked as default" do
17
17
  membership = client.memberships.create!(organization: organization, user: user)
18
- another_organization = client.organizations.create!(name: Zendesk2.uuid)
18
+ another_organization = client.organizations.create!(name: mock_uuid)
19
19
 
20
20
  another_membership = client.memberships.create!(organization: another_organization, user: user)
21
21
 
@@ -28,8 +28,8 @@ describe "memberships" do
28
28
  end
29
29
 
30
30
  it "should get an organization's memberships" do
31
- another_user = client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true)
32
- another_organization = client.organizations.create!(name: Zendesk2.uuid)
31
+ another_user = client.users.create!(email: mock_email, name: mock_uuid, verified: true)
32
+ another_organization = client.organizations.create!(name: mock_uuid)
33
33
 
34
34
  another_organization.memberships.create!(user: another_user)
35
35
  another_organization.memberships.create!(user: user)
@@ -40,8 +40,8 @@ describe "memberships" do
40
40
  end
41
41
 
42
42
  it "should get an user's memberships" do
43
- another_user = client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true)
44
- another_organization = client.organizations.create!(name: Zendesk2.uuid)
43
+ another_user = client.users.create!(email: mock_email, name: mock_uuid, verified: true)
44
+ another_organization = client.organizations.create!(name: mock_uuid)
45
45
 
46
46
  another_organization.memberships.create!(user: another_user)
47
47
  user_membership = another_organization.memberships.create!(user: user)
@@ -5,21 +5,21 @@ describe "organizations" do
5
5
 
6
6
  include_examples "zendesk resource", {
7
7
  :collection => lambda { client.organizations },
8
- :create_params => lambda { { name: Zendesk2.uuid } },
9
- :update_params => lambda { { name: Zendesk2.uuid } },
8
+ :create_params => lambda { { name: mock_uuid } },
9
+ :update_params => lambda { { name: mock_uuid } },
10
10
  }
11
11
 
12
12
  describe "with an organization" do
13
- let(:organization) { client.organizations.create!(name: Zendesk2.uuid) }
13
+ let(:organization) { client.organizations.create!(name: mock_uuid) }
14
14
 
15
15
  it "should get #users" do
16
- user = client.users.create(email: "#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, organization: organization)
16
+ user = client.users.create(email: "#{mock_uuid}@example.org", name: mock_uuid, organization: organization)
17
17
  expect(organization.users).to include user
18
18
  end
19
19
 
20
20
  it "should get #tickets" do
21
- user = client.users.create(email: "#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, organization: organization)
22
- ticket = client.tickets.create(subject: "#{Zendesk2.uuid}@example.org", description: Zendesk2.uuid, requester: user)
21
+ user = client.users.create(email: "#{mock_uuid}@example.org", name: mock_uuid, organization: organization)
22
+ ticket = client.tickets.create(subject: "#{mock_uuid}@example.org", description: mock_uuid, requester: user)
23
23
  expect(organization.tickets).to include ticket
24
24
  end
25
25
 
@@ -27,18 +27,43 @@ describe "organizations" do
27
27
  expect { client.organizations.create!(name: organization.name) }.to raise_exception(Zendesk2::Error)
28
28
  model = client.organizations.create(name: organization.name)
29
29
  expect(model.errors).to eq({"name" => ["Name: has already been taken"]})
30
- model = client.organizations.create(name: Zendesk2.uuid)
30
+ model = client.organizations.create(name: mock_uuid)
31
31
  model.name = organization.name
32
32
  model.save
33
33
  expect(model.errors).to eq({"name" => ["Name: has already been taken"]})
34
34
  end
35
35
 
36
36
  it "should be able to find organizations by external id" do
37
- external_id = organization.external_id = Zendesk2.uuid
37
+ external_id = organization.external_id = mock_uuid
38
38
  organization.save!
39
39
 
40
40
  expect(client.organizations.find_by_external_id(external_id).first).to eq(organization)
41
41
  end
42
+ end
43
+
44
+ describe "#create_organization" do
45
+ it "should prevent duplicate external_ids" do
46
+ client.create_organization("name" => "a", external_id: nil) # fine
47
+ client.create_organization("name" => "b", external_id: nil) # also fine
48
+ client.create_organization("name" => "c", external_id: "1") # it's cool
49
+
50
+ expect {
51
+ client.create_organization("name" => "d", external_id: "1")
52
+ }.to raise_exception(Zendesk2::Error, /External has already been taken/)
53
+ end
54
+ end
55
+
56
+ describe "#update_organization" do
57
+ it "should prevent duplicate external_ids" do
58
+ organization = client.organizations.create(name: "a")
59
+ another_organization = client.organizations.create(name: "b")
42
60
 
61
+ client.update_organization("id" => organization.id, external_id: nil) # fine
62
+ client.update_organization("id" => another_organization.id, external_id: "1") # also fine
63
+
64
+ expect {
65
+ client.update_organization("id" => organization.id, external_id: "1")
66
+ }.to raise_exception(Zendesk2::Error, /External has already been taken/)
67
+ end
43
68
  end
44
69
  end
@@ -0,0 +1,13 @@
1
+ module DataHelper
2
+ def mock_email
3
+ "zendesk2+#{mock_uuid}@example.org"
4
+ end
5
+
6
+ def mock_uuid
7
+ SecureRandom.uuid
8
+ end
9
+ end
10
+
11
+ RSpec.configure do |config|
12
+ config.include(DataHelper)
13
+ end
@@ -5,8 +5,8 @@ describe "ticket_fields" do
5
5
 
6
6
  include_examples "zendesk resource", {
7
7
  :collection => lambda { client.ticket_fields },
8
- :create_params => lambda { { title: Zendesk2.uuid, type: "text" } },
9
- :update_params => lambda { { title: Zendesk2.uuid } },
8
+ :create_params => lambda { { title: mock_uuid, type: "text" } },
9
+ :update_params => lambda { { title: mock_uuid } },
10
10
  :paged => false,
11
11
  }
12
12
  end
data/spec/tickets_spec.rb CHANGED
@@ -6,24 +6,24 @@ describe "Zendesk2::Client" do
6
6
  describe "tickets" do
7
7
  include_examples "zendesk resource", {
8
8
  :collection => lambda { client.tickets },
9
- :create_params => lambda { {subject: Zendesk2.uuid, description: Zendesk2.uuid} },
10
- :update_params => lambda { {subject: Zendesk2.uuid} },
9
+ :create_params => lambda { {subject: mock_uuid, description: mock_uuid} },
10
+ :update_params => lambda { {subject: mock_uuid} },
11
11
  }
12
12
  end
13
13
 
14
14
  describe "#create_ticket" do
15
15
  it "should require a description" do
16
16
  expect {
17
- client.create_ticket("subject" => Zendesk2.uuid)
17
+ client.create_ticket("subject" => mock_uuid)
18
18
  }.to raise_exception(Zendesk2::Error, /Description: cannot be blank/)
19
19
  end
20
20
  end
21
21
 
22
22
  describe "when creating a ticket" do
23
- let!(:requester_email) { "#{Zendesk2.uuid}@example.org" }
23
+ let!(:requester_email) { "#{mock_uuid}@example.org" }
24
24
 
25
25
  it "should create requester" do
26
- ticket = client.tickets.create!(subject: Zendesk2.uuid, description: Zendesk2.uuid, requester: {name: "Josh Lane", email: requester_email})
26
+ ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: {name: "Josh Lane", email: requester_email})
27
27
  if Zendesk2::Client.mocking? # this takes some time for realsies
28
28
  requester = client.users.search(email: requester_email).first
29
29
  expect(requester).not_to be_nil
@@ -36,24 +36,24 @@ describe "Zendesk2::Client" do
36
36
 
37
37
  it "should require requester name" do
38
38
  expect {
39
- client.tickets.create!(subject: Zendesk2.uuid, description: Zendesk2.uuid, requester: {email: requester_email})
39
+ client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: {email: requester_email})
40
40
  }.to raise_exception(Zendesk2::Error, /Requester Name: .* too short/)
41
41
  end
42
42
 
43
43
  it "should require a description" do
44
44
  expect {
45
- client.tickets.create!(subject: Zendesk2.uuid)
45
+ client.tickets.create!(subject: mock_uuid)
46
46
  }.to raise_exception(ArgumentError, /description is required/)
47
47
 
48
48
  expect {
49
- client.tickets.create!(subject: Zendesk2.uuid, description: "")
49
+ client.tickets.create!(subject: mock_uuid, description: "")
50
50
  }.to raise_exception(ArgumentError, /description is required/)
51
51
  end
52
52
 
53
53
  it "should set priority" do
54
54
  priority = "urgent"
55
55
 
56
- ticket = client.tickets.create!(subject: Zendesk2.uuid, description: Zendesk2.uuid, priority: priority)
56
+ ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, priority: priority)
57
57
 
58
58
  expect(ticket.priority).to eq("urgent")
59
59
  expect(client.tickets.get!(ticket.id).priority).to eq(priority)
@@ -61,7 +61,7 @@ describe "Zendesk2::Client" do
61
61
  end
62
62
 
63
63
  describe "with a created ticket" do
64
- let(:ticket) { client.tickets.create!(subject: Zendesk2.uuid, description: Zendesk2.uuid) }
64
+ let(:ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
65
65
 
66
66
  it "should get requester" do
67
67
  expect(ticket.requester).to eq(client.users.current)
@@ -77,10 +77,10 @@ describe "Zendesk2::Client" do
77
77
  end
78
78
 
79
79
  describe "ticket comments" do
80
- let(:ticket) { client.tickets.create!(subject: Zendesk2.uuid, description: Zendesk2.uuid) }
80
+ let(:ticket) { client.tickets.create!(subject: mock_uuid, description: mock_uuid) }
81
81
 
82
82
  it "lists audits" do
83
- body = Zendesk2.uuid
83
+ body = mock_uuid
84
84
  ticket.comment(body)
85
85
 
86
86
  audit = ticket.audits.last
@@ -99,7 +99,7 @@ describe "Zendesk2::Client" do
99
99
  end
100
100
 
101
101
  it "lists comments" do
102
- body = Zendesk2.uuid
102
+ body = mock_uuid
103
103
  ticket.comment(body)
104
104
 
105
105
  expect(ticket.comments.find{|c| c.body == body}).not_to be_nil
@@ -110,19 +110,19 @@ describe "Zendesk2::Client" do
110
110
  let!(:ticket_field) { client.ticket_fields.create!(title: SecureRandom.hex(3), type: "text") }
111
111
 
112
112
  it "should be based on ticket_fields" do
113
- ticket = client.tickets.create!(subject: Zendesk2.uuid, description: Zendesk2.uuid)
113
+ ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid)
114
114
  custom_field = ticket.custom_fields.find { |cf| cf["id"] == ticket_field.identity }
115
115
 
116
116
  expect(custom_field).not_to be_nil
117
117
  expect(custom_field["value"]).to be_nil
118
118
 
119
- ticket = client.tickets.create!(subject: Zendesk2.uuid, description: Zendesk2.uuid, custom_fields: [{"id" => ticket_field.identity, "value" => "jessicaspacekat"}])
119
+ ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, custom_fields: [{"id" => ticket_field.identity, "value" => "jessicaspacekat"}])
120
120
  custom_field = ticket.custom_fields.find { |cf| cf["id"] == ticket_field.identity }
121
121
 
122
122
  expect(custom_field).not_to be_nil
123
123
  expect(custom_field["value"]).to eq("jessicaspacekat")
124
124
 
125
- ticket = client.tickets.create!(subject: Zendesk2.uuid, description: Zendesk2.uuid, custom_fields: [{"id" => "-1", "value" => "fantasy"}])
125
+ ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, custom_fields: [{"id" => "-1", "value" => "fantasy"}])
126
126
  expect(ticket.custom_fields).not_to include({"id" => -1, "value" => "fantasy"})
127
127
  end
128
128
  end
@@ -2,14 +2,14 @@ require 'spec_helper'
2
2
 
3
3
  describe "topic_comments" do
4
4
  let!(:client) { create_client }
5
- let!(:user) { client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true) }
6
- let!(:forum) { client.forums.create!(name: Zendesk2.uuid) }
7
- let!(:topic) { client.topics.create!(title: Zendesk2.uuid, body: Zendesk2.uuid, forum: forum) }
5
+ let!(:user) { client.users.create!(email: mock_email, name: mock_uuid, verified: true) }
6
+ let!(:forum) { client.forums.create!(name: mock_uuid) }
7
+ let!(:topic) { client.topics.create!(title: mock_uuid, body: mock_uuid, forum: forum) }
8
8
 
9
9
  include_examples "zendesk resource",
10
10
  {
11
- :create_params => lambda { {body: Zendesk2.uuid, topic_id: topic.identity, user_id: user.identity} },
12
- :update_params => lambda { {body: Zendesk2.uuid} },
11
+ :create_params => lambda { {body: mock_uuid, topic_id: topic.identity, user_id: user.identity} },
12
+ :update_params => lambda { {body: mock_uuid} },
13
13
  :fetch_params => lambda { |tc| {"topic_id" => tc.topic_id, "id" => tc.identity} },
14
14
  :collection => lambda { client.topic_comments(topic_id: topic.identity) },
15
15
  }
data/spec/topics_spec.rb CHANGED
@@ -2,11 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  describe "topics" do
4
4
  let(:client) { create_client }
5
- let(:forum) { client.forums.create(name: Zendesk2.uuid) }
5
+ let(:forum) { client.forums.create(name: mock_uuid) }
6
6
 
7
7
  include_examples "zendesk resource", {
8
8
  :collection => lambda { client.topics },
9
- :create_params => lambda { { title: Zendesk2.uuid, body: Zendesk2.uuid, forum_id: forum.id } },
10
- :update_params => lambda { { title: Zendesk2.uuid, body: Zendesk2.uuid } },
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
11
  }
12
12
  end
@@ -5,8 +5,8 @@ describe "user_fields" do
5
5
 
6
6
  include_examples "zendesk resource", {
7
7
  :collection => lambda { client.user_fields },
8
- :create_params => lambda { { title: Zendesk2.uuid, type: "text", key: "custom_#{SecureRandom.hex(3)}"} },
9
- :update_params => lambda { { title: Zendesk2.uuid } },
8
+ :create_params => lambda { { title: mock_uuid, type: "text", key: "custom_#{SecureRandom.hex(3)}"} },
9
+ :update_params => lambda { { title: mock_uuid } },
10
10
  :paged => false,
11
11
  }
12
12
  end
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe "user_identities" do
4
4
  let(:client) { create_client }
5
- let(:user) { client.users.create(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true) }
5
+ let(:user) { client.users.create(email: mock_email, name: mock_uuid, verified: true) }
6
6
 
7
7
  include_examples "zendesk resource", {
8
- :create_params => lambda { { value: "ey+#{Zendesk2.uuid}@example.org", type: "email", user_id: user.id } },
8
+ :create_params => lambda { { value: "ey+#{mock_uuid}@example.org", type: "email", user_id: user.id } },
9
9
  :update_params => lambda { { verified: true } },
10
10
  :fetch_params => lambda { |uc| { "user_id" => uc.user_id, "id" => uc.id } },
11
11
  :collection => lambda { client.user_identities(user_id: user.id) },
@@ -14,7 +14,7 @@ describe "user_identities" do
14
14
  }
15
15
 
16
16
  describe "#create_user_identity" do
17
- let(:another_user) { client.users.create(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true) }
17
+ let(:another_user) { client.users.create(email: mock_email, name: mock_uuid, verified: true) }
18
18
 
19
19
  it "should prevent duplicate identities across users" do
20
20
  expect {
data/spec/users_spec.rb CHANGED
@@ -5,8 +5,8 @@ describe "users" do
5
5
 
6
6
  include_examples "zendesk resource", {
7
7
  :collection => lambda { client.users },
8
- :create_params => lambda { { email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, verified: true } },
9
- :update_params => lambda { { name: Zendesk2.uuid } },
8
+ :create_params => lambda { { email: mock_email, name: mock_uuid, verified: true } },
9
+ :update_params => lambda { { name: mock_uuid } },
10
10
  }
11
11
 
12
12
  it "should get current user" do
@@ -14,17 +14,43 @@ describe "users" do
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
19
+ client.create_user(email: mock_email, name: "a", external_id: nil) # fine
20
+ client.create_user(email: mock_email, name: "b", external_id: nil) # also fine
21
+ client.create_user(email: mock_email, name: "c", external_id: "1") # it's cool
22
+
23
+ expect {
24
+ client.create_user(email: mock_email, name: "d", external_id: "1")
25
+ }.to raise_exception(Zendesk2::Error, /External has already been taken/)
26
+ end
27
+ end
28
+
29
+ describe "#update_user" do
30
+ it "should prevent duplicate external_ids" do
31
+ user = client.users.create(email: mock_email, name: "a")
32
+ another_user = client.users.create(email: mock_email, name: "b")
33
+
34
+ client.update_user(id: user.id, external_id: nil) # fine
35
+ client.update_user(id: another_user.id, external_id: "1") # also fine
36
+
37
+ expect {
38
+ client.update_user("id" => user.id, external_id: "1")
39
+ }.to raise_exception(Zendesk2::Error, /External has already been taken/)
40
+ end
41
+ end
42
+
17
43
  describe "#search" do
18
44
  it "should find a user based on details criteria with wildcards and by organization name", mock_only: true do
19
45
  # detached user
20
- client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid)
46
+ client.users.create!(email: mock_email, name: mock_uuid)
21
47
 
22
48
  # possible match
23
- bad_org = client.organizations.create!(name: Zendesk2.uuid)
24
- client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, organization: bad_org)
49
+ bad_org = client.organizations.create!(name: mock_uuid)
50
+ client.users.create!(email: mock_email, name: mock_uuid, organization: bad_org)
25
51
 
26
- org = client.organizations.create!(name: Zendesk2.uuid)
27
- user = client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid, organization: org, details: "anything_hello-something-michelle")
52
+ org = client.organizations.create!(name: mock_uuid)
53
+ user = client.users.create!(email: mock_email, name: mock_uuid, organization: org, details: "anything_hello-something-michelle")
28
54
 
29
55
  expect(client.users.search(details: "*michelle*", organization: org.name)).to contain_exactly(user)
30
56
  expect(client.users.search(details: "*michelle*", organization: org.name[0..6])).to include(user)
@@ -32,10 +58,10 @@ describe "users" do
32
58
  end
33
59
 
34
60
  describe "#save" do
35
- let!(:user) { client.users.create!(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid) }
61
+ let!(:user) { client.users.create!(email: mock_email, name: mock_uuid) }
36
62
 
37
63
  it "should update organization" do
38
- user.organization = organization = client.organizations.create!(name: Zendesk2.uuid)
64
+ user.organization = organization = client.organizations.create!(name: mock_uuid)
39
65
 
40
66
  user.save!
41
67
 
@@ -43,19 +69,19 @@ describe "users" do
43
69
  end
44
70
 
45
71
  it "should get requested tickets" do
46
- ticket = client.tickets.create!(requester: user, subject: Zendesk2.uuid, description: Zendesk2.uuid)
72
+ ticket = client.tickets.create!(requester: user, subject: mock_uuid, description: mock_uuid)
47
73
 
48
74
  expect(user.requested_tickets).to include ticket
49
75
  end
50
76
 
51
77
  it "should get ccd tickets", mock_only: true do
52
- ticket = client.tickets.create!(collaborators: [user], subject: Zendesk2.uuid, description: Zendesk2.uuid)
78
+ ticket = client.tickets.create!(collaborators: [user], subject: mock_uuid, description: mock_uuid)
53
79
 
54
80
  expect(user.ccd_tickets).to include ticket
55
81
  end
56
82
 
57
83
  it "cannot destroy a user with a ticket" do
58
- client.tickets.create!(requester: user, subject: Zendesk2.uuid, description: Zendesk2.uuid)
84
+ client.tickets.create!(requester: user, subject: mock_uuid, description: mock_uuid)
59
85
 
60
86
  expect(user.destroy).to be_falsey
61
87
 
@@ -74,7 +100,7 @@ describe "users" do
74
100
  end
75
101
 
76
102
  it "should create a new identity" do
77
- email = "ey+#{Zendesk2.uuid}@example.org"
103
+ email = "ey+#{mock_uuid}@example.org"
78
104
 
79
105
  new_identity = user.identities.create!(type: "email", value: email)
80
106
  expect(new_identity.primary).to be_falsey
@@ -84,7 +110,7 @@ describe "users" do
84
110
  end
85
111
 
86
112
  it "should mark remaining identity as primary" do
87
- email = "ey+#{Zendesk2.uuid}@example.org"
113
+ email = "ey+#{mock_uuid}@example.org"
88
114
 
89
115
  initial_identity = user.identities.all.first
90
116
  new_identity = user.identities.create!(type: "email", value: email)
@@ -98,7 +124,7 @@ describe "users" do
98
124
  end
99
125
 
100
126
  it "should not allow multiple primary identities" do
101
- email = "ey+#{Zendesk2.uuid}@example.org"
127
+ email = "ey+#{mock_uuid}@example.org"
102
128
 
103
129
  initial_identity = user.identities.all.first
104
130
  new_identity = user.identities.create!(type: "email", value: email)
@@ -110,11 +136,11 @@ describe "users" do
110
136
  end
111
137
 
112
138
  it "should hate non-unique emails" do
113
- email = "zendesk2+#{Zendesk2.uuid}@example.org"
114
- client.users.create!(email: email, name: Zendesk2.uuid)
115
- expect { client.users.create!(email: email, name: Zendesk2.uuid) }.to raise_exception(Zendesk2::Error)
139
+ email = mock_email
140
+ client.users.create!(email: email, name: mock_uuid)
141
+ expect { client.users.create!(email: email, name: mock_uuid) }.to raise_exception(Zendesk2::Error)
116
142
 
117
- user = client.users.create(email: email, name: Zendesk2.uuid)
143
+ user = client.users.create(email: email, name: mock_uuid)
118
144
 
119
145
  expect(user.identity).to eq(nil)
120
146
  expect(user.errors).to eq({"email" => ["Email: #{email} is already being used by another user"]})
@@ -124,7 +150,7 @@ describe "users" do
124
150
  expect(user.identities.size).to eq(1)
125
151
 
126
152
  original_email = user.email
127
- user.email = (new_email = "zendesk2+#{Zendesk2.uuid}@example.org")
153
+ user.email = (new_email = mock_email)
128
154
 
129
155
  expect {
130
156
  user.save!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zendesk2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 1.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-14 00:00:00.000000000 Z
11
+ date: 2014-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -255,6 +255,7 @@ files:
255
255
  - spec/shared/zendesk_resource.rb
256
256
  - spec/spec_helper.rb
257
257
  - spec/support/client_helper.rb
258
+ - spec/support/data_helper.rb
258
259
  - spec/ticket_fields_spec.rb
259
260
  - spec/tickets_spec.rb
260
261
  - spec/topic_comments_spec.rb
@@ -299,6 +300,7 @@ test_files:
299
300
  - spec/shared/zendesk_resource.rb
300
301
  - spec/spec_helper.rb
301
302
  - spec/support/client_helper.rb
303
+ - spec/support/data_helper.rb
302
304
  - spec/ticket_fields_spec.rb
303
305
  - spec/tickets_spec.rb
304
306
  - spec/topic_comments_spec.rb