datapipeline 3.2.0: Benachrichtigungen mit Webhook, Slack und E-Mail
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
require_relative '../test_helper'
|
||||
require 'open3'
|
||||
require_relative '../support/test_http_server'
|
||||
|
||||
# bin/etl as a subprocess: arguments, params, dry run, exit codes
|
||||
class EtlCliTest < PipelineTest
|
||||
@@ -127,4 +128,44 @@ class EtlCliTest < PipelineTest
|
||||
assert_equal ['export_kunden', 3, true], entry.values_at('name', 'read', 'ok')
|
||||
end
|
||||
end
|
||||
|
||||
def test_notify_one_report_for_all_pipelines_of_the_script
|
||||
server = TestHttpServer.new { [200, 'ok'] }
|
||||
with_tmpdir do |dir|
|
||||
Dir.mkdir("#{dir}/config")
|
||||
File.write("#{dir}/config/connections.yml", "alerts:\n type: webhook\n url: #{server.url}/hook\n")
|
||||
path = script(dir, 'zwei.rb', <<~RUBY)
|
||||
2.times do |i|
|
||||
DataPipeline.new do
|
||||
name "teil\#{i}"
|
||||
on_error :skip
|
||||
read container(:csv, file: 'in.csv')
|
||||
validate 'a' => { format: /\\A\\d+\\z/ } if i == 1
|
||||
write container(:csv, file: "out\#{i}.csv")
|
||||
end.run
|
||||
end
|
||||
RUBY
|
||||
_out, err, status = etl(dir, 'run', path, '--notify=alerts')
|
||||
assert_equal 2, status.exitstatus, err
|
||||
assert_equal 1, server.requests.size
|
||||
payload = JSON.parse(server.requests.last[:body])
|
||||
assert_equal ['run.rejected', 'zwei', %w[teil0 teil1]], [payload['event'], payload['title'], payload['runs'].map { |r| r['name'] }]
|
||||
|
||||
_out, err, status = etl(dir, 'run', path, '--notify=alerts', '--notify-on=failure')
|
||||
assert_equal 2, status.exitstatus, err
|
||||
assert_equal 1, server.requests.size # nothing failed
|
||||
|
||||
broken = script(dir, 'kaputt.rb', "raise 'Skriptfehler'\n")
|
||||
_out, _err, status = etl(dir, 'run', broken, '--notify=alerts')
|
||||
assert_equal 1, status.exitstatus
|
||||
payload = JSON.parse(server.requests.last[:body])
|
||||
assert_equal ['run.failed', 'RuntimeError: Skriptfehler', []], payload.values_at('event', 'error', 'runs')
|
||||
|
||||
_out, err, status = etl(dir, 'run', path, '--notify=gibtsnicht')
|
||||
assert_equal 1, status.exitstatus
|
||||
assert_includes err, 'etl: --notify=gibtsnicht: connection "gibtsnicht" not in config/connections.yml (alerts)'
|
||||
end
|
||||
ensure
|
||||
server&.stop
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user