zendesk_api 0.1.11 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +1 -3
  3. data/Gemfile +24 -0
  4. data/Gemfile.lock +75 -10
  5. data/Procfile +1 -0
  6. data/Rakefile +10 -3
  7. data/Readme.md +65 -0
  8. data/bin/zendesk +26 -0
  9. data/config.ru +6 -0
  10. data/config/mongoid.yml +81 -0
  11. data/lib/zendesk_api/actions.rb +2 -2
  12. data/lib/zendesk_api/collection.rb +15 -4
  13. data/lib/zendesk_api/console/base.rb +12 -0
  14. data/lib/zendesk_api/console/console.rb +144 -0
  15. data/lib/zendesk_api/console/extensions.rb +183 -0
  16. data/lib/zendesk_api/console/options.rb +41 -0
  17. data/lib/zendesk_api/resource.rb +12 -1
  18. data/lib/zendesk_api/resources.rb +28 -8
  19. data/lib/zendesk_api/server/base.rb +119 -0
  20. data/lib/zendesk_api/server/docs/account_settings.md +145 -0
  21. data/lib/zendesk_api/server/docs/activity_stream.md +121 -0
  22. data/lib/zendesk_api/server/docs/attachments.md +73 -0
  23. data/lib/zendesk_api/server/docs/autocomplete.md +29 -0
  24. data/lib/zendesk_api/server/docs/categories.md +193 -0
  25. data/lib/zendesk_api/server/docs/custom_roles.md +88 -0
  26. data/lib/zendesk_api/server/docs/forum_subscriptions.md +139 -0
  27. data/lib/zendesk_api/server/docs/forums.md +229 -0
  28. data/lib/zendesk_api/server/docs/group_memberships.md +229 -0
  29. data/lib/zendesk_api/server/docs/groups.md +212 -0
  30. data/lib/zendesk_api/server/docs/introduction.md +159 -0
  31. data/lib/zendesk_api/server/docs/job_statuses.md +86 -0
  32. data/lib/zendesk_api/server/docs/locales.md +124 -0
  33. data/lib/zendesk_api/server/docs/macros.md +287 -0
  34. data/lib/zendesk_api/server/docs/organizations.md +253 -0
  35. data/lib/zendesk_api/server/docs/problems.md +117 -0
  36. data/lib/zendesk_api/server/docs/requests.md +256 -0
  37. data/lib/zendesk_api/server/docs/satisfaction_ratings.md +136 -0
  38. data/lib/zendesk_api/server/docs/search.md +106 -0
  39. data/lib/zendesk_api/server/docs/sharing_agreements.md +57 -0
  40. data/lib/zendesk_api/server/docs/side_loading.md +125 -0
  41. data/lib/zendesk_api/server/docs/suspended_tickets.md +182 -0
  42. data/lib/zendesk_api/server/docs/tags.md +36 -0
  43. data/lib/zendesk_api/server/docs/ticket_audits.md +657 -0
  44. data/lib/zendesk_api/server/docs/ticket_export.md +121 -0
  45. data/lib/zendesk_api/server/docs/ticket_fields.md +277 -0
  46. data/lib/zendesk_api/server/docs/ticket_import.md +65 -0
  47. data/lib/zendesk_api/server/docs/ticket_metrics.md +125 -0
  48. data/lib/zendesk_api/server/docs/tickets.md +622 -0
  49. data/lib/zendesk_api/server/docs/topic_comments.md +221 -0
  50. data/lib/zendesk_api/server/docs/topic_subscriptions.md +140 -0
  51. data/lib/zendesk_api/server/docs/topic_votes.md +154 -0
  52. data/lib/zendesk_api/server/docs/topics.md +335 -0
  53. data/lib/zendesk_api/server/docs/triggers.md +199 -0
  54. data/lib/zendesk_api/server/docs/user_identities.md +279 -0
  55. data/lib/zendesk_api/server/docs/users.md +400 -0
  56. data/lib/zendesk_api/server/docs/views.md +505 -0
  57. data/lib/zendesk_api/server/helper.rb +104 -0
  58. data/lib/zendesk_api/server/html_renderer.rb +98 -0
  59. data/lib/zendesk_api/server/models/user_request.rb +16 -0
  60. data/lib/zendesk_api/server/models/zlib_json.rb +13 -0
  61. data/lib/zendesk_api/server/public/config.rb +26 -0
  62. data/lib/zendesk_api/server/public/favicon.ico +0 -0
  63. data/lib/zendesk_api/server/public/images/glyphicons-halflings-white.png +0 -0
  64. data/lib/zendesk_api/server/public/images/glyphicons-halflings.png +0 -0
  65. data/lib/zendesk_api/server/public/images/spinner.gif +0 -0
  66. data/lib/zendesk_api/server/public/images/zendesk_developers_bg.png +0 -0
  67. data/lib/zendesk_api/server/public/images/zendesk_developers_header.png +0 -0
  68. data/lib/zendesk_api/server/public/javascripts/application.js +186 -0
  69. data/lib/zendesk_api/server/public/javascripts/bootstrap-alert.js +90 -0
  70. data/lib/zendesk_api/server/public/javascripts/bootstrap-button.js +96 -0
  71. data/lib/zendesk_api/server/public/javascripts/bootstrap-carousel.js +169 -0
  72. data/lib/zendesk_api/server/public/javascripts/bootstrap-collapse.js +157 -0
  73. data/lib/zendesk_api/server/public/javascripts/bootstrap-dropdown.js +100 -0
  74. data/lib/zendesk_api/server/public/javascripts/bootstrap-modal.js +218 -0
  75. data/lib/zendesk_api/server/public/javascripts/bootstrap-popover.js +98 -0
  76. data/lib/zendesk_api/server/public/javascripts/bootstrap-scrollspy.js +151 -0
  77. data/lib/zendesk_api/server/public/javascripts/bootstrap-tab.js +135 -0
  78. data/lib/zendesk_api/server/public/javascripts/bootstrap-tooltip.js +275 -0
  79. data/lib/zendesk_api/server/public/javascripts/bootstrap-transition.js +61 -0
  80. data/lib/zendesk_api/server/public/javascripts/bootstrap-typeahead.js +285 -0
  81. data/lib/zendesk_api/server/public/sass/screen.scss +102 -0
  82. data/lib/zendesk_api/server/public/sass/styles.scss +5 -0
  83. data/lib/zendesk_api/server/public/stylesheets/developer.screen.css +836 -0
  84. data/lib/zendesk_api/server/public/stylesheets/screen.css +129 -0
  85. data/lib/zendesk_api/server/public/stylesheets/styles.css +6208 -0
  86. data/lib/zendesk_api/server/templates/footer.haml +13 -0
  87. data/lib/zendesk_api/server/templates/header.haml +20 -0
  88. data/lib/zendesk_api/server/templates/index.haml +68 -0
  89. data/lib/zendesk_api/server/templates/layout.haml +44 -0
  90. data/lib/zendesk_api/server/templates/param.haml +4 -0
  91. data/lib/zendesk_api/server/templates/search.haml +23 -0
  92. data/lib/zendesk_api/server/templates/sidebar.haml +7 -0
  93. data/lib/zendesk_api/version.rb +1 -1
  94. data/spec/{association_spec.rb → core/association_spec.rb} +1 -1
  95. data/spec/{client_spec.rb → core/client_spec.rb} +1 -1
  96. data/spec/{collection_spec.rb → core/collection_spec.rb} +1 -1
  97. data/spec/{configuration_spec.rb → core/configuration_spec.rb} +1 -1
  98. data/spec/{create_resource_spec.rb → core/create_resource_spec.rb} +1 -1
  99. data/spec/{data_resource_spec.rb → core/data_resource_spec.rb} +1 -1
  100. data/spec/{inflection_spec.rb → core/inflection_spec.rb} +1 -1
  101. data/spec/{lru_cache_spec.rb → core/lru_cache_spec.rb} +1 -1
  102. data/spec/{middleware → core/middleware}/request/etag_cache_spec.rb +1 -1
  103. data/spec/{middleware → core/middleware}/request/retry_spec.rb +1 -1
  104. data/spec/{middleware → core/middleware}/request/test.jpg +0 -0
  105. data/spec/{middleware → core/middleware}/request/upload_spec.rb +1 -1
  106. data/spec/{middleware → core/middleware}/response/callback_spec.rb +1 -1
  107. data/spec/{middleware → core/middleware}/response/deflate_spec.rb +1 -1
  108. data/spec/{middleware → core/middleware}/response/gzip_spec.rb +1 -1
  109. data/spec/{middleware → core/middleware}/response/parse_iso_dates_spec.rb +1 -1
  110. data/spec/{read_resource_spec.rb → core/read_resource_spec.rb} +1 -1
  111. data/spec/{rescue_spec.rb → core/rescue_spec.rb} +1 -1
  112. data/spec/{resource_spec.rb → core/resource_spec.rb} +1 -1
  113. data/spec/{search_spec.rb → core/search_spec.rb} +1 -1
  114. data/spec/{spec_helper.rb → core/spec_helper.rb} +5 -5
  115. data/spec/{trackie_spec.rb → core/trackie_spec.rb} +1 -1
  116. data/{live → spec/live}/Readme.md +0 -0
  117. data/{live → spec/live}/activity_spec.rb +1 -1
  118. data/{live → spec/live}/audit_spec.rb +1 -1
  119. data/{live → spec/live}/bookmark_spec.rb +1 -1
  120. data/{live → spec/live}/category_spec.rb +1 -1
  121. data/{live → spec/live}/collection_spec.rb +1 -1
  122. data/{live → spec/live}/crm_spec.rb +1 -1
  123. data/{live → spec/live}/custom_role_spec.rb +1 -1
  124. data/{live → spec/live}/forum_spec.rb +1 -1
  125. data/{live → spec/live}/forum_subscription_spec.rb +1 -1
  126. data/{live → spec/live}/group_membership_spec.rb +1 -1
  127. data/{live → spec/live}/group_spec.rb +1 -1
  128. data/{live → spec/live}/identity_spec.rb +1 -1
  129. data/{live → spec/live}/locale_spec.rb +1 -1
  130. data/{live → spec/live}/macro_spec.rb +1 -1
  131. data/{live → spec/live}/mobile_device_spec.rb +1 -1
  132. data/{live → spec/live}/organization_spec.rb +1 -1
  133. data/{live → spec/live}/request_spec.rb +1 -1
  134. data/{live → spec/live}/satisfaction_rating_spec.rb +1 -1
  135. data/{live → spec/live}/setting_spec.rb +1 -1
  136. data/{live → spec/live}/suspended_ticket_spec.rb +1 -1
  137. data/{live → spec/live}/ticket_field_spec.rb +1 -1
  138. data/{live → spec/live}/ticket_metrics_spec.rb +1 -1
  139. data/{live → spec/live}/ticket_spec.rb +1 -1
  140. data/spec/live/topic_comment_spec.rb +24 -0
  141. data/{live → spec/live}/topic_spec.rb +1 -1
  142. data/{live → spec/live}/topic_subscription_spec.rb +1 -1
  143. data/{live → spec/live}/topic_vote_spec.rb +1 -1
  144. data/{live → spec/live}/upload_spec.rb +1 -1
  145. data/{live → spec/live}/user_spec.rb +1 -1
  146. data/{live → spec/live}/view_spec.rb +1 -1
  147. data/spec/macros/resource_macros.rb +1 -1
  148. data/spec/server/app_spec.rb +140 -0
  149. data/spec/server/helper_spec.rb +97 -0
  150. data/spec/server/html_renderer_spec.rb +130 -0
  151. data/spec/server/spec_helper.rb +43 -0
  152. metadata +198 -77
  153. data/live/topic_comment_spec.rb +0 -13
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Group, :delete_after do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::User::Identity, :delete_after do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Locale do
4
4
  use_vcr_cassette
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Macro do
4
4
  it_should_be_readable :macros
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::MobileDevice do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Organization, :delete_after do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Request do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::SatisfactionRating do
4
4
  it_should_be_readable :satisfaction_ratings
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Setting do
4
4
  it_should_be_readable :settings, :path => 'account/settings'
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::SuspendedTicket do
4
4
  it_should_be_readable :suspended_tickets
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::TicketField, :delete_after do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::TicketMetric do
4
4
  it_should_be_readable :ticket_metrics
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Ticket do
4
4
  def valid_attributes
@@ -0,0 +1,24 @@
1
+ require 'core/spec_helper'
2
+
3
+ describe ZendeskAPI::Topic::TopicComment do
4
+ def valid_attributes
5
+ { :body => "Texty-text, text." }
6
+ end
7
+
8
+ under topic do
9
+ it_should_be_creatable
10
+ it_should_be_updatable :body
11
+ it_should_be_deletable
12
+ it_should_be_readable topic, :comments
13
+ end
14
+ end
15
+
16
+ describe ZendeskAPI::User::TopicComment do
17
+ def valid_attributes
18
+ { :body => "Texty-text, text."}
19
+ end
20
+
21
+ under current_user do
22
+ it_should_be_readable current_user, :topic_comments
23
+ end
24
+ end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Topic do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::TopicSubscription, :delete_after do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Topic::TopicVote, :delete_after do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Upload, :not_findable do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::User, :delete_after do
4
4
  def valid_attributes
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::View do
4
4
  it_should_be_readable :views
@@ -149,7 +149,7 @@ module ResourceMacros
149
149
  if described_class.respond_to?(:find) && !example.metadata[:not_findable]
150
150
  options = default_options
151
151
  options.merge!(:id => object.id) unless described_class.ancestors.include?(ZendeskAPI::SingularResource)
152
- described_class.find(client, options).should_not be_nil
152
+ described_class.find(client, options).should_not be_nil
153
153
  end
154
154
  end
155
155
  end
@@ -0,0 +1,140 @@
1
+ require 'server/spec_helper'
2
+
3
+ describe ZendeskAPI::Server::App do
4
+ context "configuration" do
5
+ subject { described_class.settings }
6
+
7
+ context "documentation" do
8
+ # TODO
9
+ end
10
+ end
11
+
12
+ context "a GET to /" do
13
+ before { get '/' }
14
+
15
+ it "should respond ok" do
16
+ last_response.status.should == 200
17
+ end
18
+ end
19
+
20
+ context "a GET to /:object_id" do
21
+ context "with a stored object" do
22
+ subject do
23
+ ZendeskAPI::Server::UserRequest.create(
24
+ :username => "test",
25
+ :method => :post,
26
+ :url => "http://my.url.com",
27
+ :json => '{"hello": "goodbye"}',
28
+ :url_params => [{ :name => :a, :value => :b }],
29
+ :request => {}, # TODO
30
+ :response => {}
31
+ )
32
+ end
33
+
34
+ before { get "/#{subject._id}" }
35
+
36
+ it "should respond ok" do
37
+ last_response.status.should == 200
38
+ end
39
+
40
+ it "should fill in url field" do
41
+ last_response.body.should include "value='http://my.url.com'"
42
+ end
43
+
44
+ it "should fill in json field" do
45
+ last_response.body.should include subject.json
46
+ end
47
+
48
+ it "should select the proper method" do
49
+ last_response.body.should include "selected value='POST'"
50
+ end
51
+
52
+ it "should add url param" do
53
+ last_response.body.should include "value='a'"
54
+ last_response.body.should include "value='b'"
55
+ end
56
+ end
57
+
58
+ context "with no object" do
59
+ before { get '/1234567876543' }
60
+
61
+ it "should respond ok" do
62
+ last_response.status.should == 200
63
+ end
64
+ end
65
+ end
66
+
67
+ context "a POST to /" do
68
+ context "valid" do
69
+ before do
70
+ stub_json_request(:put, "https://me:2@smersh.zendesk.com/api/v2/users.json?id=1").with(:body => '{"hello":1}')
71
+
72
+ post '/', :method => "PUT", :url => "https://smersh.zendesk.com/api/v2/users.json",
73
+ :params => [{ "name" => "id", "value" => "1" }, {}], :json => '{"hello":1}',
74
+ :username => "me", :password => "2"
75
+ end
76
+
77
+ it "should return ok" do
78
+ last_response.status.should == 200
79
+ end
80
+
81
+ context "user request" do
82
+ it "should not save authorization data" do
83
+ user_request = ZendeskAPI::Server::UserRequest.last
84
+ user_request.request[:request_headers]["Authorization"].should be_nil
85
+ end
86
+ end
87
+ end
88
+
89
+ context "invalid url" do
90
+ before do
91
+ post '/', :url => "http://nowheresville.com", :method => "PUT"
92
+ end
93
+
94
+ it "should set the error" do
95
+ last_response.body.should =~ /valid URL/
96
+ end
97
+ end
98
+
99
+ context "invalid" do
100
+ before do
101
+ @user_requests = ZendeskAPI::Server::UserRequest.count
102
+
103
+ post '/', :method => "OMG", :url => "https://nowheresville.com",
104
+ :params => [{ "name" => "", "value" => "11243" }, {}], :json => '{"hello":1}',
105
+ :username => "me", :password => "2"
106
+ end
107
+
108
+ it "should not save user request" do
109
+ ZendeskAPI::Server::UserRequest.count.should == @user_requests
110
+ end
111
+
112
+ it "should return ok" do
113
+ last_response.status.should == 200
114
+ end
115
+ end
116
+ end
117
+
118
+ context "a POST to /search" do
119
+ subject do
120
+ post '/search', :query => query
121
+ last_response.body
122
+ end
123
+
124
+ context "valid documentation" do
125
+ let(:query) { "users" }
126
+
127
+ it "should return the correct documentation" do
128
+ should == described_class.settings.documentation["users"][:body]
129
+ end
130
+ end
131
+
132
+ context "invalid query" do
133
+ let(:query) { "omgnotreal" }
134
+
135
+ it "should return the introduction" do
136
+ should == described_class.settings.help
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,97 @@
1
+ require 'server/spec_helper'
2
+
3
+ describe ZendeskAPI::Server::Helper do
4
+ subject do
5
+ Class.new do
6
+ include ZendeskAPI::Server::Helper
7
+ def params; @params ||= {}; end
8
+ end.new
9
+ end
10
+
11
+ context "coerce path" do
12
+ let(:coerced) do
13
+ subject.coerce_path(path)
14
+ end
15
+
16
+ context "with no protocol" do
17
+ let(:path) { "smersh.zendesk.com/api/v2/users" }
18
+
19
+ it "should be assumed as https" do
20
+ coerced.should == "users"
21
+ subject.params["url"].should == "https://smersh.zendesk.com/api/v2"
22
+ end
23
+ end
24
+
25
+ context "with no .zendesk.com" do
26
+ let(:path) { "smersh/api/v2/users" }
27
+
28
+ it "should fill in https and .zendesk.com" do
29
+ coerced.should == "users"
30
+ subject.params["url"].should == "https://smersh.zendesk.com/api/v2"
31
+ end
32
+ end
33
+
34
+ context "with no .zendesk.com and no /api/v2" do
35
+ let(:path) { "smersh/users" }
36
+
37
+ it "should fill in https and .zendesk.com" do
38
+ coerced.should == "users"
39
+ subject.params["url"].should == "https://smersh.zendesk.com/api/v2"
40
+ end
41
+ end
42
+
43
+ context "with an https url" do
44
+ let(:path) { "https://smersh.zendesk.com/api/v2/users" }
45
+
46
+ it "should not change anything" do
47
+ coerced.should == "users"
48
+ subject.params["url"].should == "https://smersh.zendesk.com/api/v2"
49
+ end
50
+ end
51
+
52
+ context "with an http url" do
53
+ let(:path) { "http://smersh.zendesk.com/api/v2/users" }
54
+
55
+ it "should set the error" do
56
+ coerced.should == path
57
+ subject.instance_variable_get(:@error).should_not be_nil
58
+ end
59
+ end
60
+ end
61
+
62
+ context "execute request" do
63
+ before do
64
+ subject.params.merge!(:username => "me", :password => "2", :url => "https://somewhere.com")
65
+ end
66
+
67
+ it "should return error if invalid method" do
68
+ subject.instance_variable_set(:@method, "BLARGHL")
69
+ subject.execute_request
70
+ subject.instance_variable_get(:@error).should_not be_nil
71
+ end
72
+
73
+ context "valid request" do
74
+ end
75
+ end
76
+
77
+ context "map headers" do
78
+ it "should combine headers" do
79
+ subject.map_headers("accept-encoding" => "true", "hello" => "123").should ==
80
+ "Accept-Encoding: true\nHello: 123"
81
+ end
82
+ end
83
+
84
+ context "client" do
85
+ it "should set configuration options" do
86
+ subject.client(:username => "me", :password => "2", :url => "https://somewhere").should_not be_nil
87
+ end
88
+
89
+ it "should not allow http in production" do
90
+ app.stub(:development? => false)
91
+
92
+ expect do
93
+ subject.client(:url => "somewhere")
94
+ end.to raise_error ArgumentError
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,130 @@
1
+ require 'server/spec_helper'
2
+
3
+ describe ZendeskAPI::Server::HtmlRenderer do
4
+ context "header" do
5
+ subject { described_class.render(markdown) }
6
+
7
+ before(:each) do
8
+ described_class.instance_variable_set(:@markdown, nil)
9
+ end
10
+
11
+ context "h2" do
12
+ let(:markdown) { "## Hello" }
13
+ let(:id) { described_class.generate_id("Hello") }
14
+
15
+ it "should add icons" do
16
+ subject.should =~ /icon-plus/
17
+ subject.should =~ /icon-minus/
18
+ end
19
+
20
+ it "should generate an id" do
21
+ subject.should =~ /h2 id="#{id}"/
22
+ end
23
+
24
+ it "should add the id to the headers" do
25
+ subject # Render
26
+
27
+ described_class.markdown.renderer.headers.should include id
28
+ end
29
+ end
30
+
31
+ context "h3" do
32
+ let(:markdown) { "### Hello" }
33
+ let(:id) { described_class.generate_id("Hello") }
34
+
35
+ it "should add icons" do
36
+ subject.should =~ /icon-plus/
37
+ subject.should =~ /icon-minus/
38
+ end
39
+
40
+ it "should generate an id" do
41
+ subject.should =~ /h3 id="#{described_class.generate_id(id)}"/
42
+ end
43
+
44
+ it "should add the id to the headers" do
45
+ subject # Render
46
+
47
+ described_class.markdown.renderer.headers.should include id
48
+ end
49
+ end
50
+
51
+ context "h1" do
52
+ let(:markdown) { "# Hello" }
53
+ let(:id) { described_class.generate_id("Hello") }
54
+
55
+ it "should not add icons" do
56
+ subject.should_not =~ /icon-plus/
57
+ subject.should_not =~ /icon-minus/
58
+ end
59
+
60
+ it "should generate an id" do
61
+ subject.should =~ /h1 id="#{described_class.generate_id(id)}"/
62
+ end
63
+
64
+ it "should not add the id to the headers" do
65
+ subject # Render
66
+
67
+ described_class.markdown.renderer.headers.should_not include id
68
+ end
69
+ end
70
+ end
71
+
72
+ context "code" do
73
+ subject { described_class.render(markdown) }
74
+
75
+ context "curl" do
76
+ let(:markdown) do
77
+ <<-END
78
+ ```bash
79
+ curl -v -u someone@something.com https://{subdomain}.zendesk.com/api/v2/my_path.json?id={blah} \
80
+ -d '{"hello": {"goodbye": "see you later"}}' -X PUT
81
+ ```
82
+ END
83
+ end
84
+
85
+ it "should have a button" do
86
+ subject.should =~ %r{<button.*</button>}m
87
+ end
88
+
89
+ it "should have a pre" do
90
+ subject.should =~ %r{<pre (.*)>curl .*</pre>}m
91
+ end
92
+
93
+ context "pre modifiers" do
94
+ let(:modifiers) do
95
+ subject =~ %r{<pre (.*)>curl .*</pre>}m && $1
96
+ end
97
+
98
+ it "should have a class" do
99
+ modifiers.should include "class='example'"
100
+ end
101
+
102
+ it "should have a data-url" do
103
+ modifiers.should include "data-url='https://{subdomain}.zendesk.com/api/v2/my_path.json?id={blah}'"
104
+ end
105
+
106
+ it "should have a data-json" do
107
+ modifiers.should include "data-json='{\"hello\": {\"goodbye\": \"see you later\"}}'"
108
+ end
109
+
110
+ it "should have a data-method" do
111
+ modifiers.should include "data-method='PUT'"
112
+ end
113
+ end
114
+ end
115
+
116
+ context "other" do
117
+ let(:markdown) do
118
+ <<-END
119
+ ```json
120
+ { "hello": "goodbye" }
121
+ ```
122
+ END
123
+ end
124
+
125
+ it "should be wrapped in a pre" do
126
+ subject.should =~ %r{^<pre>.*</pre>$}m
127
+ end
128
+ end
129
+ end
130
+ end