zendesk2 1.6.1 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/lib/zendesk2/client/collections/tickets.rb +5 -1
  4. data/lib/zendesk2/client/collections/views.rb +11 -0
  5. data/lib/zendesk2/client/mock.rb +1 -0
  6. data/lib/zendesk2/client/models/view.rb +53 -0
  7. data/lib/zendesk2/client/real.rb +3 -1
  8. data/lib/zendesk2/client/requests/create_membership.rb +7 -1
  9. data/lib/zendesk2/client/requests/create_user.rb +4 -0
  10. data/lib/zendesk2/client/requests/create_view.rb +96 -0
  11. data/lib/zendesk2/client/requests/destroy_membership.rb +10 -2
  12. data/lib/zendesk2/client/requests/destroy_view.rb +14 -0
  13. data/lib/zendesk2/client/requests/get_organization_users.rb +3 -4
  14. data/lib/zendesk2/client/requests/get_view.rb +12 -0
  15. data/lib/zendesk2/client/requests/get_view_tickets.rb +37 -0
  16. data/lib/zendesk2/client/requests/get_views.rb +10 -0
  17. data/lib/zendesk2/client/requests/update_view.rb +62 -0
  18. data/lib/zendesk2/client.rb +1 -0
  19. data/lib/zendesk2/version.rb +1 -1
  20. data/spec/categories_spec.rb +1 -1
  21. data/spec/forums_spec.rb +1 -1
  22. data/spec/groups_spec.rb +1 -1
  23. data/spec/help_center/articles_spec.rb +1 -1
  24. data/spec/help_center/categories_spec.rb +1 -1
  25. data/spec/help_center/sections_spec.rb +1 -1
  26. data/spec/memberships_spec.rb +3 -3
  27. data/spec/organizations_spec.rb +1 -1
  28. data/spec/shared/zendesk_resource.rb +1 -1
  29. data/spec/ticket_fields_spec.rb +1 -1
  30. data/spec/tickets_spec.rb +1 -1
  31. data/spec/topic_comments_spec.rb +1 -1
  32. data/spec/topics_spec.rb +1 -1
  33. data/spec/user_fields_spec.rb +1 -1
  34. data/spec/user_identities_spec.rb +1 -1
  35. data/spec/users_spec.rb +1 -1
  36. data/spec/views_spec.rb +61 -0
  37. metadata +12 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0ab381ae9ac2abcdb319cb7485c1046957320739
4
- data.tar.gz: 33c6c9c16c1b2dcef4de822d621f1b9d326b6c8c
3
+ metadata.gz: a18fd1746e59027bea3912be64321d5bfbedf1d8
4
+ data.tar.gz: 321bc39eff6fd71787f5faf97eaa53bac27230dd
5
5
  SHA512:
6
- metadata.gz: b6aab81be23583b46b17345738dab3d3fcbec5723be5014fb2ec9058ca8a3de7dd58de77f86e09c7a6e1274b2f4e0f536b703b1cf8ee76758ab31f31d91c5aa4
7
- data.tar.gz: 70d741ec4a91b0803e1f1dba2541d23a1f6e78bfb984314b53153e281a0091f7dd8e3905b731e64b0075e003e610e0d2941d0c6184b3d5f386a0be61bea6ddfb
6
+ metadata.gz: c739e8b40eee14997eaea9bb255bd7cd798175c565bbf8d534dd04ed09a1c8860ca97ec67653ba59b4922cae8f3776e08834235794a239ca3484cdab6b6a3e80
7
+ data.tar.gz: 176636a93ff3de53c8186c51858ef5e17491cfe281e54923019114faa6df272a542ab4edb75c82fcf5ebddd5331a10c511ad425b882ef5059fa8511f698032d0
data/README.md CHANGED
@@ -72,6 +72,7 @@ Currently support resources:
72
72
  * User Identities
73
73
  * User Fields
74
74
  * Users
75
+ * Views
75
76
 
76
77
  Help Center resources:
77
78
 
@@ -5,8 +5,9 @@ class Zendesk2::Client::Tickets < Zendesk2::Client::Collection
5
5
 
6
6
  model Zendesk2::Client::Ticket
7
7
 
8
- attribute :requester_id, type: :integer
8
+ attribute :requester_id, type: :integer
9
9
  attribute :collaborator_id, type: :integer
10
+ attribute :view_id, type: :integer
10
11
 
11
12
  assoc_accessor :requester
12
13
  assoc_accessor :collaborator
@@ -21,6 +22,8 @@ class Zendesk2::Client::Tickets < Zendesk2::Client::Collection
21
22
  :get_requested_tickets
22
23
  elsif collaborator_id
23
24
  :get_ccd_tickets
25
+ elsif view_id
26
+ :get_view_tickets
24
27
  else
25
28
  :get_tickets
26
29
  end
@@ -34,4 +37,5 @@ class Zendesk2::Client::Tickets < Zendesk2::Client::Collection
34
37
 
35
38
  scopes << :requester_id
36
39
  scopes << :collaborator_id
40
+ scopes << :view_id
37
41
  end
@@ -0,0 +1,11 @@
1
+ class Zendesk2::Client::Views < Zendesk2::Client::Collection
2
+ include Zendesk2::PagedCollection
3
+ extend Zendesk2::Attributes
4
+
5
+ model Zendesk2::Client::View
6
+
7
+ self.collection_method = :get_views
8
+ self.collection_root = "views"
9
+ self.model_method = :get_view
10
+ self.model_root = "view"
11
+ end
@@ -24,6 +24,7 @@ class Zendesk2::Client < Cistern::Service
24
24
  :topics => {},
25
25
  :user_fields => {},
26
26
  :users => {},
27
+ :views => {},
27
28
  }
28
29
  end
29
30
 
@@ -0,0 +1,53 @@
1
+ class Zendesk2::Client::View < Zendesk2::Client::Model
2
+ extend Zendesk2::Attributes
3
+
4
+ # @return [Integer] Automatically assigned when created
5
+ identity :id, type: :integer
6
+
7
+ # @return [Boolean] Useful for determining if the view should be displayed
8
+ attribute :active, type: :boolean
9
+ # @return [Hash] An object describing how the view is constructed
10
+ attribute :conditions, type: :hash, default: {}
11
+ # @return [Time] The time the view was created
12
+ attribute :created_at, type: :time
13
+ # @return [Hash] An object describing how the view should be executed
14
+ attribute :execution, type: :hash, default: {}
15
+ # @return [Hash] Who may access this account. Will be null when everyone in the account can access it.
16
+ attribute :restriction, type: :hash, default: {}
17
+ # @return [Integer] If the view is for an SLA this is the id
18
+ attribute :sla_id, type: :integer
19
+ # @return [String] The title of the view
20
+ attribute :title, type: :string
21
+ # @return [Time] The time of the last update of the view
22
+ attribute :updated_at, type: :time
23
+
24
+ def save!
25
+ requires :execution, :title
26
+
27
+ params = {
28
+ "title" => self.title,
29
+ "active" => self.active,
30
+ "output" => Cistern::Hash.slice(self.execution, "sort_by", "sort_order", "group_by", "group_order", "columns")
31
+ }.merge(Cistern::Hash.slice(self.conditions, "any", "all"))
32
+
33
+ data = if new_record?
34
+ service.create_view("view" => params)
35
+ else
36
+ service.create_view("view" => params)
37
+ end.body
38
+
39
+ merge_attributes(data["view"])
40
+ end
41
+
42
+ def tickets
43
+ requires :identity
44
+
45
+ service.tickets(view_id: self.identity)
46
+ end
47
+
48
+ def destroy!
49
+ requires :identity
50
+
51
+ service.destroy_view("view" => {"id" => self.identity})
52
+ end
53
+ end
@@ -11,7 +11,7 @@ class Zendesk2::Client < Cistern::Service
11
11
  @logger = options[:logger] || Logger.new(nil)
12
12
  adapter = options[:adapter] || Faraday.default_adapter
13
13
  @username = options[:username] || Zendesk2.defaults[:username]
14
- @token = options[:token] || Zendesk2.defaults[:token]
14
+ @token = options.fetch(:token, Zendesk2.defaults[:token])
15
15
  password = options[:password] || Zendesk2.defaults[:password]
16
16
 
17
17
  service_options = options[:service_options] || {}
@@ -62,6 +62,8 @@ class Zendesk2::Client < Cistern::Service
62
62
  req.params.merge!(params)
63
63
  req.body = @last_request = body
64
64
  end
65
+ rescue Faraday::ConnectionFailed
66
+ raise
65
67
  rescue Faraday::Error::ClientError => e
66
68
  raise Zendesk2::Error.new(e)
67
69
  end
@@ -20,7 +20,7 @@ class Zendesk2::Client::CreateMembership < Zendesk2::Client::Request
20
20
  end
21
21
 
22
22
  def mock
23
- find!(:users, user_id)
23
+ user = find!(:users, user_id)
24
24
  find!(:organizations, organization_id,
25
25
  :error => :invalid,
26
26
  :details => {
@@ -44,6 +44,12 @@ class Zendesk2::Client::CreateMembership < Zendesk2::Client::Request
44
44
 
45
45
  self.data[:memberships][resource_id] = resource
46
46
 
47
+ primary_organization = self.data[:memberships].values.find { |m| m["user_id"] == user_id && m["default"] }
48
+
49
+ if primary_organization
50
+ user.merge!("organization_id" => primary_organization["organization_id"])
51
+ end
52
+
47
53
  mock_response("organization_membership" => resource)
48
54
  end
49
55
  end
@@ -55,6 +55,10 @@ class Zendesk2::Client::CreateUser < Zendesk2::Client::Request
55
55
  self.data[:identities][user_identity_id] = user_identity
56
56
  self.data[:users][user_id] = record.reject { |k,v| k == "email" }
57
57
 
58
+ if organization_id
59
+ service.create_membership("membership" => { "user_id" => user_id, "organization_id" => organization_id, "default" => true } )
60
+ end
61
+
58
62
  mock_response({"user" => record}, {status: 201})
59
63
  end
60
64
  end
@@ -0,0 +1,96 @@
1
+ class Zendesk2::Client::CreateView < Zendesk2::Client::Request
2
+ request_method :post
3
+ request_path { |_| "/views.json" }
4
+ request_body { |r| { "view" => r.view_params } }
5
+
6
+ def self.accepted_attributes
7
+ %w[title all any active output restriction]
8
+ end
9
+
10
+ def self.view_columns
11
+ @_view_columns ||= {
12
+ "assigned" => "Assigned date",
13
+ "assignee" => "Assignee",
14
+ "brand" => "Brand",
15
+ "created" => "Request date",
16
+ "description" => "Subject",
17
+ "due_date" => "Due Date",
18
+ "group" => "Group",
19
+ "locale_id" => "Requester language",
20
+ "nice_id" => "ID",
21
+ "organization" => "Organization",
22
+ "priority" => "Priority",
23
+ "requester" => "Requester",
24
+ "satisfaction_score" => "Satisfaction",
25
+ "score" => "Score",
26
+ "solved" => "Solved date",
27
+ "status" => "Status",
28
+ "submitter" => "Submitter",
29
+ "ticket_form" => "Ticket form",
30
+ "type" => "Ticket type",
31
+ "updated" => "Latest update",
32
+ "updated_assignee" => "Latest update by assignee",
33
+ "updated_by_type" => "Latest updater type (agent/end-user)",
34
+ "updated_requester" => "Latest update by requester",
35
+ }.freeze
36
+ end
37
+
38
+ def view_params
39
+ @_view_params ||= Cistern::Hash.slice(params.fetch("view"), *self.class.accepted_attributes)
40
+ end
41
+
42
+ # {:status=>422, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:58:50 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"262", "connection"=>"close", "status"=>"422 Unprocessable Entity", "x-zendesk-api-version"=>"v2", "x-frame-options"=>"SAMEORIGIN", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app5.pod5.iad1.zdsys.com", "x-request-id"=>"8dec47a7-f80d-4823-c8e2-b8ca3a6b1aa9", "x-runtime"=>"0.106400", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"6efea4cc3c46093df8b1"}, :body=>{"error"=>"RecordInvalid", "description"=>"Record validation errors", "details"=>{"base"=>[{"description"=>"View must test for at least <strong>one</strong> of the following ticket properties in the ALL conditions section: Status, Type, Group, Assignee, Requester."}]}}}
43
+ # {:status=>400, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:58:39 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"142", "connection"=>"close", "status"=>"400 Bad Request", "x-zendesk-api-version"=>"v2", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app5.pod5.iad1.zdsys.com", "x-request-id"=>"55216728-1c4b-49ce-c988-b8ca3a6b1a09", "x-runtime"=>"0.077761", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"a49e204bdb7ceb6d22b2"}, :body=>{"error"=>{"title"=>"Invalid attribute", "message"=>"You passed an invalid value for the value attribute. must be a string"}}}
44
+ # {:status=>422, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:57:38 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"326", "connection"=>"close", "status"=>"422 Unprocessable Entity", "x-zendesk-api-version"=>"v2", "x-frame-options"=>"SAMEORIGIN", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app19.pod5.iad1.zdsys.com", "x-request-id"=>"577927e1-1a98-4642-c636-b8ca3a6bdb18", "x-runtime"=>"0.114688", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"6f646a8ab4e30717d593"}, :body=>{"error"=>"RecordInvalid", "description"=>"Record validation errors", "details"=>{"base"=>[{"description"=>"Organization 1 was deleted and cannot be used"}, {"description"=>"View must test for at least <strong>one</strong> of the following ticket properties in the ALL conditions section: Status, Type, Group, Assignee, Requester."}]}}}
45
+ def mock
46
+ create_params = view_params.dup
47
+
48
+ if create_params["title"].nil? || create_params["title"] == ""
49
+ error!(:invalid, :details => {"base" => [{"title" => "Title: cannot be blank"}]})
50
+ end
51
+
52
+ if Array(create_params["any"]).empty? && Array(create_params["all"]).empty?
53
+ error!(:invalid, :details => {"base" => ["Invalid conditions: You must select at least one condition"]})
54
+ end
55
+
56
+ identity = service.serial_id
57
+
58
+ output = view_params.delete("output") || {}
59
+ columns = (output["columns"] || []).inject([]) { |r,c| r << {"id" => c, "name" => self.class.view_columns.fetch(c)} }
60
+
61
+ record = {
62
+ "id" => identity,
63
+ "url" => url_for("/views/#{identity}.json"),
64
+ "created_at" => Time.now.iso8601,
65
+ "updated_at" => Time.now.iso8601,
66
+ "active" => true,
67
+ "execution" => {
68
+ "columns" => columns,
69
+ "fields" => columns,
70
+ "custom_fields" => [],
71
+ "group_by" => create_params["group_by"],
72
+ "group_order" => create_params["group_order"],
73
+ "sort_by" => create_params["sort_by"],
74
+ "sort_order" => create_params["sort_order"],
75
+ "sort" => {
76
+ "id" => create_params["sort_by"],
77
+ "order" => create_params["sort_order"],
78
+ "title" => (create_params["sort_by"] && create_params["sort_by"].to_s.upcase),
79
+ },
80
+ "group" => {
81
+ "id" => create_params["group_by"],
82
+ "order" => create_params["group_order"],
83
+ "title" => (create_params["group_by"] && create_params["group_by"].to_s.upcase),
84
+ },
85
+ },
86
+ "conditions" => {
87
+ "any" => Array(create_params["any"]),
88
+ "all" => Array(create_params["all"]),
89
+ },
90
+ }.merge(create_params)
91
+
92
+ service.data[:views][identity] = record
93
+
94
+ mock_response("view" => record)
95
+ end
96
+ end
@@ -3,11 +3,19 @@ class Zendesk2::Client::DestroyMembership < Zendesk2::Client::Request
3
3
  request_path { |r| "/organization_memberships/#{r.membership_id}.json" }
4
4
 
5
5
  def membership_id
6
- params.fetch("membership").fetch("id")
6
+ params.fetch("membership").fetch("id").to_i
7
7
  end
8
8
 
9
9
  def mock
10
- delete!(:memberships, membership_id)
10
+ membership = delete!(:memberships, membership_id)
11
+
12
+ primary_organization = self.data[:memberships].values.find { |m| m["user_id"] == membership["user_id"] && m["default"] } ||
13
+ self.data[:memberships].values.find { |m| m["user_id"] == membership["user_id"] }
14
+
15
+ if primary_organization
16
+ primary_organization.merge!("default" => true)
17
+ self.find!(:users, membership["user_id"].to_i).merge!("organization_id" => primary_organization["organization_id"])
18
+ end
11
19
 
12
20
  mock_response(nil)
13
21
  end
@@ -0,0 +1,14 @@
1
+ class Zendesk2::Client::DestroyView < Zendesk2::Client::Request
2
+ request_method :delete
3
+ request_path { |r| "/views/#{r.view_id}.json" }
4
+
5
+ def view_id
6
+ @_view_id ||= params.fetch("view").fetch("id")
7
+ end
8
+
9
+ def mock
10
+ self.delete!(:views, view_id)
11
+
12
+ mock_response(nil)
13
+ end
14
+ end
@@ -9,10 +9,9 @@ class Zendesk2::Client::GetOrganizationUsers < Zendesk2::Client::Request
9
9
  end
10
10
 
11
11
  def mock
12
- users = self.data[:users].values.select { |u| u["organization_id"] == organization_id }
13
- users += self.data[:memberships].values.select { |m|
14
- m["organization_id"] == organization_id
15
- }.map { |m| self.data[:users].fetch(m["user_id"]) }
12
+ users = self.data[:memberships].values.
13
+ select { |m| m["organization_id"] == organization_id }.
14
+ map { |m| self.data[:users].fetch(m["user_id"]) }
16
15
 
17
16
  page(users, root: "users")
18
17
  end
@@ -0,0 +1,12 @@
1
+ class Zendesk2::Client::GetView < Zendesk2::Client::Request
2
+ request_method :get
3
+ request_path { |r| "/views/#{r.view_id}.json" }
4
+
5
+ def view_id
6
+ params.fetch("view").fetch("id")
7
+ end
8
+
9
+ def mock
10
+ mock_response("view" => self.find!(:views, view_id))
11
+ end
12
+ end
@@ -0,0 +1,37 @@
1
+ class Zendesk2::Client::GetViewTickets < Zendesk2::Client::Request
2
+ request_method :get
3
+ request_path { |r| "/views/#{r.view_id}/tickets.json" }
4
+
5
+ page_params!
6
+
7
+ def view_id
8
+ params.fetch("view_id").to_i
9
+ end
10
+
11
+ def mock(params={})
12
+ view = self.find!(:views, view_id)
13
+
14
+ tickets = Array(view["conditions"]["all"]).map { |c|
15
+ operator = ("is" == c.fetch("operator")) ? :eql? : :!=
16
+ key = c.fetch("field")
17
+ value = c.fetch("value").to_s
18
+
19
+ [operator, key, value]
20
+ }.inject(self.data[:tickets].values) { |r, (o,k,v)|
21
+ r.select { |t| t[k].to_s.public_send(o, v) }
22
+ }
23
+
24
+ any_operators = Array(view["conditions"]["any"]).map { |c|
25
+ operator = ("is" == c.fetch("operator")) ? :eql? : :!=
26
+ key = c.fetch("field")
27
+ value = c.fetch("value").to_s
28
+
29
+ [operator, key, value]
30
+ }
31
+
32
+ any_operators.any? &&
33
+ tickets.select! { |t| any_operators.find { |(o,k,v)| t[k].to_s.public_send(o, v) } }
34
+
35
+ page(tickets, root: "tickets")
36
+ end
37
+ end
@@ -0,0 +1,10 @@
1
+ class Zendesk2::Client::GetViews < Zendesk2::Client::Request
2
+ request_method :get
3
+ request_path { |r| "/views.json" }
4
+
5
+ page_params!
6
+
7
+ def mock
8
+ page(:views)
9
+ end
10
+ end
@@ -0,0 +1,62 @@
1
+ class Zendesk2::Client::UpdateView < Zendesk2::Client::Request
2
+ request_method :put
3
+ request_path { |r| "/views/#{r.view_id}.json" }
4
+ request_body { |r| { "view" => r.view_params } }
5
+
6
+ def self.accepted_attributes
7
+ Zendesk2::Client::Createview.accepted_attributes
8
+ end
9
+
10
+ def view_params
11
+ @_view_params ||= Cistern::Hash.slice(params.fetch("view"), *self.class.accepted_attributes)
12
+ end
13
+
14
+ def view_id
15
+ params.fetch("view").fetch("id")
16
+ end
17
+
18
+ def mock
19
+ body = self.find!(:views, view_id)
20
+
21
+ update_params = view_params.dup
22
+
23
+ output = params.delete("output") || {}
24
+ columns = (output["columns"] || []).inject([]) { |r,c| r << {"id" => c, "name" => Zendesk2::Client::CreateView.view_columns.fetch(c)} }
25
+
26
+ body.merge!("updated_at" => Time.now.iso8601)
27
+
28
+ if columns.any?
29
+ body.merge!(
30
+ "execution" => {
31
+ "columns" => columns,
32
+ "fields" => columns,
33
+ "custom_fields" => [],
34
+ }
35
+ )
36
+ end
37
+
38
+ body["execution"]["conditions"].merge!(Cistern::Hash.slice(body, "any", "all"))
39
+
40
+ group_params = Cistern::Hash.slice(body, "group_by", "group_order").merge(Cistern::Hash.slice(update_params, "group_by", "group_order"))
41
+
42
+ body.merge!(group_params).merge!(
43
+ "group" => {
44
+ "id" => group_params["group_by"],
45
+ "order" => group_params["group_order"],
46
+ "title" => (group_params["group_by"] && group_params["group_by"].to_s.upcase),
47
+ },
48
+ )
49
+
50
+ sort_params = Cistern::Hash.slice(body, "sort_by", "sort_order").merge(Cistern::Hash.slice(update_params, "sort_by", "sort_order"))
51
+
52
+ body.merge!(sort_params).merge!(
53
+ "sort" => {
54
+ "id" => sort_params["sort_by"],
55
+ "order" => sort_params["sort_order"],
56
+ "title" => (sort_params["sort_by"] && sort_params["sort_by"].to_s.upcase),
57
+ },
58
+ )
59
+
60
+ mock_response("view" => body)
61
+ end
62
+ end
@@ -58,3 +58,4 @@ require_resource("organization", and: [
58
58
  require_resource("user_field")
59
59
  require_resource("user_identity", plural: "user_identities")
60
60
  require_resource("membership", except: [:update], and: "mark_membership_default")
61
+ require_resource("view", and: ["get_view_tickets"])
@@ -1,3 +1,3 @@
1
1
  module Zendesk2
2
- VERSION = "1.6.1"
2
+ VERSION = "1.7.0"
3
3
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "categories" do
4
4
  let(:client) { create_client }
5
5
 
6
- include_examples "zendesk resource", {
6
+ include_examples "zendesk#resource", {
7
7
  :collection => lambda { client.categories },
8
8
  :create_params => lambda { { name: mock_uuid } },
9
9
  :update_params => lambda { { name: mock_uuid } },
data/spec/forums_spec.rb CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "forums" do
4
4
  let(:client) { create_client }
5
5
 
6
- include_examples "zendesk resource", {
6
+ include_examples "zendesk#resource", {
7
7
  :collection => lambda { client.forums },
8
8
  :create_params => lambda { { name: mock_uuid } },
9
9
  :update_params => lambda { { name: mock_uuid } },
data/spec/groups_spec.rb CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "groups" do
4
4
  let(:client) { create_client }
5
5
 
6
- include_examples "zendesk resource", {
6
+ include_examples "zendesk#resource", {
7
7
  :collection => lambda { client.groups },
8
8
  :create_params => lambda { { name: mock_uuid } },
9
9
  :update_params => lambda { { name: mock_uuid } },
@@ -12,7 +12,7 @@ describe "help_center/articles" do
12
12
  )
13
13
  end
14
14
 
15
- include_examples "zendesk resource", {
15
+ include_examples "zendesk#resource", {
16
16
  :collection => lambda { client.help_center_articles },
17
17
  :create_params => lambda { { title: mock_uuid, locale: "en-us", section: section } },
18
18
  :update_params => lambda { { title: mock_uuid } },
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "help_center/categories" do
4
4
  let(:client) { create_client }
5
5
 
6
- include_examples "zendesk resource", {
6
+ include_examples "zendesk#resource", {
7
7
  :collection => lambda { client.help_center_categories },
8
8
  :create_params => lambda { { name: mock_uuid, locale: "en-us" } },
9
9
  :update_params => lambda { { name: mock_uuid } },
@@ -9,7 +9,7 @@ describe "help_center/sections" do
9
9
  )
10
10
  end
11
11
 
12
- include_examples "zendesk resource", {
12
+ include_examples "zendesk#resource", {
13
13
  :collection => lambda { client.help_center_sections },
14
14
  :create_params => lambda { { name: mock_uuid, locale: "en-us", category: category } },
15
15
  :update_params => lambda { { name: mock_uuid } },
@@ -5,7 +5,7 @@ describe "memberships" do
5
5
  let!(:user) { client.users.create!(email: mock_email, name: mock_uuid, verified: true) }
6
6
  let(:organization) { client.organizations.create!(name: mock_uuid) }
7
7
 
8
- include_examples "zendesk resource", {
8
+ include_examples "zendesk#resource", {
9
9
  :create_params => lambda { { organization_id: client.organizations.create!(name: mock_uuid).identity, user_id: user.id } },
10
10
  :collection => lambda { client.memberships(user: user) },
11
11
  :paged => true,
@@ -63,9 +63,9 @@ describe "memberships" do
63
63
  another_organization.memberships.create!(user: user)
64
64
  organization.memberships.create!(user: another_user)
65
65
 
66
- expect(user.organizations.to_a).to contain_exactly(another_organization)
66
+ expect(user.organizations.to_a).to contain_exactly(another_organization)
67
67
  expect(another_organization.users.to_a).to contain_exactly(user, another_user)
68
- expect(organization.users.to_a).to contain_exactly(another_user)
68
+ expect(organization.users.to_a).to contain_exactly(another_user)
69
69
  end
70
70
 
71
71
  describe "create_membership" do
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "organizations" do
4
4
  let(:client) { create_client }
5
5
 
6
- include_examples "zendesk resource", {
6
+ include_examples "zendesk#resource", {
7
7
  :collection => lambda { client.organizations },
8
8
  :create_params => lambda { { name: mock_uuid } },
9
9
  :update_params => lambda { { name: mock_uuid } },
@@ -1,4 +1,4 @@
1
- shared_examples "zendesk resource" do |options={}|
1
+ shared_examples "zendesk#resource" do |options={}|
2
2
  context "as a resource" do
3
3
  let!(:collection) { instance_exec(&options[:collection]) }
4
4
  let(:create_params) { instance_exec(&options[:create_params]) || {} }
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "ticket_fields" do
4
4
  let(:client) { create_client }
5
5
 
6
- include_examples "zendesk resource", {
6
+ include_examples "zendesk#resource", {
7
7
  :collection => lambda { client.ticket_fields },
8
8
  :create_params => lambda { { title: mock_uuid, type: "text" } },
9
9
  :update_params => lambda { { title: mock_uuid } },
data/spec/tickets_spec.rb CHANGED
@@ -4,7 +4,7 @@ describe "Zendesk2::Client" do
4
4
  let(:client) { create_client }
5
5
 
6
6
  describe "tickets" do
7
- include_examples "zendesk resource", {
7
+ include_examples "zendesk#resource", {
8
8
  :collection => lambda { client.tickets },
9
9
  :create_params => lambda { {subject: mock_uuid, description: mock_uuid} },
10
10
  :update_params => lambda { {subject: mock_uuid} },
@@ -6,7 +6,7 @@ describe "topic_comments" do
6
6
  let!(:forum) { client.forums.create!(name: mock_uuid) }
7
7
  let!(:topic) { client.topics.create!(title: mock_uuid, body: mock_uuid, forum: forum) }
8
8
 
9
- include_examples "zendesk resource",
9
+ include_examples "zendesk#resource",
10
10
  {
11
11
  :create_params => lambda { { body: mock_uuid, topic_id: topic.identity, user_id: user.identity } },
12
12
  :update => false,
data/spec/topics_spec.rb CHANGED
@@ -4,7 +4,7 @@ describe "topics" do
4
4
  let(:client) { create_client }
5
5
  let(:forum) { client.forums.create(name: mock_uuid) }
6
6
 
7
- include_examples "zendesk resource", {
7
+ include_examples "zendesk#resource", {
8
8
  :collection => lambda { client.topics },
9
9
  :create_params => lambda { { title: mock_uuid, body: mock_uuid, forum_id: forum.id } },
10
10
  :update_params => lambda { { title: mock_uuid, body: mock_uuid } },
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "user_fields" do
4
4
  let(:client) { create_client }
5
5
 
6
- include_examples "zendesk resource", {
6
+ include_examples "zendesk#resource", {
7
7
  :collection => lambda { client.user_fields },
8
8
  :create_params => lambda { { title: mock_uuid, type: "text", key: "custom_#{SecureRandom.hex(3)}"} },
9
9
  :update_params => lambda { { title: mock_uuid } },
@@ -4,7 +4,7 @@ describe "user_identities" do
4
4
  let(:client) { create_client }
5
5
  let(:user) { client.users.create(email: mock_email, name: mock_uuid, verified: true) }
6
6
 
7
- include_examples "zendesk resource", {
7
+ include_examples "zendesk#resource", {
8
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 } },
data/spec/users_spec.rb CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "users" do
4
4
  let(:client) { create_client }
5
5
 
6
- include_examples "zendesk resource", {
6
+ include_examples "zendesk#resource", {
7
7
  :collection => lambda { client.users },
8
8
  :create_params => lambda { { email: mock_email, name: mock_uuid, verified: true } },
9
9
  :update_params => lambda { { name: mock_uuid } },
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Zendesk2::Client do
4
+ let(:client) { create_client }
5
+
6
+ context "with an organization" do
7
+ let!(:organization) { client.organizations.create!(name: mock_uuid) }
8
+
9
+ include_examples "zendesk#resource", {
10
+ :collection => lambda { client.views },
11
+ :create_params => lambda {
12
+ {
13
+ :title => mock_uuid,
14
+ :conditions => {
15
+ "any" => [ {"field" => "organization_id", "operator" => "is", "value" => organization.identity.to_s } ],
16
+ "all" => [ {"field" => "status", "operator" => "is", "value" => "pending" } ],
17
+ }
18
+ }
19
+ },
20
+ :update_params => lambda { { title: mock_uuid } },
21
+ :search => false,
22
+ }
23
+
24
+ context "and a view that filters by that organization" do
25
+ let!(:user) { client.users.create!(email: mock_email, name: mock_uuid, verified: true) }
26
+ let!(:view) {
27
+ client.views.create!(
28
+ :title => mock_uuid,
29
+ :conditions => {
30
+ "all" => [ {"field" => "organization_id", "operator" => "is", "value" => organization.identity.to_s } ],
31
+ }
32
+ )
33
+ }
34
+
35
+ before {
36
+ client.memberships.create(user: user, organization: organization)
37
+ }
38
+
39
+ let!(:tickets) {
40
+ 2.times.map {
41
+ client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: user, organization: organization)
42
+ }
43
+ }
44
+
45
+ before {
46
+ another_organization = client.organizations.create!(name: mock_uuid)
47
+ another_user = client.users.create!(email: mock_email, name: mock_uuid, verified: true)
48
+
49
+ client.memberships.create(user: another_user, organization: another_organization)
50
+
51
+ 2.times.each {
52
+ client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester: another_user)
53
+ }
54
+ }
55
+
56
+ it "should find only that organizations tickets" do
57
+ expect(view.tickets).to match_array(tickets)
58
+ end
59
+ end
60
+ end
61
+ end
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.6.1
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-07 00:00:00.000000000 Z
11
+ date: 2015-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cistern
@@ -103,6 +103,7 @@ files:
103
103
  - lib/zendesk2/client/collections/user_fields.rb
104
104
  - lib/zendesk2/client/collections/user_identities.rb
105
105
  - lib/zendesk2/client/collections/users.rb
106
+ - lib/zendesk2/client/collections/views.rb
106
107
  - lib/zendesk2/client/help_center.rb
107
108
  - lib/zendesk2/client/mock.rb
108
109
  - lib/zendesk2/client/model.rb
@@ -130,6 +131,7 @@ files:
130
131
  - lib/zendesk2/client/models/user.rb
131
132
  - lib/zendesk2/client/models/user_field.rb
132
133
  - lib/zendesk2/client/models/user_identity.rb
134
+ - lib/zendesk2/client/models/view.rb
133
135
  - lib/zendesk2/client/real.rb
134
136
  - lib/zendesk2/client/request.rb
135
137
  - lib/zendesk2/client/requests/create_category.rb
@@ -147,6 +149,7 @@ files:
147
149
  - lib/zendesk2/client/requests/create_user.rb
148
150
  - lib/zendesk2/client/requests/create_user_field.rb
149
151
  - lib/zendesk2/client/requests/create_user_identity.rb
152
+ - lib/zendesk2/client/requests/create_view.rb
150
153
  - lib/zendesk2/client/requests/destroy_category.rb
151
154
  - lib/zendesk2/client/requests/destroy_forum.rb
152
155
  - lib/zendesk2/client/requests/destroy_group.rb
@@ -162,6 +165,7 @@ files:
162
165
  - lib/zendesk2/client/requests/destroy_user.rb
163
166
  - lib/zendesk2/client/requests/destroy_user_field.rb
164
167
  - lib/zendesk2/client/requests/destroy_user_identity.rb
168
+ - lib/zendesk2/client/requests/destroy_view.rb
165
169
  - lib/zendesk2/client/requests/get_assignable_groups.rb
166
170
  - lib/zendesk2/client/requests/get_audits.rb
167
171
  - lib/zendesk2/client/requests/get_categories.rb
@@ -211,6 +215,9 @@ files:
211
215
  - lib/zendesk2/client/requests/get_user_memberships.rb
212
216
  - lib/zendesk2/client/requests/get_user_organizations.rb
213
217
  - lib/zendesk2/client/requests/get_users.rb
218
+ - lib/zendesk2/client/requests/get_view.rb
219
+ - lib/zendesk2/client/requests/get_view_tickets.rb
220
+ - lib/zendesk2/client/requests/get_views.rb
214
221
  - lib/zendesk2/client/requests/mark_membership_default.rb
215
222
  - lib/zendesk2/client/requests/mark_user_identity_primary.rb
216
223
  - lib/zendesk2/client/requests/search.rb
@@ -231,6 +238,7 @@ files:
231
238
  - lib/zendesk2/client/requests/update_user.rb
232
239
  - lib/zendesk2/client/requests/update_user_field.rb
233
240
  - lib/zendesk2/client/requests/update_user_identity.rb
241
+ - lib/zendesk2/client/requests/update_view.rb
234
242
  - lib/zendesk2/error.rb
235
243
  - lib/zendesk2/logger.rb
236
244
  - lib/zendesk2/paged_collection.rb
@@ -258,6 +266,7 @@ files:
258
266
  - spec/user_fields_spec.rb
259
267
  - spec/user_identities_spec.rb
260
268
  - spec/users_spec.rb
269
+ - spec/views_spec.rb
261
270
  - zendesk2.gemspec
262
271
  homepage: http://joshualane.com/zendesk2
263
272
  licenses:
@@ -305,3 +314,4 @@ test_files:
305
314
  - spec/user_fields_spec.rb
306
315
  - spec/user_identities_spec.rb
307
316
  - spec/users_spec.rb
317
+ - spec/views_spec.rb