desk_api_v2 0.0.1

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 (59) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +0 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +24 -0
  6. data/README.md +27 -0
  7. data/Rakefile +39 -0
  8. data/desk_api_v2.gemspec +27 -0
  9. data/lib/desk.rb +11 -0
  10. data/lib/desk/api/articles.rb +34 -0
  11. data/lib/desk/api/cases.rb +47 -0
  12. data/lib/desk/api/customers.rb +36 -0
  13. data/lib/desk/api/groups.rb +30 -0
  14. data/lib/desk/api/modules/creatable.rb +15 -0
  15. data/lib/desk/api/modules/deletable.rb +11 -0
  16. data/lib/desk/api/modules/listable.rb +16 -0
  17. data/lib/desk/api/modules/searchable.rb +13 -0
  18. data/lib/desk/api/topics.rb +25 -0
  19. data/lib/desk/api/translations.rb +24 -0
  20. data/lib/desk/article.rb +7 -0
  21. data/lib/desk/case.rb +7 -0
  22. data/lib/desk/client.rb +39 -0
  23. data/lib/desk/collection.rb +17 -0
  24. data/lib/desk/connection.rb +71 -0
  25. data/lib/desk/customer.rb +7 -0
  26. data/lib/desk/entity.rb +7 -0
  27. data/lib/desk/error.rb +17 -0
  28. data/lib/desk/filter.rb +7 -0
  29. data/lib/desk/group.rb +7 -0
  30. data/lib/desk/message.rb +7 -0
  31. data/lib/desk/response/error_handling.rb +30 -0
  32. data/lib/desk/topic.rb +7 -0
  33. data/lib/desk/translation.rb +7 -0
  34. data/lib/desk/user.rb +7 -0
  35. data/spec/desk/api/articles_spec.rb +135 -0
  36. data/spec/desk/api/cases_spec.rb +181 -0
  37. data/spec/desk/api/customers_spec.rb +135 -0
  38. data/spec/desk/api/groups_spec.rb +98 -0
  39. data/spec/desk/api/topics_spec.rb +98 -0
  40. data/spec/desk/api/translations_spec.rb +92 -0
  41. data/spec/desk/collection_spec.rb +22 -0
  42. data/spec/desk/connection_spec.rb +95 -0
  43. data/spec/fixtures/article.json +39 -0
  44. data/spec/fixtures/articles.json +101 -0
  45. data/spec/fixtures/case.json +40 -0
  46. data/spec/fixtures/cases.json +105 -0
  47. data/spec/fixtures/customer.json +60 -0
  48. data/spec/fixtures/customers.json +143 -0
  49. data/spec/fixtures/group.json +9 -0
  50. data/spec/fixtures/group_filters.json +53 -0
  51. data/spec/fixtures/group_users.json +71 -0
  52. data/spec/fixtures/groups.json +42 -0
  53. data/spec/fixtures/message.json +26 -0
  54. data/spec/fixtures/topic.json +23 -0
  55. data/spec/fixtures/topics.json +69 -0
  56. data/spec/fixtures/translation.json +28 -0
  57. data/spec/fixtures/translations.json +79 -0
  58. data/spec/spec_helper.rb +17 -0
  59. metadata +200 -0
@@ -0,0 +1,135 @@
1
+ require 'json'
2
+ require_relative '../../spec_helper'
3
+
4
+ describe Desk::Api::Customers do
5
+
6
+ before { @connection = Minitest::Mock.new }
7
+
8
+ subject { Desk::Api::Customers.new(@connection) }
9
+
10
+ describe "#all" do
11
+
12
+ before { @connection.expect(:get, customers_fixture, ["customers"]) }
13
+
14
+ it "will connect to the customers endpoint" do
15
+ subject.all
16
+ end
17
+
18
+ it "will return an array of customers" do
19
+ result = subject.all
20
+
21
+ assert result.is_a? Array
22
+ assert result.first.is_a? Desk::Customer
23
+ end
24
+ end
25
+
26
+ describe "#show" do
27
+
28
+ before { @connection.expect(:get, customer_fixture, ["customers/1234"]) }
29
+
30
+ it "will connect to the customer show endpoint" do
31
+ subject.show(1234)
32
+
33
+ @connection.verify
34
+ end
35
+
36
+ it "will return a single customer object" do
37
+ result = subject.show(1234)
38
+
39
+ assert result.is_a? Desk::Customer
40
+ end
41
+ end
42
+
43
+ describe "#create" do
44
+
45
+ before do
46
+ @data = {
47
+ first_name: "Johnny",
48
+ last_name: "Bravo",
49
+ emails: [
50
+ {
51
+ type: "work",
52
+ value: "johnny@acme.com"
53
+ },
54
+ {
55
+ type: "other",
56
+ value: "johnny@other.com"
57
+ }
58
+ ]
59
+ }
60
+
61
+ @connection.expect(:post, customer_fixture, ["customers", @data])
62
+ end
63
+
64
+ it "will connect to the customer creation endpoint" do
65
+ subject.create(@data)
66
+
67
+ @connection.verify
68
+ end
69
+ end
70
+
71
+ describe "#update" do
72
+ before do
73
+ @data = {
74
+ first_name: "Johnny",
75
+ emails: [
76
+ {
77
+ type: "work",
78
+ value: "johnny@acme.com"
79
+ },
80
+ {
81
+ type: "other",
82
+ value: "johnny@other.com"
83
+ }
84
+ ]
85
+ }
86
+
87
+ @connection.expect(:patch, customer_fixture, ["customers/1234", @data])
88
+ end
89
+
90
+ it "will connect to the customer update endpoint" do
91
+ subject.update(1234, @data)
92
+
93
+ @connection.verify
94
+ end
95
+ end
96
+
97
+ describe "#delete" do
98
+
99
+ before { @connection.expect(:delete, true, ["customers/1234"]) }
100
+
101
+ it "will connect to the customer delete endpoint" do
102
+ subject.delete(1234)
103
+
104
+ @connection.verify
105
+ end
106
+ end
107
+
108
+ describe "#search" do
109
+
110
+ it "will connect to the customer search endpoint" do
111
+ @connection.expect(:get, customers_fixture, ["customers/search", {first_name: "Johnny"}])
112
+
113
+ subject.search(first_name: "Johnny")
114
+
115
+ @connection.verify
116
+ end
117
+
118
+ it "will pass last name into the search query" do
119
+ @connection.expect(:get, customers_fixture, ["customers/search", {first_name: "Johhny", last_name: "Bravo"}])
120
+
121
+ subject.search(first_name: "Johhny", last_name: "Bravo")
122
+
123
+ @connection.verify
124
+ end
125
+
126
+ end
127
+
128
+ def customers_fixture
129
+ JSON.load(fixture("customers.json"))
130
+ end
131
+
132
+ def customer_fixture
133
+ JSON.load(fixture("customer.json"))
134
+ end
135
+ end
@@ -0,0 +1,98 @@
1
+ require 'json'
2
+ require_relative '../../spec_helper'
3
+
4
+ class GroupsSpec
5
+ describe Desk::Api::Groups do
6
+
7
+ before { @connection = Minitest::Mock.new }
8
+
9
+ subject { Desk::Api::Groups.new(@connection) }
10
+
11
+ describe "#all" do
12
+
13
+ before { @connection.expect(:get, groups_fixture, ["groups"]) }
14
+
15
+ it "will connect to the groups endpoint" do
16
+ subject.all
17
+
18
+ @connection.verify
19
+ end
20
+
21
+ it "will return an array of groups" do
22
+ result = subject.all
23
+
24
+ assert result.is_a? Array
25
+ assert result.first.is_a? Desk::Group
26
+ end
27
+ end
28
+
29
+ describe "#show" do
30
+
31
+ before { @connection.expect(:get, group_fixture, ["groups/1234"]) }
32
+
33
+ it "will connect to the group show endpoint" do
34
+ subject.show(1234)
35
+
36
+ @connection.verify
37
+ end
38
+
39
+ it "will return a single group object" do
40
+ result = subject.show(1234)
41
+
42
+ assert result.is_a? Desk::Group
43
+ end
44
+ end
45
+
46
+ describe "#filters" do
47
+
48
+ before { @connection.expect(:get, filters_fixture, ["groups/1234/filters"]) }
49
+
50
+ it "will connect to the case filters endpoint" do
51
+ subject.filters(1234)
52
+
53
+ @connection.verify
54
+ end
55
+
56
+ it "will return an array of filters object" do
57
+ result = subject.filters(1234)
58
+
59
+ assert result.is_a? Array
60
+ assert result.first.is_a? Desk::Filter
61
+ end
62
+ end
63
+
64
+ describe "#users" do
65
+
66
+ before { @connection.expect(:get, users_fixture, ["groups/1234/users"]) }
67
+
68
+ it "will connect to the case users endpoint" do
69
+ subject.users(1234)
70
+
71
+ @connection.verify
72
+ end
73
+
74
+ it "will return an array of users object" do
75
+ result = subject.users(1234)
76
+
77
+ assert result.is_a? Array
78
+ assert result.first.is_a? Desk::User
79
+ end
80
+ end
81
+
82
+ def groups_fixture
83
+ JSON.load(fixture("groups.json"))
84
+ end
85
+
86
+ def group_fixture
87
+ JSON.load(fixture("group.json"))
88
+ end
89
+
90
+ def filters_fixture
91
+ JSON.load(fixture("group_filters.json"))
92
+ end
93
+
94
+ def users_fixture
95
+ JSON.load(fixture("group_users.json"))
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,98 @@
1
+ require 'json'
2
+ require_relative '../../spec_helper'
3
+
4
+ describe Desk::Api::Topics do
5
+
6
+ before { @connection = Minitest::Mock.new }
7
+
8
+ subject { Desk::Api::Topics.new(@connection) }
9
+
10
+ describe "#all" do
11
+
12
+ before { @connection.expect(:get, topics_fixture, ["topics"]) }
13
+
14
+ it "will connect to the topics endpoint" do
15
+ subject.all
16
+ end
17
+
18
+ it "will return an array of topics" do
19
+ result = subject.all
20
+
21
+ assert result.is_a? Array
22
+ assert result.first.is_a? Desk::Topic
23
+ end
24
+ end
25
+
26
+ describe "#show" do
27
+
28
+ before { @connection.expect(:get, topic_fixture, ["topics/1234"]) }
29
+
30
+ it "will connect to the topic show endpoint" do
31
+ subject.show(1234)
32
+
33
+ @connection.verify
34
+ end
35
+
36
+ it "will return a single topic object" do
37
+ result = subject.show(1234)
38
+
39
+ assert result.is_a? Desk::Topic
40
+ end
41
+ end
42
+
43
+ describe "#create" do
44
+
45
+ before do
46
+ @data = {
47
+ name: "Social Media",
48
+ allow_questions: true,
49
+ in_support_center: true
50
+ }
51
+
52
+ @connection.expect(:post, topic_fixture, ["topics", @data])
53
+ end
54
+
55
+ it "will connect to the topic creation endpoint" do
56
+ subject.create(@data)
57
+
58
+ @connection.verify
59
+ end
60
+ end
61
+
62
+ describe "#update" do
63
+ before do
64
+ @data = {
65
+ name: "New Name",
66
+ allow_questions: false,
67
+ in_support_center: true
68
+ }
69
+
70
+ @connection.expect(:patch, topic_fixture, ["topics/1234", @data])
71
+ end
72
+
73
+ it "will connect to the topic update endpoint" do
74
+ subject.update(1234, @data)
75
+
76
+ @connection.verify
77
+ end
78
+ end
79
+
80
+ describe "#delete" do
81
+
82
+ before { @connection.expect(:delete, true, ["topics/1234"]) }
83
+
84
+ it "will connect to the topic delete endpoint" do
85
+ subject.delete(1234)
86
+
87
+ @connection.verify
88
+ end
89
+ end
90
+
91
+ def topics_fixture
92
+ JSON.load(fixture("topics.json"))
93
+ end
94
+
95
+ def topic_fixture
96
+ JSON.load(fixture("topic.json"))
97
+ end
98
+ end
@@ -0,0 +1,92 @@
1
+ require 'json'
2
+ require_relative '../../spec_helper'
3
+
4
+ describe Desk::Api::Translations do
5
+
6
+ before do
7
+ @connection = Minitest::Mock.new
8
+ @parent = Minitest::Mock.new
9
+ @parent.expect(:endpoint, "articles/1234")
10
+ end
11
+
12
+ subject { Desk::Api::Translations.new(@connection, @parent) }
13
+
14
+ describe "#all" do
15
+
16
+ before { @connection.expect(:get, translations_fixture, ["articles/1234/translations"]) }
17
+
18
+ it "will connect to the translations endpoint" do
19
+ subject.all
20
+
21
+ @connection.verify
22
+ end
23
+
24
+ it "will return an array of Translations" do
25
+ result = subject.all
26
+
27
+ assert result.is_a? Array
28
+ assert result.first.is_a? Desk::Translation
29
+ end
30
+ end
31
+
32
+ describe "#show" do
33
+
34
+ before { @connection.expect(:get, translation_fixture, ["articles/1234/translations/es"]) }
35
+
36
+ it "will connect to the translation show endpoint" do
37
+ subject.show(:es)
38
+
39
+ @connection.verify
40
+ end
41
+
42
+ it "will return a single translation object" do
43
+ result = subject.show(:es)
44
+
45
+ assert result.is_a? Desk::Translation
46
+ end
47
+ end
48
+
49
+ describe "#create" do
50
+
51
+ before do
52
+ @data = {
53
+ locale: "es",
54
+ subject: "Yo quiero Desk.com API v2",
55
+ body: "No hablo engles? Lea este."
56
+ }
57
+
58
+ @connection.expect(:post, translation_fixture, ["articles/1234/translations", @data])
59
+ end
60
+
61
+ it "will connect to the translations creation endpoint" do
62
+ subject.create(@data)
63
+
64
+ @connection.verify
65
+ end
66
+ end
67
+
68
+ describe "#update" do
69
+ before do
70
+ @data = {
71
+ subject: "Updated Spanish Translation"
72
+ }
73
+
74
+ @connection.expect(:patch, translation_fixture, ["articles/1234/translations/es", @data])
75
+ end
76
+
77
+ it "will connect to the article update endpoint" do
78
+ subject.update(:es, @data)
79
+
80
+ @connection.verify
81
+ end
82
+ end
83
+
84
+ def translations_fixture
85
+ JSON.load(fixture("translations.json"))
86
+ end
87
+
88
+ def translation_fixture
89
+ JSON.load(fixture("translation.json"))
90
+ end
91
+
92
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe Desk::Collection do
4
+
5
+ subject { Desk::Collection.new(@response, Desk::Entity) }
6
+
7
+ before do
8
+ @obj_1 = {foo: "bar"}
9
+ @obj_2 = {baz: "foo"}
10
+ @response = {"_embedded" => {"entries" => [@obj_1, @obj_2] }}
11
+ end
12
+
13
+ it "acts like an enumerable" do
14
+ assert subject.respond_to? :first
15
+ assert subject.respond_to? :last
16
+ end
17
+
18
+ it "coerces the objects into the provided class" do
19
+ assert subject.last.is_a? Desk::Entity
20
+ end
21
+
22
+ end