From 04944b8ac4680d493435254817a53a828ec316da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Mon, 21 Dec 2020 14:19:27 +0200 Subject: [PATCH] Improve bulk renew tests --- .../registrar/bulk_change_controller.rb | 2 +- .../repp/v1/domains/renews_controller.rb | 6 +-- app/models/depp/domain.rb | 10 ---- app/models/repp_api.rb | 11 +++++ .../repp/v1/domains/bulk_renew_test.rb | 49 ++++++++++++------- .../bulk_change/bulk_renew_test.rb | 19 ++++++- 6 files changed, 62 insertions(+), 35 deletions(-) create mode 100644 app/models/repp_api.rb diff --git a/app/controllers/registrar/bulk_change_controller.rb b/app/controllers/registrar/bulk_change_controller.rb index 1e8220aa5..f4f6707a5 100644 --- a/app/controllers/registrar/bulk_change_controller.rb +++ b/app/controllers/registrar/bulk_change_controller.rb @@ -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)) diff --git a/app/controllers/repp/v1/domains/renews_controller.rb b/app/controllers/repp/v1/domains/renews_controller.rb index 052228e67..6b016dd86 100644 --- a/app/controllers/repp/v1/domains/renews_controller.rb +++ b/app/controllers/repp/v1/domains/renews_controller.rb @@ -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 diff --git a/app/models/depp/domain.rb b/app/models/depp/domain.rb index e37f03334..3bb3b7473 100644 --- a/app/models/depp/domain.rb +++ b/app/models/depp/domain.rb @@ -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) diff --git a/app/models/repp_api.rb b/app/models/repp_api.rb new file mode 100644 index 000000000..40c080a0b --- /dev/null +++ b/app/models/repp_api.rb @@ -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 diff --git a/test/integration/repp/v1/domains/bulk_renew_test.rb b/test/integration/repp/v1/domains/bulk_renew_test.rb index fde383682..4cec91914 100644 --- a/test/integration/repp/v1/domains/bulk_renew_test.rb +++ b/test/integration/repp/v1/domains/bulk_renew_test.rb @@ -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 diff --git a/test/system/registrar_area/bulk_change/bulk_renew_test.rb b/test/system/registrar_area/bulk_change/bulk_renew_test.rb index 41c045903..5e1704afd 100644 --- a/test/system/registrar_area/bulk_change/bulk_renew_test.rb +++ b/test/system/registrar_area/bulk_change/bulk_renew_test.rb @@ -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'