83 lines
2.4 KiB
Ruby
83 lines
2.4 KiB
Ruby
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
require 'minitest/autorun'
|
|
require_relative 'notify_backup'
|
|
|
|
class ByteFormatterTest < Minitest::Test
|
|
def test_gigabytes
|
|
assert_equal '4.50 GB', ByteFormatter.format(4_831_838_208)
|
|
end
|
|
|
|
def test_megabytes
|
|
assert_equal '823.00 MB', ByteFormatter.format(862_978_048)
|
|
end
|
|
|
|
def test_kilobytes
|
|
assert_equal '12.00 KB', ByteFormatter.format(12_288)
|
|
end
|
|
|
|
def test_bytes_below_one_kb
|
|
assert_equal '512 B', ByteFormatter.format(512)
|
|
end
|
|
|
|
def test_nil_returns_nil
|
|
assert_nil ByteFormatter.format(nil)
|
|
end
|
|
|
|
def test_string_integer_is_coerced
|
|
assert_equal '1.00 GB', ByteFormatter.format('1073741824')
|
|
end
|
|
end
|
|
|
|
class PayloadBuilderTest < Minitest::Test
|
|
def base_options
|
|
{ machine: 'desktop', destination: 'synology', status: 'success' }
|
|
end
|
|
|
|
def test_builds_required_fields
|
|
payload = PayloadBuilder.new(base_options).build
|
|
assert_equal 'desktop', payload[:machine]
|
|
assert_equal 'synology', payload[:destination]
|
|
assert_equal 'success', payload[:status]
|
|
assert_match(/\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z\z/, payload[:timestamp])
|
|
end
|
|
|
|
def test_formats_bytes_to_human_readable
|
|
payload = PayloadBuilder.new(base_options.merge(bytes: 1_073_741_824)).build
|
|
assert_equal '1.00 GB', payload[:bytes_transferred]
|
|
end
|
|
|
|
def test_omits_nil_optional_fields
|
|
payload = PayloadBuilder.new(base_options).build
|
|
refute payload.key?(:bytes_transferred)
|
|
refute payload.key?(:snapshot_id)
|
|
refute payload.key?(:log_path)
|
|
refute payload.key?(:notes)
|
|
end
|
|
|
|
def test_includes_all_optional_fields_when_present
|
|
opts = base_options.merge(
|
|
bytes: 1_048_576,
|
|
snapshot: 'abc12345',
|
|
log_path: '/home/jared/.local/log/restic/2026-05-07.log',
|
|
notes: 'snapshot abc12345 saved'
|
|
)
|
|
payload = PayloadBuilder.new(opts).build
|
|
assert_equal '1.00 MB', payload[:bytes_transferred]
|
|
assert_equal 'abc12345', payload[:snapshot_id]
|
|
assert_equal '/home/jared/.local/log/restic/2026-05-07.log', payload[:log_path]
|
|
assert_equal 'snapshot abc12345 saved', payload[:notes]
|
|
end
|
|
|
|
def test_raises_on_invalid_status
|
|
assert_raises(ArgumentError) { PayloadBuilder.new(base_options.merge(status: 'unknown')).build }
|
|
end
|
|
|
|
def test_all_valid_statuses_accepted
|
|
%w[success failure skipped].each do |s|
|
|
assert PayloadBuilder.new(base_options.merge(status: s)).build
|
|
end
|
|
end
|
|
end
|