Files
Dena/spec/support/rspec_matchers.rb
2026-08-13 19:50:53 +03:30

47 lines
1.3 KiB
Ruby

# encoding: UTF-8
# frozen_string_literal: true
RSpec::Matchers.define :be_d do |expected|
match do |actual|
if expected.is_a? BigDecimal
actual.to_d == expected
elsif expected.is_a? String
actual.to_d == expected.to_d
else
raise "not support type #{expected.class}"
end
end
failure_message do |actual|
"expected #{actual} would be of #{expected}"
end
end
RSpec::Matchers.define :include_api_error do |expected|
match do |actual|
raise 'actual doesnt respond to body' unless actual.respond_to?(:body)
raise 'expected is not a String' unless expected.is_a? String
errors = JSON.parse(actual.body)['errors']
!errors.nil? && expected.in?(errors)
end
# TODO: Better Error message. Same as in module RSpec::Matchers::BuiltIn::Include
failure_message do |actual|
"expected: #{JSON.parse(actual.body)['errors'].join(',')}\nto include: #{expected}\n"
end
end
RSpec::Matchers.define :include_ar_error do |attr, expected|
match do |actual|
raise 'actual is not subclass of ActiveRecord::Base' unless actual.is_a?(ActiveRecord::Base)
include(expected).matches?(actual.errors[attr])
end
# TODO: Better Error message. Same as in module RSpec::Matchers::BuiltIn::Include
failure_message do |actual|
"expected: #{actual.errors}\nto include: #{expected}\n"
end
end