mirror of
https://github.com/internetee/registry.git
synced 2025-08-03 00:12:03 +02:00
Add EPP response spec matcher
This commit is contained in:
parent
dfca1d4e69
commit
3038d240f7
6 changed files with 115 additions and 1 deletions
22
app/models/epp/response.rb
Normal file
22
app/models/epp/response.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
module EPP
|
||||
class Response
|
||||
attr_accessor :results
|
||||
|
||||
def self.from_xml(xml)
|
||||
xml_doc = Nokogiri::XML(xml)
|
||||
response = self.new
|
||||
|
||||
result_elements = xml_doc.css('result')
|
||||
|
||||
result_elements.each do |result_element|
|
||||
response.results << Result.new(result_element[:code].to_s, result_element.text.strip)
|
||||
end
|
||||
|
||||
response
|
||||
end
|
||||
|
||||
def initialize
|
||||
@results = []
|
||||
end
|
||||
end
|
||||
end
|
28
app/models/epp/response/result.rb
Normal file
28
app/models/epp/response/result.rb
Normal file
|
@ -0,0 +1,28 @@
|
|||
module EPP
|
||||
class Response
|
||||
class Result
|
||||
CODE_TO_TYPE = {
|
||||
'1000' => :success,
|
||||
'1001' => :success_pending,
|
||||
'1300' => :success_empty_queue,
|
||||
'1301' => :success_dequeue,
|
||||
'2001' => :syntax_error,
|
||||
'2003' => :required_param_missing,
|
||||
'2005' => :param_syntax_error,
|
||||
'2308' => :data_management_policy_violation,
|
||||
}
|
||||
|
||||
attr_accessor :code
|
||||
attr_accessor :message
|
||||
|
||||
def initialize(code, message)
|
||||
@code = code
|
||||
@message = message
|
||||
end
|
||||
|
||||
def self.codes
|
||||
CODE_TO_TYPE
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
21
spec/models/epp/response/result_spec.rb
Normal file
21
spec/models/epp/response/result_spec.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe EPP::Response::Result, db: false do
|
||||
# https://tools.ietf.org/html/rfc5730#section-3
|
||||
describe '::codes' do
|
||||
it 'returns codes' do
|
||||
codes = {
|
||||
'1000' => :success,
|
||||
'1001' => :success_pending,
|
||||
'1300' => :success_empty_queue,
|
||||
'1301' => :success_dequeue,
|
||||
'2001' => :syntax_error,
|
||||
'2003' => :required_param_missing,
|
||||
'2005' => :param_syntax_error,
|
||||
'2308' => :data_management_policy_violation,
|
||||
}
|
||||
|
||||
expect(described_class.codes).to eq(codes)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -10,6 +10,7 @@ require 'support/requests/epp_helpers'
|
|||
require 'support/features/session_helpers'
|
||||
require 'support/matchers/alias_attribute'
|
||||
require 'support/matchers/epp/code'
|
||||
require 'support/matchers/epp/have_result'
|
||||
|
||||
require 'support/capybara'
|
||||
require 'support/devise'
|
||||
|
@ -28,7 +29,8 @@ RSpec.configure do |config|
|
|||
config.include AbstractController::Translation, type: :request
|
||||
config.include AbstractController::Translation, type: :feature
|
||||
config.include AbstractController::Translation, type: :mailer
|
||||
config.include Requests::EPPHelpers, type: :request
|
||||
config.include Requests::EPPHelpers, epp: true
|
||||
config.include Matchers::EPP, epp: true
|
||||
|
||||
config.define_derived_metadata(file_path: %r[/spec/features/]) do |metadata|
|
||||
metadata[:db] = true if metadata[:db].nil?
|
||||
|
|
37
spec/support/matchers/epp/have_result.rb
Normal file
37
spec/support/matchers/epp/have_result.rb
Normal file
|
@ -0,0 +1,37 @@
|
|||
module Matchers
|
||||
module EPP
|
||||
class HaveResultMatcher
|
||||
def initialize(expected)
|
||||
@expected = expected
|
||||
end
|
||||
|
||||
def matches?(target)
|
||||
@target = target
|
||||
|
||||
if @expected.message.present?
|
||||
@target.results.any? { |result| result.code == @expected.code && result.message == @expected.message }
|
||||
else
|
||||
@target.results.any? { |result| result.code == @expected.code }
|
||||
end
|
||||
end
|
||||
|
||||
def failure_message
|
||||
"expected #{@target.results} to have result #{@expected.inspect}"
|
||||
end
|
||||
|
||||
def failure_message_when_negated
|
||||
"expected #{@target.results} not to have result #{@expected.inspect}"
|
||||
end
|
||||
|
||||
def description
|
||||
"should have EPP code of #{@expected}"
|
||||
end
|
||||
end
|
||||
|
||||
def have_result(type, message = nil)
|
||||
code = ::EPP::Response::Result.codes.key(type)
|
||||
result = ::EPP::Response::Result.new(code, message)
|
||||
HaveResultMatcher.new(result)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -7,5 +7,9 @@ module Requests
|
|||
def valid_legal_document
|
||||
Base64.encode64('a' * 5000)
|
||||
end
|
||||
|
||||
def epp_response
|
||||
EPP::Response.from_xml(response.body)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue