zendesk2 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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