KayakoClient 1.0.2 → 1.1.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 (84) hide show
  1. data/lib/kayako_client.rb +31 -0
  2. data/lib/kayako_client/base.rb +23 -0
  3. data/lib/kayako_client/custom_field.rb +14 -0
  4. data/lib/kayako_client/department.rb +18 -3
  5. data/lib/kayako_client/http/http.rb +14 -0
  6. data/lib/kayako_client/http/http_backend.rb +14 -0
  7. data/lib/kayako_client/http/http_client.rb +14 -0
  8. data/lib/kayako_client/http/http_response.rb +14 -0
  9. data/lib/kayako_client/http/net_http.rb +14 -0
  10. data/lib/kayako_client/knowledgebase_article.rb +131 -0
  11. data/lib/kayako_client/knowledgebase_attachment.rb +59 -0
  12. data/lib/kayako_client/knowledgebase_category.rb +71 -0
  13. data/lib/kayako_client/knowledgebase_comment.rb +32 -0
  14. data/lib/kayako_client/mixins/api.rb +14 -0
  15. data/lib/kayako_client/mixins/article_client.rb +76 -0
  16. data/lib/kayako_client/mixins/attachment.rb +16 -1
  17. data/lib/kayako_client/mixins/authentication.rb +14 -0
  18. data/lib/kayako_client/mixins/client.rb +300 -0
  19. data/lib/kayako_client/mixins/comment_object.rb +102 -0
  20. data/lib/kayako_client/mixins/convert_api.rb +39 -0
  21. data/lib/kayako_client/mixins/creator_api.rb +44 -0
  22. data/lib/kayako_client/mixins/knowledgebase_article_api.rb +69 -0
  23. data/lib/kayako_client/mixins/knowledgebase_category_client.rb +51 -0
  24. data/lib/kayako_client/mixins/logger.rb +14 -0
  25. data/lib/kayako_client/mixins/news_category_client.rb +51 -0
  26. data/lib/kayako_client/mixins/news_client.rb +51 -0
  27. data/lib/kayako_client/mixins/object.rb +24 -7
  28. data/lib/kayako_client/mixins/post_client.rb +14 -0
  29. data/lib/kayako_client/mixins/staff_visibility_api.rb +14 -0
  30. data/lib/kayako_client/mixins/ticket_api.rb +14 -0
  31. data/lib/kayako_client/mixins/ticket_client.rb +14 -0
  32. data/lib/kayako_client/mixins/troubleshooter_step_api.rb +69 -0
  33. data/lib/kayako_client/mixins/troubleshooter_step_client.rb +76 -0
  34. data/lib/kayako_client/mixins/user_visibility_api.rb +14 -0
  35. data/lib/kayako_client/news_category.rb +29 -0
  36. data/lib/kayako_client/news_comment.rb +32 -0
  37. data/lib/kayako_client/news_item.rb +81 -0
  38. data/lib/kayako_client/news_subscriber.rb +33 -0
  39. data/lib/kayako_client/staff.rb +14 -0
  40. data/lib/kayako_client/staff_group.rb +14 -0
  41. data/lib/kayako_client/ticket.rb +24 -1
  42. data/lib/kayako_client/ticket_attachment.rb +18 -0
  43. data/lib/kayako_client/ticket_count.rb +14 -0
  44. data/lib/kayako_client/ticket_custom_field.rb +14 -0
  45. data/lib/kayako_client/ticket_note.rb +14 -1
  46. data/lib/kayako_client/ticket_post.rb +15 -0
  47. data/lib/kayako_client/ticket_priority.rb +14 -0
  48. data/lib/kayako_client/ticket_status.rb +14 -0
  49. data/lib/kayako_client/ticket_time_track.rb +14 -0
  50. data/lib/kayako_client/ticket_type.rb +14 -0
  51. data/lib/kayako_client/troubleshooter_attachment.rb +68 -0
  52. data/lib/kayako_client/troubleshooter_category.rb +51 -0
  53. data/lib/kayako_client/troubleshooter_comment.rb +32 -0
  54. data/lib/kayako_client/troubleshooter_step.rb +100 -0
  55. data/lib/kayako_client/user.rb +42 -0
  56. data/lib/kayako_client/user_group.rb +14 -0
  57. data/lib/kayako_client/user_organization.rb +14 -0
  58. data/lib/kayako_client/xml/lib_xml.rb +14 -0
  59. data/lib/kayako_client/xml/rexml_document.rb +14 -0
  60. data/lib/kayako_client/xml/xml.rb +14 -0
  61. data/lib/kayako_client/xml/xml_backend.rb +14 -0
  62. data/test/test_attachment.rb +77 -0
  63. data/test/test_client.rb +191 -0
  64. data/test/test_configuration.rb +110 -0
  65. data/test/test_count.rb +162 -0
  66. data/test/test_custom_field.rb +86 -0
  67. data/test/test_department.rb +136 -0
  68. data/test/test_http.rb +34 -0
  69. data/test/test_knowledgebase.rb +155 -0
  70. data/test/test_news.rb +117 -0
  71. data/test/test_note.rb +64 -0
  72. data/test/test_post.rb +64 -0
  73. data/test/test_priority.rb +46 -0
  74. data/test/test_properties.rb +114 -0
  75. data/test/test_staff.rb +77 -0
  76. data/test/test_status.rb +52 -0
  77. data/test/test_ticket.rb +152 -0
  78. data/test/test_ticket_custom_field.rb +193 -0
  79. data/test/test_time_track.rb +68 -0
  80. data/test/test_troubleshooter.rb +106 -0
  81. data/test/test_type.rb +65 -0
  82. data/test/test_user.rb +95 -0
  83. data/test/test_xml.rb +183 -0
  84. metadata +89 -42
@@ -0,0 +1,106 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ require 'test/unit'
16
+ require 'kayako_client'
17
+
18
+ class TestTroubleshooter < Test::Unit::TestCase
19
+
20
+ def test_path
21
+ assert_equal KayakoClient::TroubleshooterAttachment.path, '/Troubleshooter/Attachment'
22
+ assert_equal KayakoClient::TroubleshooterCategory.path, '/Troubleshooter/Category'
23
+ assert_equal KayakoClient::TroubleshooterComment.path, '/Troubleshooter/Comment'
24
+ assert_equal KayakoClient::TroubleshooterStep.path, '/Troubleshooter/Step'
25
+ end
26
+
27
+ def test_step_api
28
+ assert_raise ArgumentError do
29
+ KayakoClient::TroubleshooterAttachment.all
30
+ end
31
+
32
+ assert_raise ArgumentError do
33
+ KayakoClient::TroubleshooterAttachment.get(1)
34
+ end
35
+
36
+ assert_raise ArgumentError do
37
+ KayakoClient::TroubleshooterAttachment.delete(1)
38
+ end
39
+
40
+ test = KayakoClient::TroubleshooterAttachment.new(
41
+ :id => 1
42
+ )
43
+ test.loaded!
44
+
45
+ assert_raise RuntimeError do
46
+ test.delete
47
+ end
48
+ end
49
+
50
+ def test_step
51
+ test = KayakoClient::TroubleshooterStep.new(
52
+ :parent_step_ids => [ 1 ],
53
+ :child_step_ids => [ 2 ]
54
+ )
55
+
56
+ assert test.respond_to?(:get_attachment)
57
+ assert test.respond_to?(:get_comment)
58
+
59
+ assert test.has_parent_steps?
60
+ assert test.in_step?(1)
61
+ assert !test.in_step?(2)
62
+
63
+ assert test.has_child_steps?
64
+ assert test.has_step?(2)
65
+ assert !test.has_step?(1)
66
+ end
67
+
68
+ def test_attachment
69
+ test = KayakoClient::TroubleshooterAttachment.new
70
+
71
+ assert test.respond_to?(:file=)
72
+ assert test.respond_to?(:file)
73
+
74
+ assert test.respond_to?(:troubleshooter_step_id)
75
+ assert test.respond_to?(:troubleshooter_step)
76
+ end
77
+
78
+ def test_category
79
+ assert KayakoClient::TroubleshooterCategory.included_modules.include?(KayakoClient::ConvertAPI)
80
+
81
+ test = KayakoClient::TroubleshooterCategory.new
82
+
83
+ test.respond_to?(:visible_to_user_group?)
84
+ test.respond_to?(:visible_to_staff_group?)
85
+ end
86
+
87
+ def test_comment
88
+ test = KayakoClient::TroubleshooterComment.new
89
+
90
+ assert test.respond_to?(:creator=)
91
+
92
+ assert test.respond_to?(:troubleshooter_step_id)
93
+ assert test.respond_to?(:troubleshooter_step)
94
+
95
+ assert_raise NotImplementedError do
96
+ test.put
97
+ end
98
+
99
+ assert test.respond_to?(:creator_type=)
100
+ assert test.respond_to?(:creator_id=)
101
+
102
+ assert test.respond_to?(:user_agent)
103
+ assert test.respond_to?(:referrer)
104
+ end
105
+
106
+ end
@@ -0,0 +1,65 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ require 'test/unit'
16
+ require 'kayako_client'
17
+
18
+ class TestType < Test::Unit::TestCase
19
+
20
+ def test_type_mixin
21
+ assert KayakoClient::TicketType.included_modules.include?(KayakoClient::UserVisibilityAPI)
22
+
23
+ test = KayakoClient::TicketType.new
24
+ assert test.respond_to?(:visible_to_user_group?)
25
+ assert test.respond_to?(:user_visibility_custom)
26
+ assert test.respond_to?(:user_group_ids)
27
+ end
28
+
29
+ def test_type_methods
30
+ test = KayakoClient::TicketType.new
31
+
32
+ assert_raise NotImplementedError do
33
+ test.put
34
+ end
35
+
36
+ assert_raise NotImplementedError do
37
+ test.post
38
+ end
39
+
40
+ assert_raise NotImplementedError do
41
+ test.delete
42
+ end
43
+ end
44
+
45
+ def test_type_constants
46
+ assert KayakoClient::TicketType::TYPE_TYPES.include?(:public)
47
+ assert KayakoClient::TicketType::TYPE_TYPES.include?(:private)
48
+ end
49
+
50
+ def test_type_visibility
51
+ test = KayakoClient::TicketType.new(
52
+ :uservisibilitycustom => true,
53
+ :usergroupid => [ 1, 2 ]
54
+ )
55
+
56
+ assert test.visible_to_user_group?(1)
57
+ assert !test.visible_to_user_group?(3)
58
+ end
59
+
60
+ def test_type_associates
61
+ test = KayakoClient::TicketType.new
62
+ test.respond_to?(:department)
63
+ end
64
+
65
+ end
@@ -0,0 +1,95 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ require 'test/unit'
16
+ require 'kayako_client'
17
+
18
+ class TestUser < Test::Unit::TestCase
19
+
20
+ def test_user_customs
21
+ assert_raise ArgumentError do
22
+ KayakoClient::User.all(0)
23
+ end
24
+
25
+ assert_raise ArgumentError do
26
+ KayakoClient::User.all(1, 0)
27
+ end
28
+
29
+ assert_raise ArgumentError do
30
+ KayakoClient::User.all(nil, 1)
31
+ end
32
+
33
+ assert_raise ArgumentError do
34
+ KayakoClient::User.all(0, 1)
35
+ end
36
+ end
37
+
38
+ def test_user_validate
39
+ test = KayakoClient::User.new(
40
+ :user_group_id => 1,
41
+ :user_role => :tester,
42
+ :salutation => 'Sir',
43
+ :full_name => 'Test',
44
+ :emails => 'test@test.com',
45
+ :password => 'test'
46
+ )
47
+
48
+ assert !test.save
49
+ assert test.errors.has_key?(:user_role)
50
+ assert test.errors.has_key?(:salutation)
51
+ end
52
+
53
+ def test_user_required
54
+ test = KayakoClient::User.new(
55
+ :full_name => 'Test',
56
+ :emails => 'test@test.com',
57
+ :password => 'test'
58
+ )
59
+ assert_raise ArgumentError do
60
+ test.save
61
+ end
62
+
63
+ test = KayakoClient::User.new(
64
+ :user_group_id => 1,
65
+ :emails => 'test@test.com',
66
+ :password => 'test'
67
+ )
68
+ assert_raise ArgumentError do
69
+ test.save
70
+ end
71
+
72
+ test = KayakoClient::User.new(
73
+ :user_group_id => 1,
74
+ :full_name => 'Test',
75
+ :password => 'test'
76
+ )
77
+ assert_raise ArgumentError do
78
+ test.save
79
+ end
80
+
81
+ test = KayakoClient::User.new(
82
+ :user_group_id => 1,
83
+ :full_name => 'Test',
84
+ :emails => 'test@test.com'
85
+ )
86
+ assert_raise ArgumentError do
87
+ test.save
88
+ end
89
+ end
90
+
91
+ def test_user_search
92
+ assert KayakoClient::User.respond_to?(:search)
93
+ end
94
+
95
+ end
@@ -0,0 +1,183 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ require 'test/unit'
16
+ require 'kayako_client'
17
+
18
+ class TestXML < Test::Unit::TestCase
19
+
20
+ PHP_ERROR = '<div style="BACKGROUND: #f8ebeb; FONT: 13px Trebuchet MS, Verdana, Helvetica, Arial; BORDER: 1px SOLID #751616; PADDING: 10px; MARGIN: 5px;">' +
21
+ '<font color="red">' +
22
+ '[Warning]: Missing argument 2 for Controller_TicketAttachment::Get() (api/class.Controller_TicketAttachment.php:172)' +
23
+ '</font>' +
24
+ '</div>'
25
+
26
+ def test_xml_php_error
27
+ xml = KayakoClient::REXMLDocument.new(PHP_ERROR)
28
+
29
+ assert xml.error?
30
+ assert_equal xml.error, '[Warning]: Missing argument 2 for Controller_TicketAttachment::Get() (api/class.Controller_TicketAttachment.php:172)'
31
+ assert_equal xml.count, 0
32
+ assert_nil xml.to_hash
33
+
34
+ xml = KayakoClient::LibXML.new(PHP_ERROR)
35
+
36
+ assert xml.error?
37
+ assert_equal xml.error, '[Warning]: Missing argument 2 for Controller_TicketAttachment::Get() (api/class.Controller_TicketAttachment.php:172)'
38
+ assert_equal xml.count, 0
39
+ assert_nil xml.to_hash
40
+ end
41
+
42
+ STAFF_GROUPS = '<?xml version="1.0" encoding="UTF-8"?>' +
43
+ '<staffgroups>' +
44
+ '<staffgroup>' +
45
+ '<id><![CDATA[1]]></id>' +
46
+ '<title><![CDATA[Administrators]]></title>' +
47
+ '<isadmin><![CDATA[1]]></isadmin>' +
48
+ '</staffgroup>' +
49
+ '<staffgroup>' +
50
+ '<id><![CDATA[2]]></id>' +
51
+ '<title><![CDATA[Employees]]></title>' +
52
+ '<isadmin><![CDATA[0]]></isadmin>' +
53
+ '</staffgroup>' +
54
+ '<staffgroup>' +
55
+ '<id><![CDATA[3]]></id>' +
56
+ '<title><![CDATA[Users]]></title>' +
57
+ '<isadmin><![CDATA[0]]></isadmin>' +
58
+ '</staffgroup>' +
59
+ '<staffgroup>' +
60
+ '<id><![CDATA[5]]></id>' +
61
+ '<title><![CDATA[Testers]]></title>' +
62
+ '<isadmin><![CDATA[0]]></isadmin>' +
63
+ '</staffgroup>' +
64
+ '</staffgroups>'
65
+
66
+ def test_xml_staff_groups
67
+ xml = KayakoClient::REXMLDocument.new(STAFF_GROUPS)
68
+ test = xml.to_hash
69
+
70
+ assert_equal xml.count, 4
71
+ assert_instance_of Array, test[:staffgroup]
72
+ assert_equal test[:staffgroup].size, 4
73
+ assert_instance_of Hash, test[:staffgroup].first
74
+ assert_equal test[:staffgroup].first[:id], 1.to_s
75
+ assert_equal test[:staffgroup].first[:title], 'Administrators'
76
+
77
+ xml = KayakoClient::LibXML.new(STAFF_GROUPS)
78
+ test = xml.to_hash
79
+
80
+ assert_equal xml.count, 4
81
+ assert_instance_of Array, test[:staffgroup]
82
+ assert_equal test[:staffgroup].size, 4
83
+ assert_instance_of Hash, test[:staffgroup].first
84
+ assert_equal test[:staffgroup].first[:id], 1.to_s
85
+ assert_equal test[:staffgroup].first[:title], 'Administrators'
86
+ end
87
+
88
+ TICKET_COUNT = '<?xml version="1.0" encoding="UTF-8"?>' +
89
+ '<ticketcount>' +
90
+ '<departments>' +
91
+ '<department id="3">' +
92
+ '<totalitems><![CDATA[5]]></totalitems>' +
93
+ '<lastactivity><![CDATA[1311888965]]></lastactivity>' +
94
+ '<totalunresolveditems><![CDATA[5]]></totalunresolveditems>' +
95
+ '<ticketstatus id="1" lastactivity="1311888965" totalitems="5" />' +
96
+ '<tickettype id="0" lastactivity="1311888965" totalitems="5" totalunresolveditems="5" />' +
97
+ '<ownerstaff id="0" lastactivity="1311888396" totalitems="1" totalunresolveditems="1" />' +
98
+ '<ownerstaff id="1" lastactivity="1311887337" totalitems="2" totalunresolveditems="2" />' +
99
+ '<ownerstaff id="3" lastactivity="1311888965" totalitems="2" totalunresolveditems="2" />' +
100
+ '</department>' +
101
+ '<department id="5">' +
102
+ '<totalitems><![CDATA[1]]></totalitems>' +
103
+ '<lastactivity><![CDATA[1313153933]]></lastactivity>' +
104
+ '<totalunresolveditems><![CDATA[1]]></totalunresolveditems>' +
105
+ '<ticketstatus id="1" lastactivity="1313153933" totalitems="1" />' +
106
+ '<tickettype id="0" lastactivity="1313153933" totalitems="1" totalunresolveditems="1" />' +
107
+ '<ownerstaff id="3" lastactivity="1313153933" totalitems="1" totalunresolveditems="1" />' +
108
+ '</department>' +
109
+ '</departments>' +
110
+ '<!-- Ticket Count grouped by Status -->' +
111
+ '<statuses>' +
112
+ '<ticketstatus id="1" lastactivity="1313153933" totalitems="6" />' +
113
+ '</statuses>' +
114
+ '<!-- Ticket Count grouped by Owner Staff -->' +
115
+ '<owners>' +
116
+ '<ownerstaff id="0" lastactivity="1311888396" totalitems="1" totalunresolveditems="1" />' +
117
+ '<ownerstaff id="1" lastactivity="1311887337" totalitems="2" totalunresolveditems="2" />' +
118
+ '<ownerstaff id="3" lastactivity="1311888965" totalitems="2" totalunresolveditems="2" />' +
119
+ '</owners>' +
120
+ '<!-- Unassigned Ticket Count grouped by Department -->' +
121
+ '<unassigned>' +
122
+ '<department id="1" lastactivity="1311888396" totalitems="1" totalunresolveditems="1" />' +
123
+ '<department id="2" lastactivity="1311888396" totalitems="1" totalunresolveditems="1" />' +
124
+ '<department id="4" lastactivity="1311888396" totalitems="1" totalunresolveditems="1" />' +
125
+ '<department id="3" lastactivity="1311888396" totalitems="1" totalunresolveditems="1" />' +
126
+ '</unassigned>' +
127
+ '</ticketcount>'
128
+
129
+ def test_xml_ticket_count
130
+ xml = KayakoClient::REXMLDocument.new(TICKET_COUNT)
131
+ test = xml.to_hash
132
+
133
+ assert test.has_key?(:departments)
134
+ assert test.has_key?(:statuses)
135
+ assert test.has_key?(:owners)
136
+ assert test.has_key?(:unassigned)
137
+
138
+ assert_equal test[:departments].size, 1
139
+ assert_equal test[:statuses].size, 1
140
+ assert_equal test[:owners].size, 1
141
+ assert_equal test[:unassigned].size, 1
142
+
143
+ assert_instance_of Array, test[:departments][:department]
144
+ assert_instance_of Hash, test[:statuses][:ticketstatus]
145
+ assert_instance_of Array, test[:owners][:ownerstaff]
146
+ assert_instance_of Array, test[:unassigned][:department]
147
+
148
+ assert_equal test[:departments][:department].size, 2
149
+ assert_equal test[:owners][:ownerstaff].size, 3
150
+ assert_equal test[:unassigned][:department].size, 4
151
+
152
+ assert_equal test[:departments][:department][0][:id], 3.to_s
153
+ assert_equal test[:owners][:ownerstaff][1][:id], 1.to_s
154
+ assert_equal test[:unassigned][:department][2][:id], 4.to_s
155
+
156
+ xml = KayakoClient::LibXML.new(TICKET_COUNT)
157
+ test = xml.to_hash
158
+
159
+ assert test.has_key?(:departments)
160
+ assert test.has_key?(:statuses)
161
+ assert test.has_key?(:owners)
162
+ assert test.has_key?(:unassigned)
163
+
164
+ assert_equal test[:departments].size, 1
165
+ assert_equal test[:statuses].size, 1
166
+ assert_equal test[:owners].size, 1
167
+ assert_equal test[:unassigned].size, 1
168
+
169
+ assert_instance_of Array, test[:departments][:department]
170
+ assert_instance_of Hash, test[:statuses][:ticketstatus]
171
+ assert_instance_of Array, test[:owners][:ownerstaff]
172
+ assert_instance_of Array, test[:unassigned][:department]
173
+
174
+ assert_equal test[:departments][:department].size, 2
175
+ assert_equal test[:owners][:ownerstaff].size, 3
176
+ assert_equal test[:unassigned][:department].size, 4
177
+
178
+ assert_equal test[:departments][:department][0][:id], 3.to_s
179
+ assert_equal test[:owners][:ownerstaff][1][:id], 1.to_s
180
+ assert_equal test[:unassigned][:department][2][:id], 4.to_s
181
+ end
182
+
183
+ end