Improve bulk renew tests

This commit is contained in:
Karl Erik Õunapuu 2020-12-21 14:19:27 +02:00
parent 66114aa648
commit 04944b8ac4
No known key found for this signature in database
GPG key ID: C9DD647298A34764
6 changed files with 62 additions and 35 deletions

View file

@ -13,7 +13,7 @@ class Registrar
set_form_data
if ready_to_renew?
res = Depp::Domain.bulk_renew(domain_ids_for_bulk_renew, params[:period],
res = ReppApi.bulk_renew(domain_ids_for_bulk_renew, params[:period],
current_registrar_user)
flash_message(JSON.parse(res))

View file

@ -9,8 +9,8 @@ module Repp
renew = run_bulk_renew_task(@domains, bulk_renew_params[:renew_period])
return render_success(data: { updated_domains: @domains.map(&:name) }) if renew.valid?
@epp_errors << { code: 2304,
msg: renew.errors.keys.map { |k, _v| renew.errors[k] }.join(',') }
@epp_errors << { code: 2002,
msg: renew.errors.keys.map { |k, _v| renew.errors[k] }.join(', ') }
handle_errors
end
@ -21,7 +21,7 @@ module Repp
periods = Depp::Domain::PERIODS.map { |p| p[1] }
return if periods.include? bulk_renew_params[:renew_period]
@epp_errors << { code: 2005, msg: "Invalid renew period" }
@epp_errors << { code: 2005, msg: 'Invalid renew period' }
end
def select_renewable_domains

View file

@ -30,16 +30,6 @@ module Depp
['10 years', '10y'],
]
def self.bulk_renew(domains, period, registrar)
payload = { domains: domains, renew_period: period }
token = Base64.urlsafe_encode64("#{registrar.username}:#{registrar.plain_text_password}")
headers = { Authorization: "Basic #{token}" }
RestClient.post("http://localhost:3000/repp/v1/domains/renew/bulk", payload, headers)
rescue RestClient::ExceptionWithResponse => e
e.response
end
def initialize(args = {})
self.current_user = args[:current_user]
self.epp_xml = EppXml::Domain.new(cl_trid_prefix: current_user.tag)

11
app/models/repp_api.rb Normal file
View file

@ -0,0 +1,11 @@
class ReppApi
def self.bulk_renew(domains, period, registrar)
payload = { domains: domains, renew_period: period }
token = Base64.urlsafe_encode64("#{registrar.username}:#{registrar.plain_text_password}")
headers = { Authorization: "Basic #{token}" }
RestClient.post("#{ENV['repp_url']}domains/renew/bulk", payload, headers)
rescue RestClient::ExceptionWithResponse => e
e.response
end
end

View file

@ -6,7 +6,6 @@ class ReppV1DomainsBulkRenewTest < ActionDispatch::IntegrationTest
@user = users(:api_bestnames)
token = Base64.encode64("#{@user.username}:#{@user.plain_text_password}")
token = "Basic #{token}"
@domain = domains(:hospital)
@auth_headers = { 'Authorization' => token }
end
@ -20,15 +19,22 @@ class ReppV1DomainsBulkRenewTest < ActionDispatch::IntegrationTest
],
"renew_period": "1y"
}
post "/repp/v1/domains/renew/bulk", headers: @auth_headers, params: payload
json = JSON.parse(response.body, symbolize_names: true)
assert_response :ok
assert_equal 1000, json[:code]
assert_equal 'Command completed successfully', json[:message]
assert json[:data][:updated_domains].include? 'shop.test'
assert json[:data][:updated_domains].include? 'airport.test'
assert json[:data][:updated_domains].include? 'library.test'
assert_changes -> { Domain.find_by(name: 'shop.test').valid_to } do
assert_changes -> { Domain.find_by(name: 'airport.test').valid_to } do
assert_changes -> { Domain.find_by(name: 'library.test').valid_to } do
post "/repp/v1/domains/renew/bulk", headers: @auth_headers, params: payload
json = JSON.parse(response.body, symbolize_names: true)
assert_response :ok
assert_equal 1000, json[:code]
assert_equal 'Command completed successfully', json[:message]
assert json[:data][:updated_domains].include? 'shop.test'
assert json[:data][:updated_domains].include? 'airport.test'
assert json[:data][:updated_domains].include? 'library.test'
end
end
end
end
def test_throws_error_when_domain_not_renewable
@ -38,12 +44,14 @@ class ReppV1DomainsBulkRenewTest < ActionDispatch::IntegrationTest
],
"renew_period": "1y"
}
post "/repp/v1/domains/renew/bulk", headers: @auth_headers, params: payload
json = JSON.parse(response.body, symbolize_names: true)
assert_no_changes -> { Domain.find_by(name: 'invalid.test').valid_to } do
post "/repp/v1/domains/renew/bulk", headers: @auth_headers, params: payload
json = JSON.parse(response.body, symbolize_names: true)
assert_response :bad_request
assert_equal 2304, json[:code]
assert_equal 'Domain renew error for invalid.test', json[:message]
assert_response :bad_request
assert_equal 2002, json[:code]
assert_equal 'Domain renew error for invalid.test', json[:message]
end
end
def test_throws_error_when_not_enough_balance
@ -54,12 +62,15 @@ class ReppV1DomainsBulkRenewTest < ActionDispatch::IntegrationTest
],
"renew_period": "1y"
}
post "/repp/v1/domains/renew/bulk", headers: @auth_headers, params: payload
json = JSON.parse(response.body, symbolize_names: true)
assert_response :bad_request
assert_equal 2304, json[:code]
assert_equal 'Not enough funds for renew domains', json[:message]
assert_no_changes -> { Domain.find_by(name: 'invalid.test').valid_to } do
post "/repp/v1/domains/renew/bulk", headers: @auth_headers, params: payload
json = JSON.parse(response.body, symbolize_names: true)
assert_response :bad_request
assert_equal 2002, json[:code]
assert_equal 'Not enough funds for renew domains', json[:message]
end
end
def test_throws_error_if_invalid_renew_period

View file

@ -28,14 +28,21 @@ class BulkRenewTest < ApplicationSystemTestCase
sign_in users(:api_bestnames)
travel_to Time.zone.parse('2010-07-05 10:30')
req_body = { domains: ["shop.test", "airport.test", "library.test", "invalid.test"], renew_period: "1y" }
stub_request(:post, "#{ENV['repp_url']}domains/renew/bulk").with(body: req_body)
.to_return(status: 400, body: {
code: 2304,
message: "Domain renew error for invalid.test",
data: {}
}.to_json)
visit new_registrar_bulk_change_url
click_link('Bulk renew')
select '1 year', from: 'Period'
click_button 'Filter'
click_button 'Renew'
assert_text 'invalid.test'
assert_no_text 'shop.test'
assert_text 'Domain renew error for invalid.test'
end
def test_bulk_renew_checks_balance
@ -43,6 +50,14 @@ class BulkRenewTest < ApplicationSystemTestCase
@price.update(price_cents: 99999999)
travel_to Time.zone.parse('2010-07-05 10:30')
req_body = { domains: ["shop.test", "airport.test", "library.test", "invalid.test"], renew_period: "1y" }
stub_request(:post, "#{ENV['repp_url']}domains/renew/bulk").with(body: req_body)
.to_return(status: 400, body: {
code: 2304,
message: "Not enough funds for renew domains",
data: {}
}.to_json)
visit new_registrar_bulk_change_url
click_link('Bulk renew')
select '1 year', from: 'Period'