appsignal 4.0.5 → 4.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/Rakefile +9 -9
  4. data/appsignal.gemspec +22 -1
  5. data/build_matrix.yml +2 -1
  6. data/ext/agent.rb +27 -27
  7. data/lib/appsignal/check_in/scheduler.rb +3 -4
  8. data/lib/appsignal/check_in.rb +1 -1
  9. data/lib/appsignal/config.rb +1 -3
  10. data/lib/appsignal/integrations/que.rb +8 -2
  11. data/lib/appsignal/integrations/resque.rb +1 -6
  12. data/lib/appsignal/utils/hash_sanitizer.rb +4 -0
  13. data/lib/appsignal/version.rb +1 -1
  14. metadata +2 -191
  15. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
  16. data/.github/ISSUE_TEMPLATE/chore.md +0 -14
  17. data/.github/workflows/ci.yml +0 -3150
  18. data/.github/workflows/create_release_from_tag.yml +0 -62
  19. data/.gitignore +0 -35
  20. data/.gitmodules +0 -3
  21. data/.rspec +0 -4
  22. data/.yardopts +0 -8
  23. data/benchmark.rake +0 -139
  24. data/gemfiles/capistrano2.gemfile +0 -6
  25. data/gemfiles/capistrano3.gemfile +0 -7
  26. data/gemfiles/dry-monitor.gemfile +0 -5
  27. data/gemfiles/grape.gemfile +0 -5
  28. data/gemfiles/hanami-2.0.gemfile +0 -7
  29. data/gemfiles/hanami-2.1.gemfile +0 -7
  30. data/gemfiles/http5.gemfile +0 -5
  31. data/gemfiles/no_dependencies.gemfile +0 -10
  32. data/gemfiles/padrino.gemfile +0 -7
  33. data/gemfiles/psych-3.gemfile +0 -5
  34. data/gemfiles/psych-4.gemfile +0 -5
  35. data/gemfiles/que.gemfile +0 -5
  36. data/gemfiles/rails-6.0.gemfile +0 -10
  37. data/gemfiles/rails-6.1.gemfile +0 -11
  38. data/gemfiles/rails-7.0.gemfile +0 -11
  39. data/gemfiles/rails-7.1.gemfile +0 -11
  40. data/gemfiles/rails-7.2.gemfile +0 -11
  41. data/gemfiles/redis-4.gemfile +0 -5
  42. data/gemfiles/redis-5.gemfile +0 -6
  43. data/gemfiles/resque-2.gemfile +0 -6
  44. data/gemfiles/sequel.gemfile +0 -10
  45. data/gemfiles/sinatra.gemfile +0 -5
  46. data/gemfiles/webmachine1.gemfile +0 -7
  47. data/gemfiles/webmachine2.gemfile +0 -6
  48. data/mono.yml +0 -16
  49. data/spec/.rubocop.yml +0 -7
  50. data/spec/lib/appsignal/auth_check_spec.rb +0 -84
  51. data/spec/lib/appsignal/capistrano2_spec.rb +0 -227
  52. data/spec/lib/appsignal/capistrano3_spec.rb +0 -284
  53. data/spec/lib/appsignal/check_in/cron_spec.rb +0 -202
  54. data/spec/lib/appsignal/check_in/scheduler_spec.rb +0 -443
  55. data/spec/lib/appsignal/cli/demo_spec.rb +0 -46
  56. data/spec/lib/appsignal/cli/diagnose/paths_spec.rb +0 -16
  57. data/spec/lib/appsignal/cli/diagnose/utils_spec.rb +0 -86
  58. data/spec/lib/appsignal/cli/diagnose_spec.rb +0 -1553
  59. data/spec/lib/appsignal/cli/helpers_spec.rb +0 -179
  60. data/spec/lib/appsignal/cli/install_spec.rb +0 -848
  61. data/spec/lib/appsignal/cli_spec.rb +0 -56
  62. data/spec/lib/appsignal/config_spec.rb +0 -1380
  63. data/spec/lib/appsignal/demo_spec.rb +0 -83
  64. data/spec/lib/appsignal/environment_spec.rb +0 -190
  65. data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +0 -60
  66. data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +0 -21
  67. data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +0 -21
  68. data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +0 -52
  69. data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +0 -21
  70. data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +0 -84
  71. data/spec/lib/appsignal/event_formatter/rom/sql_formatter_spec.rb +0 -22
  72. data/spec/lib/appsignal/event_formatter/sequel/sql_formatter_spec.rb +0 -30
  73. data/spec/lib/appsignal/event_formatter/view_component/render_formatter_spec.rb +0 -41
  74. data/spec/lib/appsignal/event_formatter_spec.rb +0 -193
  75. data/spec/lib/appsignal/extension/jruby_spec.rb +0 -46
  76. data/spec/lib/appsignal/extension_install_failure_spec.rb +0 -20
  77. data/spec/lib/appsignal/extension_spec.rb +0 -178
  78. data/spec/lib/appsignal/garbage_collection_spec.rb +0 -98
  79. data/spec/lib/appsignal/hooks/action_cable_spec.rb +0 -345
  80. data/spec/lib/appsignal/hooks/action_mailer_spec.rb +0 -55
  81. data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +0 -23
  82. data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +0 -99
  83. data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +0 -47
  84. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +0 -47
  85. data/spec/lib/appsignal/hooks/activejob_spec.rb +0 -650
  86. data/spec/lib/appsignal/hooks/at_exit_spec.rb +0 -105
  87. data/spec/lib/appsignal/hooks/celluloid_spec.rb +0 -40
  88. data/spec/lib/appsignal/hooks/data_mapper_spec.rb +0 -40
  89. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +0 -38
  90. data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +0 -83
  91. data/spec/lib/appsignal/hooks/excon_spec.rb +0 -67
  92. data/spec/lib/appsignal/hooks/gvl_spec.rb +0 -145
  93. data/spec/lib/appsignal/hooks/http_spec.rb +0 -37
  94. data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +0 -46
  95. data/spec/lib/appsignal/hooks/mri_spec.rb +0 -23
  96. data/spec/lib/appsignal/hooks/net_http_spec.rb +0 -18
  97. data/spec/lib/appsignal/hooks/passenger_spec.rb +0 -30
  98. data/spec/lib/appsignal/hooks/puma_spec.rb +0 -80
  99. data/spec/lib/appsignal/hooks/que_spec.rb +0 -19
  100. data/spec/lib/appsignal/hooks/rake_spec.rb +0 -144
  101. data/spec/lib/appsignal/hooks/redis_client_spec.rb +0 -218
  102. data/spec/lib/appsignal/hooks/redis_spec.rb +0 -124
  103. data/spec/lib/appsignal/hooks/resque_spec.rb +0 -27
  104. data/spec/lib/appsignal/hooks/sequel_spec.rb +0 -44
  105. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -29
  106. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +0 -115
  107. data/spec/lib/appsignal/hooks/unicorn_spec.rb +0 -63
  108. data/spec/lib/appsignal/hooks/webmachine_spec.rb +0 -24
  109. data/spec/lib/appsignal/hooks_spec.rb +0 -124
  110. data/spec/lib/appsignal/integrations/data_mapper_spec.rb +0 -74
  111. data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +0 -454
  112. data/spec/lib/appsignal/integrations/http_spec.rb +0 -111
  113. data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +0 -154
  114. data/spec/lib/appsignal/integrations/net_http_spec.rb +0 -33
  115. data/spec/lib/appsignal/integrations/object_spec.rb +0 -347
  116. data/spec/lib/appsignal/integrations/puma_spec.rb +0 -150
  117. data/spec/lib/appsignal/integrations/que_spec.rb +0 -152
  118. data/spec/lib/appsignal/integrations/railtie_spec.rb +0 -457
  119. data/spec/lib/appsignal/integrations/resque_spec.rb +0 -155
  120. data/spec/lib/appsignal/integrations/shoryuken_spec.rb +0 -165
  121. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +0 -640
  122. data/spec/lib/appsignal/integrations/webmachine_spec.rb +0 -136
  123. data/spec/lib/appsignal/loaders/grape_spec.rb +0 -12
  124. data/spec/lib/appsignal/loaders/hanami_spec.rb +0 -92
  125. data/spec/lib/appsignal/loaders/padrino_spec.rb +0 -273
  126. data/spec/lib/appsignal/loaders/sinatra_spec.rb +0 -44
  127. data/spec/lib/appsignal/loaders_spec.rb +0 -144
  128. data/spec/lib/appsignal/logger_spec.rb +0 -205
  129. data/spec/lib/appsignal/marker_spec.rb +0 -51
  130. data/spec/lib/appsignal/probes/gvl_spec.rb +0 -164
  131. data/spec/lib/appsignal/probes/mri_spec.rb +0 -162
  132. data/spec/lib/appsignal/probes/sidekiq_spec.rb +0 -333
  133. data/spec/lib/appsignal/probes_spec.rb +0 -411
  134. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +0 -370
  135. data/spec/lib/appsignal/rack/body_wrapper_spec.rb +0 -319
  136. data/spec/lib/appsignal/rack/event_handler_spec.rb +0 -441
  137. data/spec/lib/appsignal/rack/grape_middleware_spec.rb +0 -201
  138. data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +0 -36
  139. data/spec/lib/appsignal/rack/instrumentation_middleware_spec.rb +0 -38
  140. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +0 -126
  141. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +0 -217
  142. data/spec/lib/appsignal/rack_spec.rb +0 -243
  143. data/spec/lib/appsignal/sample_data_spec.rb +0 -238
  144. data/spec/lib/appsignal/span_spec.rb +0 -141
  145. data/spec/lib/appsignal/system_spec.rb +0 -126
  146. data/spec/lib/appsignal/transaction_spec.rb +0 -2111
  147. data/spec/lib/appsignal/transmitter_spec.rb +0 -198
  148. data/spec/lib/appsignal/utils/data_spec.rb +0 -166
  149. data/spec/lib/appsignal/utils/hash_sanitizer_spec.rb +0 -182
  150. data/spec/lib/appsignal/utils/integration_logger_spec.rb +0 -21
  151. data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -153
  152. data/spec/lib/appsignal/utils/json_spec.rb +0 -44
  153. data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +0 -192
  154. data/spec/lib/appsignal_spec.rb +0 -1919
  155. data/spec/lib/puma/appsignal_spec.rb +0 -334
  156. data/spec/spec_helper.rb +0 -173
  157. data/spec/support/fixtures/generated_config.yml +0 -24
  158. data/spec/support/fixtures/projects/broken/config/appsignal.yml +0 -1
  159. data/spec/support/fixtures/projects/valid/config/appsignal.yml +0 -57
  160. data/spec/support/fixtures/projects/valid/log/.gitkeep +0 -0
  161. data/spec/support/fixtures/projects/valid_with_rails_app/config/application.rb +0 -16
  162. data/spec/support/fixtures/projects/valid_with_rails_app/config/appsignal.yml +0 -56
  163. data/spec/support/fixtures/projects/valid_with_rails_app/config/environment.rb +0 -10
  164. data/spec/support/fixtures/projects/valid_with_rails_app/log/.gitkeep +0 -0
  165. data/spec/support/fixtures/uploaded_file.txt +0 -0
  166. data/spec/support/hanami/hanami_app.rb +0 -29
  167. data/spec/support/helpers/action_mailer_helpers.rb +0 -25
  168. data/spec/support/helpers/activejob_helpers.rb +0 -27
  169. data/spec/support/helpers/api_request_helper.rb +0 -20
  170. data/spec/support/helpers/cli_helpers.rb +0 -40
  171. data/spec/support/helpers/config_helpers.rb +0 -66
  172. data/spec/support/helpers/dependency_helper.rb +0 -150
  173. data/spec/support/helpers/directory_helper.rb +0 -27
  174. data/spec/support/helpers/env_helpers.rb +0 -41
  175. data/spec/support/helpers/environment_metdata_helper.rb +0 -16
  176. data/spec/support/helpers/example_exception.rb +0 -13
  177. data/spec/support/helpers/example_standard_error.rb +0 -13
  178. data/spec/support/helpers/loader_helper.rb +0 -21
  179. data/spec/support/helpers/log_helpers.rb +0 -36
  180. data/spec/support/helpers/rails_helper.rb +0 -28
  181. data/spec/support/helpers/std_streams_helper.rb +0 -94
  182. data/spec/support/helpers/system_helpers.rb +0 -8
  183. data/spec/support/helpers/take_at_most_helper.rb +0 -21
  184. data/spec/support/helpers/time_helpers.rb +0 -11
  185. data/spec/support/helpers/transaction_helpers.rb +0 -122
  186. data/spec/support/helpers/wait_for_helper.rb +0 -39
  187. data/spec/support/matchers/contains_log.rb +0 -26
  188. data/spec/support/matchers/have_colorized_text.rb +0 -28
  189. data/spec/support/matchers/transaction.rb +0 -200
  190. data/spec/support/mocks/appsignal_mock.rb +0 -18
  191. data/spec/support/mocks/dummy_app.rb +0 -20
  192. data/spec/support/mocks/fake_gc_profiler.rb +0 -19
  193. data/spec/support/mocks/fake_gvl_tools.rb +0 -28
  194. data/spec/support/mocks/hash_like.rb +0 -10
  195. data/spec/support/mocks/mock_probe.rb +0 -13
  196. data/spec/support/mocks/puma_mock.rb +0 -43
  197. data/spec/support/shared_examples/instrument.rb +0 -48
  198. data/spec/support/stubs/appsignal/loaders/loader_stub.rb +0 -7
  199. data/spec/support/stubs/delayed_job.rb +0 -0
  200. data/spec/support/stubs/sidekiq/api.rb +0 -4
  201. data/spec/support/testing.rb +0 -194
  202. data/support/bundler_wrapper +0 -12
  203. data/support/install_deps +0 -33
@@ -1,848 +0,0 @@
1
- require "appsignal/cli"
2
-
3
- describe Appsignal::CLI::Install do
4
- include CLIHelpers
5
-
6
- let(:out_stream) { std_stream }
7
- let(:output) { out_stream.read }
8
- let(:push_api_key) { "my_key" }
9
- let(:config) { Appsignal::Config.new(tmp_dir, "") }
10
- let(:config_file_path) { File.join(tmp_dir, "config", "appsignal.yml") }
11
- let(:config_file) { File.read(config_file_path) }
12
- let(:options) { {} }
13
- before do
14
- stub_api_validation_request
15
- # Stub calls to speed up tests
16
- allow(described_class).to receive(:sleep)
17
- allow(described_class).to receive(:press_any_key)
18
- allow(Appsignal::Demo).to receive(:transmit).and_return(true)
19
- end
20
- after do
21
- FileUtils.rm_rf(tmp_dir)
22
- FileUtils.mkdir_p(tmp_dir)
23
- end
24
- around do |example|
25
- original_stdin = $stdin
26
- $stdin = StringIO.new
27
- example.run
28
- $stdin = original_stdin
29
- end
30
-
31
- define :include_complete_install do
32
- match do |actual|
33
- actual.include?("Please return to your browser and follow the instructions.")
34
- end
35
- end
36
-
37
- define :include_env_push_api_key do |key|
38
- match do |actual|
39
- actual.include?("export APPSIGNAL_PUSH_API_KEY=#{key}")
40
- end
41
- end
42
- define :include_env_app_name do |name|
43
- match do |actual|
44
- actual.include?("export APPSIGNAL_APP_NAME=#{name}")
45
- end
46
- end
47
-
48
- define :configure_app_name do |name|
49
- match do |file_contents|
50
- file_contents =~ /^ name: "#{name}"/
51
- end
52
- end
53
- define :configure_push_api_key do |key|
54
- match do |file_contents|
55
- file_contents =~ /^ push_api_key: "#{key}"/
56
- end
57
- end
58
- define :configure_environment do |env|
59
- match do |file_contents|
60
- file_contents =~ /^#{env}:$/
61
- end
62
- end
63
- define :include_file_config do
64
- match do |log|
65
- log.include?("Config file written to config/appsignal.yml")
66
- end
67
- end
68
-
69
- define :include_demo_transmission do
70
- match do |log|
71
- log.include?("Sending example data to AppSignal") &&
72
- log.include?("Example data sent!")
73
- end
74
- end
75
-
76
- def stub_api_validation_request
77
- config[:push_api_key] = push_api_key
78
- stub_api_request config, "auth"
79
- end
80
-
81
- alias_method :enter_app_name, :add_cli_input
82
-
83
- def choose_config_file
84
- add_cli_input "1"
85
- end
86
-
87
- def choose_environment_config
88
- add_cli_input "2"
89
- end
90
-
91
- def run
92
- Dir.chdir tmp_dir do
93
- prepare_cli_input
94
- capture_stdout(out_stream) do
95
- run_cli(["install", push_api_key], options)
96
- end
97
- end
98
- end
99
-
100
- shared_examples "push_api_key validation" do
101
- context "without key" do
102
- let(:push_api_key) { nil }
103
-
104
- it "does not install" do
105
- run
106
-
107
- expect(output).to include "Problem encountered:",
108
- "No Push API key entered"
109
- end
110
- end
111
-
112
- context "with key" do
113
- let(:push_api_key) { "my_key" }
114
-
115
- context "when the key is valid" do
116
- before { stub_api_validation_request.to_return(:status => 200) }
117
-
118
- it "continues with the installer" do
119
- enter_app_name "Test App"
120
- choose_environment_config
121
- run
122
-
123
- expect(output).to include("Validating Push API key...", "Push API key valid")
124
- end
125
- end
126
-
127
- context "when the key is invalid" do
128
- before { stub_api_validation_request.to_return(:status => 402) }
129
-
130
- it "prints an error" do
131
- run
132
- expect(output).to include "Push API key 'my_key' is not valid"
133
- end
134
- end
135
-
136
- context "when there is an error validating" do
137
- before do
138
- expect(Appsignal::AuthCheck).to receive(:new).and_raise(StandardError)
139
- end
140
-
141
- it "prints an error" do
142
- run
143
- expect(output).to include "There was an error validating your Push API key"
144
- end
145
- end
146
- end
147
- end
148
-
149
- shared_examples "requires an application name" do
150
- before do
151
- enter_app_name ""
152
- enter_app_name "Test app"
153
- choose_environment_config
154
- run
155
- end
156
-
157
- it "requires an application name" do
158
- expect(output.scan("Enter application name:").length).to eq(2)
159
- end
160
- end
161
-
162
- shared_examples "capistrano install" do
163
- let(:capfile) { File.join(tmp_dir, "Capfile") }
164
- before do
165
- enter_app_name "foo"
166
- add_cli_input "n"
167
- choose_environment_config
168
- end
169
-
170
- context "without Capfile" do
171
- it "does nothing" do
172
- run
173
-
174
- expect(output).to_not include "Adding AppSignal integration to Capfile"
175
- expect(File.exist?(capfile)).to be_falsy
176
- end
177
- end
178
-
179
- context "with Capfile" do
180
- context "when already installed" do
181
- before { File.write(capfile, "require 'appsignal/capistrano'") }
182
-
183
- it "does not add another require to Capfile" do
184
- run
185
-
186
- expect(output).to_not include "Adding AppSignal integration to Capfile"
187
- expect(File.read(capfile).scan("appsignal").count).to eq(1)
188
- end
189
- end
190
-
191
- context "when not installed" do
192
- before { FileUtils.touch(capfile) }
193
-
194
- it "adds a require to Capfile" do
195
- run
196
-
197
- expect(output).to include "Adding AppSignal integration to Capfile"
198
- expect(File.read(capfile)).to include "require 'appsignal/capistrano'"
199
- end
200
- end
201
- end
202
- end
203
-
204
- shared_examples "windows installation" do
205
- before do
206
- allow(Gem).to receive(:win_platform?).and_return(true)
207
- expect(Appsignal::Demo).to_not receive(:transmit)
208
- run
209
- end
210
-
211
- it "prints a warning for windows" do
212
- expect(output).to include("The AppSignal agent currently does not work on Microsoft Windows")
213
- expect(output).to include("staging/production environment")
214
- end
215
- end
216
-
217
- shared_examples "demo data" do
218
- context "with demo data sent" do
219
- before do
220
- expect(Appsignal::Demo).to receive(:transmit).and_return(true)
221
- run
222
- end
223
-
224
- it "prints sending demo data" do
225
- expect(output).to include "Sending example data to AppSignal", "Example data sent!"
226
- end
227
- end
228
-
229
- context "without demo data being sent" do
230
- before do
231
- expect(Appsignal::Demo).to receive(:transmit).and_return(false)
232
- run
233
- end
234
-
235
- it "prints that it couldn't send the demo data" do
236
- expect(output).to include "Sending example data to AppSignal",
237
- "Couldn't start the AppSignal agent and send example data",
238
- "`appsignal diagnose`"
239
- end
240
- end
241
- end
242
-
243
- if rails_present?
244
- context "with rails" do
245
- let(:installation_instructions) do
246
- [
247
- "Installing for Ruby on Rails",
248
- "Your app's name is: 'MyApp'"
249
- ]
250
- end
251
- let(:app_name) { "MyApp" }
252
- let(:config_dir) { File.join(tmp_dir, "config") }
253
- let(:environments_dir) { File.join(config_dir, "environments") }
254
- before do
255
- # Fake Rails directory
256
- FileUtils.mkdir_p(config_dir)
257
- FileUtils.mkdir_p(environments_dir)
258
- FileUtils.touch(File.join(config_dir, "application.rb"))
259
- FileUtils.touch(File.join(environments_dir, "development.rb"))
260
- FileUtils.touch(File.join(environments_dir, "staging.rb"))
261
- FileUtils.touch(File.join(environments_dir, "production.rb"))
262
- end
263
-
264
- describe "environments" do
265
- before do
266
- File.delete(File.join(environments_dir, "development.rb"))
267
- File.delete(File.join(environments_dir, "staging.rb"))
268
- add_cli_input "n"
269
- choose_config_file
270
- end
271
-
272
- it "only configures the available environments" do
273
- run
274
-
275
- expect(output).to include_file_config
276
- expect(config_file).to configure_app_name(app_name)
277
- expect(config_file).to configure_push_api_key(push_api_key)
278
- expect(config_file).to_not configure_environment("development")
279
- expect(config_file).to_not configure_environment("staging")
280
- expect(config_file).to configure_environment("production")
281
-
282
- expect(output).to include(*installation_instructions)
283
- expect(output).to include_complete_install
284
- expect(output).to include_demo_transmission
285
- end
286
- end
287
-
288
- context "without custom name" do
289
- before { add_cli_input "n" }
290
-
291
- it_behaves_like "push_api_key validation"
292
-
293
- context "with configuration using environment variables" do
294
- before { choose_environment_config }
295
-
296
- it_behaves_like "windows installation"
297
- it_behaves_like "capistrano install"
298
- it_behaves_like "demo data"
299
-
300
- it "prints environment variables" do
301
- run
302
-
303
- expect(output).to include_env_push_api_key(push_api_key)
304
- expect(output).to_not include_env_app_name
305
- end
306
-
307
- it "completes the installation" do
308
- run
309
-
310
- expect(output).to include(*installation_instructions)
311
- expect(output).to include_complete_install
312
- end
313
- end
314
-
315
- context "with configuration using a configuration file" do
316
- before { choose_config_file }
317
-
318
- it_behaves_like "windows installation"
319
- it_behaves_like "capistrano install"
320
- it_behaves_like "demo data"
321
-
322
- it "writes configuration to file" do
323
- run
324
-
325
- expect(output).to include_file_config
326
- expect(config_file).to configure_app_name(app_name)
327
- expect(config_file).to configure_push_api_key(push_api_key)
328
- expect(config_file).to configure_environment("development")
329
- expect(config_file).to configure_environment("staging")
330
- expect(config_file).to configure_environment("production")
331
- end
332
-
333
- it "completes the installation" do
334
- run
335
-
336
- expect(output).to include(*installation_instructions)
337
- expect(output).to include_complete_install
338
- end
339
- end
340
- end
341
-
342
- context "with custom name" do
343
- let(:app_name) { "Custom name" }
344
- before { add_cli_input "y" }
345
-
346
- it_behaves_like "push_api_key validation"
347
-
348
- it "requires the custom name" do
349
- enter_app_name ""
350
- enter_app_name app_name
351
- choose_environment_config
352
- run
353
-
354
- expect(output.scan("Choose app's display name:").length).to eq(2)
355
- end
356
-
357
- context "with configuration using environment variables" do
358
- before do
359
- enter_app_name app_name
360
- choose_environment_config
361
- end
362
-
363
- it_behaves_like "windows installation"
364
- it_behaves_like "capistrano install"
365
- it_behaves_like "demo data"
366
-
367
- it "prints environment variables" do
368
- run
369
-
370
- expect(output).to include_env_push_api_key(push_api_key)
371
- expect(output).to include_env_app_name(app_name)
372
- end
373
-
374
- it "completes the installation" do
375
- run
376
-
377
- expect(output).to include(*installation_instructions)
378
- expect(output).to include_complete_install
379
- end
380
- end
381
-
382
- context "with configuration using a configuration file" do
383
- before do
384
- enter_app_name app_name
385
- choose_config_file
386
- end
387
-
388
- it_behaves_like "windows installation"
389
- it_behaves_like "capistrano install"
390
- it_behaves_like "demo data"
391
-
392
- it "writes configuration to file" do
393
- run
394
-
395
- expect(output).to include_file_config
396
- expect(config_file).to configure_app_name(app_name)
397
- expect(config_file).to configure_push_api_key(push_api_key)
398
- expect(config_file).to configure_environment("development")
399
- expect(config_file).to configure_environment("staging")
400
- expect(config_file).to configure_environment("production")
401
- end
402
-
403
- it "completes the installation" do
404
- run
405
-
406
- expect(output).to include(*installation_instructions)
407
- expect(output).to include_complete_install
408
- end
409
- end
410
- end
411
-
412
- context "when there is no Rails application.rb file" do
413
- before do
414
- # Do not detect it as another framework for testing
415
- allow(described_class).to receive(:framework_available?).and_call_original
416
- allow(described_class).to receive(:framework_available?).with("sinatra").and_return(false)
417
-
418
- File.delete(File.join(config_dir, "application.rb"))
419
- expect(File.exist?(File.join(config_dir, "application.rb"))).to eql(false)
420
- end
421
-
422
- it "falls back on the unknown framework installation" do
423
- enter_app_name app_name
424
- choose_environment_config
425
- run
426
-
427
- expect(output)
428
- .to include("\e[31mWarning: We could not detect which framework you are using\e[0m")
429
- expect(output).to_not include("Installing for Ruby on Rails")
430
- expect(output).to include_env_push_api_key(push_api_key)
431
- expect(output).to include_complete_install
432
- end
433
- end
434
-
435
- context "when failed to load the Rails application.rb file" do
436
- before do
437
- File.write(File.join(config_dir, "application.rb"), "I am invalid code")
438
- end
439
-
440
- it "prompts the user to fill in an app name" do
441
- enter_app_name app_name
442
- choose_config_file
443
- run
444
-
445
- expect(output).to include("Installing for Ruby on Rails")
446
- expect(output).to include("Unable to automatically detect your Rails app's name.")
447
- expect(output).to include("Choose your app's display name for AppSignal.com:")
448
- expect(output).to include_file_config
449
- expect(output).to include_complete_install
450
-
451
- expect(config_file).to configure_app_name(app_name)
452
- expect(config_file).to configure_push_api_key(push_api_key)
453
- expect(config_file).to configure_environment("development")
454
- expect(config_file).to configure_environment("staging")
455
- expect(config_file).to configure_environment("production")
456
- end
457
- end
458
- end
459
- end
460
-
461
- if sinatra_present? && !padrino_present? && !rails_present?
462
- context "with sinatra" do
463
- it_behaves_like "push_api_key validation"
464
- it_behaves_like "requires an application name"
465
-
466
- describe "sinatra specific tests" do
467
- let(:installation_instructions) do
468
- [
469
- "Installing for Sinatra",
470
- "Sinatra apps requires some manual setup.",
471
- %(require "appsignal"),
472
- "Appsignal.load(:sinatra)",
473
- "Appsignal.start",
474
- "https://docs.appsignal.com/ruby/integrations/sinatra.html"
475
- ]
476
- end
477
- let(:app_name) { "Test app" }
478
- before { enter_app_name app_name }
479
-
480
- describe "configuration with environment variables" do
481
- before { choose_environment_config }
482
-
483
- it_behaves_like "windows installation"
484
- it_behaves_like "capistrano install"
485
- it_behaves_like "demo data"
486
-
487
- it "prints environment variables" do
488
- run
489
-
490
- expect(output).to include_env_push_api_key(push_api_key)
491
- expect(output).to include_env_app_name(app_name)
492
- end
493
-
494
- it "completes the installation" do
495
- run
496
-
497
- expect(output).to include(*installation_instructions)
498
- expect(output).to include_complete_install
499
- end
500
- end
501
-
502
- describe "configure with a configuration file" do
503
- before { choose_config_file }
504
-
505
- it_behaves_like "windows installation"
506
- it_behaves_like "capistrano install"
507
- it_behaves_like "demo data"
508
-
509
- it "writes configuration to file" do
510
- run
511
-
512
- expect(output).to include_file_config
513
- expect(config_file).to configure_app_name(app_name)
514
- expect(config_file).to configure_push_api_key(push_api_key)
515
- expect(config_file).to configure_environment("development")
516
- expect(config_file).to configure_environment("staging")
517
- expect(config_file).to configure_environment("production")
518
- end
519
-
520
- it "completes the installation" do
521
- run
522
-
523
- expect(output).to include(*installation_instructions)
524
- expect(output).to include_complete_install
525
- end
526
- end
527
- end
528
- end
529
- end
530
-
531
- if padrino_present?
532
- context "with padrino" do
533
- it_behaves_like "push_api_key validation"
534
- it_behaves_like "requires an application name"
535
-
536
- describe "padrino specific tests" do
537
- let(:installation_instructions) do
538
- [
539
- "Installing for Padrino",
540
- "Padrino apps requires some manual setup.",
541
- %(require "appsignal"),
542
- "Appsignal.load(:padrino)",
543
- "Appsignal.start",
544
- "https://docs.appsignal.com/ruby/integrations/padrino.html"
545
- ]
546
- end
547
- let(:app_name) { "Test app" }
548
- before { enter_app_name app_name }
549
-
550
- describe "configuration with environment variables" do
551
- before { choose_environment_config }
552
-
553
- it_behaves_like "windows installation"
554
- it_behaves_like "capistrano install"
555
- it_behaves_like "demo data"
556
-
557
- it "prints environment variables" do
558
- run
559
-
560
- expect(output).to include_env_push_api_key(push_api_key)
561
- expect(output).to include_env_app_name(app_name)
562
- end
563
-
564
- it "completes the installation" do
565
- run
566
-
567
- expect(output).to include(*installation_instructions)
568
- expect(output).to include_complete_install
569
- end
570
- end
571
-
572
- describe "configure with a configuration file" do
573
- before { choose_config_file }
574
-
575
- it_behaves_like "windows installation"
576
- it_behaves_like "capistrano install"
577
- it_behaves_like "demo data"
578
-
579
- it "writes configuration to file" do
580
- run
581
-
582
- expect(output).to include_file_config
583
- expect(config_file).to configure_app_name(app_name)
584
- expect(config_file).to configure_push_api_key(push_api_key)
585
- expect(config_file).to configure_environment("development")
586
- expect(config_file).to configure_environment("staging")
587
- expect(config_file).to configure_environment("production")
588
- end
589
-
590
- it "completes the installation" do
591
- run
592
-
593
- expect(output).to include(*installation_instructions)
594
- expect(output).to include_complete_install
595
- end
596
- end
597
- end
598
- end
599
- end
600
-
601
- if grape_present?
602
- context "with grape" do
603
- it_behaves_like "push_api_key validation"
604
- it_behaves_like "requires an application name"
605
-
606
- describe "grape specific tests" do
607
- let(:installation_instructions) do
608
- [
609
- "Installing for Grape",
610
- "Grape apps require some manual setup.",
611
- "https://docs.appsignal.com/ruby/integrations/grape.html"
612
- ]
613
- end
614
- let(:app_name) { "Test app" }
615
- before { enter_app_name app_name }
616
-
617
- describe "configuration with environment variables" do
618
- before { choose_environment_config }
619
-
620
- it_behaves_like "windows installation"
621
- it_behaves_like "capistrano install"
622
- it_behaves_like "demo data"
623
-
624
- it "prints environment variables" do
625
- run
626
-
627
- expect(output).to include_env_push_api_key(push_api_key)
628
- expect(output).to include_env_app_name(app_name)
629
- end
630
-
631
- it "completes the installation" do
632
- run
633
-
634
- puts output
635
- expect(output).to include(*installation_instructions)
636
- expect(output).to include_complete_install
637
- end
638
- end
639
-
640
- describe "configure with a configuration file" do
641
- before { choose_config_file }
642
-
643
- it_behaves_like "windows installation"
644
- it_behaves_like "capistrano install"
645
- it_behaves_like "demo data"
646
-
647
- it "writes configuration to file" do
648
- run
649
-
650
- expect(output).to include_file_config
651
- expect(config_file).to configure_app_name(app_name)
652
- expect(config_file).to configure_push_api_key(push_api_key)
653
- expect(config_file).to configure_environment("development")
654
- expect(config_file).to configure_environment("staging")
655
- expect(config_file).to configure_environment("production")
656
- end
657
-
658
- it "completes the installation" do
659
- run
660
-
661
- expect(output).to include(*installation_instructions)
662
- expect(output).to include_complete_install
663
- end
664
- end
665
- end
666
- end
667
- end
668
-
669
- if hanami2_present?
670
- context "with hanami" do
671
- it_behaves_like "push_api_key validation"
672
- it_behaves_like "requires an application name"
673
-
674
- describe "hanami specific tests" do
675
- let(:installation_instructions) do
676
- [
677
- "Installing for Hanami",
678
- "Hanami apps requires some manual setup.",
679
- %(require "appsignal"),
680
- "Appsignal.load(:hanami)",
681
- "Appsignal.start",
682
- "https://docs.appsignal.com/ruby/integrations/hanami.html"
683
- ]
684
- end
685
- let(:app_name) { "Test app" }
686
- before { enter_app_name app_name }
687
-
688
- describe "configuration with environment variables" do
689
- before { choose_environment_config }
690
-
691
- it_behaves_like "windows installation"
692
- it_behaves_like "capistrano install"
693
- it_behaves_like "demo data"
694
-
695
- it "prints environment variables" do
696
- run
697
-
698
- expect(output).to include_env_push_api_key(push_api_key)
699
- expect(output).to include_env_app_name(app_name)
700
- end
701
-
702
- it "completes the installation" do
703
- run
704
-
705
- expect(output).to include(*installation_instructions)
706
- expect(output).to include_complete_install
707
- end
708
- end
709
-
710
- describe "configure with a configuration file" do
711
- before { choose_config_file }
712
-
713
- it_behaves_like "windows installation"
714
- it_behaves_like "capistrano install"
715
- it_behaves_like "demo data"
716
-
717
- it "writes configuration to file" do
718
- run
719
- expect(output).to include_file_config
720
- expect(config_file).to configure_app_name(app_name)
721
- expect(config_file).to configure_push_api_key(push_api_key)
722
- expect(config_file).to configure_environment("development")
723
- expect(config_file).to configure_environment("staging")
724
- expect(config_file).to configure_environment("production")
725
- end
726
-
727
- it "completes the installation" do
728
- run
729
-
730
- expect(output).to include(*installation_instructions)
731
- expect(output).to include_complete_install
732
- end
733
- end
734
- end
735
- end
736
- end
737
-
738
- if !rails_present? && !sinatra_present? && !padrino_present? && !grape_present? &&
739
- !hanami2_present?
740
- context "with unknown framework" do
741
- let(:push_api_key) { "my_key" }
742
- let(:app_name) { "Test app" }
743
-
744
- it_behaves_like "push_api_key validation"
745
- it_behaves_like "requires an application name"
746
-
747
- describe "unknown framework specific tests" do
748
- let(:installation_instructions) do
749
- [
750
- "Installing",
751
- "\e[31mWarning: We could not detect which framework you are using\e[0m",
752
- "Some manual installation is most likely required.",
753
- "https://docs.appsignal.com/ruby/integrations.html"
754
- ]
755
- end
756
- before { enter_app_name app_name }
757
-
758
- describe "configuration with environment variables" do
759
- before { choose_environment_config }
760
-
761
- it_behaves_like "windows installation"
762
- it_behaves_like "capistrano install"
763
- it_behaves_like "demo data"
764
-
765
- it "prints environment variables" do
766
- run
767
-
768
- expect(output).to include_env_push_api_key(push_api_key)
769
- expect(output).to include_env_app_name(app_name)
770
- end
771
-
772
- it "completes the installation" do
773
- run
774
-
775
- expect(output).to include(*installation_instructions)
776
- expect(output).to include_complete_install
777
- end
778
- end
779
-
780
- describe "configure with a configuration file" do
781
- before { choose_config_file }
782
-
783
- it_behaves_like "windows installation"
784
- it_behaves_like "capistrano install"
785
- it_behaves_like "demo data"
786
-
787
- it "writes configuration to file" do
788
- run
789
- expect(output).to include_file_config
790
- expect(config_file).to configure_app_name(app_name)
791
- expect(config_file).to configure_push_api_key(push_api_key)
792
- expect(config_file).to configure_environment("development")
793
- expect(config_file).to configure_environment("staging")
794
- expect(config_file).to configure_environment("production")
795
- end
796
-
797
- it "completes the installation" do
798
- run
799
-
800
- expect(output).to include(*installation_instructions)
801
- expect(output).to include_complete_install
802
- end
803
- end
804
- end
805
-
806
- describe "color flag" do
807
- before do
808
- enter_app_name "Test app"
809
- choose_environment_config
810
- end
811
-
812
- context "without color options" do
813
- let(:options) { {} }
814
-
815
- it "prints the instructions in color" do
816
- run
817
- expect(output).to have_colorized_text(
818
- :green,
819
- "## Starting AppSignal Installer ##"
820
- )
821
- end
822
- end
823
-
824
- context "with --color option" do
825
- let(:options) { { "color" => nil } }
826
-
827
- it "prints the instructions in color" do
828
- run
829
- expect(output).to have_colorized_text(
830
- :green,
831
- "## Starting AppSignal Installer ##"
832
- )
833
- end
834
- end
835
-
836
- context "with --no-color option" do
837
- let(:options) { { "no-color" => nil } }
838
-
839
- it "prints the instructions without special colors" do
840
- run
841
- expect(output).to include("## Starting AppSignal Installer ##")
842
- expect(output).to_not have_color_markers
843
- end
844
- end
845
- end
846
- end
847
- end
848
- end