slack-ruby-client 2.3.0 → 2.5.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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +22 -12
  3. data/.github/workflows/update_api.yml +1 -1
  4. data/.gitignore +1 -0
  5. data/.rubocop_todo.yml +43 -13
  6. data/CHANGELOG.md +19 -0
  7. data/CONTRIBUTING.md +7 -7
  8. data/Gemfile +1 -0
  9. data/README.md +68 -25
  10. data/bin/commands/admin_conversations.rb +21 -0
  11. data/bin/commands/admin_emoji.rb +1 -1
  12. data/bin/commands/admin_users.rb +4 -4
  13. data/bin/commands/admin_users_session.rb +1 -1
  14. data/bin/commands/admin_workflows.rb +6 -2
  15. data/bin/commands/admin_workflows_triggers_types_permissions.rb +31 -0
  16. data/bin/commands/apps_datastore.rb +46 -0
  17. data/bin/commands/assistant_threads.rb +45 -0
  18. data/bin/commands/bookmarks.rb +1 -0
  19. data/bin/commands/canvases.rb +40 -0
  20. data/bin/commands/canvases_access.rb +34 -0
  21. data/bin/commands/canvases_sections.rb +21 -0
  22. data/bin/commands/chat.rb +7 -3
  23. data/bin/commands/conversations.rb +6 -6
  24. data/bin/commands/conversations_canvases.rb +21 -0
  25. data/bin/commands/conversations_externalInvitePermissions.rb +22 -0
  26. data/bin/commands/conversations_requestSharedInvite.rb +48 -0
  27. data/bin/commands/files.rb +2 -1
  28. data/bin/commands/functions_distributions_permissions.rb +59 -0
  29. data/bin/commands/oauth.rb +2 -2
  30. data/bin/commands/oauth_v2.rb +2 -2
  31. data/bin/commands/reminders.rb +1 -1
  32. data/bin/commands/team_externalTeams.rb +35 -0
  33. data/bin/commands/usergroups.rb +5 -0
  34. data/bin/commands/usergroups_users.rb +2 -0
  35. data/bin/commands/users_discoverableContacts.rb +20 -0
  36. data/bin/commands/workflows_triggers_permissions.rb +60 -0
  37. data/examples/files_upload_v2/.env.example +1 -0
  38. data/examples/files_upload_v2/Gemfile +5 -0
  39. data/examples/files_upload_v2/README.md +13 -0
  40. data/examples/files_upload_v2/files_upload_v2.rb +37 -0
  41. data/examples/oauth_v2/.env.example +4 -0
  42. data/examples/oauth_v2/Gemfile +7 -0
  43. data/examples/oauth_v2/README.md +33 -0
  44. data/examples/oauth_v2/oauth_v2.rb +60 -0
  45. data/lib/slack/messages/formatting.rb +13 -0
  46. data/lib/slack/version.rb +1 -1
  47. data/lib/slack/web/api/endpoints/admin_conversations.rb +35 -0
  48. data/lib/slack/web/api/endpoints/admin_emoji.rb +1 -1
  49. data/lib/slack/web/api/endpoints/admin_users.rb +2 -2
  50. data/lib/slack/web/api/endpoints/admin_users_session.rb +2 -3
  51. data/lib/slack/web/api/endpoints/admin_workflows.rb +10 -2
  52. data/lib/slack/web/api/endpoints/admin_workflows_triggers_types_permissions.rb +41 -0
  53. data/lib/slack/web/api/endpoints/apps_datastore.rb +71 -0
  54. data/lib/slack/web/api/endpoints/assistant_threads.rb +68 -0
  55. data/lib/slack/web/api/endpoints/bookmarks.rb +2 -0
  56. data/lib/slack/web/api/endpoints/canvases.rb +52 -0
  57. data/lib/slack/web/api/endpoints/canvases_access.rb +47 -0
  58. data/lib/slack/web/api/endpoints/canvases_sections.rb +27 -0
  59. data/lib/slack/web/api/endpoints/chat.rb +12 -3
  60. data/lib/slack/web/api/endpoints/conversations.rb +5 -5
  61. data/lib/slack/web/api/endpoints/conversations_canvases.rb +26 -0
  62. data/lib/slack/web/api/endpoints/conversations_externalInvitePermissions.rb +31 -0
  63. data/lib/slack/web/api/endpoints/conversations_requestSharedInvite.rb +73 -0
  64. data/lib/slack/web/api/endpoints/dnd.rb +1 -0
  65. data/lib/slack/web/api/endpoints/files.rb +3 -1
  66. data/lib/slack/web/api/endpoints/functions_distributions_permissions.rb +80 -0
  67. data/lib/slack/web/api/endpoints/oauth.rb +2 -2
  68. data/lib/slack/web/api/endpoints/oauth_v2.rb +2 -2
  69. data/lib/slack/web/api/endpoints/reminders.rb +1 -1
  70. data/lib/slack/web/api/endpoints/team_externalTeams.rb +53 -0
  71. data/lib/slack/web/api/endpoints/usergroups.rb +10 -0
  72. data/lib/slack/web/api/endpoints/usergroups_users.rb +4 -0
  73. data/lib/slack/web/api/endpoints/users_discoverableContacts.rb +24 -0
  74. data/lib/slack/web/api/endpoints/workflows_triggers_permissions.rb +87 -0
  75. data/lib/slack/web/api/endpoints.rb +24 -0
  76. data/lib/slack/web/api/errors.rb +118 -8
  77. data/lib/slack/web/api/helpers/files.rb +87 -0
  78. data/lib/slack/web/api/helpers.rb +13 -0
  79. data/lib/slack/web/api/templates/method.erb +1 -0
  80. data/lib/slack/web/api/templates/method_spec.erb +6 -4
  81. data/lib/slack/web/client.rb +1 -0
  82. data/lib/slack/web/faraday/connection.rb +13 -26
  83. data/lib/slack/web/faraday/options.rb +24 -0
  84. data/lib/slack/web/faraday/request.rb +2 -1
  85. data/lib/slack-ruby-client.rb +2 -0
  86. data/slack-ruby-client.gemspec +2 -1
  87. metadata +52 -144
  88. data/screenshots/create-app.png +0 -0
  89. data/spec/fixtures/slack/web/429_error.yml +0 -81
  90. data/spec/fixtures/slack/web/auth_test_error.yml +0 -81
  91. data/spec/fixtures/slack/web/auth_test_success.yml +0 -81
  92. data/spec/fixtures/slack/web/conversations_info.yml +0 -167
  93. data/spec/fixtures/slack/web/conversations_setTopic.yml +0 -84
  94. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +0 -172
  95. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +0 -253
  96. data/spec/fixtures/slack/web/paginated_users_list.yml +0 -613
  97. data/spec/fixtures/slack/web/rtm_connect.yml +0 -391
  98. data/spec/fixtures/slack/web/users_info.yml +0 -214
  99. data/spec/fixtures/slack/web/users_list.yml +0 -133
  100. data/spec/fixtures/slack/web/views_open_error.yml +0 -83
  101. data/spec/integration/integration_spec.rb +0 -207
  102. data/spec/slack/config_spec.rb +0 -16
  103. data/spec/slack/events/config_spec.rb +0 -35
  104. data/spec/slack/events/request_spec.rb +0 -199
  105. data/spec/slack/messages/formatting_spec.rb +0 -124
  106. data/spec/slack/real_time/api/message_spec.rb +0 -20
  107. data/spec/slack/real_time/api/ping_spec.rb +0 -17
  108. data/spec/slack/real_time/api/typing_spec.rb +0 -19
  109. data/spec/slack/real_time/client_spec.rb +0 -601
  110. data/spec/slack/real_time/concurrency/clients/async_spec.rb +0 -16
  111. data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +0 -21
  112. data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +0 -10
  113. data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +0 -10
  114. data/spec/slack/real_time/event_handlers/bot_spec.rb +0 -47
  115. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +0 -16
  116. data/spec/slack/real_time/event_handlers/im_spec.rb +0 -51
  117. data/spec/slack/real_time/event_handlers/private_channel_spec.rb +0 -99
  118. data/spec/slack/real_time/event_handlers/public_channel_spec.rb +0 -123
  119. data/spec/slack/real_time/event_handlers/team_spec.rb +0 -63
  120. data/spec/slack/real_time/event_handlers/user_spec.rb +0 -65
  121. data/spec/slack/real_time/rtm_connect_spec.rb +0 -14
  122. data/spec/slack/real_time/stores/store_spec.rb +0 -50
  123. data/spec/slack/slack_spec.rb +0 -93
  124. data/spec/slack/version_spec.rb +0 -8
  125. data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +0 -13
  126. data/spec/slack/web/api/endpoints/admin_apps_activities_spec.rb +0 -8
  127. data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +0 -8
  128. data/spec/slack/web/api/endpoints/admin_apps_config_spec.rb +0 -18
  129. data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +0 -13
  130. data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +0 -8
  131. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +0 -18
  132. data/spec/slack/web/api/endpoints/admin_audit_anomaly_allow_spec.rb +0 -8
  133. data/spec/slack/web/api/endpoints/admin_auth_policy_spec.rb +0 -35
  134. data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +0 -38
  135. data/spec/slack/web/api/endpoints/admin_conversations_ekm_spec.rb +0 -8
  136. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +0 -32
  137. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +0 -133
  138. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +0 -37
  139. data/spec/slack/web/api/endpoints/admin_functions_permissions_spec.rb +0 -21
  140. data/spec/slack/web/api/endpoints/admin_functions_spec.rb +0 -13
  141. data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +0 -8
  142. data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +0 -8
  143. data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +0 -18
  144. data/spec/slack/web/api/endpoints/admin_roles_spec.rb +0 -30
  145. data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +0 -13
  146. data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +0 -13
  147. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +0 -53
  148. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +0 -16
  149. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +0 -37
  150. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +0 -41
  151. data/spec/slack/web/api/endpoints/admin_users_spec.rb +0 -67
  152. data/spec/slack/web/api/endpoints/admin_users_unsupportedVersions_spec.rb +0 -8
  153. data/spec/slack/web/api/endpoints/admin_workflows_collaborators_spec.rb +0 -24
  154. data/spec/slack/web/api/endpoints/admin_workflows_permissions_spec.rb +0 -13
  155. data/spec/slack/web/api/endpoints/admin_workflows_spec.rb +0 -13
  156. data/spec/slack/web/api/endpoints/api_spec.rb +0 -8
  157. data/spec/slack/web/api/endpoints/apps_activities_spec.rb +0 -13
  158. data/spec/slack/web/api/endpoints/apps_auth_external_spec.rb +0 -13
  159. data/spec/slack/web/api/endpoints/apps_connections_spec.rb +0 -8
  160. data/spec/slack/web/api/endpoints/apps_datastore_spec.rb +0 -45
  161. data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +0 -13
  162. data/spec/slack/web/api/endpoints/apps_manifest_spec.rb +0 -44
  163. data/spec/slack/web/api/endpoints/apps_spec.rb +0 -16
  164. data/spec/slack/web/api/endpoints/auth_spec.rb +0 -8
  165. data/spec/slack/web/api/endpoints/auth_teams_spec.rb +0 -8
  166. data/spec/slack/web/api/endpoints/bookmarks_spec.rb +0 -40
  167. data/spec/slack/web/api/endpoints/bots_spec.rb +0 -8
  168. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +0 -24
  169. data/spec/slack/web/api/endpoints/calls_spec.rb +0 -31
  170. data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +0 -8
  171. data/spec/slack/web/api/endpoints/chat_spec.rb +0 -134
  172. data/spec/slack/web/api/endpoints/conversations_spec.rb +0 -8
  173. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +0 -27
  174. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +0 -206
  175. data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +0 -13
  176. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +0 -40
  177. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +0 -38
  178. data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +0 -112
  179. data/spec/slack/web/api/endpoints/dialog_spec.rb +0 -14
  180. data/spec/slack/web/api/endpoints/dnd_spec.rb +0 -13
  181. data/spec/slack/web/api/endpoints/emoji_spec.rb +0 -8
  182. data/spec/slack/web/api/endpoints/files_comments_spec.rb +0 -16
  183. data/spec/slack/web/api/endpoints/files_remote_spec.rb +0 -24
  184. data/spec/slack/web/api/endpoints/files_spec.rb +0 -57
  185. data/spec/slack/web/api/endpoints/functions_spec.rb +0 -28
  186. data/spec/slack/web/api/endpoints/functions_workflows_steps_responses_spec.rb +0 -13
  187. data/spec/slack/web/api/endpoints/functions_workflows_steps_spec.rb +0 -13
  188. data/spec/slack/web/api/endpoints/migration_spec.rb +0 -13
  189. data/spec/slack/web/api/endpoints/oauth_spec.rb +0 -8
  190. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +0 -16
  191. data/spec/slack/web/api/endpoints/openid_connect_spec.rb +0 -8
  192. data/spec/slack/web/api/endpoints/pins_spec.rb +0 -23
  193. data/spec/slack/web/api/endpoints/reactions_spec.rb +0 -24
  194. data/spec/slack/web/api/endpoints/reminders_spec.rb +0 -31
  195. data/spec/slack/web/api/endpoints/rtm_spec.rb +0 -8
  196. data/spec/slack/web/api/endpoints/search_spec.rb +0 -23
  197. data/spec/slack/web/api/endpoints/stars_spec.rb +0 -8
  198. data/spec/slack/web/api/endpoints/team_billing_spec.rb +0 -8
  199. data/spec/slack/web/api/endpoints/team_preferences_spec.rb +0 -8
  200. data/spec/slack/web/api/endpoints/team_profile_spec.rb +0 -8
  201. data/spec/slack/web/api/endpoints/team_spec.rb +0 -8
  202. data/spec/slack/web/api/endpoints/tooling_tokens_spec.rb +0 -13
  203. data/spec/slack/web/api/endpoints/usergroups_spec.rb +0 -28
  204. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +0 -21
  205. data/spec/slack/web/api/endpoints/users_admin_spec.rb +0 -18
  206. data/spec/slack/web/api/endpoints/users_prefs_spec.rb +0 -8
  207. data/spec/slack/web/api/endpoints/users_profile_spec.rb +0 -14
  208. data/spec/slack/web/api/endpoints/users_spec.rb +0 -8
  209. data/spec/slack/web/api/endpoints/views_spec.rb +0 -65
  210. data/spec/slack/web/api/endpoints/workflows_spec.rb +0 -34
  211. data/spec/slack/web/api/error_spec.rb +0 -14
  212. data/spec/slack/web/api/errors/slack_error_spec.rb +0 -33
  213. data/spec/slack/web/api/mixins/conversations_list_spec.rb +0 -21
  214. data/spec/slack/web/api/mixins/conversations_spec.rb +0 -45
  215. data/spec/slack/web/api/mixins/users_spec.rb +0 -52
  216. data/spec/slack/web/api/options_spec.rb +0 -69
  217. data/spec/slack/web/api/pagination/cursor_spec.rb +0 -102
  218. data/spec/slack/web/client_spec.rb +0 -359
  219. data/spec/slack/web/faraday/request_spec.rb +0 -80
  220. data/spec/slack/web/faraday/response/raise_error_spec.rb +0 -86
  221. data/spec/spec_helper.rb +0 -30
  222. data/spec/support/queue_with_timeout.rb +0 -35
  223. data/spec/support/real_time/concurrency/mock.rb +0 -31
  224. data/spec/support/real_time/connected_client.rb +0 -21
  225. data/spec/support/real_time/event.rb +0 -12
  226. data/spec/support/real_time/loaded_client.rb +0 -120
  227. data/spec/support/token.rb +0 -11
  228. data/spec/support/vcr.rb +0 -45
@@ -1,199 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
-
4
- RSpec.describe Slack::Events::Request do
5
- subject(:request) do
6
- described_class.new(http_request)
7
- end
8
-
9
- before do
10
- Slack::Events.configure do |config|
11
- config.signing_secret = signing_secret
12
- config.signature_expires_in = 30
13
- end
14
- end
15
-
16
- let(:signing_secret) { 'ade6ca762ade4db0e7d31484cd616b9c' }
17
- let(:signature) { 'v0=91177eea054d65de0fc0f9b4ec57714307bc0ce2c5f3bf0d28b1b720c8f92ba2' }
18
- let(:timestamp) { '1547933148' }
19
- let(:body) do
20
- '{"token":"X34FAqCu8tmGEkEEpoDncnja","challenge":' \
21
- '"P7sFXA4o3HV2hTx4zb4zcQ9yrvuQs8pDh6EacOxmMRj0tJaXfQFF","type":"url_verification"}'
22
- end
23
- let(:http_request) do
24
- request_double = double(
25
- body: StringIO.new(body)
26
- )
27
-
28
- allow(request_double).to receive(:get_header).with('HTTP_X_SLACK_REQUEST_TIMESTAMP') { timestamp }
29
- allow(request_double).to receive(:get_header).with('HTTP_X_SLACK_SIGNATURE') { signature }
30
-
31
- request_double
32
- end
33
-
34
- after do
35
- Slack::Events.config.reset
36
- end
37
-
38
- it 'reads http request' do
39
- expect(request.signature).to eq signature
40
- expect(request.body).to eq body
41
- expect(request.timestamp).to eq timestamp
42
- expect(request.version).to eq 'v0'
43
- end
44
-
45
- it 'rewinds the request body after reading it' do
46
- expect(request.body).to eq body
47
- expect(http_request.body.read).to eq body
48
- end
49
-
50
- context 'with an already read body' do
51
- before do
52
- http_request.body.read
53
- end
54
-
55
- it 'rewinds the request body before reading it' do
56
- expect(request.body).to eq body
57
- expect(http_request.body.read).to eq body
58
- end
59
- end
60
-
61
- context 'time' do
62
- after do
63
- Timecop.return
64
- end
65
-
66
- context 'with an invalid signature' do
67
- let(:signature) { 'v0=invalid' }
68
-
69
- before do
70
- Timecop.freeze(Time.at(timestamp.to_i))
71
- end
72
-
73
- it 'is invalid but not expired' do
74
- expect(request).not_to be_valid
75
- expect(request).not_to be_expired
76
- end
77
- end
78
-
79
- context 'with an invalid body' do
80
- let(:body) { 'invalid' }
81
-
82
- before do
83
- Timecop.freeze(Time.at(timestamp.to_i))
84
- end
85
-
86
- it 'is invalid but not expired' do
87
- expect(request).not_to be_valid
88
- expect(request).not_to be_expired
89
- end
90
- end
91
-
92
- context 'with an invalid signing secret' do
93
- before do
94
- Slack::Events.configure do |config|
95
- config.signing_secret = 'invalid'
96
- end
97
- Timecop.freeze(Time.at(timestamp.to_i))
98
- end
99
-
100
- it 'is invalid but not expired' do
101
- expect(request).not_to be_valid
102
- expect(request).not_to be_expired
103
- end
104
- end
105
-
106
- context 'within time window' do
107
- before do
108
- Timecop.freeze(Time.at(timestamp.to_i) + Slack::Events.config.signature_expires_in - 1)
109
- end
110
-
111
- it 'is valid' do
112
- expect(request).to be_valid
113
- expect(request).not_to be_expired
114
- end
115
-
116
- it 'does not raise an error and returns true' do
117
- expect(request.verify!).to be true
118
- end
119
- end
120
-
121
- context 'after time window' do
122
- before do
123
- Timecop.freeze(Time.at(timestamp.to_i) + Slack::Events.config.signature_expires_in + 1)
124
- end
125
-
126
- it 'is valid but expired' do
127
- expect(request).to be_valid
128
- expect(request).to be_expired
129
- end
130
-
131
- it 'raises an error on verify!' do
132
- expect { request.verify! }.to raise_error Slack::Events::Request::TimestampExpired
133
- end
134
- end
135
-
136
- context 'before time but within window' do
137
- before do
138
- Timecop.freeze(Time.at(timestamp.to_i) - Slack::Events.config.signature_expires_in + 1)
139
- end
140
-
141
- it 'is valid and not expired' do
142
- expect(request).to be_valid
143
- expect(request).not_to be_expired
144
- end
145
-
146
- it 'does not raise an error on verify!' do
147
- expect(request.verify!).to be true
148
- end
149
- end
150
-
151
- context 'before time window' do
152
- before do
153
- Timecop.freeze(Time.at(timestamp.to_i) - Slack::Events.config.signature_expires_in - 1)
154
- end
155
-
156
- it 'is valid but expired' do
157
- expect(request).to be_valid
158
- expect(request).to be_expired
159
- end
160
-
161
- it 'raises an error on verify!' do
162
- expect { request.verify! }.to raise_error Slack::Events::Request::TimestampExpired
163
- end
164
- end
165
- end
166
-
167
- context 'without global config' do
168
- before do
169
- Slack::Events.config.reset
170
- end
171
-
172
- context 'without a signing secret parameter' do
173
- subject(:request) do
174
- described_class.new(http_request)
175
- end
176
-
177
- it 'raises MissingSigningSecret' do
178
- expect { request.valid? }.to raise_error Slack::Events::Request::MissingSigningSecret
179
- end
180
- end
181
-
182
- context 'with a signing secret parameter' do
183
- subject(:request) do
184
- described_class.new(http_request,
185
- signing_secret: signing_secret,
186
- signature_expires_in: 30)
187
- end
188
-
189
- before do
190
- Timecop.freeze(Time.at(timestamp.to_i))
191
- end
192
-
193
- it 'is valid and not expired' do
194
- expect(request).to be_valid
195
- expect(request).not_to be_expired
196
- end
197
- end
198
- end
199
- end
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
-
4
- describe Slack::Messages::Formatting do
5
- subject(:formatting) do
6
- described_class
7
- end
8
-
9
- context '#unescape' do
10
- it 'plain text' do
11
- expect(formatting.unescape('plain text')).to eq 'plain text'
12
- end
13
-
14
- it 'decodes an HTML-encoded message' do
15
- expect(formatting.unescape('Hello &amp; &lt;world&gt;')).to eq 'Hello & <world>'
16
- end
17
-
18
- it 'unescapes a user reference' do
19
- expect(formatting.unescape('Hey <@U024BE7LH|bob>, did you see my file?')).to(
20
- eq('Hey @bob, did you see my file?')
21
- )
22
- end
23
-
24
- it 'unescapes a user reference without a name' do
25
- expect(formatting.unescape('<@U02BEFY4U> ^^^')).to eq '@U02BEFY4U ^^^'
26
- end
27
-
28
- it 'unescapes a URL without text' do
29
- expect(formatting.unescape('This message contains a URL <http://foo.com/>')).to(
30
- eq('This message contains a URL http://foo.com/')
31
- )
32
- end
33
-
34
- it 'unescapes a URL with text' do
35
- expect(formatting.unescape('So does this one: <http://www.foo.com|www.foo.com>')).to(
36
- eq('So does this one: www.foo.com')
37
- )
38
- end
39
-
40
- it 'removes mailto' do
41
- expect(formatting.unescape('<mailto:bob@example.com|Bob>')).to eq 'Bob'
42
- end
43
-
44
- it 'unlinkifies references' do
45
- expect(
46
- formatting.unescape('Hello <@U123|bob>, say hi to <!everyone> in <#C1234|general>')
47
- ).to(
48
- eq('Hello @bob, say hi to @everyone in #general')
49
- )
50
- end
51
-
52
- it 'can handle a lone &gt;' do
53
- expect(formatting.unescape('Hello <@U123|bob> &gt; file.txt')).to eq 'Hello @bob > file.txt'
54
- end
55
-
56
- it 'unescapes a double smart quote' do
57
- expect(formatting.unescape('“hello”')).to eq '"hello"'
58
- end
59
-
60
- it 'unescapes a single smart quote' do
61
- expect(formatting.unescape('‘hello’')).to eq "'hello'"
62
- end
63
- end
64
-
65
- context '#escape' do
66
- it 'plain text' do
67
- expect(formatting.escape('plain text')).to eq 'plain text'
68
- end
69
-
70
- it 'escapes a message' do
71
- expect(formatting.escape('Hello & <world>')).to eq 'Hello &amp; &lt;world&gt;'
72
- end
73
- end
74
-
75
- context '#date' do
76
- let(:timestamp) { -2955646679 }
77
- let(:time) { Time.at(timestamp) }
78
- let(:custom_format) { '{date_short}' }
79
- let(:optional_link) { 'https://www.timeanddate.com/worldclock/fixedtime.html?year=1876&month=5&day=4&hour=03&min=02&sec=01' }
80
- let(:fallback_text) { 'a long, long time ago' }
81
-
82
- it 'formats a timestamp' do
83
- expect(formatting.date(time)).to eq "<!date^#{timestamp}^{date_num} {time_secs}|#{time}>"
84
- end
85
-
86
- it 'can use custom format' do
87
- expect(formatting.date(time, format: custom_format)).to eq "<!date^#{timestamp}^#{custom_format}|#{time}>"
88
- end
89
-
90
- it 'can add a custom link' do
91
- expect(formatting.date(time,
92
- link: optional_link)).to eq "<!date^#{timestamp}^{date_num} {time_secs}^#{optional_link}|#{time}>"
93
- end
94
-
95
- it 'can add custom fallback text' do
96
- expect(formatting.date(time, text: fallback_text)).to eq "<!date^#{timestamp}^{date_num} {time_secs}|#{fallback_text}>"
97
- end
98
- end
99
-
100
- context '#channel_link' do
101
- let(:channel_id) { 'C0000000001' }
102
-
103
- it 'links to a channel by its ID' do
104
- expect(formatting.channel_link(channel_id)).to eq "<##{channel_id}>"
105
- end
106
- end
107
-
108
- context '#user_link' do
109
- let(:user_id) { 'U0000000001' }
110
-
111
- it 'links to a user by its ID' do
112
- expect(formatting.user_link(user_id)).to eq "<@#{user_id}>"
113
- end
114
- end
115
-
116
- context '#url_link' do
117
- let(:text) { 'super cool website' }
118
- let(:url) { 'https://theuselessweb.site/' }
119
-
120
- it 'formats a URL with custom link text' do
121
- expect(formatting.url_link(text, url)).to eq "<#{url}|#{text}>"
122
- end
123
- end
124
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
-
4
- RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_connect' } do
5
- include_context 'connected client'
6
-
7
- describe '#message' do
8
- before do
9
- allow(client).to receive(:next_id).and_return(42)
10
- end
11
-
12
- it 'sends message' do
13
- expect(socket).to(
14
- receive(:send_data)
15
- .with({ type: 'message', id: 42, text: 'hello world', channel: 'channel' }.to_json)
16
- )
17
- client.message(text: 'hello world', channel: 'channel')
18
- end
19
- end
20
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
-
4
- RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_connect' } do
5
- include_context 'connected client'
6
-
7
- describe '#ping' do
8
- before do
9
- allow(client).to receive(:next_id).and_return(42)
10
- end
11
-
12
- it 'sends message' do
13
- expect(socket).to receive(:send_data).with({ type: 'ping', id: 42 }.to_json)
14
- client.ping
15
- end
16
- end
17
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
-
4
- RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_connect' } do
5
- include_context 'connected client'
6
-
7
- describe '#typing' do
8
- before do
9
- allow(client).to receive(:next_id).and_return(42)
10
- end
11
-
12
- it 'sends a typing indicator' do
13
- expect(socket).to(
14
- receive(:send_data).with({ type: 'typing', id: 42, channel: 'channel' }.to_json)
15
- )
16
- client.typing(channel: 'channel')
17
- end
18
- end
19
- end