diff --git a/test/integration/epp/domain/domain_renew_test.rb b/test/integration/epp/domain/domain_renew_test.rb
deleted file mode 100644
index e1dfbdae1b..0000000000
--- a/test/integration/epp/domain/domain_renew_test.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require 'test_helper'
-
-class EppDomainRenewTest < EppTestCase
- self.use_transactional_fixtures = false
-
- setup do
- travel_to Time.zone.parse('2010-07-05')
- end
-
- def test_domain_cannot_be_renewed_when_invalid
- request_xml = <<-XML
-
-
-
-
-
- invalid.test
- 2010-07-05
- 1
-
-
-
-
- XML
-
- assert_no_changes -> { domains(:invalid).valid_to } do
- post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
- end
- assert_epp_response :object_status_prohibits_operation
- end
-end
diff --git a/test/integration/epp/domain/renew/base_test.rb b/test/integration/epp/domain/renew/base_test.rb
new file mode 100644
index 0000000000..537e697c9e
--- /dev/null
+++ b/test/integration/epp/domain/renew/base_test.rb
@@ -0,0 +1,166 @@
+require 'test_helper'
+
+class EppDomainRenewBaseTest < EppTestCase
+ self.use_transactional_fixtures = false
+
+ def test_renews_domain
+ travel_to Time.zone.parse('2010-07-05')
+ domain = domains(:shop)
+ original_valid_to = domain.valid_to
+ default_renewal_period = 1.year
+
+ request_xml = <<-XML
+
+
+
+
+
+ #{domain.name}
+ #{domain.expire_time.to_date}
+ 1
+
+
+
+
+ XML
+
+ post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
+ domain.reload
+
+ assert_epp_response :completed_successfully
+ assert_equal original_valid_to + default_renewal_period, domain.valid_to
+ end
+
+ def test_domain_cannot_be_renewed_when_invalid
+ domain = domains(:invalid)
+
+ request_xml = <<-XML
+
+
+
+
+
+ #{domain.name}
+ #{domain.valid_to.to_date}
+ 1
+
+
+
+
+ XML
+
+ assert_no_changes -> { domain.valid_to } do
+ post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
+ domain.reload
+ end
+ assert_epp_response :object_status_prohibits_operation
+ end
+
+ def test_domain_cannot_be_renewed_when_belongs_to_another_registrar
+ domain = domains(:metro)
+ session = epp_sessions(:api_bestnames)
+ assert_not_equal session.user.registrar, domain.registrar
+
+ request_xml = <<-XML
+
+
+
+
+
+ #{domain.name}
+ #{domain.valid_to.to_date}
+ 1
+
+
+
+
+ XML
+
+ assert_no_changes -> { domain.valid_to } do
+ post '/epp/command/renew', { frame: request_xml },
+ 'HTTP_COOKIE' => "session=#{session.session_id}"
+ domain.reload
+ end
+ assert_epp_response :authorization_error
+ end
+
+ def test_insufficient_funds
+ domain = domains(:shop)
+ session = epp_sessions(:api_bestnames)
+ session.user.registrar.accounts.first.update!(balance: 0)
+
+ request_xml = <<-XML
+
+
+
+
+
+ #{domain.name}
+ #{domain.expire_time.to_date}
+ 1
+
+
+
+
+ XML
+
+ assert_no_difference -> { domain.valid_to } do
+ post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' =>
+ "session=#{session.session_id}"
+ domain.reload
+ end
+ assert_epp_response :billing_failure
+ end
+
+ def test_no_price
+ domain = domains(:shop)
+ assert_nil Billing::Price.find_by(duration: '2 months')
+
+ request_xml = <<-XML
+
+
+
+
+
+ #{domain.name}
+ #{domain.expire_time.to_date}
+ 2
+
+
+
+
+ XML
+
+ assert_no_changes -> { domain.valid_to } do
+ post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
+ domain.reload
+ end
+ assert_epp_response :billing_failure
+ end
+
+ def test_fails_when_provided_expiration_date_is_wrong
+ domain = domains(:shop)
+ provided_expiration_date = Date.parse('2010-07-06')
+ assert_not_equal provided_expiration_date, domain.valid_to
+
+ request_xml = <<-XML
+
+
+
+
+
+ #{domain.name}
+ #{provided_expiration_date}
+
+
+
+
+ XML
+
+ assert_no_changes -> { domain.valid_to } do
+ post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
+ domain.reload
+ end
+ assert_epp_response :parameter_value_policy_error
+ end
+end