diff --git a/spec/api/repp/contact_v1_spec.rb b/spec/api/repp/contact_v1_spec.rb deleted file mode 100644 index 77ce38d2e..000000000 --- a/spec/api/repp/contact_v1_spec.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'rails_helper' - -RSpec.describe Repp::ContactV1, db: true do - let(:user) { create(:api_user, registrar: registrar) } - let(:registrar) { create(:registrar) } - - describe '/contacts' do - let(:returned_attributes) { HashWithIndifferentAccess.new(JSON.parse(response.body)['contacts'].first).keys } - subject(:address_included) { Contact.address_attribute_names.any? { |attr| returned_attributes.include?(attr.to_s) } } - - before do - Grape::Endpoint.before_each do |endpoint| - allow(endpoint).to receive(:current_user).and_return(user) - end - - registrar.contacts << create(:contact) - end - - it 'responds with success' do - get '/repp/v1/contacts', { limit: 1, details: true }, { 'HTTP_AUTHORIZATION' => http_auth_key } - expect(response).to have_http_status(:success) - end - - context 'when address processing is enabled' do - before do - expect(Contact).to receive(:address_processing?).and_return(true) - get '/repp/v1/contacts', { limit: 1, details: true }, { 'HTTP_AUTHORIZATION' => http_auth_key } - end - - it 'returns contact address' do - expect(address_included).to be_truthy - end - end - - context 'when address processing is disabled' do - before do - expect(Contact).to receive(:address_processing?).and_return(false) - get '/repp/v1/contacts', { limit: 1, details: true }, { 'HTTP_AUTHORIZATION' => http_auth_key } - end - - it 'does not return contact address' do - expect(address_included).to be_falsy - end - end - end - - def http_auth_key - ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.plain_text_password) - end -end diff --git a/spec/features/admin/billing/prices/edit_spec.rb b/spec/features/admin/billing/prices/edit_spec.rb deleted file mode 100644 index 8ef87b9a0..000000000 --- a/spec/features/admin/billing/prices/edit_spec.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Editing price in admin area', settings: false do - given!(:price) { create(:effective_price) } - - background do - sign_in_to_admin_area - end - - scenario 'updates price' do - visit admin_prices_path - open_form - submit_form - - expect(page).to have_text(t('admin.billing.prices.update.updated')) - end - - def open_form - find('.edit-price-btn').click - end - - def submit_form - click_link_or_button t('admin.billing.prices.form.update_btn') - end -end diff --git a/spec/features/admin/billing/prices/expire_spec.rb b/spec/features/admin/billing/prices/expire_spec.rb deleted file mode 100644 index 9a835f09c..000000000 --- a/spec/features/admin/billing/prices/expire_spec.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Expiring price in admin area', settings: false do - given!(:price) { create(:effective_price) } - - background do - sign_in_to_admin_area - end - - scenario 'expires price' do - visit admin_prices_path - open_edit_form - expire - - expect(page).to have_text(t('admin.billing.prices.expire.expired')) - end - - def open_edit_form - find('.edit-price-btn').click - end - - def expire - click_link_or_button t('admin.billing.prices.edit.expire_btn') - end -end diff --git a/spec/features/admin/billing/prices/list_spec.rb b/spec/features/admin/billing/prices/list_spec.rb deleted file mode 100644 index 95ebcb975..000000000 --- a/spec/features/admin/billing/prices/list_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Viewing prices in admin area', settings: false do - given!(:effective_price) { create(:effective_price) } - given!(:expired_price) { create(:expired_price) } - - background do - sign_in_to_admin_area - end - - describe 'search' do - context 'when status is not selected' do - scenario 'shows effective prices' do - visit admin_prices_path - expect(page).to have_css('.price', count: 1) - end - end - - context 'when status is given' do - scenario 'filters by given status' do - visit admin_prices_path - select Admin::Billing::PricesController.default_status.capitalize, from: 'search_status' - submit_search_form - - expect(page).to have_css('.price', count: 1) - end - end - - def submit_search_form - find('.price-search-form-search-btn').click - end - end -end diff --git a/spec/features/admin/billing/prices/new_spec.rb b/spec/features/admin/billing/prices/new_spec.rb deleted file mode 100644 index 9d11938bb..000000000 --- a/spec/features/admin/billing/prices/new_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'New price in admin area', settings: false do - given!(:zone) { create(:zone, origin: 'test') } - - background do - sign_in_to_admin_area - end - - scenario 'it creates new price' do - open_list - open_form - fill_form - submit_form - - expect(page).to have_text(t('admin.billing.prices.create.created')) - end - - def open_list - click_link_or_button t('admin.base.menu.prices') - end - - def open_form - click_link_or_button t('admin.billing.prices.index.new_btn') - end - - def fill_form - select 'test', from: 'price_zone_id' - select Billing::Price.operation_categories.first, from: 'price_operation_category' - select '3 months', from: 'price_duration' - fill_in 'price_price', with: '1' - end - - def submit_form - click_link_or_button t('admin.billing.prices.form.create_btn') - end -end diff --git a/spec/features/admin/dns/zones/edit_spec.rb b/spec/features/admin/dns/zones/edit_spec.rb deleted file mode 100644 index 8b61683ce..000000000 --- a/spec/features/admin/dns/zones/edit_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Editing zone in admin area', settings: false do - given!(:zone) { create(:zone) } - - background do - sign_in_to_admin_area - end - - scenario 'updates zone' do - visit admin_zones_url - open_form - submit_form - - expect(page).to have_text(t('admin.dns.zones.update.updated')) - end - - def open_list - click_link_or_button t('admin.base.menu.zones') - end - - def open_form - click_link_or_button 'admin-edit-zone-btn' - end - - def submit_form - click_link_or_button t('admin.dns.zones.form.update_btn') - end -end diff --git a/spec/features/admin/dns/zones/new_spec.rb b/spec/features/admin/dns/zones/new_spec.rb deleted file mode 100644 index 78fd05195..000000000 --- a/spec/features/admin/dns/zones/new_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'New zone in admin area', settings: false do - background do - sign_in_to_admin_area - end - - scenario 'it creates new zone' do - open_list - open_form - fill_form - submit_form - - expect(page).to have_text(t('admin.dns.zones.create.created')) - end - - def open_list - click_link_or_button t('admin.base.menu.zones') - end - - def open_form - click_link_or_button t('admin.dns.zones.index.new_btn') - end - - def fill_form - fill_in 'zone_origin', with: 'test' - fill_in 'zone_ttl', with: '1' - fill_in 'zone_refresh', with: '1' - fill_in 'zone_retry', with: '1' - fill_in 'zone_expire', with: '1' - fill_in 'zone_minimum_ttl', with: '1' - fill_in 'zone_email', with: 'test@test.com' - fill_in 'zone_master_nameserver', with: 'test.test' - end - - def submit_form - click_link_or_button t('admin.dns.zones.form.create_btn') - end -end diff --git a/spec/features/admin/settings/create_spec.rb b/spec/features/admin/settings/create_spec.rb deleted file mode 100644 index d30e93e8e..000000000 --- a/spec/features/admin/settings/create_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Admin settings' do - background do - sign_in_to_admin_area - end - - it 'saves settings' do - visit admin_settings_path - click_link_or_button 'Save' - expect(page).to have_text(t('admin.settings.create.saved')) - end -end diff --git a/spec/features/registrar/contacts/delete_spec.rb b/spec/features/registrar/contacts/delete_spec.rb deleted file mode 100644 index d0169ad54..000000000 --- a/spec/features/registrar/contacts/delete_spec.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'rails_helper' - -class FakeDeppContact - include ActiveModel::Model - - def id - 'test' - end - - def name - 'test' - end - - def persisted? - true - end - - def password - 'test' - end - - def delete - true - end -end - -RSpec.feature 'Contact deletion in registrar area' do - given!(:registrar) { create(:registrar) } - given!(:contact) { create(:contact, registrar: registrar) } - - background do - allow(Depp::Contact).to receive(:find_by_id).and_return(FakeDeppContact.new) - allow(Depp::Contact).to receive(:new).and_return(FakeDeppContact.new) - sign_in_to_registrar_area(user: create(:api_user_with_unlimited_balance, registrar: registrar)) - end - - it 'deletes contact' do - visit registrar_contacts_url - click_link_or_button 'Delete' - confirm - - expect(page).to have_text('Destroyed') - end - - private - - def confirm - click_link_or_button 'Delete' - end -end diff --git a/spec/features/registrar/contacts/list_spec.rb b/spec/features/registrar/contacts/list_spec.rb deleted file mode 100644 index 96f1f2c98..000000000 --- a/spec/features/registrar/contacts/list_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Contact list', settings: false do - given!(:registrar) { create(:registrar) } - given!(:contact) { create(:contact, registrar: registrar) } - - background do - sign_in_to_registrar_area(user: create(:api_user_with_unlimited_balance, registrar: registrar)) - end - - it 'is visible' do - visit registrar_contacts_path - expect(page).to have_css('.contacts') - end -end diff --git a/spec/features/registrar/domains/new_spec.rb b/spec/features/registrar/domains/new_spec.rb deleted file mode 100644 index 4dd1d85d5..000000000 --- a/spec/features/registrar/domains/new_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'New domain in registrar area', settings: false do - background do - sign_in_to_registrar_area - end - - it 'has default period' do - visit registrar_domains_path - click_link_or_button t('new') - - expect(page).to have_field('domain_period', with: Depp::Domain.default_period) - end -end diff --git a/spec/features/registrar/domains/renew_spec.rb b/spec/features/registrar/domains/renew_spec.rb deleted file mode 100644 index 1d6ab0a7e..000000000 --- a/spec/features/registrar/domains/renew_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Renew domain in registrar area' do - given!(:registrar) { create(:registrar) } - given!(:user) { create(:api_user, registrar: registrar) } - given!(:domain) { create(:domain, registrar: registrar) } - - background do - sign_in_to_registrar_area(user: user) - end - - it 'has default period' do - visit registrar_domains_path - click_link_or_button t('renew') - - expect(page).to have_field('period', with: Depp::Domain.default_period) - end -end diff --git a/spec/features/registrar/ip_restriction_spec.rb b/spec/features/registrar/ip_restriction_spec.rb deleted file mode 100644 index 264c45283..000000000 --- a/spec/features/registrar/ip_restriction_spec.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Registrar area IP restriction', settings: false do - before do - @original_registrar_ip_whitelist_enabled = Setting.registrar_ip_whitelist_enabled - end - - after do - Setting.registrar_ip_whitelist_enabled = @original_registrar_ip_whitelist_enabled - end - - scenario 'notifies the user if his IP is not allowed' do - Setting.registrar_ip_whitelist_enabled = true - visit registrar_root_path - expect(page).to have_text('Access denied from IP 127.0.0.1') - end -end diff --git a/spec/features/registrar/linked_users_spec.rb b/spec/features/registrar/linked_users_spec.rb deleted file mode 100644 index aa1e3785b..000000000 --- a/spec/features/registrar/linked_users_spec.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'Registrar area linked users', settings: false do - given!(:current_user) { create(:api_user_with_unlimited_balance, id: 1, identity_code: 'test') } - given!(:linked_user) { create(:api_user_with_unlimited_balance, id: 2, identity_code: 'test', - username: 'new-user-name') } - - background do - sign_in_to_registrar_area(user: current_user) - end - - scenario 'switches current user to a linked one' do - visit registrar_account_path - click_link_or_button 'switch-current-user-2-btn' - expect(page).to have_text('You are now signed in as a user "new-user-name"') - end -end diff --git a/spec/jobs/domain_expire_email_job_spec.rb b/spec/jobs/domain_expire_email_job_spec.rb deleted file mode 100644 index a25999b77..000000000 --- a/spec/jobs/domain_expire_email_job_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'rails_helper' - -RSpec.describe DomainExpireEmailJob do - describe '#run' do - let(:domain) { instance_double(Domain) } - - before :example do - expect(Domain).to receive(:find).and_return(domain) - end - - after :example do - domain_id = 1 - described_class.enqueue(domain_id) - end - - context 'when domain is expired' do - let(:message) { instance_double(ActionMailer::MessageDelivery) } - - before :example do - allow(domain).to receive_messages( - registrar: 'registrar', - registered?: false, - primary_contact_emails: %w(test@test.com test@test.com)) - end - - it 'sends email' do - expect(DomainExpireMailer).to receive(:expired).with(domain: domain, registrar: 'registrar') - .and_return(message) - expect(message).to receive(:deliver_now) - end - end - - context 'when domain is registered' do - before :example do - allow(domain).to receive(:registered?).and_return(true) - end - - it 'does not send email' do - expect(DomainExpireMailer).to_not receive(:expired) - end - end - end -end diff --git a/spec/jobs/registrant_change_expired_email_job_spec.rb b/spec/jobs/registrant_change_expired_email_job_spec.rb deleted file mode 100644 index 1486417ea..000000000 --- a/spec/jobs/registrant_change_expired_email_job_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'rails_helper' - -RSpec.describe RegistrantChangeExpiredEmailJob do - describe '#run' do - let(:domain) { instance_double(Domain, - id: 1, - name: 'test.com', - new_registrant_email: 'new-registrant@test.com', - registrar: 'registrar', - registrant: 'registrant') - } - let(:message) { instance_double(ActionMailer::MessageDelivery) } - - before :example do - expect(Domain).to receive(:find).and_return(domain) - end - - after :example do - domain_id = 1 - described_class.enqueue(domain_id) - end - - it 'creates log record' do - log_message = 'Send RegistrantChangeMailer#expired email for domain test.com (#1) to new-registrant@test.com' - - allow(RegistrantChangeMailer).to receive(:expired).and_return(message) - allow(message).to receive(:deliver_now) - - expect(Rails.logger).to receive(:info).with(log_message) - end - - it 'sends email' do - expect(RegistrantChangeMailer).to receive(:expired).with(domain: domain, - registrar: 'registrar', - registrant: 'registrant') - .and_return(message) - expect(message).to receive(:deliver_now) - end - end -end diff --git a/spec/lib/validators/e164.rb b/spec/lib/validators/e164.rb deleted file mode 100644 index bfb4914a3..000000000 --- a/spec/lib/validators/e164.rb +++ /dev/null @@ -1,29 +0,0 @@ -# https://en.wikipedia.org/wiki/E.164 - -RSpec.shared_examples 'e164' do - describe 'validation' do - it 'rejects invalid format' do - model.send("#{attribute}=", '+.1') - model.validate - expect(model.errors).to be_added(attribute, :invalid) - end - - it 'rejects longer than max length' do - model.send("#{attribute}=", '1' * 18) - model.validate - expect(model.errors).to be_added(attribute, :too_long, count: 17) - end - - it 'accepts valid format' do - model.send("#{attribute}=", '+123.4') - model.validate - expect(model.errors).to_not be_added(attribute, :invalid) - end - - it 'accepts max length' do - model.send("#{attribute}=", '1' * 17) - model.validate - expect(model.errors).to_not be_added(attribute, :too_long, count: 17) - end - end -end diff --git a/spec/lib/validators/email_validator_spec.rb b/spec/lib/validators/email_validator_spec.rb deleted file mode 100644 index ecaadc8a7..000000000 --- a/spec/lib/validators/email_validator_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'spec_helper' - -RSpec.describe EmailValidator do - describe '#valid?' do - subject(:valid) { described_class.new(email).valid? } - - context 'when email is valid' do - let(:email) { 'test@test.com' } - - it 'returns truthy' do - expect(valid).to be_truthy - end - end - - context 'when email is invalid' do - let(:email) { 'invalid' } - - it 'returns falsey' do - expect(valid).to be_falsey - end - end - end -end diff --git a/spec/lib/validators/iso31661_alpha2.rb b/spec/lib/validators/iso31661_alpha2.rb deleted file mode 100644 index 618a68cfb..000000000 --- a/spec/lib/validators/iso31661_alpha2.rb +++ /dev/null @@ -1,17 +0,0 @@ -# https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 - -RSpec.shared_examples 'iso31661_alpha2' do - describe 'validation' do - it 'rejects invalid' do - model.send("#{attribute}=", 'invalid') - model.validate - expect(model.errors).to be_added(attribute, :invalid_iso31661_alpha2) - end - - it 'accepts valid' do - model.send("#{attribute}=", 'US') - model.validate - expect(model.errors).to_not be_added(attribute, :invalid_iso31661_alpha2) - end - end -end diff --git a/spec/lib/validators/iso8601.rb b/spec/lib/validators/iso8601.rb deleted file mode 100644 index 78d8f2c4a..000000000 --- a/spec/lib/validators/iso8601.rb +++ /dev/null @@ -1,17 +0,0 @@ -# https://en.wikipedia.org/wiki/ISO_8601 - -RSpec.shared_examples 'iso8601' do - describe 'validation' do - it 'rejects invalid' do - model.send("#{attribute}=", '2010-07-0') - model.validate - expect(model.errors).to be_added(attribute, :invalid_iso8601_date) - end - - it 'accepts valid' do - model.send("#{attribute}=", '2010-07-05') - model.validate - expect(model.errors).to_not be_added(attribute, :invalid_iso8601_date) - end - end -end diff --git a/spec/models/account_activity_spec.rb b/spec/models/account_activity_spec.rb deleted file mode 100644 index 59e88c98b..000000000 --- a/spec/models/account_activity_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'rails_helper' - -RSpec.describe AccountActivity do - describe 'account validation', db: false do - subject(:account_activity) { described_class.new } - - it 'rejects absent' do - account_activity.account = nil - account_activity.validate - expect(account_activity.errors).to have_key(:account) - end - end -end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb deleted file mode 100644 index 46cef0b09..000000000 --- a/spec/models/account_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'rails_helper' - -RSpec.describe Account do - describe 'registrar validation', db: false do - subject(:account) { described_class.new } - - it 'rejects absent' do - account.registrar = nil - account.validate - expect(account.errors).to have_key(:registrar) - end - end -end diff --git a/spec/models/admin_user_spec.rb b/spec/models/admin_user_spec.rb deleted file mode 100644 index 1cb8b5b12..000000000 --- a/spec/models/admin_user_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'rails_helper' - -RSpec.describe AdminUser do - context 'with valid attributes' do - before do - @admin_user = create(:admin_user) - end - - it 'should require password confirmation when changing password' do - @admin_user.valid?.should == true - @admin_user.password = 'not confirmed' - @admin_user.valid? - @admin_user.errors.full_messages.should match_array(["Password confirmation doesn't match Password"]) - end - end - - describe '::min_password_length' do - it 'returns minimum password length' do - expect(described_class.min_password_length).to eq(8) - end - end -end diff --git a/spec/models/api_user_spec.rb b/spec/models/api_user_spec.rb deleted file mode 100644 index e27cc8771..000000000 --- a/spec/models/api_user_spec.rb +++ /dev/null @@ -1,114 +0,0 @@ -require 'rails_helper' - -RSpec.describe ApiUser do - context 'with invalid attribute' do - before do - @api_user = ApiUser.new - end - - it 'should not be valid' do - @api_user.valid? - @api_user.errors.full_messages.should match_array([ - "Password Password is missing", - "Password is too short (minimum is #{ApiUser.min_password_length} characters)", - "Registrar Registrar is missing", - "Username Username is missing", - "Roles is missing" - ]) - end - - it 'should be active by default' do - @api_user.active.should == true - end - end - - context 'with valid attributes' do - before do - @api_user = create(:api_user) - end - - it 'should be valid' do - @api_user.valid? - @api_user.errors.full_messages.should match_array([]) - end - - it 'should be valid twice' do - @api_user = create(:api_user) - @api_user.valid? - @api_user.errors.full_messages.should match_array([]) - end - end - - describe '::min_password_length', db: false do - it 'returns minimum password length' do - expect(described_class.min_password_length).to eq(6) - end - end - - describe '#linked_users' do - it 'returns users with the same identity code' do - api_user = create(:api_user, id: 1, identity_code: 'test') - create(:api_user, id: 2, identity_code: 'test') - - expect(api_user.linked_users.ids).to include(2) - end - - it 'does not return users with another identity code' do - api_user = create(:api_user, id: 1, identity_code: 'test') - create(:api_user, id: 2, identity_code: 'another') - - expect(api_user.linked_users.ids).to_not include(2) - end - - it 'does not return itself' do - api_user = create(:api_user) - expect(api_user.linked_users).to be_empty - end - - it 'returns none if identity code is absent' do - api_user = create(:api_user, identity_code: nil) - create(:api_user, identity_code: nil) - - expect(api_user.linked_users).to be_empty - end - - it 'returns none if identity code is empty' do - api_user = create(:api_user, identity_code: '') - create(:api_user, identity_code: '') - - expect(api_user.linked_users).to be_empty - end - end - - describe '#linked_with?', db: false do - it 'returns true if identity codes match' do - api_user = described_class.new(identity_code: 'test') - another_api_user = described_class.new(identity_code: 'test') - - expect(api_user.linked_with?(another_api_user)).to be true - end - - it 'returns false if identity codes do not match' do - api_user = described_class.new(identity_code: 'test') - another_api_user = described_class.new(identity_code: 'another-test') - - expect(api_user.linked_with?(another_api_user)).to be false - end - end - - describe '#login', db: false do - it 'is alias to #username' do - user = described_class.new(username: 'test-username') - expect(user.login).to eq('test-username') - end - end - - describe '#registrar_name', db: false do - it 'delegates to registrar' do - registrar = Registrar.new(name: 'test name') - user = described_class.new(registrar: registrar) - - expect(user.registrar_name).to eq('test name') - end - end -end diff --git a/spec/models/authorization/restricted_ip_spec.rb b/spec/models/authorization/restricted_ip_spec.rb deleted file mode 100644 index b432d46e4..000000000 --- a/spec/models/authorization/restricted_ip_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -require 'rails_helper' - -RSpec.describe Authorization::RestrictedIP do - describe '::enabled?', db: true, settings: false do - before do - @original_registrar_ip_whitelist_enabled = Setting.registrar_ip_whitelist_enabled - end - - after do - Setting.registrar_ip_whitelist_enabled = @original_registrar_ip_whitelist_enabled - end - - context 'when "registrar_ip_whitelist_enabled" is true' do - before do - Setting.registrar_ip_whitelist_enabled = true - end - - specify do - expect(described_class).to be_enabled - end - end - - context 'when "registrar_ip_whitelist_enabled" is false' do - specify do - expect(described_class).to_not be_enabled - end - end - end - - describe '#can_access_registrar_area?', db: true do - let(:registrar) { create(:registrar) } - subject(:allowed) { described_class.new('127.0.0.1').can_access_registrar_area?(registrar) } - - context 'when enabled' do - before do - allow(described_class).to receive(:enabled?).and_return(true) - end - - context 'when ip is whitelisted', db: true do - let!(:white_ip) { create(:white_ip, registrar: registrar, ipv4: '127.0.0.1', interfaces: [WhiteIp::REGISTRAR]) } - - specify do - expect(allowed).to be true - end - end - - context 'when ip is not whitelisted' do - specify do - expect(allowed).to be false - end - end - end - - context 'when disabled' do - before do - allow(described_class).to receive(:enabled?).and_return(false) - end - - specify do - expect(allowed).to be true - end - end - end - - describe '#can_access_registrar_area_sign_in_page?' do - subject(:allowed) { described_class.new('127.0.0.1').can_access_registrar_area_sign_in_page? } - - context 'when enabled' do - before do - allow(described_class).to receive(:enabled?).and_return(true) - end - - context 'when ip is whitelisted', db: true do - let!(:white_ip) { create(:white_ip, ipv4: '127.0.0.1', interfaces: [WhiteIp::REGISTRAR]) } - - specify do - expect(allowed).to be true - end - end - - context 'when ip is not whitelisted' do - specify do - expect(allowed).to be false - end - end - end - - context 'when disabled' do - before do - allow(described_class).to receive(:enabled?).and_return(false) - end - - specify do - expect(allowed).to be true - end - end - end -end diff --git a/spec/models/billing/price_spec.rb b/spec/models/billing/price_spec.rb deleted file mode 100644 index 2854fb6b6..000000000 --- a/spec/models/billing/price_spec.rb +++ /dev/null @@ -1,180 +0,0 @@ -require 'rails_helper' - -RSpec.describe Billing::Price do - it { is_expected.to monetize(:price) } - it { is_expected.to alias_attribute(:effect_time, :valid_from) } - it { is_expected.to alias_attribute(:expire_time, :valid_to) } - - describe '::operation_categories', db: false do - it 'returns operation categories' do - categories = %w[create renew] - expect(described_class.operation_categories).to eq(categories) - end - end - - describe '::durations', db: false do - it 'returns durations' do - durations = [ - '3 mons', - '6 mons', - '9 mons', - '1 year', - '2 years', - '3 years', - '4 years', - '5 years', - '6 years', - '7 years', - '8 years', - '9 years', - '10 years', - ] - - expect(described_class.durations).to eq(durations) - end - end - - describe '::statuses', db: false do - it 'returns statuses' do - expect(described_class.statuses).to eq(%w[upcoming effective expired]) - end - end - - describe '::upcoming' do - before :example do - travel_to Time.zone.parse('05.07.2010 00:00') - - create(:price, id: 1, effect_time: Time.zone.parse('05.07.2010 00:00')) - create(:price, id: 2, effect_time: Time.zone.parse('05.07.2010 00:01')) - end - - it 'returns upcoming' do - expect(described_class.upcoming.ids).to eq([2]) - end - end - - describe '::effective' do - before :example do - travel_to Time.zone.parse('05.07.2010 00:00') - - create(:price, id: 1, effect_time: '05.07.2010 00:01', expire_time: '05.07.2010 00:02') - create(:price, id: 2, effect_time: '05.07.2010 00:00', expire_time: '05.07.2010 00:01') - create(:price, id: 3, effect_time: '05.07.2010 00:00', expire_time: nil) - create(:price, id: 4, effect_time: '04.07.2010', expire_time: '04.07.2010 23:59') - end - - it 'returns effective' do - expect(described_class.effective.ids).to eq([2, 3]) - end - end - - describe 'zone validation', db: false do - subject(:price) { described_class.new } - - it 'rejects absent' do - price.zone = nil - price.validate - expect(price.errors).to have_key(:zone) - end - end - - describe 'price validation', db: false do - subject(:price) { described_class.new } - - it 'rejects absent' do - price.price = nil - price.validate - expect(price.errors).to have_key(:price) - end - - it 'rejects negative' do - price.price = -1 - price.validate - expect(price.errors).to have_key(:price) - end - - it 'accepts zero' do - price.price = 0 - price.validate - expect(price.errors).to_not have_key(:price) - end - - it 'accepts greater than zero' do - price.price = 1 - price.validate - expect(price.errors).to_not have_key(:price) - end - - it 'accepts fraction' do - price.price = "1#{I18n.t('number.currency.format.separator')}5" - price.validate - expect(price.errors).to_not have_key(:price) - end - end - - describe 'duration validation', db: false do - subject(:price) { described_class.new } - - it 'rejects absent' do - price.duration = nil - price.validate - expect(price.errors).to have_key(:duration) - end - - it 'rejects invalid' do - price.duration = 'invalid' - price.validate - expect(price.errors).to have_key(:duration) - end - - it 'accepts valid' do - price.duration = described_class.durations.first - price.validate - expect(price.errors).to_not have_key(:duration) - end - end - - describe 'operation category validation', db: false do - subject(:price) { described_class.new } - - it 'rejects absent' do - price.operation_category = nil - price.validate - expect(price.errors).to have_key(:operation_category) - end - - it 'rejects invalid' do - price.operation_category = 'invalid' - price.validate - expect(price.errors).to have_key(:operation_category) - end - - it 'accepts valid' do - price.operation_category = described_class.operation_categories.first - price.validate - expect(price.errors).to_not have_key(:operation_category) - end - end - - describe '#name', db: false do - let(:price) { described_class.new } - - before :example do - allow(price).to receive(:operation_category).and_return('category') - allow(price).to receive(:zone_name).and_return('zone') - end - - it 'returns operation_category and zone name' do - expect(price.name).to eq('category zone') - end - end - - describe '#zone_name', db: false do - let(:price) { described_class.new(zone: zone) } - let(:zone) { build_stubbed(:zone, origin: 'test') } - - it 'returns zone name' do - expect(price.zone_name).to eq('test') - end - end -end diff --git a/spec/models/concerns/billing/price/expirable_spec.rb b/spec/models/concerns/billing/price/expirable_spec.rb deleted file mode 100644 index 2180af432..000000000 --- a/spec/models/concerns/billing/price/expirable_spec.rb +++ /dev/null @@ -1,55 +0,0 @@ -require 'rails_helper' - -RSpec.describe Billing::Price do - describe '::expired' do - before :example do - travel_to Time.zone.parse('05.07.2010 00:00') - - create(:price, id: 1, expire_time: Time.zone.parse('04.07.2010 23:59')) - create(:price, id: 2, expire_time: Time.zone.parse('05.07.2010 00:00')) - create(:price, id: 3, expire_time: Time.zone.parse('05.07.2010 00:01')) - end - - it 'returns prices with expire time in the past ' do - expect(described_class.expired.ids).to eq([1]) - end - end - - describe '#expire', db: false do - let(:price) { described_class.new(expire_time: Time.zone.parse('06.07.2010')) } - - before :example do - travel_to Time.zone.parse('05.07.2010 00:00') - end - - it 'expires price' do - expect { price.expire }.to change { price.expired? }.from(false).to(true) - end - end - - describe '#expired?', db: false do - subject(:expired) { domain.expired? } - - before :example do - travel_to Time.zone.parse('05.07.2010 00:00') - end - - context 'when expire time is in the past' do - let(:domain) { described_class.new(expire_time: Time.zone.parse('04.07.2010 23:59')) } - - specify { expect(expired).to be true } - end - - context 'when expire time is now' do - let(:domain) { described_class.new(expire_time: Time.zone.parse('05.07.2010 00:00')) } - - specify { expect(expired).to be false } - end - - context 'when expire time is in the future' do - let(:domain) { described_class.new(expire_time: Time.zone.parse('05.07.2010 00:01')) } - - specify { expect(expired).to be false } - end - end -end diff --git a/spec/models/concerns/domain/activatable_spec.rb b/spec/models/concerns/domain/activatable_spec.rb deleted file mode 100644 index aeb5b0bfd..000000000 --- a/spec/models/concerns/domain/activatable_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'rails_helper' - -RSpec.describe Domain, db: false do - describe '#active?' do - context 'when :statuses does not contain :inactive' do - let(:domain) { described_class.new(statuses: []) } - - it 'returns true' do - expect(domain.active?).to be true - end - end - - context 'when :statuses contains :inactive' do - let(:domain) { described_class.new(statuses: [DomainStatus::INACTIVE]) } - - it 'returns false' do - expect(domain.active?).to be false - end - end - end - - describe '#inactive?' do - context 'when :statuses contains :inactive' do - let(:domain) { described_class.new(statuses: [DomainStatus::INACTIVE]) } - - it 'returns true' do - expect(domain.inactive?).to be true - end - end - - context 'when :statuses does not contain :inactive' do - let(:domain) { described_class.new(statuses: []) } - - it 'returns false' do - expect(domain.inactive?).to be false - end - end - end - - describe '#activate' do - let(:domain) { described_class.new(statuses: [DomainStatus::INACTIVE]) } - - it 'activates domain' do - domain.activate - expect(domain).to be_active - end - end - - describe '#deactivate' do - context 'when active' do - let(:domain) { described_class.new } - - it 'deactivates domain' do - domain.deactivate - expect(domain).to be_inactive - end - end - - context 'when inactive' do - let(:domain) { described_class.new(statuses: [DomainStatus::INACTIVE]) } - - it 'does not add :inactive status' do - domain.deactivate - expect(domain.statuses).to eq([DomainStatus::INACTIVE]) - end - end - end -end diff --git a/spec/models/concerns/domain/expirable_spec.rb b/spec/models/concerns/domain/expirable_spec.rb deleted file mode 100644 index 242d9818a..000000000 --- a/spec/models/concerns/domain/expirable_spec.rb +++ /dev/null @@ -1,65 +0,0 @@ -require 'rails_helper' - -RSpec.describe Domain, db: false do - it { is_expected.to alias_attribute(:expire_time, :valid_to) } - - describe '::expired', db: true do - before :example do - travel_to Time.zone.parse('05.07.2010 00:00') - - create(:zone, origin: 'ee') - - create(:domain, id: 1, expire_time: Time.zone.parse('04.07.2010 23:59')) - create(:domain, id: 2, expire_time: Time.zone.parse('05.07.2010 00:00')) - create(:domain, id: 3, expire_time: Time.zone.parse('05.07.2010 00:01')) - end - - it 'returns expired domains' do - expect(described_class.expired.ids).to eq([1, 2]) - end - end - - describe '#registered?' do - let(:domain) { described_class.new } - - context 'when not expired' do - before :example do - expect(domain).to receive(:expired?).and_return(false) - end - - specify { expect(domain).to be_registered } - end - - context 'when expired' do - before :example do - expect(domain).to receive(:expired?).and_return(true) - end - - specify { expect(domain).to_not be_registered } - end - end - - describe '#expired?' do - before :example do - travel_to Time.zone.parse('05.07.2010 00:00') - end - - context 'when :expire_time is in the past' do - let(:domain) { described_class.new(expire_time: Time.zone.parse('04.07.2010 23:59')) } - - specify { expect(domain).to be_expired } - end - - context 'when :expire_time is now' do - let(:domain) { described_class.new(expire_time: Time.zone.parse('05.07.2010 00:00')) } - - specify { expect(domain).to be_expired } - end - - context 'when :expire_time is in the future' do - let(:domain) { described_class.new(expire_time: Time.zone.parse('05.07.2010 00:01')) } - - specify { expect(domain).to_not be_expired } - end - end -end diff --git a/spec/models/contact/contact_phone_spec.rb b/spec/models/contact/contact_phone_spec.rb deleted file mode 100644 index cc1ecbec0..000000000 --- a/spec/models/contact/contact_phone_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -require 'rails_helper' -require 'lib/validators/e164' - -RSpec.describe Contact do - let(:contact) { described_class.new } - - describe 'phone', db: false do - it_behaves_like 'e164' do - let(:model) { contact } - let(:attribute) { :phone } - end - end - - describe 'phone validation', db: false do - it 'rejects absent' do - contact.phone = nil - contact.validate - expect(contact.errors).to be_added(:phone, :blank) - end - - it 'rejects all zeros in country code' do - contact.phone = '+000.1' - contact.validate - expect(contact.errors).to be_added(:phone, :invalid) - end - - it 'rejects all zeros in subscriber number' do - contact.phone = '+123.0' - contact.validate - expect(contact.errors).to be_added(:phone, :invalid) - end - end -end diff --git a/spec/models/contact/ident_spec.rb b/spec/models/contact/ident_spec.rb deleted file mode 100644 index d26f76d0f..000000000 --- a/spec/models/contact/ident_spec.rb +++ /dev/null @@ -1,227 +0,0 @@ -require 'active_model' -require 'lib/validators/iso31661_alpha2' -require 'lib/validators/iso8601' - -RSpec.describe Contact::Ident, db: false do - let(:ident) { described_class.new } - - describe 'country code' do - it_behaves_like 'iso31661_alpha2' do - let(:model) { ident } - let(:attribute) { :country_code } - end - end - - describe 'code validation' do - it 'rejects absent' do - ident.code = nil - ident.validate - expect(ident.errors).to be_added(:code, :blank) - end - - context 'when type is :birthday' do - let(:ident) { described_class.new(type: 'birthday') } - - it_behaves_like 'iso8601' do - let(:model) { ident } - let(:attribute) { :code } - end - end - - context 'when type is not :birthday' do - let(:ident) { described_class.new(type: 'priv') } - - it 'accepts any' do - ident.code = '%123456789%' - ident.validate - expect(ident.errors).to_not include(:code) - end - end - - context 'when country code is EE' do - context 'when type is :priv' do - let(:ident) { described_class.new(country_code: 'EE', type: 'priv') } - - it 'rejects invalid' do - ident.code = 'invalid' - ident.validate - expect(ident.errors).to be_added(:code, :invalid_national_id, country: 'Estonia') - end - - it 'accepts valid' do - ident.code = '47101010033' - ident.validate - expect(ident.errors).to_not be_added(:code, :invalid_national_id, country: 'Estonia') - end - end - - context 'when ident type is :org' do - let(:ident) { described_class.new(country_code: 'EE', type: 'org') } - - it 'rejects invalid' do - ident.code = '1' * 7 - ident.validate - expect(ident.errors).to be_added(:code, :invalid_reg_no, country: 'Estonia') - end - - it 'accepts valid length' do - ident.code = '1' * 8 - ident.validate - expect(ident.errors).to_not be_added(:code, :invalid_reg_no, country: 'Estonia') - end - end - end - - context 'when ident country code is not EE' do - let(:ident) { described_class.new(country_code: 'US') } - - it 'accepts any' do - ident.code = 'test-123456789' - ident.validate - expect(ident.errors).to_not include(:code) - end - end - - it 'translates :invalid_national_id error message' do - expect(ident.errors.generate_message(:code, :invalid_national_id, country: 'Germany')) - .to eq('does not conform to national identification number format of Germany') - end - - it 'translates :invalid_reg_no error message' do - expect(ident.errors.generate_message(:code, :invalid_reg_no, country: 'Germany')) - .to eq('does not conform to registration number format of Germany') - end - end - - describe 'type validation' do - before do - allow(described_class).to receive(:types).and_return(%w(valid)) - end - - it 'rejects absent' do - ident.type = nil - ident.validate - expect(ident.errors).to be_added(:type, :blank) - end - - it 'rejects invalid' do - ident.type = 'invalid' - ident.validate - expect(ident.errors).to be_added(:type, :inclusion) - end - - it 'accepts valid' do - ident.type = 'valid' - ident.validate - expect(ident.errors).to_not be_added(:type, :inclusion) - end - end - - describe 'country code validation' do - it 'rejects absent' do - ident.country_code = nil - ident.validate - expect(ident.errors).to be_added(:country_code, :blank) - end - end - - describe 'mismatch validation' do - let(:ident) { described_class.new(type: 'test', country_code: 'DE') } - - before do - mismatches = [Contact::Ident::MismatchValidator::Mismatch.new('test', Country.new('DE'))] - allow(Contact::Ident::MismatchValidator).to receive(:mismatches).and_return(mismatches) - end - - it 'rejects mismatched' do - ident.validate - expect(ident.errors).to be_added(:base, :mismatch, type: 'test', country: 'Germany') - end - - it 'accepts matched' do - ident.validate - expect(ident.errors).to_not be_added(:base, :mismatch, type: 'another-test', country: 'Germany') - end - - it 'translates :mismatch error message' do - expect(ident.errors.generate_message(:base, :mismatch, type: 'test', country: 'Germany')) - .to eq('Ident type "test" is invalid for Germany') - end - end - - describe '::types' do - it 'returns types' do - types = %w[ - org - priv - birthday - ] - - expect(described_class.types).to eq(types) - end - end - - describe '#birthday?' do - context 'when type is birthday' do - subject(:ident) { described_class.new(type: 'birthday') } - it { is_expected.to be_birthday } - end - - context 'when type is not birthday' do - subject(:ident) { described_class.new(type: 'priv') } - it { is_expected.to_not be_birthday } - end - end - - describe '#national_id?' do - context 'when type is priv' do - subject(:ident) { described_class.new(type: 'priv') } - it { is_expected.to be_national_id } - end - - context 'when type is not' do - subject(:ident) { described_class.new(type: 'org') } - it { is_expected.to_not be_national_id } - end - end - - describe '#reg_no?' do - context 'when type is birthday' do - subject(:ident) { described_class.new(type: 'org') } - it { is_expected.to be_reg_no } - end - - context 'when type is not birthday' do - subject(:ident) { described_class.new(type: 'priv') } - it { is_expected.to_not be_reg_no } - end - end - - describe '#country' do - let(:ident) { described_class.new(country_code: 'US') } - - it 'returns country' do - expect(ident.country).to eq(Country.new('US')) - end - end - - describe '#==' do - let(:ident) { described_class.new(code: 'test', type: 'test', country_code: 'US') } - - context 'when code, type and country code are the same' do - let(:another_ident) { described_class.new(code: 'test', type: 'test', country_code: 'US') } - - it 'returns true' do - expect(ident).to eq(another_ident) - end - end - - context 'when code, type and country code are not the same' do - let(:another_ident) { described_class.new(code: 'another-test', type: 'test', country_code: 'US') } - - it 'returns false' do - expect(ident).to_not eq(another_ident) - end - end - end -end diff --git a/spec/models/contact_spec.rb b/spec/models/contact_spec.rb deleted file mode 100644 index 52469b28f..000000000 --- a/spec/models/contact_spec.rb +++ /dev/null @@ -1,414 +0,0 @@ -require 'rails_helper' - -RSpec.describe Contact do - before :example do - create(:zone, origin: 'ee') - end - - context 'with invalid attribute' do - before :example do - @contact = Contact.new - end - - it 'should not have creator' do - @contact.creator.should == nil - end - - it 'should not have updater' do - @contact.updator.should == nil - end - - it 'should not accept long code' do - @contact.code = 'verylongcode' * 100 - @contact.valid? - @contact.errors[:code].should == ['Contact code is too long, max 100 characters'] - end - - it 'should not allow double status' do - contact = described_class.new(statuses: %w(ok ok)) - - contact.validate - - expect(contact.statuses).to eq(%w(ok)) - end - - it 'should have no related domain descriptions' do - @contact.related_domain_descriptions.should == {} - end - - it 'should fully validate email syntax for new records' do - @contact.email = 'not@correct' - @contact.valid? - @contact.errors[:email].should == ['Email is invalid'] - end - - it 'should have ident updated because the logic itself is dedicated for legacy contacts ' do - @contact.ident_updated_at.should_not == nil - end - end - - context 'with valid attributes' do - before :example do - @contact = create(:contact) - end - - it 'should not overwrite code' do - old_code = @contact.code - @contact.code = 'CID:REG1:should-not-overwrite-old-code-12345' - @contact.save.should == true - @contact.code.should == old_code - end - - it 'should have ok status by default' do - @contact.statuses.should == %w(ok) - end - - it 'should not remove ok status after save' do - @contact.statuses.should == %w(ok) - @contact.save - @contact.statuses.should == %w(ok) - end - - it 'should remove ok status when other non linked status present' do - contact = create(:contact) - contact.statuses = [Contact::SERVER_UPDATE_PROHIBITED] - contact.statuses.should == [Contact::SERVER_UPDATE_PROHIBITED] # temp test - contact.save - contact.statuses.should == [Contact::SERVER_UPDATE_PROHIBITED] - end - - it 'should have code' do - registrar = create(:registrar, code: 'registrarcode') - - contact = build(:contact, registrar: registrar, code: 'contactcode') - contact.generate_code - contact.save! - - expect(contact.code).to eq('REGISTRARCODE:CONTACTCODE') - end - - it 'should save status notes' do - contact = create(:contact) - contact.statuses = ['serverDeleteProhibited', 'serverUpdateProhibited'] - contact.status_notes_array = [nil, 'update manually turned off'] - contact.status_notes['serverDeleteProhibited'].should == nil - contact.status_notes['serverUpdateProhibited'].should == 'update manually turned off' - contact.status_notes['someotherstatus'].should == nil - end - - it 'should have ident already updated because the logic itself is only for legacy contacts' do - @contact.ident_updated_at.should_not == nil - end - - it 'should have not update ident updated at when initializing old contact' do - # creating a legacy contact - contact = create(:contact) - contact.update_column(:ident_updated_at, nil) - - Contact.find(contact.id).ident_updated_at.should == nil - end - - context 'as birthday' do - before do - @domain = create(:domain) - end - - it 'should have related domain descriptions hash' do - contact = @domain.registrant - contact.reload # somehow it registrant_domains are empty? - contact.related_domain_descriptions.should == { "#{@domain.name}" => [:registrant] } - end - - it 'should have related domain descriptions hash when find directly' do - contact = @domain.registrant - Contact.find(contact.id).related_domain_descriptions.should == { "#{@domain.name}" => [:registrant] } - end - - it 'should have related domain descriptions hash' do - contact = @domain.contacts.first - contact.related_domain_descriptions.should == { "#{@domain.name}" => [:admin] } - end - - it 'should fully validate email syntax for old records' do - old = @contact.email - @contact.email = 'legacy@support-not-correct' - @contact.valid? - @contact.errors[:email].should == ['Email is invalid'] - @contact.email = old - end - end - - context 'with callbacks' do - context 'after create' do - it 'should not allow to use same code' do - registrar = create(:registrar, code: 'FIXED') - - create(:contact, - registrar: registrar, - code: 'FIXED:new-code') - @contact = build(:contact, - registrar: registrar, - code: 'FIXED:new-code') - - @contact.validate - - expect(@contact.errors).to have_key(:code) - end - - it 'should allow supported code format' do - @contact = build(:contact, code: 'CID:REG1:12345', registrar: create(:registrar, code: 'FIXED')) - @contact.valid? - @contact.errors.full_messages.should == [] - end - - it 'should not allow unsupported characters in code' do - @contact = build(:contact, code: 'unsupported!ÄÖÜ~?', registrar: create(:registrar, code: 'FIXED')) - @contact.valid? - @contact.errors.full_messages.should == ['Code is invalid'] - end - - it 'should generate code if empty code is given' do - @contact = build(:contact, code: '') - @contact.generate_code - @contact.save! - @contact.code.should_not == '' - end - - it 'should not ignore empty spaces as code and generate new one' do - @contact = build(:contact, code: ' ', registrar: create(:registrar, code: 'FIXED')) - @contact.generate_code - @contact.valid?.should == true - @contact.code.should =~ /FIXED:..../ - end - end - end - end -end - -describe Contact, '.destroy_orphans' do - before do - create(:zone, origin: 'ee') - @contact_1 = create(:contact, code: 'asd12') - @contact_2 = create(:contact, code: 'asd13') - end - - it 'destroys orphans' do - Contact.find_orphans.count.should == 2 - Contact.destroy_orphans - Contact.find_orphans.count.should == 0 - end - - it 'should find one orphan' do - create(:domain, registrant: Registrant.find(@contact_1.id)) - Contact.find_orphans.count.should == 1 - Contact.find_orphans.last.should == @contact_2 - end - - it 'should find no orphans' do - create(:domain, registrant: Registrant.find(@contact_1.id), admin_contacts: [@contact_2]) - cc = Contact.count - Contact.find_orphans.count.should == 0 - Contact.destroy_orphans - Contact.count.should == cc - end -end - -RSpec.describe Contact do - it { is_expected.to alias_attribute(:kind, :ident_type) } - - describe '::emails' do - before :example do - expect(described_class).to receive(:pluck).with(:email).and_return('emails') - end - - it 'returns emails' do - expect(described_class.emails).to eq('emails') - end - end - - describe '::address_processing?' do - before do - Setting.address_processing = 'test' - end - - it 'returns setting value' do - expect(described_class.address_processing?).to eq('test') - end - end - - describe '::address_attribute_names', db: false do - it 'returns address attributes' do - attributes = %w( - city - street - zip - country_code - state - ) - expect(described_class.address_attribute_names).to eq(attributes) - end - end - - describe 'registrar validation', db: false do - let(:contact) { described_class.new } - - it 'rejects absent' do - contact.registrar = nil - contact.validate - expect(contact.errors).to have_key(:registrar) - end - end - - describe 'address validation', db: false do - let(:contact) { described_class.new } - subject(:errors) { contact.errors } - - required_attributes = %i(street city zip country_code) - - context 'when address processing is enabled' do - before do - allow(described_class).to receive(:address_processing?).and_return(true) - end - - required_attributes.each do |attr_name| - it "rejects absent #{attr_name}" do - contact.send("#{attr_name}=", nil) - contact.validate - expect(errors).to have_key(attr_name) - end - end - end - - context 'when address processing is disabled' do - before do - allow(described_class).to receive(:address_processing?).and_return(false) - end - - required_attributes.each do |attr_name| - it "accepts absent #{attr_name}" do - contact.send("#{attr_name}=", nil) - contact.validate - expect(errors).to_not have_key(attr_name) - end - end - end - end - - describe 'country code validation', db: false do - let(:contact) { described_class.new(country_code: 'test') } - - it 'rejects invalid' do - contact.country_code = 'invalid' - contact.validate - expect(contact.errors).to have_key(:country_code) - end - end - - describe 'identifier validation', db: false do - let(:contact) { described_class.new } - - it 'rejects invalid' do - ident = Contact::Ident.new - ident.validate - contact.identifier = ident - contact.validate - - expect(contact.errors).to be_added(:identifier, :invalid) - end - - it 'accepts valid' do - ident = Contact::Ident.new(code: 'test', type: 'priv', country_code: 'US') - ident.validate - contact.identifier = ident - contact.validate - - expect(contact.errors).to_not be_added(:identifier, :invalid) - end - end - - describe '#remove_address' do - let(:contact) { described_class.new(city: 'test', - street: 'test', - zip: 'test', - country_code: 'test', - state: 'test') - } - subject(:address_removed) { contact.attributes.slice(*described_class.address_attribute_names).compact.empty? } - - it 'removes address attributes' do - contact.remove_address - expect(address_removed).to be_truthy - end - end - - describe '#reg_no' do - subject(:reg_no) { contact.reg_no } - - context 'when contact is legal entity' do - let(:contact) { build_stubbed(:contact_legal_entity, ident: '1234') } - - specify { expect(reg_no).to eq('1234') } - end - - context 'when contact is private entity' do - let(:contact) { build_stubbed(:contact_private_entity, ident: '1234') } - - specify { expect(reg_no).to be_nil } - end - end - - describe '#id_code' do - context 'when contact is private entity' do - let(:contact) { build_stubbed(:contact_private_entity, ident: '1234') } - - specify { expect(contact.id_code).to eq('1234') } - end - - context 'when contact is legal entity' do - let(:contact) { build_stubbed(:contact_legal_entity, ident: '1234') } - - specify { expect(contact.id_code).to be_nil } - end - end - - describe '#ident_country' do - let(:contact) { described_class.new(ident_country_code: 'US') } - - it 'returns ident country' do - expect(contact.ident_country).to eq(Country.new('US')) - end - end - - describe '#domain_names_with_roles' do - let(:contact) { create(:registrant) } - subject(:domain_names) { contact.domain_names_with_roles } - - it 'returns associated domains with roles' do - domain = create(:domain, registrant: contact, name: 'test.com') - domain.admin_domain_contacts << create(:admin_domain_contact, contact: contact) - domain.tech_domain_contacts << create(:tech_domain_contact, contact: contact) - - contact.reload - - expect(domain_names).to eq({ 'test.com' => %i[registrant admin_domain_contact tech_domain_contact].to_set }) - end - - it 'returns unique roles' do - domain = create(:domain, name: 'test.com') - 2.times { domain.admin_domain_contacts << create(:admin_domain_contact, contact: contact) } - - contact.reload - - expect(domain_names).to eq({ 'test.com' => %i[admin_domain_contact].to_set }) - end - end - - it 'normalizes ident country code', db: false do - contact = described_class.new - - contact.ident_country_code = 'ee' - contact.validate - - expect(contact.ident_country_code).to eq('EE') - end -end diff --git a/spec/models/depp/domain_spec.rb b/spec/models/depp/domain_spec.rb deleted file mode 100644 index c780e6a00..000000000 --- a/spec/models/depp/domain_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'rails_helper' - -RSpec.describe Depp::Domain do - describe '::default_period', db: false, settings: false do - it 'returns default period' do - expect(described_class.default_period).to eq('1y') - end - end -end diff --git a/spec/models/dns/zone_spec.rb b/spec/models/dns/zone_spec.rb deleted file mode 100644 index a5d7861e6..000000000 --- a/spec/models/dns/zone_spec.rb +++ /dev/null @@ -1,102 +0,0 @@ -require 'rails_helper' - -RSpec.describe DNS::Zone do - describe '::origins' do - before :example do - expect(described_class).to receive(:pluck).with(:origin).and_return('origins') - end - - it 'returns origins' do - expect(described_class.origins).to eq('origins') - end - end - - describe 'validation' do - let(:zone) { described_class.new } - - required_attributes = %i[ - origin - ttl - refresh - retry - expire - minimum_ttl - email - master_nameserver - ] - - required_attributes.each do |attr_name| - it "rejects absent #{attr_name}", db: false do - zone.send("#{attr_name}=", nil) - zone.validate - expect(zone.errors).to have_key(attr_name) - end - end - - integer_attributes = %i[ - ttl - refresh - retry - expire - minimum_ttl - ] - - integer_attributes.each do |attr_name| - it "rejects non-integer #{attr_name}", db: false do - zone.send("#{attr_name}=", 'test') - zone.validate - expect(zone.errors).to have_key(attr_name) - end - - it "accepts integer #{attr_name}", db: false do - zone.send("#{attr_name}=", '1') - zone.validate - expect(zone.errors).to_not have_key(attr_name) - end - end - end - - describe '#used?', db: false do - let!(:zone) { described_class.new } - - context 'when domain uses zone' do - before :example do - allow(Domain).to receive(:uses_zone?).and_return(true) - end - - specify { expect(zone).to be_used } - end - - context 'when domain does not use zone' do - before :example do - allow(Domain).to receive(:uses_zone?).and_return(false) - end - - specify { expect(zone).to_not be_used } - end - end - - describe 'deletion', settings: false do - let!(:zone) { create(:zone) } - - context 'when zone is unused' do - before :example do - allow(zone).to receive(:used?).and_return(false) - end - - it 'is allowed' do - expect { zone.destroy }.to change { described_class.count }.from(1).to(0) - end - end - - context 'when zone is used' do - before :example do - allow(zone).to receive(:used?).and_return(true) - end - - it 'is disallowed' do - expect { zone.destroy }.to_not change { described_class.count } - end - end - end -end diff --git a/spec/models/dnskey_spec.rb b/spec/models/dnskey_spec.rb deleted file mode 100644 index d21968214..000000000 --- a/spec/models/dnskey_spec.rb +++ /dev/null @@ -1,102 +0,0 @@ -require 'rails_helper' - -describe Dnskey do - before :example do - Setting.ds_algorithm = 2 - Setting.ds_data_allowed = true - Setting.ds_data_with_key_allowed = true - Setting.key_data_allowed = true - - Setting.dnskeys_min_count = 0 - Setting.dnskeys_max_count = 9 - Setting.ns_min_count = 2 - Setting.ns_max_count = 11 - - Setting.transfer_wait_time = 0 - - Setting.admin_contacts_min_count = 1 - Setting.admin_contacts_max_count = 10 - Setting.tech_contacts_min_count = 0 - Setting.tech_contacts_max_count = 10 - - Setting.client_side_status_editing_enabled = true - - create(:zone, origin: 'ee') - end - - context 'with invalid attribute' do - before :example do - @dnskey = Dnskey.new - end - - it 'should not be valid' do - @dnskey.valid? - @dnskey.errors.full_messages.should match_array([ - ]) - end - end - - context 'with valid attributes' do - before :example do - @dnskey = create(:dnskey, - alg: 8, - flags: 257, - protocol: 3, - public_key: 'AwEAAaOf5+lz3ftsL+0CCvfJbhUF/NVsNh8BKo61oYs5fXVbuWDiH872 '\ - 'LC8uKDO92TJy7Q4TF9XMAKMMlf1GMAxlRspD749SOCTN00sqfWx1OMTu '\ - 'a28L1PerwHq7665oDJDKqR71btcGqyLKhe2QDvCdA0mENimF1NudX1BJ '\ - 'DDFi6oOZ0xE/0CuveB64I3ree7nCrwLwNs56kXC4LYoX3XdkOMKiJLL/ '\ - 'MAhcxXa60CdZLoRtTEW3z8/oBq4hEAYMCNclpbd6y/exScwBxFTdUfFk '\ - 'KsdNcmvai1lyk9vna0WQrtpYpHKMXvY9LFHaJxCOLR4umfeQ42RuTd82 lqfU6ClMeXs=', - ds_digest_type: 2) - end - - it 'should be valid' do - @dnskey.valid? - @dnskey.errors.full_messages.should match_array([]) - end - - it 'should be valid twice' do - @dnskey = create(:dnskey) - @dnskey.valid? - @dnskey.errors.full_messages.should match_array([]) - end - - it 'generates correct DS digest and DS key tag for ria.ee' do - d = create(:domain, name: 'ria.ee', dnskeys: [@dnskey]) - dk = d.dnskeys.last - - dk.generate_digest - dk.ds_digest.should == '0B62D1BC64EFD1EE652FB102BDF1011BF514CCD9A1A0CFB7472AEA3B01F38C92' - dk.ds_key_tag.should == '30607' - end - - it 'generates correct DS digest and DS key tag for emta.ee' do - d = create(:domain, name: 'emta.ee', dnskeys: [@dnskey]) - - dk = d.dnskeys.last - - pk = 'AwEAAfB9jK8rj/FAdE3t9bYXiTLpelwlgUyxbHEtvMvhdxs+yHv0h9fE '\ - '710u94LPAeVmXumT6SZPsoo+ALKdmTexkcU9DGQvb2+sPfModBKM/num '\ - 'rScUw1FBe3HwRa9SqQpgpnCjIt0kEVKHAQdLOP86YznSA9uHAg9TTJuT '\ - 'LkUtgtmwNAVFr6/mG+smE1v5NbxPccsFwVTA/T1IyaI4Z48VGCP2WNro '\ - 'R7P6vet1gWhssirnnVYnur8DwWuMJ89o/HjzXeiEGUB8k5SOX+//67FN '\ - 'm8Zs+1ObuAfY8xAHe0L5bxluEbh1T1ARp41QX77EMKVbkcSj7nuBeY8H '\ - 'KiN8HsTvmZyDbRAQQaAJi68qOXsUIoQcpn89PoNoc60F7WlueA6ExSGX '\ - 'KMWIH6nfLXFgidoZ6HxteyUUnZbHEdULjpAoCRuUDjjUnUgFS7eRANfw '\ - 'RCcu9aLziMDp4UU61zVjtmQ7xn3G2W2+2ycqn/vEl/yFyBmHZ+7stpoC '\ - 'd6NTZUn4/ellYSm9lx/vaXdPSinARpYMWtU79Hu/VRifaCQjYkBGAMwK '\ - 'DshX4yJPjza/bqo0XV4WHj1szDFHe0tLN7g1Ojwtf5FR0zyHU3FN9uUa '\ - 'y8a+dowd/fqOQA1jXR04g2PIfFYe0VudCEpmxSV9YDoqjghHeIKUX7Jn '\ - 'KiHL5gk404S5a/Bv' - - dk.public_key = pk - - dk.save - dk.ds_digest.should == 'D7045D3C2EF7332409A132D935C8E2834A2AAB769B35BC370FA68C9445398288' - dk.ds_key_tag.should == '31051' - - dk.public_key.should == pk - end - end -end diff --git a/spec/models/domain_contact_spec.rb b/spec/models/domain_contact_spec.rb deleted file mode 100644 index f5476c49b..000000000 --- a/spec/models/domain_contact_spec.rb +++ /dev/null @@ -1,95 +0,0 @@ -require 'rails_helper' - -describe DomainContact do - before :example do - @api_user = create(:domain_contact) - end - - context 'with invalid attribute' do - before :example do - @domain_contact = DomainContact.new - end - - it 'should not be valid' do - @domain_contact.valid? - @domain_contact.errors.full_messages.should match_array([ - "Contact Contact was not found" - ]) - end - - it 'should not have creator' do - @domain_contact.creator.should == nil - end - - it 'should not have updater' do - @domain_contact.updator.should == nil - end - - it 'should not have any name' do - @domain_contact.name.should == '' - end - end - - context 'with valid attributes' do - before :example do - @domain_contact = create(:domain_contact, type: 'TechDomainContact') - end - - it 'should be valid' do - @domain_contact.valid? - @domain_contact.errors.full_messages.should match_array([]) - end - - it 'should be valid twice' do - @domain_contact = create(:domain_contact) - @domain_contact.valid? - @domain_contact.errors.full_messages.should match_array([]) - end - - it 'should have Tech name' do - @domain_contact.name.should == 'Tech' - end - end - - context 'with valid attributes with tech domain contact' do - before :example do - @domain_contact = create(:tech_domain_contact) - end - - it 'should be valid' do - @domain_contact.valid? - @domain_contact.errors.full_messages.should match_array([]) - end - - it 'should be valid twice' do - @domain_contact = create(:tech_domain_contact) - @domain_contact.valid? - @domain_contact.errors.full_messages.should match_array([]) - end - - it 'should have Tech name' do - @domain_contact.name.should == 'Tech' - end - end - - context 'with valid attributes with admin domain contact' do - before :example do - @domain_contact = create(:admin_domain_contact) - end - - it 'should be valid' do - @domain_contact.valid? - @domain_contact.errors.full_messages.should match_array([]) - end - - it 'should be valid twice' do - @domain_contact = create(:admin_domain_contact) - @domain_contact.valid? - @domain_contact.errors.full_messages.should match_array([]) - end - - it 'should have Tech name' do - @domain_contact.name.should == 'Admin' - end - end -end diff --git a/spec/models/domain_cron_spec.rb b/spec/models/domain_cron_spec.rb deleted file mode 100644 index 0d25e375b..000000000 --- a/spec/models/domain_cron_spec.rb +++ /dev/null @@ -1,41 +0,0 @@ -require 'rails_helper' - -RSpec.describe DomainCron do - it 'should expire domains' do - create(:zone, origin: 'ee') - @domain = create(:domain) - - Setting.expire_warning_period = 1 - Setting.redemption_grace_period = 1 - - described_class.start_expire_period - @domain.statuses.include?(DomainStatus::EXPIRED).should == false - - old_valid_to = Time.zone.now - 10.days - @domain.valid_to = old_valid_to - @domain.save - - described_class.start_expire_period - @domain.reload - @domain.statuses.include?(DomainStatus::EXPIRED).should == true - - described_class.start_expire_period - @domain.reload - @domain.statuses.include?(DomainStatus::EXPIRED).should == true - end - - it 'should start redemption grace period' do - create(:zone, origin: 'ee') - @domain = create(:domain) - - old_valid_to = Time.zone.now - 10.days - @domain.valid_to = old_valid_to - @domain.statuses = [DomainStatus::EXPIRED] - @domain.outzone_at, @domain.delete_date = nil, nil - @domain.save - - described_class.start_expire_period - @domain.reload - @domain.statuses.include?(DomainStatus::EXPIRED).should == true - end -end diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb deleted file mode 100644 index ac424bcbe..000000000 --- a/spec/models/domain_spec.rb +++ /dev/null @@ -1,744 +0,0 @@ -require 'rails_helper' - -RSpec.describe Domain do - before :example do - Setting.ds_algorithm = 2 - Setting.ds_data_allowed = true - Setting.ds_data_with_key_allowed = true - Setting.key_data_allowed = true - - Setting.dnskeys_min_count = 0 - Setting.dnskeys_max_count = 9 - Setting.ns_min_count = 2 - Setting.ns_max_count = 11 - - Setting.transfer_wait_time = 0 - - Setting.admin_contacts_min_count = 1 - Setting.admin_contacts_max_count = 10 - Setting.tech_contacts_min_count = 0 - Setting.tech_contacts_max_count = 10 - - Setting.client_side_status_editing_enabled = true - - create(:zone, origin: 'ee') - create(:zone, origin: 'pri.ee') - create(:zone, origin: 'med.ee') - create(:zone, origin: 'fie.ee') - create(:zone, origin: 'com.ee') - end - - context 'with invalid attribute' do - before :example do - @domain = Domain.new - end - - it 'should not have whois body' do - @domain.whois_record.should == nil - end - - it 'should not be registrant update confirm ready' do - @domain.registrant_update_confirmable?('123').should == false - end - - it 'should not have pending update' do - @domain.pending_update?.should == false - end - - it 'should allow pending update' do - @domain.pending_update_prohibited?.should == false - end - - it 'should not have pending delete' do - @domain.pending_delete?.should == false - end - - it 'should allow pending delete' do - @domain.pending_delete_prohibited?.should == false - end - end - - context 'with valid attributes' do - before :example do - @domain = create(:domain) - end - - it 'should be valid' do - @domain.valid? - @domain.errors.full_messages.should match_array([]) - end - - it 'should be valid twice' do - @domain = create(:domain) - @domain.valid? - @domain.errors.full_messages.should match_array([]) - end - - it 'should validate uniqueness of tech contacts' do - same_contact = create(:contact, code: 'same_contact') - domain = create(:domain) - domain.tech_contacts << same_contact - domain.tech_contacts << same_contact - domain.valid? - domain.errors.full_messages.should match_array(["Tech domain contacts is invalid"]) - end - - it 'should validate uniqueness of tech contacts' do - same_contact = create(:contact, code: 'same_contact') - domain = create(:domain) - domain.admin_contacts << same_contact - domain.admin_contacts << same_contact - domain.valid? - domain.errors.full_messages.should match_array(["Admin domain contacts is invalid"]) - end - - it 'should have whois body by default' do - @domain.whois_record.present?.should == true - end - - it 'should have whois json by default' do - @domain.whois_record.json.present?.should == true - end - - it 'should not be registrant update confirm ready' do - @domain.registrant_update_confirmable?('123').should == false - end - - it 'should expire domains' do - Setting.expire_warning_period = 1 - Setting.redemption_grace_period = 1 - - DomainCron.start_expire_period - @domain.statuses.include?(DomainStatus::EXPIRED).should == false - - old_valid_to = Time.zone.now - 10.days - @domain.valid_to = old_valid_to - @domain.save - - DomainCron.start_expire_period - @domain.reload - @domain.statuses.include?(DomainStatus::EXPIRED).should == true - - DomainCron.start_expire_period - @domain.reload - @domain.statuses.include?(DomainStatus::EXPIRED).should == true - end - - it 'should start redemption grace period' do - old_valid_to = Time.zone.now - 10.days - @domain.valid_to = old_valid_to - @domain.statuses = [DomainStatus::EXPIRED] - @domain.outzone_at, @domain.delete_date = nil, nil - @domain.save - - DomainCron.start_expire_period - @domain.reload - @domain.statuses.include?(DomainStatus::EXPIRED).should == true - end - - context 'with time period settings' do - before :example do - @save_days_to_renew = Setting.days_to_renew_domain_before_expire - @save_warning_period = Setting.expire_warning_period - @save_grace_period = Setting.redemption_grace_period - end - - after :all do - Setting.days_to_renew_domain_before_expire = @save_days_to_renew - Setting.expire_warning_period = @save_warning_period - Setting.redemption_grace_period = @save_grace_period - end - - before :example do - @domain.valid? - end - - context 'with no renewal limit, renew anytime' do - before do - Setting.days_to_renew_domain_before_expire = 0 - end - - it 'should always renew with no policy' do - @domain.renewable?.should be true - end - - it 'should not allow to renew after force delete' do - Setting.redemption_grace_period = 1 - @domain.schedule_force_delete - @domain.renewable?.should be false - end - end - - context 'with renew policy' do - before :example do - @policy = 30 - Setting.days_to_renew_domain_before_expire = @policy - end - - it 'should not allow renew before policy' do - @domain.valid_to = Time.zone.now.beginning_of_day + @policy.days * 2 - @domain.renewable?.should be false - end - - context 'ready to renew' do - before { @domain.valid_to = Time.zone.now + (@policy - 2).days } - - it 'should allow renew' do - @domain.renewable?.should be true - end - - it 'should not allow to renew after force delete' do - Setting.redemption_grace_period = 1 - @domain.schedule_force_delete - @domain.renewable?.should be false - end - end - end - end - - it 'should set pending update' do - @domain.statuses = DomainStatus::OK # restore - @domain.save - @domain.pending_update?.should == false - - @domain.set_pending_update - @domain.pending_update?.should == true - @domain.statuses = DomainStatus::OK # restore - end - - it 'should not set pending update' do - @domain.statuses = DomainStatus::OK # restore - @domain.statuses << DomainStatus::CLIENT_UPDATE_PROHIBITED - @domain.save - - @domain.set_pending_update.should == nil # not updated - @domain.pending_update?.should == false - @domain.statuses = DomainStatus::OK # restore - end - - it 'should set pending delete' do - @domain.nameservers.build(attributes_for(:nameserver)) - @domain.nameservers.build(attributes_for(:nameserver)) - - @domain.statuses = DomainStatus::OK # restore - @domain.save - @domain.pending_delete?.should == false - - @domain.set_pending_delete - @domain.save - @domain.statuses.should == ['pendingDelete', 'serverHold'] - @domain.pending_delete?.should == true - @domain.statuses = ['serverManualInzone'] - @domain.save - @domain.set_pending_delete - @domain.statuses.sort.should == ['pendingDelete', 'serverManualInzone'].sort - @domain.statuses = DomainStatus::OK # restore - end - - it 'should not set pending delele' do - @domain.statuses = DomainStatus::OK # restore - @domain.pending_delete?.should == false - @domain.statuses << DomainStatus::CLIENT_DELETE_PROHIBITED - @domain.save - - @domain.set_pending_delete.should == nil - - @domain.pending_delete?.should == false - @domain.statuses = DomainStatus::OK # restore - end - - it 'should notify registrar' do - text = 'Registrant confirmed domain update: testpollmessage123.ee' - domain = create(:domain, name: 'testpollmessage123.ee') - domain.notify_registrar(:poll_pending_update_confirmed_by_registrant) - domain.registrar.notifications.first.text.should == text - end - - context 'about registrant update confirm' do - before :example do - @domain.registrant_verification_token = 123 - @domain.registrant_verification_asked_at = Time.zone.now - @domain.statuses << DomainStatus::PENDING_UPDATE - end - - it 'should be registrant update confirm ready' do - @domain.registrant_update_confirmable?('123').should == true - end - - it 'should not be registrant update confirm ready when token does not match' do - @domain.registrant_update_confirmable?('wrong-token').should == false - end - - it 'should not be registrant update confirm ready when no correct status' do - @domain.statuses = [] - @domain.registrant_update_confirmable?('123').should == false - end - end - - context 'about registrant update confirm when domain is invalid' do - before :example do - @domain.registrant_verification_token = 123 - @domain.registrant_verification_asked_at = Time.zone.now - @domain.statuses << DomainStatus::PENDING_UPDATE - end - - it 'should be registrant update confirm ready' do - @domain.registrant_update_confirmable?('123').should == true - end - - it 'should not be registrant update confirm ready when token does not match' do - @domain.registrant_update_confirmable?('wrong-token').should == false - end - - it 'should not be registrant update confirm ready when no correct status' do - @domain.statuses = [] - @domain.registrant_update_confirmable?('123').should == false - end - end - end - - it 'validates domain name' do - d = create(:domain) - expect(d.name).to_not be_nil - - invalid = [ - 'a.ee', "#{'a' * 64}.ee", 'ab.eu', 'test.ab.ee', '-test.ee', '-test-.ee', - 'test-.ee', 'te--st.ee', 'õ.pri.ee', 'www.ab.ee', 'test.eu', ' .ee', 'a b.ee', - 'Ž .ee', 'test.edu.ee' - ] - - invalid.each do |x| - expect(build(:domain, name: x).valid?).to be false - end - - valid = [ - 'ab.ee', "#{'a' * 63}.ee", 'te-s-t.ee', 'jäääär.ee', 'päike.pri.ee', - 'õigus.com.ee', 'õäöü.fie.ee', 'test.med.ee', 'žä.ee', ' ŽŠ.ee ' - ] - - valid.each do |x| - expect(build(:domain, name: x).valid?).to be true - end - - invalid_punycode = ['xn--geaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-4we.pri.ee'] - - invalid_punycode.each do |x| - expect(build(:domain, name: x).valid?).to be false - end - - valid_punycode = ['xn--ge-uia.pri.ee', 'xn--geaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-9te.pri.ee'] - - valid_punycode.each do |x| - expect(build(:domain, name: x).valid?).to be true - end - end - - it 'should not create zone origin domain' do - d = build(:domain, name: 'ee') - d.save.should == false - expect(d.errors.full_messages).to include('Data management policy violation: Domain name is blocked [name]') - - d = build(:domain, name: 'bla') - d.save.should == false - expect(d.errors.full_messages).to include('Domain name Domain name is invalid') - end - - it 'downcases domain' do - d = Domain.new(name: 'TesT.Ee') - expect(d.name).to eq('test.ee') - expect(d.name_puny).to eq('test.ee') - expect(d.name_dirty).to eq('test.ee') - end - - it 'should be valid when name length is exatly 63 in characters' do - d = create(:domain, name: "#{'a' * 63}.ee") - d.valid? - d.errors.full_messages.should == [] - end - - it 'should not be valid when name length is longer than 63 characters' do - d = build(:domain, name: "#{'a' * 64}.ee") - d.valid? - d.errors.full_messages.should match_array([ - "Domain name Domain name is invalid", - "Puny label Domain name is too long (maximum is 63 characters)" - ]) - end - - it 'should not be valid when name length is longer than 63 characters' do - d = build(:domain, - name: "xn--4caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ee") - d.valid? - d.errors.full_messages.should match_array([ - "Domain name Domain name is invalid", - "Puny label Domain name is too long (maximum is 63 characters)" - ]) - end - - it 'should be valid when name length is 63 characters' do - d = build(:domain, - name: "õäöüšžõäöüšžõäöüšžõäöüšžõäöüšžõäöüšžõäöüšžab123.pri.ee") - d.valid? - d.errors.full_messages.should match_array([ - ]) - end - - it 'should not be valid when name length is longer than 63 punycode characters' do - d = build(:domain, name: "#{'ä' * 63}.ee") - d.valid? - d.errors.full_messages.should == [ - "Puny label Domain name is too long (maximum is 63 characters)" - ] - end - - it 'should not be valid when name length is longer than 63 punycode characters' do - d = build(:domain, name: "#{'ä' * 64}.ee") - d.valid? - d.errors.full_messages.should match_array([ - "Domain name Domain name is invalid", - "Puny label Domain name is too long (maximum is 63 characters)" - ]) - end - - it 'should not be valid when name length is longer than 63 punycode characters' do - d = build(:domain, name: "#{'ä' * 63}.pri.ee") - d.valid? - d.errors.full_messages.should match_array([ - "Puny label Domain name is too long (maximum is 63 characters)" - ]) - end - - it 'should be valid when punycode name length is not longer than 63' do - d = build(:domain, name: "#{'ä' * 53}.pri.ee") - d.valid? - d.errors.full_messages.should == [] - end - - it 'should be valid when punycode name length is not longer than 63' do - d = build(:domain, name: "#{'ä' * 57}.ee") - d.valid? - d.errors.full_messages.should == [] - end - - it 'should not be valid when name length is one pynicode' do - d = build(:domain, name: "xn--4ca.ee") - d.valid? - d.errors.full_messages.should == ["Domain name Domain name is invalid"] - end - - it 'should not be valid with at character' do - d = build(:domain, name: 'dass@sf.ee') - d.valid? - d.errors.full_messages.should == ["Domain name Domain name is invalid"] - end - - it 'should not be valid with invalid characters' do - d = build(:domain, name: '@ba)s(?ä_:-df.ee') - d.valid? - d.errors.full_messages.should == ["Domain name Domain name is invalid"] - end - - it 'should be valid when name length is two pynicodes' do - d = build(:domain, name: "xn--4caa.ee") - d.valid? - d.errors.full_messages.should == [] - end - - it 'should be valid when name length is two pynicodes' do - d = build(:domain, name: "xn--4ca0b.ee") - d.valid? - d.errors.full_messages.should == [] - end - - it 'does not create a reserved domain' do - create(:reserved_domain, name: 'test.ee') - - domain = build(:domain, name: 'test.ee') - domain.validate - - expect(domain.errors[:base]).to include('Required parameter missing; reserved>pw element required for reserved domains') - end - - it 'manages statuses automatically' do - d = build(:domain) - - d.nameservers.build(attributes_for(:nameserver)) - d.nameservers.build(attributes_for(:nameserver)) - - d.save! - - expect(d.statuses.count).to eq(1) - expect(d.statuses.first).to eq(DomainStatus::OK) - - d.period = 2 - d.save - - d.reload - expect(d.statuses.count).to eq(1) - expect(d.statuses.first).to eq(DomainStatus::OK) - - d.statuses << DomainStatus::CLIENT_DELETE_PROHIBITED - d.save - - d.reload - - expect(d.statuses.count).to eq(1) - expect(d.statuses.first).to eq(DomainStatus::CLIENT_DELETE_PROHIBITED) - end -end - -RSpec.describe Domain do - it { is_expected.to alias_attribute(:on_hold_time, :outzone_at) } - it { is_expected.to alias_attribute(:outzone_time, :outzone_at) } - - describe 'registrar validation', db: false do - let(:domain) { described_class.new } - - it 'rejects absent' do - domain.registrar = nil - domain.validate - expect(domain.errors).to have_key(:registrar) - end - end - - describe 'registrant validation', db: false do - let(:domain) { described_class.new } - - it 'rejects absent' do - domain.registrant = nil - domain.validate - expect(domain.errors).to have_key(:registrant) - end - end - - describe 'period validation', db: false do - let(:domain) { described_class.new } - - it 'rejects absent' do - domain.period = nil - domain.validate - expect(domain.errors).to have_key(:period) - end - - it 'rejects fractional' do - domain.period = 1.1 - domain.validate - expect(domain.errors).to have_key(:period) - end - - it 'accepts integer' do - domain.period = 1 - domain.validate - expect(domain.errors).to_not have_key(:period) - end - end - - describe 'admin contact count validation' do - let(:domain) { described_class.new } - - before :example do - Setting.admin_contacts_min_count = 1 - Setting.admin_contacts_max_count = 2 - end - - it 'rejects less than min' do - domain.validate - expect(domain.errors).to have_key(:admin_domain_contacts) - end - - it 'rejects more than max' do - (Setting.admin_contacts_max_count + 1).times { domain.admin_domain_contacts << build(:admin_domain_contact) } - domain.validate - expect(domain.errors).to have_key(:admin_domain_contacts) - end - - it 'accepts min' do - Setting.admin_contacts_min_count.times { domain.admin_domain_contacts << build(:admin_domain_contact) } - domain.validate - expect(domain.errors).to_not have_key(:admin_domain_contacts) - end - - it 'accepts max' do - Setting.admin_contacts_max_count.times { domain.admin_domain_contacts << build(:admin_domain_contact) } - domain.validate - expect(domain.errors).to_not have_key(:admin_domain_contacts) - end - end - - describe 'nameserver validation', db: true do - let(:domain) { described_class.new(name: 'whatever.test') } - - it 'rejects less than min' do - Setting.ns_min_count = 2 - domain.nameservers.build(attributes_for(:nameserver)) - domain.validate - expect(domain.errors).to have_key(:nameservers) - end - - it 'rejects more than max' do - Setting.ns_min_count = 1 - Setting.ns_max_count = 1 - domain.nameservers.build(attributes_for(:nameserver)) - domain.nameservers.build(attributes_for(:nameserver)) - domain.validate - expect(domain.errors).to have_key(:nameservers) - end - - it 'accepts min' do - Setting.ns_min_count = 1 - domain.nameservers.build(attributes_for(:nameserver)) - domain.validate - expect(domain.errors).to_not have_key(:nameservers) - end - - it 'accepts max' do - Setting.ns_min_count = 1 - Setting.ns_max_count = 2 - domain.nameservers.build(attributes_for(:nameserver)) - domain.nameservers.build(attributes_for(:nameserver)) - domain.validate - expect(domain.errors).to_not have_key(:nameservers) - end - - context 'when nameserver is optional' do - before :example do - allow(Domain).to receive(:nameserver_required?).and_return(false) - end - - it 'rejects less than min' do - Setting.ns_min_count = 2 - domain.nameservers.build(attributes_for(:nameserver)) - domain.validate - expect(domain.errors).to have_key(:nameservers) - end - - it 'accepts absent' do - domain.validate - expect(domain.errors).to_not have_key(:nameservers) - end - end - - context 'when nameserver is required' do - before :example do - allow(Domain).to receive(:nameserver_required?).and_return(true) - end - - it 'rejects absent' do - domain.validate - expect(domain.errors).to have_key(:nameservers) - end - end - end - - describe '::nameserver_required?' do - before do - Setting.nameserver_required = 'test' - end - - it 'returns setting value' do - expect(described_class.nameserver_required?).to eq('test') - end - end - - describe '::expire_warning_period', db: true do - before :example do - Setting.expire_warning_period = 1 - end - - it 'returns expire warning period' do - expect(described_class.expire_warning_period).to eq(1.day) - end - end - - describe '::redemption_grace_period', db: true do - before :example do - Setting.redemption_grace_period = 1 - end - - it 'returns redemption grace period' do - expect(described_class.redemption_grace_period).to eq(1.day) - end - end - - describe '#set_server_hold' do - let(:domain) { described_class.new } - - before :example do - travel_to Time.zone.parse('05.07.2010') - domain.set_server_hold - end - - it 'sets corresponding status' do - expect(domain.statuses).to include(DomainStatus::SERVER_HOLD) - end - - it 'sets :outzone_at to now' do - expect(domain.outzone_at).to eq(Time.zone.parse('05.07.2010')) - end - end - - describe '#set_graceful_expired' do - let(:domain) { described_class.new } - - before :example do - expect(described_class).to receive(:expire_warning_period).and_return(1.day) - expect(described_class).to receive(:redemption_grace_period).and_return(2.days) - expect(domain).to receive(:valid_to).and_return(Time.zone.parse('05.07.2010 10:30')) - - domain.set_graceful_expired - end - - it 'sets :outzone_at to :valid_to + expire warning period' do - expect(domain.outzone_at).to eq(Time.zone.parse('06.07.2010 10:30')) - end - - it 'sets :delete_date to :outzone_at + redemption grace period' do - expect(domain.delete_date).to eq(Date.parse('08.07.2010')) - end - end - - describe '::outzone_candidates', db: true do - before :example do - travel_to Time.zone.parse('05.07.2010 00:00') - - create(:zone, origin: 'ee') - - create(:domain, id: 1, outzone_time: Time.zone.parse('04.07.2010 23:59')) - create(:domain, id: 2, outzone_time: Time.zone.parse('05.07.2010 00:00')) - create(:domain, id: 3, outzone_time: Time.zone.parse('05.07.2010 00:01')) - end - - it 'returns domains with outzone time in the past' do - expect(described_class.outzone_candidates.ids).to eq([1]) - end - end - - describe '::uses_zone?', db: true do - let!(:zone) { create(:zone, origin: 'domain.tld') } - - context 'when zone is used' do - let!(:domain) { create(:domain, name: 'test.domain.tld') } - specify { expect(described_class.uses_zone?(zone)).to be true } - end - - context 'when zone is unused' do - specify { expect(described_class.uses_zone?(zone)).to be false } - end - end - - describe '#new_registrant_email' do - let(:domain) { described_class.new(pending_json: { new_registrant_email: 'test@test.com' }) } - - it 'returns new registrant\'s email' do - expect(domain.new_registrant_email).to eq('test@test.com') - end - end - - describe '#new_registrant_id' do - let(:domain) { described_class.new(pending_json: { new_registrant_id: 1 }) } - - it 'returns new registrant\'s id' do - expect(domain.new_registrant_id).to eq(1) - end - end -end diff --git a/spec/models/epp/domain_spec.rb b/spec/models/epp/domain_spec.rb deleted file mode 100644 index 402305527..000000000 --- a/spec/models/epp/domain_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'rails_helper' - -RSpec.describe Epp::Domain, db: false do - describe '::new_from_epp' do - let(:domain_blueprint) { described_class.new } - subject(:domain) { described_class.new_from_epp(nil, nil) } - - before :example do - travel_to Time.zone.parse('05.07.2010') - - domain_blueprint.period = 1 - domain_blueprint.period_unit = 'y' - - expect(described_class).to receive(:new).and_return(domain_blueprint) - expect(domain_blueprint).to receive(:attrs_from).and_return({}) - expect(domain_blueprint).to receive(:attach_default_contacts) - end - - describe 'domain' do - it 'has :registered_at set to now' do - expect(domain.registered_at).to eq(Time.zone.parse('05.07.2010')) - end - - it 'has :valid_to set to the beginning of next day after :registered_at' do - expect(domain.valid_to).to eq(Time.zone.parse('06.07.2011 00:00')) - end - end - end -end diff --git a/spec/models/epp_contact_spec.rb b/spec/models/epp_contact_spec.rb deleted file mode 100644 index 401a63cc6..000000000 --- a/spec/models/epp_contact_spec.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'rails_helper' - -describe Epp::Contact, '.check_availability' do - before do - create(:contact, code: 'asd12') - create(:contact, code: 'asd13') - end - - it 'should return array if argument is string' do - response = Epp::Contact.check_availability('asd12') - response.class.should == Array - response.length.should == 1 - end - - it 'should return in_use and available codes' do - code = Contact.first.code - code_ = Contact.last.code - - response = Epp::Contact.check_availability([code, code_, 'asd14']) - response.class.should == Array - response.length.should == 3 - - response[0][:avail].should == 0 - response[0][:code].should == code - - response[1][:avail].should == 0 - response[1][:code].should == code_ - - response[2][:avail].should == 1 - response[2][:code].should == 'asd14' - end -end diff --git a/spec/models/keyrelay_spec.rb b/spec/models/keyrelay_spec.rb deleted file mode 100644 index fc388dfed..000000000 --- a/spec/models/keyrelay_spec.rb +++ /dev/null @@ -1,77 +0,0 @@ -require 'rails_helper' - -describe Keyrelay do - before :example do - Setting.ds_algorithm = 2 - Setting.ds_data_allowed = true - Setting.ds_data_with_key_allowed = true - Setting.key_data_allowed = true - - Setting.dnskeys_min_count = 0 - Setting.dnskeys_max_count = 9 - Setting.ns_min_count = 2 - Setting.ns_max_count = 11 - - Setting.transfer_wait_time = 0 - - Setting.admin_contacts_min_count = 1 - Setting.admin_contacts_max_count = 10 - Setting.tech_contacts_min_count = 0 - Setting.tech_contacts_max_count = 10 - - Setting.client_side_status_editing_enabled = true - - create(:zone, origin: 'ee') - end - - context 'with invalid attribute' do - before :example do - @keyrelay = Keyrelay.new - end - - it 'should not be valid' do - @keyrelay.valid? - @keyrelay.errors.full_messages.should match_array([ - "Auth info pw Password is missing", - "Domain is missing", - "Key data alg Algorithm is missing", - "Key data flags Flag is missing", - "Key data protocol Protocol is missing", - "Key data public key Public key is missing", - "Only one parameter allowed: relative or absolute" - ]) - end - end - - context 'with valid attributes' do - before :example do - @keyrelay = create(:keyrelay) - end - - it 'should be valid' do - @keyrelay.valid? - @keyrelay.errors.full_messages.should match_array([]) - end - - it 'should be valid twice' do - @keyrelay = create(:keyrelay) - @keyrelay.valid? - @keyrelay.errors.full_messages.should match_array([]) - end - - it 'is in pending status' do - @keyrelay.status.should == 'pending' - end - end - - it 'is in expired status' do - kr = create(:keyrelay, pa_date: Time.zone.now - 2.weeks) - expect(kr.status).to eq('expired') - end - - it 'does not accept invalid relative expiry' do - kr = build(:keyrelay, expiry_relative: 'adf') - expect(kr.save).to eq(false) - expect(kr.errors[:expiry_relative].first).to eq('Expiry relative must be compatible to ISO 8601') - end -end diff --git a/spec/models/legal_document_spec.rb b/spec/models/legal_document_spec.rb deleted file mode 100644 index 03c83bc89..000000000 --- a/spec/models/legal_document_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'rails_helper' - -describe LegalDocument do - context 'tasks' do - it 'make files uniq' do - create(:zone, origin: 'ee') - create(:zone, origin: 'pri.ee') - create(:zone, origin: 'med.ee') - create(:zone, origin: 'fie.ee') - create(:zone, origin: 'com.ee') - LegalDocument.explicitly_write_file = true - PaperTrail.enabled = true - - domain = create(:domain) - domain2 = create(:domain) - legals = [] - legals << original = domain.legal_documents.create!(body: Base64.encode64('S' * 4.kilobytes)) - legals << copy = domain.legal_documents.create!(body: Base64.encode64('S' * 4.kilobytes)) - legals << skipping_as_different_domain = domain2.legal_documents.create!(body: Base64.encode64('S' * 4.kilobytes)) - legals << skipping_as_different = domain.legal_documents.create!(body: Base64.encode64('D' * 4.kilobytes)) - legals << skipping_as_no_checksum = domain.legal_documents.create!(checksum: nil, body: Base64.encode64('S' * 4.kilobytes)) - legals << skipping_as_no_checksum2 = domain.legal_documents.create!(checksum: "", body: Base64.encode64('S' * 4.kilobytes)) - legals << registrant_copy = domain.registrant.legal_documents.create!(body: Base64.encode64('S' * 4.kilobytes)) - legals << registrant_skipping_as_different = domain.registrant.legal_documents.create!(body: Base64.encode64('Q' * 4.kilobytes)) - legals << tech_copy = domain.tech_contacts.first.legal_documents.create!(body: Base64.encode64('S' * 4.kilobytes)) - legals << tech_skipping_as_different = domain.tech_contacts.first.legal_documents.create!(body: Base64.encode64('W' * 4.kilobytes)) - legals << admin_copy = domain.admin_contacts.first.legal_documents.create!(body: Base64.encode64('S' * 4.kilobytes)) - legals << admin_skipping_as_different = domain.admin_contacts.first.legal_documents.create!(body: Base64.encode64('E' * 4.kilobytes)) - legals << new_second_tech_contact = domain2.tech_contacts.first.legal_documents.create!(body: Base64.encode64('S' * 4.kilobytes)) - domain.tech_contacts << domain2.tech_contacts.first - - - # writing nesting to history - domain.update(updated_at: Time.now) - domain2.update(updated_at: Time.now) - domain.reload - - skipping_as_no_checksum.update_columns(checksum: nil) - skipping_as_no_checksum2.update_columns(checksum: "") - skipping_as_no_checksum.reload - skipping_as_no_checksum2.reload - skipping_as_no_checksum.path.should_not == skipping_as_no_checksum2.path - - skipping_as_no_checksum.checksum.should == nil - skipping_as_no_checksum2.checksum.should == "" - original.checksum.should == copy.checksum - original.checksum.should_not == skipping_as_different.checksum - domain.tech_contacts.count.should == 2 - - LegalDocument.remove_duplicates - LegalDocument.remove_duplicates - LegalDocument.remove_duplicates - legals.each(&:reload) - - skipping_as_no_checksum.path.should_not be(skipping_as_no_checksum2.path) - original.path.should_not == skipping_as_different.path - original.path.should_not == skipping_as_different_domain.path - original.path.should_not == registrant_skipping_as_different.path - original.path.should_not == tech_skipping_as_different.path - original.path.should_not == admin_skipping_as_different.path - original.path.should == copy.path - original.path.should == registrant_copy.path - - skipping_as_different_domain.path.should_not == new_second_tech_contact.path - end - end - -end diff --git a/spec/models/registrant_verification_spec.rb b/spec/models/registrant_verification_spec.rb deleted file mode 100644 index 6438fda84..000000000 --- a/spec/models/registrant_verification_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -require 'rails_helper' - -describe RegistrantVerification do - before :example do - Setting.ds_algorithm = 2 - Setting.ds_data_allowed = true - Setting.ds_data_with_key_allowed = true - Setting.key_data_allowed = true - - Setting.dnskeys_min_count = 0 - Setting.dnskeys_max_count = 9 - Setting.ns_min_count = 2 - Setting.ns_max_count = 11 - - Setting.transfer_wait_time = 0 - - Setting.admin_contacts_min_count = 1 - Setting.admin_contacts_max_count = 10 - Setting.tech_contacts_min_count = 0 - Setting.tech_contacts_max_count = 10 - - Setting.client_side_status_editing_enabled = true - - create(:zone, origin: 'ee') - end - context 'with invalid attribute' do - before :example do - @registrant_verification = RegistrantVerification.new - end - - it 'should not be valid' do - @registrant_verification.valid? - @registrant_verification.errors.full_messages.should match_array([ - "Domain name is missing", - "Verification token is missing", - "Action is missing", - "Action type is missing", - "Domain is missing" - ]) - end - end - - context 'with valid attributes' do - before :example do - @registrant_verification = create(:registrant_verification) - end - - it 'should be valid' do - @registrant_verification.valid? - @registrant_verification.errors.full_messages.should match_array([]) - end - - it 'should be valid twice' do - @registrant_verification = create(:registrant_verification) - @registrant_verification.valid? - @registrant_verification.errors.full_messages.should match_array([]) - end - end -end diff --git a/spec/models/setting_spec.rb b/spec/models/setting_spec.rb deleted file mode 100644 index fd392c6d2..000000000 --- a/spec/models/setting_spec.rb +++ /dev/null @@ -1,60 +0,0 @@ -require 'rails_helper' - -RSpec.describe Setting do - describe 'integer_settings', db: false do - it 'returns integer settings' do - settings = %i[ - admin_contacts_min_count - admin_contacts_max_count - tech_contacts_min_count - tech_contacts_max_count - orphans_contacts_in_months - ds_digest_type - dnskeys_min_count - dnskeys_max_count - ns_min_count - ns_max_count - transfer_wait_time - invoice_number_min - invoice_number_max - days_to_keep_invoices_active - days_to_keep_overdue_invoices_active - days_to_renew_domain_before_expire - expire_warning_period - redemption_grace_period - expire_pending_confirmation - ] - - expect(described_class.integer_settings).to eq(settings) - end - end - - describe 'float_settings', db: false do - it 'returns float settings' do - settings = %i[ - registry_vat_prc - minimum_deposit - ] - - expect(described_class.float_settings).to eq(settings) - end - end - - describe 'boolean_settings', db: false do - it 'returns boolean settings' do - settings = %i[ - ds_data_allowed - key_data_allowed - client_side_status_editing_enabled - registrar_ip_whitelist_enabled - api_ip_whitelist_enabled - request_confrimation_on_registrant_change_enabled - request_confirmation_on_domain_deletion_enabled - nameserver_required - address_processing - ] - - expect(described_class.boolean_settings).to eq(settings) - end - end -end diff --git a/spec/models/white_ip_spec.rb b/spec/models/white_ip_spec.rb deleted file mode 100644 index fa28991f1..000000000 --- a/spec/models/white_ip_spec.rb +++ /dev/null @@ -1,53 +0,0 @@ -require 'rails_helper' - -describe WhiteIp do - context 'with invalid attribute' do - before :all do - @white_ip = WhiteIp.new - end - - it 'is not valid' do - @white_ip.valid? - @white_ip.errors.full_messages.should match_array([ - 'IPv4 or IPv6 must be present' - ]) - end - - it 'returns an error with invalid ips' do - @white_ip.ipv4 = 'bla' - @white_ip.ipv6 = 'bla' - - @white_ip.valid? - @white_ip.errors[:ipv4].should == ['is invalid'] - @white_ip.errors[:ipv6].should == ['is invalid'] - end - end - - describe '#include_ip?' do - context 'when given ip v4 exists' do - before do - create(:white_ip, ipv4: '127.0.0.1') - end - - specify do - expect(described_class.include_ip?('127.0.0.1')).to be true - end - end - - context 'when given ip v6 exists' do - before do - create(:white_ip, ipv6: '::1') - end - - specify do - expect(described_class.include_ip?('::1')).to be true - end - end - - context 'when given ip does not exists', db: false do - specify do - expect(described_class.include_ip?('127.0.0.1')).to be false - end - end - end -end diff --git a/spec/presenters/domain_presenter_spec.rb b/spec/presenters/domain_presenter_spec.rb deleted file mode 100644 index 2a1b1bc45..000000000 --- a/spec/presenters/domain_presenter_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -require 'rails_helper' - -RSpec.describe DomainPresenter do - let(:presenter) { described_class.new(domain: domain, view: view) } - - describe '#expire_time' do - let(:domain) { instance_double(Domain, expire_time: Time.zone.parse('05.07.2010')) } - - it 'returns localized time' do - expect(view).to receive(:l).with(Time.zone.parse('05.07.2010')).and_return('expire time') - expect(presenter.expire_time).to eq('expire time') - end - end - - describe '#expire_date' do - let(:domain) { instance_double(Domain, expire_time: Time.zone.parse('05.07.2010')) } - - it 'returns localized date' do - expect(view).to receive(:l).with(Time.zone.parse('05.07.2010'), format: :date).and_return('expire date') - expect(presenter.expire_date).to eq('expire date') - end - end - - describe '#on_hold_date' do - subject(:on_hold_date) { presenter.on_hold_date } - - context 'when present' do - let(:domain) { instance_double(Domain, on_hold_time: '05.07.2010') } - - it 'returns localized date' do - expect(view).to receive(:l).with('05.07.2010', format: :date).and_return('on hold date') - expect(on_hold_date).to eq('on hold date') - end - end - - context 'when absent' do - let(:domain) { instance_double(Domain, on_hold_time: nil) } - - specify { expect(on_hold_date).to be_nil } - end - end - - describe '#delete_date' do - subject(:delete_date) { presenter.delete_date } - - context 'when present' do - let(:domain) { instance_double(Domain, delete_date: '05.07.2010') } - - it 'returns localized date' do - expect(view).to receive(:l).with('05.07.2010').and_return('delete date') - expect(delete_date).to eq('delete date') - end - end - - context 'when absent' do - let(:domain) { instance_double(Domain, delete_date: nil) } - - specify { expect(delete_date).to be_nil } - end - end - - describe '#force_delete_date' do - subject(:force_delete_date) { presenter.force_delete_date } - - context 'when present' do - let(:domain) { instance_double(Domain, force_delete_date: '05.07.2010', force_delete_scheduled?: true) } - - it 'returns localized date' do - expect(view).to receive(:l).with('05.07.2010').and_return('delete date') - expect(force_delete_date).to eq('delete date') - end - end - - context 'when absent' do - let(:domain) { instance_double(Domain, force_delete_date: nil, force_delete_scheduled?: false) } - - specify { expect(force_delete_date).to be_nil } - end - end - - domain_delegatable_attributes = %i( - name - transfer_code - registrant - registrant_id - ) - - domain_delegatable_attributes.each do |attribute_name| - describe "##{attribute_name}" do - let(:domain) { instance_spy(Domain) } - - it 'delegates to domain' do - presenter.send(attribute_name) - expect(domain).to have_received(attribute_name) - end - end - end -end diff --git a/spec/presenters/registrant_presenter_spec.rb b/spec/presenters/registrant_presenter_spec.rb deleted file mode 100644 index 224a0504f..000000000 --- a/spec/presenters/registrant_presenter_spec.rb +++ /dev/null @@ -1,81 +0,0 @@ -require 'rails_helper' - -RSpec.describe RegistrantPresenter do - let(:registrant) { instance_double(Registrant) } - let(:presenter) { described_class.new(registrant: registrant, view: view) } - - describe '#country' do - let(:country) { instance_double(Country) } - - before :example do - allow(registrant).to receive(:country).and_return(country) - end - - it 'returns country name in current locale by default' do - expect(country).to receive(:translation).with(I18n.locale).and_return('test country') - expect(presenter.country).to eq('test country') - end - - it 'returns country name in given locale' do - expect(country).to receive(:translation).with(:de).and_return('test country') - expect(presenter.country(locale: :de)).to eq('test country') - end - end - - describe '#ident_country' do - let(:ident_country) { instance_double(Country) } - - before :example do - allow(registrant).to receive(:ident_country).and_return(ident_country) - end - - it 'returns country name in current locale by default' do - expect(ident_country).to receive(:translation).with(I18n.locale).and_return('test country') - expect(presenter.ident_country).to eq('test country') - end - - it 'returns country name in given locale' do - expect(ident_country).to receive(:translation).with(:de).and_return('test country') - expect(presenter.ident_country(locale: :de)).to eq('test country') - end - end - - describe '#domain_names_with_roles' do - before :example do - roles = %i[registrant admin_domain_contact tech_domain_contact] - allow(registrant).to receive(:domain_names_with_roles) - .and_return({ 'test.com' => roles, - 'test.org' => %i[registrant] }) - end - - it 'returns domain names with unique roles in current locale by default' do - text = "test.com (Registrant, Administrative contact, Technical contact)" \ - "\ntest.org (Registrant)" - expect(presenter.domain_names_with_roles).to eq(text) - end - end - - registrant_delegatable_attributes = %i( - name - ident - phone - email - priv? - street - city - state - zip - id_code - reg_no - linked? - ) - - registrant_delegatable_attributes.each do |attr_name| - describe "##{attr_name}" do - it 'delegates to registrant' do - expect(registrant).to receive(attr_name).and_return('test') - expect(presenter.send(attr_name)).to eq('test') - end - end - end -end diff --git a/spec/presenters/registrar_presenter_spec.rb b/spec/presenters/registrar_presenter_spec.rb deleted file mode 100644 index 8c0196c51..000000000 --- a/spec/presenters/registrar_presenter_spec.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'rails_helper' - -RSpec.describe RegistrarPresenter do - let(:registrar) { instance_double(Registrar) } - let(:presenter) { described_class.new(registrar: registrar, view: view) } - - describe '#name' do - it 'returns name' do - expect(registrar).to receive(:name).and_return('test name') - expect(presenter.name).to eq('test name') - end - end - - describe '#email' do - it 'returns email' do - expect(registrar).to receive(:email).and_return('test email') - expect(presenter.email).to eq('test email') - end - end - - describe '#phone' do - it 'returns phone' do - expect(registrar).to receive(:phone).and_return('test phone') - expect(presenter.phone).to eq('test phone') - end - end - - describe '#website' do - it 'returns website' do - expect(registrar).to receive(:website).and_return('test') - expect(presenter.website).to eq('test') - end - end -end diff --git a/spec/presenters/user_presenter_spec.rb b/spec/presenters/user_presenter_spec.rb deleted file mode 100644 index ba9e1673f..000000000 --- a/spec/presenters/user_presenter_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'rails_helper' - -RSpec.describe UserPresenter do - let(:presenter) { described_class.new(user: user, view: view) } - - describe '#login_with_role' do - let(:user) { instance_double(ApiUser, - login: 'login', - roles: %w[role], - registrar_name: 'registrar') } - - it 'returns username with role and registrar' do - expect(presenter.login_with_role).to eq('login (role) - registrar') - end - end -end diff --git a/spec/requests/admin/billing/prices/create_spec.rb b/spec/requests/admin/billing/prices/create_spec.rb deleted file mode 100644 index 14fe63c08..000000000 --- a/spec/requests/admin/billing/prices/create_spec.rb +++ /dev/null @@ -1,51 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'admin price create', settings: false do - let!(:zone) { create(:zone, id: 1, origin: 'test') } - subject(:price) { Billing::Price.first } - - before :example do - sign_in_to_admin_area - end - - it 'creates new price' do - expect { post admin_prices_path, price: attributes_for(:price, zone_id: '1') } - .to change { Billing::Price.count }.from(0).to(1) - end - - it 'saves zone' do - post admin_prices_path, price: attributes_for(:price, zone_id: '1') - expect(price.zone_id).to eq(1) - end - - it 'saves operation category' do - post admin_prices_path, price: - attributes_for(:price, zone_id: '1', operation_category: Billing::Price.operation_categories.first) - expect(price.operation_category).to eq(Billing::Price.operation_categories.first) - end - - it 'saves duration in months' do - post admin_prices_path, price: attributes_for(:price, zone_id: '1', duration: '3 mons') - expect(price.duration).to eq('3 mons') - end - - it 'saves duration in years' do - post admin_prices_path, price: attributes_for(:price, zone_id: '1', duration: '1 year') - expect(price.duration).to eq('1 year') - end - - it 'saves valid_from' do - post admin_prices_path, price: attributes_for(:price, zone_id: '1', valid_from: '2010-07-06') - expect(price.valid_from).to eq(Time.zone.parse('06.07.2010')) - end - - it 'saves valid_to' do - post admin_prices_path, price: attributes_for(:price, zone_id: '1', valid_to: '2010-07-06') - expect(price.valid_to).to eq(Time.zone.parse('06.07.2010')) - end - - it 'redirects to :index' do - post admin_prices_path, price: attributes_for(:price, zone_id: '1') - expect(response).to redirect_to admin_prices_url - end -end diff --git a/spec/requests/admin/billing/prices/expire_spec.rb b/spec/requests/admin/billing/prices/expire_spec.rb deleted file mode 100644 index 79612bbc9..000000000 --- a/spec/requests/admin/billing/prices/expire_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'admin price expire', settings: false do - before :example do - sign_in_to_admin_area - end - - it 'expires price' do - price = create(:effective_price) - - expect { patch expire_admin_price_path(price); price.reload } - .to change { price.expired? }.from(false).to(true) - end - - it 'redirects to :index' do - price = create(:effective_price) - - patch expire_admin_price_path(price) - - expect(response).to redirect_to admin_prices_url - end -end diff --git a/spec/requests/admin/billing/prices/update_spec.rb b/spec/requests/admin/billing/prices/update_spec.rb deleted file mode 100644 index 0b8abcb83..000000000 --- a/spec/requests/admin/billing/prices/update_spec.rb +++ /dev/null @@ -1,71 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'admin price update', settings: false do - before :example do - sign_in_to_admin_area - end - - it 'updates zone' do - price = create(:price) - create(:zone, id: 2) - - patch admin_price_path(price), price: attributes_for(:price, zone_id: '2') - price.reload - - expect(price.zone_id).to eq(2) - end - - it 'updates operation category' do - price = create(:price, operation_category: Billing::Price.operation_categories.first) - - patch admin_price_path(price), - price: attributes_for(:price, operation_category: Billing::Price.operation_categories.second) - price.reload - - expect(price.operation_category).to eq(Billing::Price.operation_categories.second) - end - - it 'updates duration in months' do - price = create(:price, duration: '3 mons') - - patch admin_price_path(price), price: attributes_for(:price, duration: '6 mons') - price.reload - - expect(price.duration).to eq('6 mons') - end - - it 'updates duration in years' do - price = create(:price, duration: '1 year') - - patch admin_price_path(price), price: attributes_for(:price, duration: '2 years') - price.reload - - expect(price.duration).to eq('2 years') - end - - it 'updates valid_from' do - price = create(:price, valid_from: '2010-07-05') - - patch admin_price_path(price), price: attributes_for(:price, valid_from: '2010-07-06') - price.reload - - expect(price.valid_from).to eq(Time.zone.parse('06.07.2010')) - end - - it 'updates valid_to' do - price = create(:price, valid_to: '2010-07-05') - - patch admin_price_path(price), price: attributes_for(:price, valid_to: '2010-07-06') - price.reload - - expect(price.valid_to).to eq(Time.zone.parse('06.07.2010')) - end - - it 'redirects to :index' do - price = create(:price) - - patch admin_price_path(price), price: attributes_for(:price) - - expect(response).to redirect_to admin_prices_url - end -end diff --git a/spec/requests/admin/dns/zones/create_spec.rb b/spec/requests/admin/dns/zones/create_spec.rb deleted file mode 100644 index 898359ed2..000000000 --- a/spec/requests/admin/dns/zones/create_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'admin zone create', settings: false do - subject(:zone) { DNS::Zone.first } - - before :example do - sign_in_to_admin_area - end - - it 'creates new zone' do - expect { post admin_zones_path, zone: attributes_for(:zone) } - .to change { DNS::Zone.count }.from(0).to(1) - end - - text_attributes = %i[origin email master_nameserver ns_records a_records a4_records] - integer_attributes = %i[ttl refresh retry expire minimum_ttl] - - text_attributes.each do |attr_name| - it "saves #{attr_name}" do - post admin_zones_path, zone: attributes_for(:zone, attr_name => 'test') - expect(zone.send(attr_name)).to eq('test') - end - end - - integer_attributes.each do |attr_name| - it "saves #{attr_name}" do - post admin_zones_path, zone: attributes_for(:zone, attr_name => '1') - expect(zone.send(attr_name)).to eq(1) - end - end - - it 'redirects to :index' do - post admin_zones_path, zone: attributes_for(:zone) - expect(response).to redirect_to admin_zones_url - end -end diff --git a/spec/requests/admin/dns/zones/update_spec.rb b/spec/requests/admin/dns/zones/update_spec.rb deleted file mode 100644 index df0f4bab2..000000000 --- a/spec/requests/admin/dns/zones/update_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'admin zone update', settings: false do - before :example do - sign_in_to_admin_area - end - - text_attributes = %i[origin email master_nameserver ns_records a_records a4_records] - integer_attributes = %i[ttl refresh retry expire minimum_ttl] - - text_attributes.each do |attr_name| - it "updates #{attr_name}" do - zone = create(:zone, attr_name => 'test') - - patch admin_zone_path(zone), zone: attributes_for(:zone, attr_name => 'new-test') - zone.reload - - expect(zone.send(attr_name)).to eq('new-test') - end - end - - integer_attributes.each do |attr_name| - it "updates #{attr_name}" do - zone = create(:zone, attr_name => '1') - - patch admin_zone_path(zone), zone: attributes_for(:zone, attr_name => '2') - zone.reload - - expect(zone.send(attr_name)).to eq(2) - end - end - - it 'redirects to :index' do - zone = create(:zone) - - patch admin_zone_path(zone), zone: attributes_for(:zone) - - expect(response).to redirect_to admin_zones_url - end -end diff --git a/spec/requests/admin/settings/create_spec.rb b/spec/requests/admin/settings/create_spec.rb deleted file mode 100644 index c9e7e443d..000000000 --- a/spec/requests/admin/settings/create_spec.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'Admin settings saving' do - before do - sign_in_to_admin_area - end - - it 'saves integer setting' do - allow(Setting).to receive(:integer_settings) { %i[test_setting] } - post admin_settings_path, settings: { test_setting: '1' } - expect(Setting.test_setting).to eq(1) - end - - it 'saves float setting' do - allow(Setting).to receive(:float_settings) { %i[test_setting] } - post admin_settings_path, settings: { test_setting: '1.2' } - expect(Setting.test_setting).to eq(1.2) - end - - it 'saves boolean setting' do - allow(Setting).to receive(:boolean_settings) { %i[test_setting] } - post admin_settings_path, settings: { test_setting: 'true' } - expect(Setting.test_setting).to be true - end - - it 'saves string setting' do - post admin_settings_path, settings: { test_setting: 'test' } - expect(Setting.test_setting).to eq('test') - end - - it 'redirects to :index' do - post admin_settings_path, settings: { test: 'test' } - expect(response).to redirect_to admin_settings_path - end -end diff --git a/spec/requests/admin/zonefiles/create_spec.rb b/spec/requests/admin/zonefiles/create_spec.rb deleted file mode 100644 index e9dfb62c8..000000000 --- a/spec/requests/admin/zonefiles/create_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'Admin area zone file generation', settings: false do - let!(:zone) { create(:zone, origin: 'com') } - - before do - sign_in_to_admin_area - end - - it 'generates new' do - post admin_zonefiles_path(origin: 'com') - expect(response).to be_success - end -end diff --git a/spec/requests/epp/contact/create/ident_spec.rb b/spec/requests/epp/contact/create/ident_spec.rb deleted file mode 100644 index 2de0e59a1..000000000 --- a/spec/requests/epp/contact/create/ident_spec.rb +++ /dev/null @@ -1,286 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP contact:create' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - - before do - Setting.address_processing = false - sign_in user - end - - context 'when all ident params are valid' do - let(:ident) { Contact.first.identifier } - let(:request_xml) { <<-XML - - - - - - - test - - +1.2 - test@test.com - - - - - test - - - - - XML - } - - it 'creates a contact' do - expect { request }.to change { Contact.count }.from(0).to(1) - end - - it 'saves ident type' do - request - expect(ident.type).to eq('priv') - end - - it 'saves ident country code' do - request - expect(ident.country_code).to eq('US') - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when code is blank' do - let(:request_xml) { <<-XML - - - - - - - test - - +1.2 - test@test.com - - - - - - - - - - XML - } - - it 'does not create a contact' do - expect { request }.to_not change { Contact.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:required_parameter_missing))).to be_truthy - end - end - - context 'when code is not valid national id' do - let(:request_xml) { <<-XML - - - - - - - test - - +1.2 - test@test.com - - - - - invalid - - - - - XML - } - - before do - country_specific_validations = { - Country.new('DE') => proc { false }, - } - - allow(Contact::Ident::NationalIdValidator).to receive(:country_specific_validations) - .and_return(country_specific_validations) - end - - it 'does not create a contact' do - expect { request }.to_not change { Contact.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:parameter_value_syntax_error))).to be_truthy - end - end - - context 'when code is not valid registration number' do - let(:request_xml) { <<-XML - - - - - - - test - - +1.2 - test@test.com - - - - - invalid - - - - - XML - } - - before do - country_specific_formats = { - Country.new('DE') => /\Avalid\z/, - } - - allow(Contact::Ident::RegNoValidator).to receive(:country_specific_formats).and_return(country_specific_formats) - end - - it 'does not create a contact' do - expect { request }.to_not change { Contact.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:parameter_value_syntax_error))).to be_truthy - end - end - - context 'when country code is absent' do - let(:request_xml) { <<-XML - - - - - - - test - - +1.2 - test@test.com - - - - - test - - - - - XML - } - - it 'does not create a contact' do - expect { request }.to_not change { Contact.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:required_parameter_missing))).to be_truthy - end - end - - context 'when country code is blank' do - let(:request_xml) { <<-XML - - - - - - - test - - +1.2 - test@test.com - - - - - test - - - - - XML - } - - it 'does not create a contact' do - expect { request }.to_not change { Contact.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:syntax_error))).to be_truthy - end - end - - context 'when mismatches' do - let(:request_xml) { <<-XML - - - - - - - test - - +1.2 - test@test.com - - - - - test - - - - - XML - } - - before do - mismatches = [ - Contact::Ident::MismatchValidator::Mismatch.new('priv', Country.new('DE')) - ] - allow(Contact::Ident::MismatchValidator).to receive(:mismatches).and_return(mismatches) - end - - it 'does not create a contact' do - expect { request }.to_not change { Contact.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:parameter_value_syntax_error))).to be_truthy - end - end -end diff --git a/spec/requests/epp/contact/create/phone_spec.rb b/spec/requests/epp/contact/create/phone_spec.rb deleted file mode 100644 index fa340abf6..000000000 --- a/spec/requests/epp/contact/create/phone_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'rails_helper' -require_relative '../shared/phone' - -RSpec.describe 'EPP contact:create' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let(:request_xml) { <<-XML - - - - - - - test - - #{phone} - test@test.com - - - - - 123456 - - - - - XML - } - - before do - sign_in user - allow(Contact).to receive(:address_processing?).and_return(false) - end - - include_examples 'EPP contact phone' -end diff --git a/spec/requests/epp/contact/create_spec.rb b/spec/requests/epp/contact/create_spec.rb deleted file mode 100644 index 3d461a041..000000000 --- a/spec/requests/epp/contact/create_spec.rb +++ /dev/null @@ -1,126 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP contact:create' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request_xml_with_address) { ' - - - - - - test name - - test street - test city - 12345 - US - - - +372.1234567 - test@example.com - - - - - 1234567 - dGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCg - - - - ABC-12345 - - ' - } - subject(:response_xml) { Nokogiri::XML(response.body) } - subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } - subject(:response_description) { response_xml.css('result msg').text } - subject(:address_saved) { Contact.last.attributes.slice(*Contact.address_attribute_names).compact.any? } - - before do - sign_in user - end - - context 'when address processing is enabled' do - before do - allow(Contact).to receive(:address_processing?).and_return(true) - end - - context 'with address' do - it 'returns epp code of 1000' do - post '/epp/command/create', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000') - end - - it 'returns epp description' do - post '/epp/command/create', { frame: request_xml_with_address}, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_description).to eq('Command completed successfully') - end - - it 'saves address' do - post '/epp/command/create', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(address_saved).to be_truthy - end - end - end - - context 'when address processing is disabled' do - before do - allow(Contact).to receive(:address_processing?).and_return(false) - end - - context 'with address' do - it 'returns epp code of 1100' do - post '/epp/command/create', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1100') - end - - it 'returns epp description' do - post '/epp/command/create', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_description).to eq('Command completed successfully; Postal address data discarded') - end - - it 'does not save address' do - post '/epp/command/create', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(address_saved).to be_falsey - end - end - - context 'without address' do - let(:request_xml_without_address) { ' - - - - - - test name - - +372.1234567 - test@test.com - - - - - 123456 - dGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCg - - - - ABC-12345 - - ' - } - - it 'returns epp code of 1000' do - post '/epp/command/create', { frame: request_xml_without_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000') - end - - it 'returns epp description' do - post '/epp/command/create', { frame: request_xml_without_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_description).to eq('Command completed successfully') - end - end - end -end diff --git a/spec/requests/epp/contact/info_spec.rb b/spec/requests/epp/contact/info_spec.rb deleted file mode 100644 index dcfbcbede..000000000 --- a/spec/requests/epp/contact/info_spec.rb +++ /dev/null @@ -1,60 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP contact:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request_xml) { ' - - - - - test - - - - ' - } - subject(:response_xml) { Nokogiri::XML(response.body) } - subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } - subject(:address_count) { response_xml - .xpath('//contact:addr', contact: 'https://epp.tld.ee/schema/contact-ee-1.1.xsd') - .count } - - before do - sign_in user - create(:contact, code: 'TEST') - end - - context 'when address processing is enabled' do - before do - allow(Contact).to receive(:address_processing?).and_return(true) - end - - it 'returns epp code of 1000' do - post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000') - end - - it 'returns address' do - post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(address_count).to_not be_zero - end - end - - context 'when address processing is disabled' do - before do - allow(Contact).to receive(:address_processing?).and_return(false) - end - - it 'returns epp code of 1000' do - post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000') - end - - it 'does not return address' do - post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(address_count).to be_zero - end - end -end diff --git a/spec/requests/epp/contact/shared/phone.rb b/spec/requests/epp/contact/shared/phone.rb deleted file mode 100644 index 51a0a758c..000000000 --- a/spec/requests/epp/contact/shared/phone.rb +++ /dev/null @@ -1,28 +0,0 @@ -RSpec.shared_examples 'EPP contact phone' do - context 'when phone is valid' do - let(:phone) { '+123.4' } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when phone has invalid format' do - let(:phone) { '1234' } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:parameter_value_syntax_error))).to be_truthy - end - end - - context 'when phone has only zeros' do - let(:phone) { '+000.0' } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:parameter_value_syntax_error))).to be_truthy - end - end -end diff --git a/spec/requests/epp/contact/update/ident_spec.rb b/spec/requests/epp/contact/update/ident_spec.rb deleted file mode 100644 index c8e1fe389..000000000 --- a/spec/requests/epp/contact/update/ident_spec.rb +++ /dev/null @@ -1,195 +0,0 @@ -require 'rails_helper' - -# https://github.com/internetee/registry/issues/576 - -RSpec.describe 'EPP contact:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:ident) { contact.identifier } - let(:request) { post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let(:request_xml) { <<-XML - - - - - - TEST - - - test - - - - - - - test - - - - - XML - } - - before do - sign_in user - end - - context 'when contact ident is valid' do - context 'when submitted ident matches current one' do - let!(:contact) { create(:contact, code: 'TEST', - ident: 'test', - ident_type: 'priv', - ident_country_code: 'US') } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when submitted ident does not match current one' do - let!(:contact) { create(:contact, code: 'TEST', - ident: 'another-test', - ident_type: 'priv', - ident_country_code: 'US') } - - it 'does not update code' do - expect do - request - contact.reload - end.to_not change { ident.code } - end - - it 'does not update type' do - expect do - request - contact.reload - end.to_not change { ident.type } - end - - it 'does not update country code' do - expect do - request - contact.reload - end.to_not change { ident.country_code } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:data_management_policy_violation))).to be_truthy - end - end - end - - context 'when contact ident is invalid' do - let(:contact) { build(:contact, code: 'TEST', ident: 'test', ident_type: nil, ident_country_code: nil) } - - before do - contact.save(validate: false) - end - - context 'when submitted ident is the same as current one' do - let(:request_xml) { <<-XML - - - - - - TEST - - - test - - - - - - - test - - - - - XML - } - - it 'does not update code' do - expect do - request - contact.reload - end.to_not change { ident.code } - end - - it 'updates type' do - request - contact.reload - expect(ident.type).to eq('priv') - end - - it 'updates country code' do - request - contact.reload - expect(ident.country_code).to eq('US') - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when submitted ident is different from current one' do - let(:request_xml) { <<-XML - - - - - - TEST - - - test - - - - - - - another-test - - - - - XML - } - - it 'does not update code' do - expect do - request - contact.reload - end.to_not change { ident.code } - end - - it 'does not update type' do - expect do - request - contact.reload - end.to_not change { ident.type } - end - - it 'does not update country code' do - expect do - request - contact.reload - end.to_not change { ident.country_code } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:data_management_policy_violation))).to be_truthy - end - end - end -end diff --git a/spec/requests/epp/contact/update/phone_spec.rb b/spec/requests/epp/contact/update/phone_spec.rb deleted file mode 100644 index 9955308b6..000000000 --- a/spec/requests/epp/contact/update/phone_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -require 'rails_helper' -require_relative '../shared/phone' - -RSpec.describe 'EPP contact:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let!(:contact) { create(:contact, code: 'TEST') } - let(:request) { post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let(:request_xml) { <<-XML - - - - - - TEST - - #{phone} - - - - - - XML - } - - before do - sign_in user - allow(Contact).to receive(:address_processing?).and_return(false) - end - - include_examples 'EPP contact phone' -end diff --git a/spec/requests/epp/contact/update_spec.rb b/spec/requests/epp/contact/update_spec.rb deleted file mode 100644 index 9ac3a99bb..000000000 --- a/spec/requests/epp/contact/update_spec.rb +++ /dev/null @@ -1,108 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP contact:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request_xml_with_address) { ' - - - - - test - - - - test street - test city - 12345 - DE - - - - - - - - dGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCg - - - ABC-12345 - - ' - } - subject(:response_xml) { Nokogiri::XML(response.body) } - subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } - subject(:response_description) { response_xml.css('result msg').text } - - before do - sign_in user - create(:contact, code: 'TEST') - end - - context 'when address processing is enabled' do - before do - allow(Contact).to receive(:address_processing?).and_return(true) - end - - context 'with address' do - it 'returns epp code of 1000' do - post '/epp/command/update', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000') - end - - it 'returns epp description' do - post '/epp/command/update', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_description).to eq('Command completed successfully') - end - end - end - - context 'when address processing is disabled' do - before do - allow(Contact).to receive(:address_processing?).and_return(false) - end - - context 'with address' do - it 'returns epp code of 1100' do - post '/epp/command/update', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1100') - end - - it 'returns epp description' do - post '/epp/command/update', { frame: request_xml_with_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_description).to eq('Command completed successfully; Postal address data discarded') - end - end - - context 'without address' do - let(:request_xml_without_address) { ' - - - - - test - - - - - dGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCgdGVzdCBmYWlsCg - - - ABC-12345 - - ' - } - - it 'returns epp code of 1000' do - post '/epp/command/update', { frame: request_xml_without_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000') - end - - it 'returns epp description' do - post '/epp/command/update', { frame: request_xml_without_address }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_description).to eq('Command completed successfully') - end - end - end -end diff --git a/spec/requests/epp/domain/create/account_balance_spec.rb b/spec/requests/epp/domain/create/account_balance_spec.rb deleted file mode 100644 index d4acc7141..000000000 --- a/spec/requests/epp/domain/create/account_balance_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:create', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:contact) { create(:contact, code: 'test') } - let!(:zone) { create(:zone, origin: 'test') } - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'create', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - let(:request_xml) { <<-XML - - - - - - test.test - test - - - - - #{valid_legal_document} - - - - - XML - } - - before :example do - travel_to Time.zone.parse('05.07.2010') - Setting.days_to_renew_domain_before_expire = 0 - sign_in user - end - - context 'when account balance is sufficient' do - let!(:registrar) { create(:registrar_with_unlimited_balance) } - - it 'creates domain' do - expect { request }.to change { Domain.count }.from(0).to(1) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when account balance is not sufficient' do - let!(:registrar) { create(:registrar_with_zero_balance) } - - it 'does not create domain' do - expect { request }.to_not change { Domain.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:billing_failure))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/create/default_period_spec.rb b/spec/requests/epp/domain/create/default_period_spec.rb deleted file mode 100644 index a3a7c6f70..000000000 --- a/spec/requests/epp/domain/create/default_period_spec.rb +++ /dev/null @@ -1,60 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:create', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:contact) { create(:contact, code: 'test') } - let!(:zone) { create(:zone, origin: 'test') } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'create', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - let(:request_xml) { <<-XML - - - - - - test.test - test - - - - - #{valid_legal_document} - - - - - XML - } - - before :example do - travel_to Time.zone.parse('05.07.2010 10:30') - Setting.days_to_renew_domain_before_expire = 0 - sign_in user - end - - context 'when period is absent' do - it 'creates domain' do - expect { request }.to change { Domain.count }.from(0).to(1) - end - - it 'uses default duration of 1 year' do - request - expire_time = (Time.zone.parse('05.07.2010') + 1.year + 1.day).beginning_of_day - expect(Domain.first.expire_time).to eq(expire_time) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/create/optional_nameserver_spec.rb b/spec/requests/epp/domain/create/optional_nameserver_spec.rb deleted file mode 100644 index 920deb14e..000000000 --- a/spec/requests/epp/domain/create/optional_nameserver_spec.rb +++ /dev/null @@ -1,110 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:create', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:contact) { create(:contact, code: 'test') } - let!(:zone) { create(:zone, origin: 'test') } - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'create', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - - before :example do - travel_to Time.zone.parse('05.07.2010') - sign_in user - end - - context 'when nameserver is optional' do - before :example do - allow(Domain).to receive(:nameserver_required?).and_return(false) - end - - context 'when minimum nameserver count requirement is not satisfied' do - let(:request_xml) { <<-XML - - - - - - test.test - 1 - - - ns.test.com - 192.168.1.1 - - - test - - - - - #{valid_legal_document} - - - - - XML - } - - before :example do - Setting.ns_min_count = 2 - end - - it 'does not create domain' do - expect { request }.to_not change { Domain.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:data_management_policy_violation))).to be_truthy - end - end - - context 'when nameserver is absent' do - let(:request_xml) { <<-XML - - - - - - test.test - 1 - test - - - - - #{valid_legal_document} - - - - - XML - } - - it 'creates new domain' do - expect { request }.to change { Domain.count }.from(0).to(1) - end - - describe 'new domain' do - it 'has status of inactive' do - request - expect(Domain.first.statuses).to include(DomainStatus::INACTIVE) - end - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - end -end diff --git a/spec/requests/epp/domain/create/period_spec.rb b/spec/requests/epp/domain/create/period_spec.rb deleted file mode 100644 index 7bd290852..000000000 --- a/spec/requests/epp/domain/create/period_spec.rb +++ /dev/null @@ -1,109 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:create', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:contact) { create(:contact, code: 'test') } - let!(:zone) { create(:zone, origin: 'test') } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - - before :example do - travel_to Time.zone.parse('05.07.2010 10:30') - Setting.days_to_renew_domain_before_expire = 0 - sign_in user - end - - context 'when period is 3 months' do - let!(:price) { create(:price, - duration: '3 mons', - price: Money.from_amount(1), - operation_category: 'create', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - let(:request_xml) { <<-XML - - - - - - test.test - 3 - test - - - - - #{valid_legal_document} - - - - - XML - } - - - it 'creates domain' do - expect { request }.to change { Domain.count }.from(0).to(1) - end - - specify 'expire_time' do - request - expire_time = (Time.zone.parse('05.07.2010 10:30') + 3.months + 1.day).beginning_of_day - expect(Domain.first.expire_time).to eq(expire_time) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when period is 10 years' do - let!(:price) { create(:price, - duration: '10 years', - price: Money.from_amount(1), - operation_category: 'create', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - let(:request_xml) { <<-XML - - - - - - test.test - 10 - test - - - - - #{valid_legal_document} - - - - - XML - } - - it 'creates domain' do - expect { request }.to change { Domain.count }.from(0).to(1) - end - - specify 'expire_time' do - request - expire_time = (Time.zone.parse('05.07.2010 10:30') + 10.years + 1.day).beginning_of_day - expect(Domain.first.expire_time).to eq(expire_time) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/create/price_spec.rb b/spec/requests/epp/domain/create/price_spec.rb deleted file mode 100644 index 69f97633a..000000000 --- a/spec/requests/epp/domain/create/price_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:create', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:contact) { create(:contact, code: 'test') } - let!(:zone) { create(:zone, origin: 'test') } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let(:request_xml) { <<-XML - - - - - - test.test - 1 - test - - - - - #{valid_legal_document} - - - - - XML - } - - before :example do - travel_to Time.zone.parse('05.07.2010') - Setting.days_to_renew_domain_before_expire = 0 - sign_in user - end - - context 'when price is present' do - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'create', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - - it 'creates domain' do - expect { request }.to change { Domain.count }.from(0).to(1) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when price is absent' do - it 'does not create domain' do - expect { request }.to_not change { Domain.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:billing_failure))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/create/required_nameserver_spec.rb b/spec/requests/epp/domain/create/required_nameserver_spec.rb deleted file mode 100644 index 08b5208e1..000000000 --- a/spec/requests/epp/domain/create/required_nameserver_spec.rb +++ /dev/null @@ -1,100 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:create', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:contact) { create(:contact, code: 'test') } - let!(:zone) { create(:zone, origin: 'test') } - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'create', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - - before :example do - travel_to Time.zone.parse('05.07.2010') - sign_in user - end - - context 'when nameserver is required' do - before :example do - allow(Domain).to receive(:nameserver_required?).and_return(true) - Setting.ns_min_count = 1 - end - - context 'when minimum nameserver count requirement is satisfied' do - let(:request_xml) { <<-XML - - - - - - test.test - 1 - - - ns.test.com - 192.168.1.1 - - - test - - - - - #{valid_legal_document} - - - - - XML - } - - it 'creates new domain' do - expect { request }.to change { Domain.count }.from(0).to(1) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when nameservers are absent' do - let(:request_xml) { <<-XML - - - - - - test.test - 1 - test - - - - - #{valid_legal_document} - - - - - XML - } - - it 'does not create domain' do - expect { request }.to_not change { Domain.count } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:required_parameter_missing))).to be_truthy - end - end - end -end diff --git a/spec/requests/epp/domain/renew/account_balance_spec.rb b/spec/requests/epp/domain/renew/account_balance_spec.rb deleted file mode 100644 index 465469100..000000000 --- a/spec/requests/epp/domain/renew/account_balance_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:renew' do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:zone) { create(:zone, origin: 'test') } - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'renew', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - - before :example do - Setting.days_to_renew_domain_before_expire = 0 - travel_to Time.zone.parse('05.07.2010') - sign_in user - end - - context 'when account balance is sufficient' do - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2010')) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-05 - 1 - - - - - XML - } - - it 'renews domain' do - request - domain.reload - expect(domain.expire_time).to eq(Time.zone.parse('05.07.2011')) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when account balance is not sufficient' do - let!(:registrar) { create(:registrar_with_zero_balance) } - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2010')) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-04 - 1 - - - - - XML - } - - it 'does not renew domain' do - request - domain.reload - expect(domain.expire_time).to eq(Time.zone.parse('05.07.2010')) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:billing_failure))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/renew/default_period_spec.rb b/spec/requests/epp/domain/renew/default_period_spec.rb deleted file mode 100644 index 623199cf4..000000000 --- a/spec/requests/epp/domain/renew/default_period_spec.rb +++ /dev/null @@ -1,56 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:renew', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:zone) { create(:zone, origin: 'test') } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'renew', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2010')) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-05 - 1 - - - - - XML - } - - before :example do - travel_to Time.zone.parse('05.07.2010') - Setting.days_to_renew_domain_before_expire = 0 - sign_in user - end - - context 'when period is absent' do - it 'renews domain for 1 year' do - request - domain.reload - expect(domain.expire_time).to eq(Time.zone.parse('05.07.2011')) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/renew/expire_time_spec.rb b/spec/requests/epp/domain/renew/expire_time_spec.rb deleted file mode 100644 index e4321386a..000000000 --- a/spec/requests/epp/domain/renew/expire_time_spec.rb +++ /dev/null @@ -1,89 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:renew' do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:zone) { create(:zone, origin: 'test') } - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'renew', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - - before :example do - Setting.days_to_renew_domain_before_expire = 0 - travel_to Time.zone.parse('05.07.2010') - sign_in user - end - - context 'when given expire time and current match' do - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2010')) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-05 - 1 - - - - - XML - } - - it 'renews domain' do - request - domain.reload - expect(domain.expire_time).to eq(Time.zone.parse('05.07.2011')) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when given expire time and current do not match' do - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2010')) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-04 - 1 - - - - - XML - } - - it 'does not renew domain' do - expect { request; domain.reload }.to_not change { domain.expire_time } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:parameter_value_policy_error))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/renew/max_expire_time_spec.rb b/spec/requests/epp/domain/renew/max_expire_time_spec.rb deleted file mode 100644 index 79362aa15..000000000 --- a/spec/requests/epp/domain/renew/max_expire_time_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:renew' do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:zone) { create(:zone, origin: 'test') } - let!(:price) { create(:price, - duration: '10 years', - price: Money.from_amount(1), - operation_category: 'renew', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - subject(:response_xml) { Nokogiri::XML(response.body) } - subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } - subject(:response_description) { response_xml.css('result msg').text } - - before :example do - travel_to Time.zone.parse('05.07.2010') - Setting.days_to_renew_domain_before_expire = 0 - sign_in user - end - - context 'when domain can be renewed' do - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2010')) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-05 - 10 - - - - - XML - } - - it 'returns epp code of 1000' do - post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000') - end - - it 'returns epp description' do - post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_description).to eq('Command completed successfully') - end - end - - context 'when domain cannot be renewed' do - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2011')) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2011-07-05 - 10 - - - - - XML - } - - it 'returns epp code of 2105' do - post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('2105') - end - - it 'returns epp description' do - post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_description).to eq('Object is not eligible for renewal; ' \ - 'Expiration date must be before 2021-07-05') - end - end -end diff --git a/spec/requests/epp/domain/renew/period_spec.rb b/spec/requests/epp/domain/renew/period_spec.rb deleted file mode 100644 index 0b2e6ed24..000000000 --- a/spec/requests/epp/domain/renew/period_spec.rb +++ /dev/null @@ -1,94 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:renew', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:zone) { create(:zone, origin: 'test') } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2010 10:30')) - } - - before :example do - travel_to Time.zone.parse('05.07.2010') - Setting.days_to_renew_domain_before_expire = 0 - sign_in user - end - - context 'when period is 3 months' do - let!(:price) { create(:price, - duration: '3 mons', - price: Money.from_amount(1), - operation_category: 'renew', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-05 - 3 - - - - - XML - } - - it 'renews domain for 3 months' do - request - domain.reload - expect(domain.expire_time).to eq(Time.zone.parse('05.10.2010 10:30')) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when period is 10 years' do - let!(:price) { create(:price, - duration: '10 years', - price: Money.from_amount(1), - operation_category: 'renew', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-05 - 10 - - - - - XML - } - - it 'renews domain for 10 years' do - request - domain.reload - expect(domain.expire_time).to eq(Time.zone.parse('05.07.2020 10:30')) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/renew/price_spec.rb b/spec/requests/epp/domain/renew/price_spec.rb deleted file mode 100644 index da2ad4022..000000000 --- a/spec/requests/epp/domain/renew/price_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:renew', settings: false do - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:user) { create(:api_user_epp, registrar: registrar) } - let!(:zone) { create(:zone, origin: 'test') } - let!(:registrar) { create(:registrar_with_unlimited_balance) } - let!(:domain) { create(:domain, - registrar: registrar, - name: 'test.test', - expire_time: Time.zone.parse('05.07.2010 10:30')) - } - let(:request_xml) { <<-XML - - - - - - test.test - 2010-07-05 - 1 - - - - - XML - } - - before :example do - travel_to Time.zone.parse('05.07.2010') - Setting.days_to_renew_domain_before_expire = 0 - sign_in user - end - - context 'when price is present' do - let!(:price) { create(:price, - duration: '1 year', - price: Money.from_amount(1), - operation_category: 'renew', - valid_from: Time.zone.parse('05.07.2010'), - valid_to: Time.zone.parse('05.07.2010'), - zone: zone) - } - - it 'renews domain for 1 year' do - request - domain.reload - expect(domain.expire_time).to eq(Time.zone.parse('05.07.2011 10:30')) - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - end - - context 'when price is absent' do - it 'does not renew domain' do - expect { request; domain.reload }.to_not change { domain.expire_time } - end - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:billing_failure))).to be_truthy - end - end -end diff --git a/spec/requests/epp/domain/update/nameserver_add_spec.rb b/spec/requests/epp/domain/update/nameserver_add_spec.rb deleted file mode 100644 index ffad74176..000000000 --- a/spec/requests/epp/domain/update/nameserver_add_spec.rb +++ /dev/null @@ -1,95 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let!(:domain) { create(:domain, name: 'test.com') } - subject(:response_xml) { Nokogiri::XML(response.body) } - subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } - subject(:response_description) { response_xml.css('result msg').text } - - before :example do - sign_in user - - allow(Domain).to receive(:nameserver_required?).and_return(false) - Setting.ns_min_count = 2 - Setting.ns_max_count = 3 - end - - context 'when nameserver count is less than minimum' do - let(:request_xml) { <<-XML - - - - - - test.com - - - - ns1.test.ee - - - - - - - - XML - } - - it 'returns epp code of 2308' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('2308'), "Expected EPP code of 2308, got #{response_code} (#{response_description})" - end - - it 'returns epp description' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - - description = 'Data management policy violation;' \ - " Nameserver count must be between #{Setting.ns_min_count}-#{Setting.ns_max_count}" \ - ' for active domains [nameservers]' - expect(response_description).to eq(description) - end - end - - context 'when nameserver count satisfies required minimum' do - let!(:domain) { create(:domain, name: 'test.com') } - let(:request_xml) { <<-XML - - - - - - test.com - - - - ns1.test.ee - - - ns2.test.ee - - - - - - - - XML - } - - it 'returns epp code of 1000' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000'), "Expected EPP code of 1000, got #{response_code} (#{response_description})" - end - - it 'removes inactive status' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - - domain = Domain.find_by(name: 'test.com') - expect(domain.statuses).to_not include(DomainStatus::INACTIVE) - end - end -end diff --git a/spec/requests/epp/domain/update/nameserver_remove_spec.rb b/spec/requests/epp/domain/update/nameserver_remove_spec.rb deleted file mode 100644 index 4fcaa61dc..000000000 --- a/spec/requests/epp/domain/update/nameserver_remove_spec.rb +++ /dev/null @@ -1,108 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - subject(:response_xml) { Nokogiri::XML(response.body) } - subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } - subject(:response_description) { response_xml.css('result msg').text } - - before :example do - sign_in user - allow(Domain).to receive(:nameserver_required?).and_return(false) - end - - context 'when remaining nameserver count is less than required minimum' do - let!(:domain) { create(:domain, name: 'test.com') } - let(:request_xml) { <<-XML - - - - - - test.com - - - - ns1.test.ee - - - - - - - - XML - } - - before :example do - Setting.ns_min_count = 2 - Setting.ns_max_count = 3 - - domain.nameservers << create(:nameserver, hostname: 'ns1.test.ee') - domain.nameservers << create(:nameserver, hostname: 'ns2.test.ee') - end - - it 'returns epp code of 2308' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('2308'), "Expected EPP code of 2308, got #{response_code} (#{response_description})" - end - - it 'returns epp description' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - - description = 'Data management policy violation;' \ - " Nameserver count must be between #{Setting.ns_min_count}-#{Setting.ns_max_count}" \ - ' for active domains [nameservers]' - expect(response_description).to eq(description) - end - end - - context 'when all nameservers are removed' do - let!(:domain) { create(:domain, name: 'test.com') } - let(:request_xml) { <<-XML - - - - - - test.com - - - - ns1.test.ee - - - ns2.test.ee - - - - - - - - XML - } - - before :example do - domain.nameservers << create(:nameserver, hostname: 'ns1.test.ee') - domain.nameservers << create(:nameserver, hostname: 'ns2.test.ee') - domain.activate - domain.save! - end - - it 'returns epp code of 1000' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response_code).to eq('1000'), "Expected EPP code of 1000, got #{response_code} (#{response_description})" - end - - describe 'domain' do - it 'has status of inactive' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - domain = Domain.find_by(name: 'test.com') - expect(domain.statuses).to include(DomainStatus::INACTIVE) - end - end - end -end diff --git a/spec/requests/epp/domain/update/registrant_change/same_as_current_spec.rb b/spec/requests/epp/domain/update/registrant_change/same_as_current_spec.rb deleted file mode 100644 index bafe6fb0a..000000000 --- a/spec/requests/epp/domain/update/registrant_change/same_as_current_spec.rb +++ /dev/null @@ -1,215 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:domain) { create(:domain, name: 'test.com', registrant: registrant) } - - before :example do - sign_in user - end - - context 'when registrant change confirmation is enabled' do - before :example do - Setting.request_confrimation_on_registrant_change_enabled = true - end - - context 'when given registrant is the same as current one' do - let!(:registrant) { create(:registrant, code: 'TEST') } - let(:request_xml) { <<-XML - - - - - - test.com - - TEST - - - - - - #{valid_legal_document} - - - - - XML - } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - - it 'keeps same registrant' do - expect { request; domain.reload }.to_not change { domain.registrant.code } - end - - it 'does not ask for confirmation' do - request - domain.reload - expect(domain.registrant_verification_asked?).to be false - end - - it 'does not send confirmation and notice emails' do - expect { request }.to_not change { ActionMailer::Base.deliveries.count } - end - end - - context 'when given registrant is different than current one' do - let!(:registrant) { create(:registrant, code: 'OLD-CODE') } - let!(:new_registrant) { create(:registrant, code: 'NEW-CODE') } - let(:request_xml) { <<-XML - - - - - - test.com - - NEW-CODE - - - - - - #{valid_legal_document} - - - - - XML - } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully_action_pending))).to be_truthy - end - - it 'does not change registrant without confirmation' do - expect { request; domain.reload }.to_not change { domain.registrant.code } - end - - it 'asks for confirmation' do - request - domain.reload - expect(domain.registrant_verification_asked?).to be true - end - - it 'sets PENDING_UPDATE status' do - request - domain.reload - expect(domain.statuses).to include(DomainStatus::PENDING_UPDATE) - end - - it 'sends confirmation and notice emails' do - expect { request }.to change { ActionMailer::Base.deliveries.count }.by(2) - end - end - end - - context 'when registrant change confirmation is disabled' do - before :example do - Setting.request_confrimation_on_registrant_change_enabled = false - end - - context 'when given registrant is the same as current one' do - let!(:registrant) { create(:registrant, code: 'TEST') } - let(:request_xml) { <<-XML - - - - - - test.com - - TEST - - - - - - #{valid_legal_document} - - - - - XML - } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - - it 'keeps same registrant' do - expect { request; domain.reload }.to_not change { domain.registrant.code } - end - - it 'does not ask for confirmation' do - request - domain.reload - expect(domain.registrant_verification_asked?).to be false - end - - it 'does not send confirmation and notice emails' do - expect { request }.to_not change { ActionMailer::Base.deliveries.count } - end - end - - context 'when given registrant is different than current one' do - let!(:registrant) { create(:registrant, code: 'OLD-CODE') } - let!(:new_registrant) { create(:registrant, code: 'NEW-CODE') } - let(:request_xml) { <<-XML - - - - - - test.com - - NEW-CODE - - - - - - #{valid_legal_document} - - - - - XML - } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - - it 'changes registrant without confirmation' do - expect { request; domain.reload }.to change { domain.registrant.code }.from('OLD-CODE').to('NEW-CODE') - end - - it 'does not ask for confirmation' do - request - domain.reload - expect(domain.registrant_verification_asked?).to be false - end - - it 'does not set PENDING_UPDATE status' do - request - domain.reload - expect(domain.statuses).to_not include(DomainStatus::PENDING_UPDATE) - end - - it 'does not send confirmation and notice emails' do - expect { request }.to_not change { ActionMailer::Base.deliveries.count } - end - end - end -end diff --git a/spec/requests/epp/domain/update/registrant_change/verified_spec.rb b/spec/requests/epp/domain/update/registrant_change/verified_spec.rb deleted file mode 100644 index 8bb66e61c..000000000 --- a/spec/requests/epp/domain/update/registrant_change/verified_spec.rb +++ /dev/null @@ -1,199 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let!(:registrant) { create(:registrant, code: 'old-code') } - let!(:domain) { create(:domain, name: 'test.com', registrant: registrant) } - let!(:new_registrant) { create(:registrant, code: 'new-code') } - - before :example do - sign_in user - end - - context 'when registrant change confirmation is enabled' do - before :example do - Setting.request_confrimation_on_registrant_change_enabled = true - end - - context 'when verified' do - let(:request_xml) { <<-XML - - - - - - test.com - - new-code - - - - - - #{valid_legal_document} - - - - - XML - } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - - it 'changes registrant' do - expect { request; domain.reload }.to change { domain.registrant.code }.from('old-code').to('new-code') - end - - it 'does not send confirmation email' do - expect { request }.to_not change { ActionMailer::Base.deliveries.count } - end - - it 'does not set PENDING_UPDATE status to domain' do - request - domain.reload - expect(domain.statuses).to_not include(DomainStatus::PENDING_UPDATE) - end - end - - context 'when not verified' do - let(:request_xml) { <<-XML - - - - - - test.com - - new-code - - - - - - #{valid_legal_document} - - - - - XML - } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully_action_pending))).to be_truthy - end - - it 'does not change registrant' do - expect { request; domain.reload }.to_not change { domain.registrant.code } - end - - it 'sends confirmation and notice emails' do - expect { request }.to change { ActionMailer::Base.deliveries.count }.by(2) - end - - it 'sets PENDING_UPDATE status to domain' do - request - domain.reload - expect(domain.statuses).to include(DomainStatus::PENDING_UPDATE) - end - end - end - - context 'when registrant change confirmation is disabled' do - before :example do - Setting.request_confrimation_on_registrant_change_enabled = false - end - - context 'when verified' do - let(:request_xml) { <<-XML - - - - - - test.com - - new-code - - - - - - #{valid_legal_document} - - - - - XML - } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - - it 'changes registrant' do - expect { request; domain.reload }.to change { domain.registrant.code }.from('old-code').to('new-code') - end - - it 'does not send confirmation email' do - expect { request }.to_not change { ActionMailer::Base.deliveries.count } - end - - it 'does not set PENDING_UPDATE status to domain' do - request - domain.reload - expect(domain.statuses).to_not include(DomainStatus::PENDING_UPDATE) - end - end - - context 'when not verified' do - let(:request_xml) { <<-XML - - - - - - test.com - - new-code - - - - - - #{valid_legal_document} - - - - - XML - } - - specify do - request - expect(Epp::Response.xml(response.body).code?(Epp::Response::Result::Code.key(:completed_successfully))).to be_truthy - end - - it 'changes registrant' do - expect { request; domain.reload }.to change { domain.registrant.code }.from('old-code').to('new-code') - end - - it 'does not send confirmation email' do - expect { request }.to_not change { ActionMailer::Base.deliveries.count } - end - - it 'does not set PENDING_UPDATE status to domain' do - request - domain.reload - expect(domain.statuses).to_not include(DomainStatus::PENDING_UPDATE) - end - end - end -end diff --git a/spec/requests/epp/domain/update/status_spec.rb b/spec/requests/epp/domain/update/status_spec.rb deleted file mode 100644 index 19be7a960..000000000 --- a/spec/requests/epp/domain/update/status_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request) { post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } - let(:request_xml) { <<-XML - - - - - - test.com - - - - - XML - } - - before :example do - sign_in user - end - - context 'when domain has both SERVER_DELETE_PROHIBITED and PENDING_UPDATE statuses' do - let!(:domain) { create(:domain, - name: 'test.com', - statuses: [DomainStatus::SERVER_DELETE_PROHIBITED, - DomainStatus::PENDING_UPDATE]) - } - - it 'returns PENDING_UPDATE as domain status' do - request - status = Nokogiri::XML(response.body).at_xpath('//domain:status', - domain: 'https://epp.tld.ee/schema/domain-eis-1.0.xsd').content - expect(status).to eq(DomainStatus::PENDING_UPDATE) - end - end -end diff --git a/spec/requests/registrar/ip_restriction_spec.rb b/spec/requests/registrar/ip_restriction_spec.rb deleted file mode 100644 index 49a04428a..000000000 --- a/spec/requests/registrar/ip_restriction_spec.rb +++ /dev/null @@ -1,87 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'Registrar area IP restriction', settings: false do - before do - @original_registrar_ip_whitelist_enabled_setting = Setting.registrar_ip_whitelist_enabled - end - - after do - Setting.registrar_ip_whitelist_enabled = @original_registrar_ip_whitelist_enabled_setting - end - - context 'when authenticated' do - before do - sign_in_to_registrar_area - end - - context 'when IP restriction is enabled' do - before do - Setting.registrar_ip_whitelist_enabled = true - end - - context 'when ip is allowed' do - let!(:white_ip) { create(:white_ip, - ipv4: '127.0.0.1', - registrar: controller.current_registrar_user.registrar, - interfaces: [WhiteIp::REGISTRAR]) } - - specify do - get registrar_root_url - expect(response).to be_success - end - end - - context 'when ip is not allowed' do - it 'signs the user out' do - get registrar_root_url - expect(controller.current_registrar_user).to be_nil - end - - it 'redirects to login url' do - get registrar_root_url - expect(response).to redirect_to(new_registrar_user_session_url) - end - end - end - - context 'when IP restriction is disabled' do - specify do - get registrar_root_url - expect(response).to be_success - end - end - end - - context 'when unauthenticated' do - context 'when IP restriction is enabled' do - before do - Setting.registrar_ip_whitelist_enabled = true - end - - context 'when ip is allowed' do - let!(:white_ip) { create(:white_ip, - ipv4: '127.0.0.1', - interfaces: [WhiteIp::REGISTRAR]) } - - specify do - get new_registrar_user_session_path - expect(response).to be_success - end - end - - context 'when ip is not allowed' do - specify do - get new_registrar_user_session_path - expect(response.body).to match "Access denied" - end - end - end - - context 'when IP restriction is disabled' do - specify do - get new_registrar_user_session_path - expect(response).to be_success - end - end - end -end diff --git a/spec/requests/registrar/linked_users_spec.rb b/spec/requests/registrar/linked_users_spec.rb deleted file mode 100644 index 05cf10600..000000000 --- a/spec/requests/registrar/linked_users_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'Registrar area linked users', db: false do - describe 'user switch' do - context 'when user is authenticated', db: true do - let!(:current_user) { create(:api_user, id: 1, identity_code: 'code') } - - before do - sign_in current_user - end - - context 'when ip is allowed' do - let(:restricted_ip) { instance_double(Authorization::RestrictedIP, - can_access_registrar_area?: true) } - - before do - allow(Authorization::RestrictedIP).to receive(:new).and_return(restricted_ip) - end - - context 'when new user is linked' do - let!(:new_user) { create(:api_user, id: 2, identity_code: 'code') } - - it 'signs in as a new user' do - put '/registrar/current_user/switch/2', nil, { HTTP_REFERER: registrar_contacts_url } - follow_redirect! - expect(controller.current_registrar_user.id).to eq(2) - end - - it 'redirects back' do - put '/registrar/current_user/switch/2', nil, { HTTP_REFERER: 'http://previous.url' } - expect(response).to redirect_to('http://previous.url') - end - end - - context 'when new user is unlinked' do - let!(:new_user) { create(:api_user, id: 2, identity_code: 'another-code') } - - it 'throws exception' do - expect do - put '/registrar/current_user/switch/2', nil, { HTTP_REFERER: registrar_contacts_path } - end.to raise_error('Cannot switch to unlinked user') - end - end - end - - context 'when ip is not allowed' do - let(:restricted_ip) { instance_double(Authorization::RestrictedIP, - can_access_registrar_area?: false) } - - before do - allow(Authorization::RestrictedIP).to receive(:new).and_return(restricted_ip) - end - - specify do - put '/registrar/current_user/switch/2' - expect(response).to redirect_to(new_registrar_user_session_url) - end - end - end - - context 'when user is not authenticated' do - specify do - put '/registrar/current_user/switch/2' - expect(response).to redirect_to(new_registrar_user_session_url) - end - end - end -end diff --git a/spec/routing/registrant/domain_delete_confirms_routing_spec.rb b/spec/routing/registrant/domain_delete_confirms_routing_spec.rb deleted file mode 100644 index cf7691bb4..000000000 --- a/spec/routing/registrant/domain_delete_confirms_routing_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'rails_helper' - -RSpec.describe Registrant::DomainDeleteConfirmsController do - describe 'routing' do - it 'routes to #show' do - expect(get: '/registrant/domain_delete_confirms/1').to route_to('registrant/domain_delete_confirms#show', id: '1') - end - end -end diff --git a/spec/routing/registrant/domain_update_confirms_routing_spec.rb b/spec/routing/registrant/domain_update_confirms_routing_spec.rb deleted file mode 100644 index 9bc98c391..000000000 --- a/spec/routing/registrant/domain_update_confirms_routing_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'rails_helper' - -RSpec.describe Registrant::DomainUpdateConfirmsController do - describe 'routing' do - it 'routes to #show' do - expect(get: '/registrant/domain_update_confirms/1').to route_to('registrant/domain_update_confirms#show', id: '1') - end - end -end diff --git a/spec/services/registrant_change_spec.rb b/spec/services/registrant_change_spec.rb deleted file mode 100644 index 598874109..000000000 --- a/spec/services/registrant_change_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'rails_helper' - -RSpec.describe RegistrantChange do - describe '#confirm' do - let(:domain) { instance_double(Domain) } - let(:old_registrant) { instance_double(Registrant) } - let(:message) { instance_spy(ActionMailer::MessageDelivery) } - - before :example do - allow(RegistrantChangeMailer).to receive(:accepted) - .with(domain: domain, old_registrant: old_registrant) - .and_return(message) - described_class.new(domain: domain, old_registrant: old_registrant).confirm - end - - it 'notifies registrant' do - expect(message).to have_received(:deliver_now) - end - end -end diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb deleted file mode 100644 index 5434f1a84..000000000 --- a/spec/support/capybara.rb +++ /dev/null @@ -1,6 +0,0 @@ -require_relative 'macros/capybara' - -RSpec.configure do |config| - config.include CapybaraViewMacros, type: :view - config.include CapybaraViewMacros, type: :presenter -end diff --git a/spec/support/database_cleaner.rb b/spec/support/database_cleaner.rb deleted file mode 100644 index 581f5ac7c..000000000 --- a/spec/support/database_cleaner.rb +++ /dev/null @@ -1,30 +0,0 @@ -RSpec.configure do |config| - db_connection_names = ActiveRecord::Base.configurations.keys.grep(/test/).map(&:to_sym).reverse - - config.before :suite do - DatabaseCleaner.strategy = :truncation - - db_connection_names.each do |connection_name| - ActiveRecord::Base.establish_connection(connection_name) - DatabaseCleaner[:active_record, connection: connection_name].strategy = :truncation - end - end - - config.before :example do |example| - if example.metadata[:db] - db_connection_names.each do |connection_name| - ActiveRecord::Base.establish_connection(connection_name) - DatabaseCleaner[:active_record, connection: connection_name].start - end - end - end - - config.after :example do |example| - if example.metadata[:db] - db_connection_names.each do |connection_name| - ActiveRecord::Base.establish_connection(connection_name) - DatabaseCleaner[:active_record, connection: connection_name].clean - end - end - end -end diff --git a/spec/support/devise.rb b/spec/support/devise.rb deleted file mode 100644 index 4dcb76759..000000000 --- a/spec/support/devise.rb +++ /dev/null @@ -1,3 +0,0 @@ -RSpec.configure do |config| - config.include Warden::Test::Helpers -end diff --git a/spec/support/features/session_helpers.rb b/spec/support/features/session_helpers.rb deleted file mode 100644 index 11724f420..000000000 --- a/spec/support/features/session_helpers.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Features - module SessionHelpers - def sign_in_to_admin_area(user: create(:admin_user)) - visit new_admin_user_session_url - - fill_in 'admin_user[username]', with: user.username - fill_in 'admin_user[password]', with: user.password - - click_button 'Sign in' - end - - def sign_in_to_registrar_area(user: create(:api_user)) - visit new_registrar_user_session_url - - fill_in 'registrar_user_username', with: user.username - fill_in 'registrar_user_password', with: user.plain_text_password - - click_button 'Login' - end - - def sign_in_to_registrant_area - user = create(:registrant_user) - sign_in(user, scope: :user) - end - end -end diff --git a/spec/support/macros/capybara.rb b/spec/support/macros/capybara.rb deleted file mode 100644 index 0e9dbf7b0..000000000 --- a/spec/support/macros/capybara.rb +++ /dev/null @@ -1,5 +0,0 @@ -module CapybaraViewMacros - def page - Capybara::Node::Simple.new(rendered) - end -end diff --git a/spec/support/matchers/alias_attribute.rb b/spec/support/matchers/alias_attribute.rb deleted file mode 100644 index 93b4efbb0..000000000 --- a/spec/support/matchers/alias_attribute.rb +++ /dev/null @@ -1,9 +0,0 @@ -RSpec::Matchers.define :alias_attribute do |alias_name, original_name| - match do |actual| - actual.class.attribute_alias(alias_name) == original_name.to_s - end - - failure_message do |actual| - "expected #{actual.class.name} to alias attribute :#{alias_name} by :#{original_name}" - end -end diff --git a/spec/support/paper_trail.rb b/spec/support/paper_trail.rb deleted file mode 100644 index 7304b8b60..000000000 --- a/spec/support/paper_trail.rb +++ /dev/null @@ -1 +0,0 @@ -PaperTrail.whodunnit = 'autotest' diff --git a/spec/support/requests/epp_helpers.rb b/spec/support/requests/epp_helpers.rb deleted file mode 100644 index 1bdcd3075..000000000 --- a/spec/support/requests/epp_helpers.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Requests - module EPPHelpers - def valid_legal_document - Base64.encode64('a' * 5000) - end - end -end diff --git a/spec/support/requests/session_helpers.rb b/spec/support/requests/session_helpers.rb deleted file mode 100644 index 1a7b90138..000000000 --- a/spec/support/requests/session_helpers.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Requests - module SessionHelpers - def sign_in_to_admin_area(user: create(:admin_user)) - post admin_user_session_path, admin_user: { username: user.username, password: user.password } - end - - def sign_in_to_registrar_area(user: create(:api_user)) - post registrar_user_session_path, { registrar_user: { username: user.username, password: user.plain_text_password } } - end - end -end \ No newline at end of file diff --git a/spec/support/settings.rb b/spec/support/settings.rb deleted file mode 100644 index e39fea035..000000000 --- a/spec/support/settings.rb +++ /dev/null @@ -1,28 +0,0 @@ -RSpec.configure do |config| - config.before :example do |example| - if example.metadata[:db] && (example.metadata[:settings] != false) - create(:zone, origin: 'com') - - Setting.ds_algorithm = 2 - Setting.ds_data_allowed = true - Setting.ds_data_with_key_allowed = true - Setting.key_data_allowed = false - - Setting.dnskeys_min_count = 0 - Setting.dnskeys_max_count = 9 - - Setting.nameserver_required = false - Setting.ns_min_count = 2 - Setting.ns_max_count = 11 - - Setting.transfer_wait_time = 0 - - Setting.admin_contacts_min_count = 1 - Setting.admin_contacts_max_count = 10 - Setting.tech_contacts_min_count = 0 - Setting.tech_contacts_max_count = 10 - - Setting.client_side_status_editing_enabled = true - end - end -end diff --git a/spec/validators/contact/ident/mismatch_validator_spec.rb b/spec/validators/contact/ident/mismatch_validator_spec.rb deleted file mode 100644 index dfb30fe09..000000000 --- a/spec/validators/contact/ident/mismatch_validator_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'rails_helper' - -RSpec.describe Contact::Ident::MismatchValidator do - describe '::mismatches' do - it 'returns mismatches' do - mismatches = [ - Contact::Ident::MismatchValidator::Mismatch.new('birthday', Country.new('EE')) - ] - - expect(described_class.mismatches).to eq(mismatches) - end - end -end diff --git a/spec/views/admin/billing/prices/_form.html.erb_spec.rb b/spec/views/admin/billing/prices/_form.html.erb_spec.rb deleted file mode 100644 index 2349a5d1e..000000000 --- a/spec/views/admin/billing/prices/_form.html.erb_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'rails_helper' -require 'views/shared_examples/money_form_field' - -RSpec.describe 'admin/billing/prices/_form' do - let(:price) { build_stubbed(:price) } - - before :example do - without_partial_double_verification do - allow(view).to receive(:price).and_return(price) - allow(view).to receive(:zones).and_return([]) - allow(view).to receive(:operation_categories).and_return([]) - allow(view).to receive(:durations).and_return([]) - end - - stub_template '_form_errors.html.erb' => '' - end - - describe 'price' do - let(:field) { page.find('#price_price') } - it_behaves_like 'money form field' - end -end diff --git a/spec/views/admin/dns/zones/index.html.erb_spec.rb b/spec/views/admin/dns/zones/index.html.erb_spec.rb deleted file mode 100644 index e066ce79b..000000000 --- a/spec/views/admin/dns/zones/index.html.erb_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'admin/dns/zones/index' do - let(:zones) { [] } - - before :example do - assign(:zones, zones) - stub_template '_zone.html.erb' => 'zone-row' - end - - it 'has title' do - render - expect(rendered).to have_text(t('admin.dns.zones.index.title')) - end - - context 'when zones are present' do - let(:zones) { [build_stubbed(:zone)] } - - it 'has zone row' do - render - expect(rendered).to have_text('zone-row') - end - - it 'has no :not_found message' do - render - expect(rendered).to_not have_text(not_found_message) - end - end - - context 'when zones are absent' do - it 'has :not_found message' do - render - expect(rendered).to have_text(not_found_message) - end - end - - def not_found_message - t('admin.dns.zones.index.not_found') - end -end diff --git a/spec/views/admin/domains/edit.html.erb_spec.rb b/spec/views/admin/domains/edit.html.erb_spec.rb deleted file mode 100644 index 3f74a1f2e..000000000 --- a/spec/views/admin/domains/edit.html.erb_spec.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'admin/domains/edit' do - let(:domain) { build_stubbed(:domain) } - let(:domain_presenter) { DomainPresenter.new(domain: domain, view: view) } - - before :example do - allow(DomainPresenter).to receive(:new).and_return(domain_presenter) - - without_partial_double_verification do - allow(view).to receive(:force_delete_templates) - end - - assign(:domain, domain) - - stub_template '_form.html.erb' => '' - stub_template '_force_delete_dialog.html.erb' => '' - end - - it 'has force_delete_toggle_btn' do - expect(domain_presenter).to receive(:force_delete_toggle_btn).and_return('force_delete_toggle_btn') - render - expect(rendered).to have_content('force_delete_toggle_btn') - end -end diff --git a/spec/views/registrar/contacts/_form.haml_spec.rb b/spec/views/registrar/contacts/_form.haml_spec.rb deleted file mode 100644 index 4feead879..000000000 --- a/spec/views/registrar/contacts/_form.haml_spec.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'registrar/contacts/_form' do - let(:contact) { instance_spy(Depp::Contact) } - - before :example do - without_partial_double_verification do - allow(view).to receive(:f).and_return(ActionView::Helpers::FormBuilder.new(:contact, contact, view, {})) - end - - assign(:contact, contact) - - stub_template 'registrar/shared/_error_messages.haml' => '' - stub_template 'registrar/contacts/form/_general.html.haml' => '' - stub_template 'registrar/contacts/form/_address.html.haml' => 'address info' - stub_template 'registrar/contacts/form/_code.html.haml' => '' - stub_template 'registrar/contacts/form/_legal_document.html.haml' => '' - end - - context 'when address processing is enabled' do - before do - without_partial_double_verification do - allow(view).to receive(:address_processing?).and_return(true) - end - end - - it 'has address' do - render - expect(rendered).to have_text('address info') - end - end - - context 'when address processing is disabled' do - before do - without_partial_double_verification do - allow(view).to receive(:address_processing?).and_return(false) - end - end - - it 'has no address' do - render - expect(rendered).to_not have_text('address info') - end - end -end diff --git a/spec/views/registrar/contacts/form/_legal_document.haml_spec.rb b/spec/views/registrar/contacts/form/_legal_document.haml_spec.rb deleted file mode 100644 index 55ac79e9e..000000000 --- a/spec/views/registrar/contacts/form/_legal_document.haml_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'registrar/contacts/form/_legal_document' do - let(:contact) { instance_spy(Depp::Contact) } - - before :example do - without_partial_double_verification do - allow(view).to receive(:f).and_return(DefaultFormBuilder.new(:depp_contact, contact, view, {})) - end - - assign(:contact, contact) - end - - it 'has legal document' do - render - expect(rendered).to have_css('[name="depp_contact[legal_document]"]') - end -end diff --git a/spec/views/registrar/contacts/show.haml_spec.rb b/spec/views/registrar/contacts/show.haml_spec.rb deleted file mode 100644 index 666d151ff..000000000 --- a/spec/views/registrar/contacts/show.haml_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'registrar/contacts/show' do - let(:contact) { instance_spy(Depp::Contact, id: 1, name: 'test') } - - before do - assign(:contact, contact) - stub_template 'shared/_title.html.haml' => '' - stub_template 'registrar/contacts/partials/_general.html.haml' => '' - stub_template 'registrar/contacts/partials/_statuses.html.haml' => '' - stub_template 'registrar/contacts/partials/_domains.html.haml' => '' - stub_template 'registrar/contacts/partials/_address.html.haml' => 'address info' - end - - context 'when address processing is enabled' do - before do - allow(Contact).to receive(:address_processing?).and_return(true) - end - - it 'has address' do - render - expect(rendered).to have_text('address info') - end - end - - context 'when address processing is disabled' do - before do - allow(Contact).to receive(:address_processing?).and_return(false) - end - - it 'has no address' do - render - expect(rendered).to_not have_text('address info') - end - end -end diff --git a/spec/views/registrar/domains/_form.haml_spec.rb b/spec/views/registrar/domains/_form.haml_spec.rb deleted file mode 100644 index 723ab081b..000000000 --- a/spec/views/registrar/domains/_form.haml_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'registrar/domains/_form' do - let(:domain) { instance_spy(Depp::Domain) } - - before :example do - without_partial_double_verification do - allow(view).to receive(:f).and_return(DefaultFormBuilder.new(:domain, domain, view, {})) - end - - assign(:domain, domain) - - stub_template 'registrar/domains/form/_general.html.haml' => '' - stub_template 'registrar/domains/form/_contacts.html.haml' => '' - stub_template 'registrar/domains/form/_nameservers.html.haml' => '' - stub_template 'registrar/domains/form/_dnskeys.html.haml' => '' - end - - it 'has legal document' do - render - expect(rendered).to have_css('[name="domain[legal_document]"]') - end -end diff --git a/spec/views/shared_examples/money_form_field.rb b/spec/views/shared_examples/money_form_field.rb deleted file mode 100644 index e169f5127..000000000 --- a/spec/views/shared_examples/money_form_field.rb +++ /dev/null @@ -1,11 +0,0 @@ -RSpec.shared_examples 'money form field' do - it 'has max length' do - render - expect(field[:maxlength]).to eq('255') - end - - it 'has money pattern' do - render - expect(field[:pattern]).to eq('^[0-9.,]+$') - end -end diff --git a/test/fixtures/billing/prices.yml b/test/fixtures/billing/prices.yml index 2237a72b4..24aa9f980 100644 --- a/test/fixtures/billing/prices.yml +++ b/test/fixtures/billing/prices.yml @@ -1,5 +1,5 @@ create_one_month: - duration: 1 month + duration: 3 mons price_cents: 100 operation_category: create valid_from: 2010-07-05 @@ -7,7 +7,7 @@ create_one_month: zone: one renew_one_month: - duration: 1 month + duration: 1 mons price_cents: 100 operation_category: renew valid_from: 2010-07-05 diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 49508c0cf..c507a6b8a 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -19,6 +19,7 @@ api_goodnames: admin: username: test + email: test@registry.test encrypted_password: <%= Devise::Encryptor.digest(AdminUser, 'testtest') %> type: AdminUser country_code: US diff --git a/test/integration/admin_area/zones_test.rb b/test/integration/admin_area/zones_test.rb new file mode 100644 index 000000000..cf95aedc5 --- /dev/null +++ b/test/integration/admin_area/zones_test.rb @@ -0,0 +1,27 @@ +require 'test_helper' + +class AdminAreaZonesIntegrationTest < ApplicationIntegrationTest + setup do + @zone = dns_zones(:one) + sign_in users(:admin) + end + + def test_updates_zone + new_master_nameserver = 'new.test' + assert_not_equal new_master_nameserver, @zone.master_nameserver + + patch admin_zone_path(@zone), zone: { master_nameserver: new_master_nameserver } + @zone.reload + + assert_equal new_master_nameserver, @zone.master_nameserver + end + + def test_downloads_zone_file + post admin_zonefiles_path(origin: @zone.origin) + + assert_response :ok + assert_equal 'text/plain', response.headers['Content-Type'] + assert_equal 'attachment; filename="test.txt"', response.headers['Content-Disposition'] + assert_not_empty response.body + end +end diff --git a/test/integration/epp/contact/create/base_test.rb b/test/integration/epp/contact/create/base_test.rb index 891dea93a..68b30371a 100644 --- a/test/integration/epp/contact/create/base_test.rb +++ b/test/integration/epp/contact/create/base_test.rb @@ -1,7 +1,11 @@ require 'test_helper' class EppContactCreateBaseTest < EppTestCase - def test_creates_new_contact_with_minimum_required_parameters + def test_creates_new_contact_with_required_attributes + name = 'new' + email = 'new@registrar.test' + phone = '+1.2' + request_xml = <<-XML @@ -9,7 +13,76 @@ class EppContactCreateBaseTest < EppTestCase - New + #{name} + + #{phone} + #{email} + + + + + any + + + + + XML + + assert_difference 'Contact.count' do + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + end + + assert_epp_response :completed_successfully + contact = Contact.find_by(name: name) + assert_equal name, contact.name + assert_equal email, contact.email + assert_equal phone, contact.phone + assert_not_empty contact.code + end + + def test_respects_custom_code + name = 'new' + code = 'custom-id' + session = epp_sessions(:api_bestnames) + + request_xml = <<-XML + + + + + + #{code} + + #{name} + + +1.2 + any@any.test + + + + + any + + + + + XML + + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session.session_id}" + + contact = Contact.find_by(name: name) + assert_equal "#{session.user.registrar.code}:#{code}".upcase, contact.code + end + + def test_fails_when_required_attributes_are_missing + request_xml = <<-XML + + + + + + + \s +123.4 new@inbox.test @@ -24,15 +97,9 @@ class EppContactCreateBaseTest < EppTestCase XML - assert_difference 'Contact.count' do + assert_no_difference 'Contact.count' do post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' end - - assert_epp_response :completed_successfully - contact = Contact.last - assert_not_empty contact.code - assert_equal 'New', contact.name - assert_equal 'new@inbox.test', contact.email - assert_equal '+123.4', contact.phone + assert_epp_response :required_parameter_missing end -end \ No newline at end of file +end diff --git a/test/integration/epp/contact/update/base_test.rb b/test/integration/epp/contact/update/base_test.rb index 2362a4469..7f76a310f 100644 --- a/test/integration/epp/contact/update/base_test.rb +++ b/test/integration/epp/contact/update/base_test.rb @@ -133,6 +133,98 @@ class EppContactUpdateBaseTest < EppTestCase assert_no_emails end + def test_non_existing_contact + assert_nil Contact.find_by(code: 'non-existing') + + request_xml = <<-XML + + + + + + non-existing + + + any + + + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + + assert_epp_response :object_does_not_exist + end + + def test_ident_code_cannot_be_updated + new_ident_code = '12345' + assert_not_equal new_ident_code, @contact.ident + + # https://github.com/internetee/registry/issues/415 + @contact.update_columns(code: @contact.code.upcase) + + request_xml = <<-XML + + + + + + #{@contact.code} + + + + + + + + + #{new_ident_code} + + + + + XML + assert_no_changes -> { @contact.updated_at } do + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + end + assert_epp_response :data_management_policy_violation + end + + # https://github.com/internetee/registry/issues/576 + def test_ident_type_and_ident_country_code_can_be_updated_when_absent + @contact.update_columns(ident: 'test', ident_type: nil, ident_country_code: nil) + + # https://github.com/internetee/registry/issues/415 + @contact.update_columns(code: @contact.code.upcase) + + request_xml = <<-XML + + + + + + #{@contact.code} + + + + + + + + #{@contact.ident} + + + + + XML + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + + assert_epp_response :completed_successfully + end + private def make_contact_free_of_domains_where_it_acts_as_a_registrant(contact) @@ -140,4 +232,4 @@ class EppContactUpdateBaseTest < EppTestCase assert_not_equal other_contact, contact Domain.update_all(registrant_id: other_contact) end -end \ No newline at end of file +end diff --git a/test/integration/epp/domain/create/base_test.rb b/test/integration/epp/domain/create/base_test.rb index e8787645f..43db1e53e 100644 --- a/test/integration/epp/domain/create/base_test.rb +++ b/test/integration/epp/domain/create/base_test.rb @@ -1,15 +1,20 @@ require 'test_helper' class EppDomainCreateBaseTest < EppTestCase - def test_domain_can_be_registered_with_required_attributes_only + def test_registers_new_domain_with_required_attributes + now = Time.zone.parse('2010-07-05') + travel_to now + name = "new.#{dns_zones(:one).origin}" + registrant = contacts(:john).becomes(Registrant) + request_xml = <<-XML - new.test - john-001 + #{name} + #{registrant.code} @@ -25,9 +30,223 @@ class EppDomainCreateBaseTest < EppTestCase post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' end - domain = Domain.last - assert_equal 'new.test', domain.name - assert_equal contacts(:john).becomes(Registrant), domain.registrant assert_epp_response :completed_successfully + + domain = Domain.find_by(name: name) + assert_equal name, domain.name + assert_equal registrant, domain.registrant + assert_not_empty domain.transfer_code + + default_registration_period = 1.year + 1.day + assert_equal now + default_registration_period, domain.expire_time + end + + def test_registers_reserved_domain_with_registration_code + reserved_domain = reserved_domains(:one) + registration_code = reserved_domain.registration_code + + request_xml = <<-XML + + + + + + #{reserved_domain.name} + #{contacts(:john).code} + + + + + #{'test' * 2000} + + #{registration_code} + + + + + + XML + + assert_difference 'Domain.count' do + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + end + assert_epp_response :completed_successfully + + reserved_domain.reload + assert_not_equal registration_code, reserved_domain.registration_code + end + + def test_respects_custom_transfer_code + name = "new.#{dns_zones(:one).origin}" + transfer_code = 'custom-transfer-code' + + request_xml = <<-XML + + + + + + #{name} + #{contacts(:john).code} + + #{transfer_code} + + + + + + #{'test' * 2000} + + + + + XML + + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + + assert_epp_response :completed_successfully + assert_equal transfer_code, Domain.find_by(name: name).transfer_code + end + + def test_blocked_domain_cannot_be_registered + blocked_domain = 'blocked.test' + assert BlockedDomain.find_by(name: blocked_domain) + + request_xml = <<-XML + + + + + + #{blocked_domain} + #{contacts(:john).code} + + + + + #{'test' * 2000} + + + + + XML + + assert_no_difference 'Domain.count' do + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + end + assert_epp_response :data_management_policy_violation + end + + def test_reserved_domain_cannot_be_registered_with_wrong_registration_code + request_xml = <<-XML + + + + + + #{reserved_domains(:one).name} + #{contacts(:john).code} + + + + + #{'test' * 2000} + + wrong + + + + + + XML + + assert_no_difference 'Domain.count' do + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + end + assert_epp_response :invalid_authorization_information + end + + def test_reserved_domain_cannot_be_registered_without_registration_code + reserved_domain = reserved_domains(:one) + + request_xml = <<-XML + + + + + + #{reserved_domain.name} + #{contacts(:john).code} + + + + + #{'test' * 2000} + + + + + XML + + assert_no_difference 'Domain.count' do + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + end + assert_epp_response :required_parameter_missing + end + + def test_insufficient_funds + session = epp_sessions(:api_bestnames) + session.user.registrar.accounts.first.update!(balance: 0) + + request_xml = <<-XML + + + + + + new.test + #{contacts(:john).code} + + + + + #{'test' * 2000} + + + + + XML + assert_no_difference 'Domain.count' do + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session.session_id}" + end + assert_epp_response :billing_failure + end + + def test_no_price + assert_nil Billing::Price.find_by(duration: '2 months') + + request_xml = <<-XML + + + + + + new.test + 2 + john-001 + + + + + #{'test' * 2000} + + + + + XML + assert_no_difference 'Domain.count' do + post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + end + assert_epp_response :billing_failure end end diff --git a/test/integration/epp/domain/create/reserved_test.rb b/test/integration/epp/domain/create/reserved_test.rb deleted file mode 100644 index 40e5be59d..000000000 --- a/test/integration/epp/domain/create/reserved_test.rb +++ /dev/null @@ -1,131 +0,0 @@ -require 'test_helper' - -class EppDomainCreateReservedTest < EppTestCase - setup do - @reserved_domain = reserved_domains(:one) - end - - def test_registers_reserved_domain_with_correct_registration_code - assert_equal 'reserved.test', @reserved_domain.name - assert_equal 'reserved-001', @reserved_domain.registration_code - - request_xml = <<-XML - - - - - - reserved.test - john-001 - - - - - #{'test' * 2000} - - reserved-001 - - - - - - XML - - assert_difference 'Domain.count' do - post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - end - assert_epp_response :completed_successfully - end - - def test_registering_reserved_domain_regenerates_registration_code - assert_equal 'reserved.test', @reserved_domain.name - assert_equal 'reserved-001', @reserved_domain.registration_code - - request_xml = <<-XML - - - - - - reserved.test - john-001 - - - - - #{'test' * 2000} - - reserved-001 - - - - - - XML - - post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - @reserved_domain.reload - - assert_not_equal 'reserved-001', @reserved_domain.registration_code - end - - def test_domain_cannot_be_registered_with_wrong_registration_code - assert_equal 'reserved.test', @reserved_domain.name - assert_equal 'reserved-001', @reserved_domain.registration_code - - request_xml = <<-XML - - - - - - reserved.test - john-001 - - - - - #{'test' * 2000} - - wrong - - - - - - XML - - assert_no_difference 'Domain.count' do - post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - end - assert_epp_response :invalid_authorization_information - end - - def test_domain_cannot_be_registered_without_registration_code - assert_equal 'reserved.test', @reserved_domain.name - - request_xml = <<-XML - - - - - - reserved.test - john-001 - - - - - #{'test' * 2000} - - - - - XML - - assert_no_difference 'Domain.count' do - post '/epp/command/create', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - end - assert_epp_response :required_parameter_missing - end -end diff --git a/test/integration/epp/domain/create/transfer_code_test.rb b/test/integration/epp/domain/create/transfer_code_test.rb deleted file mode 100644 index 05c7d0bec..000000000 --- a/test/integration/epp/domain/create/transfer_code_test.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'test_helper' - -class EppDomainCreateTransferCodeTest < EppTestCase - setup do - travel_to Time.zone.parse('2010-07-05') - end - - def test_generates_default - request_xml = <<-XML - - - - - - brandnew.test - 1 - john-001 - - - - - #{'test' * 2000} - - - - - XML - - post '/epp/command/create', { frame: request_xml }, { 'HTTP_COOKIE' => 'session=api_bestnames' } - refute_empty Domain.find_by(name: 'brandnew.test').transfer_code - assert_epp_response :completed_successfully - end - - def test_honors_custom - request_xml = <<-XML - - - - - - brandnew.test - 1 - john-001 - - 1058ad73 - - - - - - #{'test' * 2000} - - - - - XML - - post '/epp/command/create', { frame: request_xml }, { 'HTTP_COOKIE' => 'session=api_bestnames' } - assert_equal '1058ad73', Domain.find_by(name: 'brandnew.test').transfer_code - assert_epp_response :completed_successfully - end -end diff --git a/test/integration/epp/domain/domain_update_test.rb b/test/integration/epp/domain/domain_update_test.rb deleted file mode 100644 index e36f5a4b7..000000000 --- a/test/integration/epp/domain/domain_update_test.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'test_helper' - -class EppDomainUpdateTest < EppTestCase - def setup - @domain = domains(:shop) - end - - def test_update_domain - request_xml = <<-XML - - - - - - shop.test - - - f0ff7d17b0 - - - - - - - XML - - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - @domain.reload - assert_equal 'f0ff7d17b0', @domain.transfer_code - assert_epp_response :completed_successfully - end - - def test_discarded_domain_cannot_be_updated - @domain.update!(statuses: [DomainStatus::DELETE_CANDIDATE]) - - request_xml = <<-XML - - - - - - shop.test - - - - - XML - - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - assert_epp_response :object_status_prohibits_operation - end -end diff --git a/test/integration/epp/domain/update/base_test.rb b/test/integration/epp/domain/update/base_test.rb new file mode 100644 index 000000000..f085c67c5 --- /dev/null +++ b/test/integration/epp/domain/update/base_test.rb @@ -0,0 +1,295 @@ +require 'test_helper' + +class EppDomainUpdateBaseTest < EppTestCase + include ActionMailer::TestHelper + + def setup + @domain = domains(:shop) + ActionMailer::Base.deliveries.clear + end + + def test_update_domain + request_xml = <<-XML + + + + + + shop.test + + + f0ff7d17b0 + + + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + @domain.reload + assert_equal 'f0ff7d17b0', @domain.transfer_code + assert_epp_response :completed_successfully + end + + def test_discarded_domain_cannot_be_updated + @domain.update!(statuses: [DomainStatus::DELETE_CANDIDATE]) + + request_xml = <<-XML + + + + + + shop.test + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + assert_epp_response :object_status_prohibits_operation + end + + def test_does_not_return_server_delete_prohibited_status_when_pending_update_status_is_set + @domain.update!(statuses: [DomainStatus::SERVER_DELETE_PROHIBITED, + DomainStatus::PENDING_UPDATE]) + request_xml = <<-XML + + + + + + #{@domain.name} + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + + assert_epp_response :object_status_prohibits_operation + response_xml = Nokogiri::XML(response.body) + assert_equal DomainStatus::PENDING_UPDATE, response_xml.at_xpath('//domain:status', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd').text + end + + def test_requires_verification_from_current_registrant_when_provided_registrant_is_a_new_one + Setting.request_confrimation_on_registrant_change_enabled = true + new_registrant = contacts(:william).becomes(Registrant) + assert_not_equal new_registrant, @domain.registrant + + request_xml = <<-XML + + + + + + #{@domain.name} + + #{new_registrant.code} + + + + + + #{'test' * 2000} + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + @domain.reload + + assert_epp_response :completed_successfully_action_pending + assert_not_equal new_registrant, @domain.registrant + assert @domain.registrant_verification_asked? + assert_includes @domain.statuses, DomainStatus::PENDING_UPDATE + assert_verification_and_notification_emails + end + + def test_requires_verification_from_current_registrant_when_not_yet_verified_by_registrar + Setting.request_confrimation_on_registrant_change_enabled = true + new_registrant = contacts(:william) + assert_not_equal new_registrant, @domain.registrant + + request_xml = <<-XML + + + + + + #{@domain.name} + + #{new_registrant.code} + + + + + + #{'test' * 2000} + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + @domain.reload + + assert_epp_response :completed_successfully_action_pending + assert_not_equal new_registrant, @domain.registrant + assert @domain.registrant_verification_asked? + assert_includes @domain.statuses, DomainStatus::PENDING_UPDATE + assert_verification_and_notification_emails + end + + def test_skips_verification_when_provided_registrant_is_the_same_as_current_one + Setting.request_confrimation_on_registrant_change_enabled = true + + request_xml = <<-XML + + + + + + #{@domain.name} + + #{@domain.registrant.code} + + + + + + #{'test' * 2000} + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + @domain.reload + + assert_epp_response :completed_successfully + assert_not @domain.registrant_verification_asked? + refute_includes @domain.statuses, DomainStatus::PENDING_UPDATE + assert_no_emails + end + + def test_skips_verification_when_disabled + Setting.request_confrimation_on_registrant_change_enabled = false + new_registrant = contacts(:william).becomes(Registrant) + assert_not_equal new_registrant, @domain.registrant + + request_xml = <<-XML + + + + + + #{@domain.name} + + #{new_registrant.code} + + + + + + #{'test' * 2000} + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + @domain.reload + + assert_epp_response :completed_successfully + assert_equal new_registrant, @domain.registrant + assert_not @domain.registrant_verification_asked? + refute_includes @domain.statuses, DomainStatus::PENDING_UPDATE + assert_no_emails + end + + def test_skips_verification_from_current_registrant_when_already_verified_by_registrar + Setting.request_confrimation_on_registrant_change_enabled = true + new_registrant = contacts(:william).becomes(Registrant) + assert_not_equal new_registrant, @domain.registrant + + request_xml = <<-XML + + + + + + #{@domain.name} + + #{new_registrant.code} + + + + + + #{'test' * 2000} + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + @domain.reload + + assert_epp_response :completed_successfully + assert_equal new_registrant, @domain.registrant + assert_not @domain.registrant_verification_asked? + refute_includes @domain.statuses, DomainStatus::PENDING_UPDATE + assert_no_emails + end + + def test_deactivates_domain_when_all_name_servers_are_removed + assert @domain.active? + assert_equal 2, @domain.nameservers.count + + request_xml = <<-XML + + + + + + #{@domain.name} + + + + #{nameservers(:shop_ns1).hostname} + + + #{nameservers(:shop_ns2).hostname} + + + + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + @domain.reload + + assert_epp_response :completed_successfully + assert @domain.inactive? + end + + private + + def assert_verification_and_notification_emails + assert_emails 2 + end +end diff --git a/test/models/admin_user_test.rb b/test/models/admin_user_test.rb new file mode 100644 index 000000000..aedc911bd --- /dev/null +++ b/test/models/admin_user_test.rb @@ -0,0 +1,142 @@ +require 'test_helper' + +class AdminUserTest < ActiveSupport::TestCase + def test_valid_user_fixture_is_valid + assert valid_user.valid?, proc { valid_user.errors.full_messages } + end + + def test_invalid_without_username + user = valid_user + user.username = '' + assert user.invalid? + end + + def test_invalid_without_password_and_password_confirmation_when_creating + user = valid_non_persisted_user + + user.password = '' + user.password_confirmation = '' + assert user.invalid? + + user.password = valid_password + user.password_confirmation = user.password + assert user.valid? + end + + def test_validates_password_format + user = valid_non_persisted_user + + user.password = 'a' * (Devise.password_length.min.pred) + user.password_confirmation = user.password + assert user.invalid? + + user.password = 'a' * (Devise.password_length.max.next) + user.password_confirmation = user.password + assert user.invalid? + + user.password = 'a' * Devise.password_length.min + user.password_confirmation = user.password + assert user.valid? + + user.password = 'a' * Devise.password_length.max + user.password_confirmation = user.password + assert user.valid? + end + + def test_requires_password_confirmation + user = valid_non_persisted_user + user.password = valid_password + + user.password_confirmation = '' + assert user.invalid? + + user.password_confirmation = 'another' + assert user.invalid? + + user.password_confirmation = user.password + assert user.valid?, proc { user.errors.full_messages } + end + + def test_invalid_without_email + user = valid_user + user.email = '' + assert user.invalid? + end + + def test_validates_email_format + user = valid_user + + user.email = 'invalid' + assert user.invalid? + + user.email = 'valid@registry.test' + assert user.valid? + end + + def test_invalid_when_email_is_already_taken + another_user = valid_user + user = valid_non_persisted_user + + user.email = another_user.email + assert user.invalid? + + user.email = 'new-user@registry.test' + assert user.valid?, proc { user.errors.full_messages } + end + + def test_invalid_without_country_code + user = valid_user + user.country_code = '' + assert user.invalid? + end + + def test_invalid_without_roles + user = valid_user + user.roles = [] + assert user.invalid? + end + + def test_valid_without_identity_code + user = valid_user + user.identity_code = '' + assert user.valid? + end + + def test_invalid_without_identity_code_when_country_code_is_estonia + user = valid_user + user.country_code = 'EE' + + user.identity_code = '' + + assert user.invalid? + end + + # https://en.wikipedia.org/wiki/National_identification_number#Estonia + def test_validates_identity_code_format_when_country_code_is_estonia + user = valid_user + user.country_code = 'EE' + + user.identity_code = '47101010030' + assert user.invalid? + + user.identity_code = '47101010033' + assert user.valid? + end + + private + + def valid_user + users(:admin) + end + + def valid_non_persisted_user + user = valid_user.dup + user.password = user.password_confirmation = valid_password + user.email = 'another@registry.test' + user + end + + def valid_password + 'a' * Devise.password_length.min + end +end diff --git a/test/models/api_user_test.rb b/test/models/api_user_test.rb index 12f434a49..20d655a9c 100644 --- a/test/models/api_user_test.rb +++ b/test/models/api_user_test.rb @@ -5,6 +5,53 @@ class ApiUserTest < ActiveSupport::TestCase @user = users(:api_bestnames) end + def test_valid_user_fixture_is_valid + assert valid_user.valid?, proc { valid_user.errors.full_messages } + end + + def test_invalid_without_username + user = valid_user + user.username = '' + assert user.invalid? + end + + def test_invalid_when_username_is_already_taken + user = valid_user + another_user = user.dup + + assert another_user.invalid? + + another_user.username = 'another' + assert another_user.valid? + end + + def test_invalid_without_password + user = valid_user + user.plain_text_password = '' + assert user.invalid? + end + + def test_validates_password_format + user = valid_user + min_length = ApiUser.min_password_length + + user.plain_text_password = 'a' * (min_length.pred) + assert user.invalid? + + user.plain_text_password = 'a' * min_length + assert user.valid? + end + + def test_invalid_without_roles + user = valid_user + user.roles = [] + assert user.invalid? + end + + def test_active_by_default + assert ApiUser.new.active? + end + def test_finds_user_by_id_card id_card = IdCard.new id_card.personal_code = 'one' @@ -15,4 +62,10 @@ class ApiUserTest < ActiveSupport::TestCase @user.update!(identity_code: 'another') assert_nil ApiUser.find_by_id_card(id_card) end -end \ No newline at end of file + + private + + def valid_user + users(:api_bestnames) + end +end diff --git a/test/models/billing/price_test.rb b/test/models/billing/price_test.rb new file mode 100644 index 000000000..ccef56910 --- /dev/null +++ b/test/models/billing/price_test.rb @@ -0,0 +1,106 @@ +require 'test_helper' + +class Billing::PriceTest < ActiveSupport::TestCase + setup do + @user = users(:api_bestnames) + end + + def test_valid_price_fixture_is_valid + assert valid_price.valid?, proc { valid_price.errors.full_messages } + end + + def test_invalid_without_price + price = valid_price + price.price = '' + assert price.invalid? + end + + def test_validates_price_format + price = valid_price + + price.price = -1 + assert price.invalid? + + price.price = 0 + assert price.valid?, proc { price.errors.full_messages } + + price.price = "1#{I18n.t('number.currency.format.separator')}1" + assert price.valid? + + price.price = 1 + assert price.valid? + end + + def test_invalid_without_effective_date + price = valid_price + price.valid_from = '' + assert price.invalid? + end + + def test_invalid_without_operation_category + price = valid_price + price.operation_category = '' + assert price.invalid? + end + + def test_validates_operation_category_format + price = valid_price + + price.operation_category = 'invalid' + assert price.invalid? + + price.operation_category = Billing::Price.operation_categories.first + assert price.valid? + end + + def test_invalid_without_duration + price = valid_price + price.duration = '' + assert price.invalid? + end + + def test_validates_duration_format + price = valid_price + + price.duration = 'invalid' + assert price.invalid? + + price.duration = Billing::Price.durations.first + assert price.valid? + end + + def test_returns_operation_categories + operation_categories = %w[create renew] + assert_equal operation_categories, Billing::Price.operation_categories + end + + def test_returns_durations + durations = [ + '3 mons', + '6 mons', + '9 mons', + '1 year', + '2 years', + '3 years', + '4 years', + '5 years', + '6 years', + '7 years', + '8 years', + '9 years', + '10 years', + ] + assert_equal durations, Billing::Price.durations + end + + def test_returns_statuses + statuses = %w[upcoming effective expired] + assert_equal statuses, Billing::Price.statuses + end + + private + + def valid_price + billing_prices(:create_one_month) + end +end diff --git a/test/models/contact/ident_test.rb b/test/models/contact/ident_test.rb new file mode 100644 index 000000000..cc1ea65e9 --- /dev/null +++ b/test/models/contact/ident_test.rb @@ -0,0 +1,128 @@ +require 'test_helper' + +class ContactIdentTest < ActiveSupport::TestCase + def test_valid_ident_is_valid + assert valid_ident.valid?, proc { valid_ident.errors.full_messages } + end + + def test_invalid_without_code + ident = valid_ident + ident.code = '' + assert ident.invalid? + end + + def test_validates_date_of_birth + ident = valid_ident + ident.type = 'birthday' + + ident.code = '2010-07-05' + assert ident.valid? + + ident.code = '2010-07-0' + assert ident.invalid? + end + + # https://en.wikipedia.org/wiki/National_identification_number#Estonia + def test_country_specific_national_id_format_validation + country = Country.new('EE') + ident = valid_ident + ident.type = 'priv' + ident.country_code = country.alpha2 + + ident.code = 'invalid' + assert ident.invalid? + assert_includes ident.errors.full_messages, "Code does not conform to national identification number format of #{country}" + + ident.code = '47101010033' + assert ident.valid? + + ident.country_code = 'US' + ident.code = 'any' + assert ident.valid? + end + + def test_country_specific_company_registration_number_format_validation + country = Country.new('EE') + ident = valid_ident + ident.type = 'org' + ident.country_code = country.alpha2 + allowed_length = 8 + + ident.code = '1' * allowed_length.pred + assert ident.invalid? + assert_includes ident.errors.full_messages, "Code does not conform to registration number format of #{country}" + + ident.code = '1' * allowed_length.next + assert ident.invalid? + + ident.code = '1' * allowed_length + assert ident.valid? + + ident.country_code = 'US' + ident.code = 'any' + assert ident.valid? + end + + def test_invalid_without_type + ident = valid_ident + ident.type = '' + assert ident.invalid? + end + + def test_validates_type + assert_not_includes Contact::Ident.types, 'invalid' + ident = valid_ident + ident.type = 'invalid' + + assert ident.invalid? + end + + def test_invalid_without_country_code + ident = valid_ident + ident.country_code = '' + assert ident.invalid? + end + + def test_validates_country_code_format + ident = valid_ident + + ident.country_code = 'invalid' + assert ident.invalid? + + ident.country_code = 'US' + assert ident.valid? + end + + def test_validates_for_mismatches + ident = valid_ident + mismatch = Contact::Ident::MismatchValidator.mismatches.first + ident.type = mismatch.type + ident.country_code = mismatch.country.alpha2 + + assert ident.invalid? + assert_includes ident.errors.full_messages, %(Ident type "#{ident.type}" is invalid for #{ident.country}) + end + + def test_returns_types + assert_equal %w[org priv birthday], Contact::Ident.types + end + + def test_returns_country + country_code = 'US' + ident = Contact::Ident.new(country_code: country_code) + assert_equal Country.new(country_code), ident.country + end + + def test_equality + assert_equal Contact::Ident.new(code: 'code', type: 'type', country_code: 'US'), + Contact::Ident.new(code: 'code', type: 'type', country_code: 'US') + assert_not_equal Contact::Ident.new(code: 'code', type: 'type', country_code: 'US'), + Contact::Ident.new(code: 'code', type: 'type', country_code: 'GB') + end + + private + + def valid_ident + Contact::Ident.new(code: '1234', type: 'priv', country_code: 'US') + end +end diff --git a/test/models/contact_test.rb b/test/models/contact_test.rb index 9c05e9d1d..8a2301395 100644 --- a/test/models/contact_test.rb +++ b/test/models/contact_test.rb @@ -5,8 +5,8 @@ class ContactTest < ActiveSupport::TestCase @contact = contacts(:john) end - def test_valid_fixture_is_valid - assert @contact.valid?, proc { @contact.errors.full_messages } + def test_valid_contact_fixture_is_valid + assert valid_contact.valid?, proc { valid_contact.errors.full_messages } end def test_invalid_fixture_is_invalid @@ -21,30 +21,106 @@ class ContactTest < ActiveSupport::TestCase assert_equal 'org', Contact::ORG end - def test_invalid_without_email - @contact.email = '' - assert @contact.invalid? + def test_invalid_without_name + contact = valid_contact + contact.name = '' + assert contact.invalid? end - def test_email_format_validation - @contact.email = 'invalid' - assert @contact.invalid? + def test_validates_code_format + contact = valid_contact.dup + max_length = 100 - @contact.email = 'test@bestmail.test' - assert @contact.valid? + contact.code = '!invalid' + assert contact.invalid? + + contact.code = 'a' * max_length.next + assert contact.invalid? + + contact.code = 'foo:bar' + assert contact.valid? + + contact.code = 'a' * max_length + assert contact.valid? + end + + def test_invalid_when_code_is_already_taken + another_contact = valid_contact + contact = another_contact.dup + + contact.code = another_contact.code + assert contact.invalid? + + contact.regenerate_code + assert contact.valid? + end + + def test_invalid_without_email + contact = valid_contact + contact.email = '' + assert contact.invalid? + end + + def test_validates_email_format + contact = valid_contact + + contact.email = 'invalid' + assert contact.invalid? + + contact.email = 'valid@registrar.test' + assert contact.valid? end def test_invalid_without_phone - @contact.email = '' - assert @contact.invalid? + contact = valid_contact + contact.phone = '' + assert contact.invalid? end - def test_phone_format_validation - @contact.phone = '+123.' - assert @contact.invalid? + # https://en.wikipedia.org/wiki/E.164 + def test_validates_phone_format + contact = valid_contact - @contact.phone = '+123.4' - assert @contact.valid? + contact.phone = '+.1' + assert contact.invalid? + + contact.phone = '+123.' + assert contact.invalid? + + contact.phone = '+1.123456789123456' + assert contact.invalid? + + contact.phone = '+134.1234567891234' + assert contact.invalid? + + contact.phone = '+000.1' + assert contact.invalid? + + contact.phone = '+123.0' + assert contact.invalid? + + contact.phone = '+1.2' + assert contact.valid? + + contact.phone = '+123.4' + assert contact.valid? + + contact.phone = '+1.12345678912345' + assert contact.valid? + + contact.phone = '+134.123456789123' + assert contact.valid? + end + + def test_valid_without_address_when_address_processing_id_disabled + contact = valid_contact + + contact.street = '' + contact.city = '' + contact.zip = '' + contact.country_code = '' + + assert contact.valid? end def test_address @@ -133,6 +209,45 @@ class ContactTest < ActiveSupport::TestCase assert_not @contact.deletable? end + def test_normalizes_country_code + contact = Contact.new(country_code: 'us') + contact.validate + assert_equal 'US', contact.country_code + end + + def test_normalizes_ident_country_code + contact = Contact.new(ident_country_code: 'us') + contact.validate + assert_equal 'US', contact.ident_country_code + end + + def test_generates_code + contact = Contact.new(registrar: registrars(:bestnames)) + assert_nil contact.code + + contact.generate_code + + assert_not_empty contact.code + end + + def test_prohibits_code_change + assert_no_changes -> { @contact.code } do + @contact.code = 'new' + @contact.save! + @contact.reload + end + end + + def test_removes_duplicate_statuses + contact = Contact.new(statuses: %w[ok ok]) + assert_equal %w[ok], contact.statuses + end + + def test_default_status + contact = Contact.new + assert_equal %w[ok], contact.statuses + end + private def make_contact_free_of_domains_where_it_acts_as_a_registrant(contact) @@ -146,4 +261,8 @@ class ContactTest < ActiveSupport::TestCase DomainContact.delete_all contacts(:john) end -end \ No newline at end of file + + def valid_contact + contacts(:john) + end +end diff --git a/test/models/dns/zone_test.rb b/test/models/dns/zone_test.rb new file mode 100644 index 000000000..c18f9592a --- /dev/null +++ b/test/models/dns/zone_test.rb @@ -0,0 +1,132 @@ +require 'test_helper' + +class DNS::ZoneTest < ActiveSupport::TestCase + def test_valid_zone_fixture_is_valid + assert valid_zone.valid?, proc { valid_zone.errors.full_messages } + end + + def test_invalid_without_origin + zone = valid_zone + zone.origin = '' + assert zone.invalid? + end + + def test_invalid_when_origin_is_already_taken + zone = valid_zone + another_zone = zone.dup + assert another_zone.invalid? + end + + def test_invalid_without_ttl + zone = valid_zone + zone.ttl = '' + assert zone.invalid? + end + + def test_validates_ttl_format + zone = valid_zone + + zone.ttl = 'text' + assert zone.invalid? + + zone.ttl = '1.1' + assert zone.invalid? + + zone.ttl = '1' + assert zone.valid? + end + + def test_invalid_without_refresh + zone = valid_zone + zone.refresh = '' + assert zone.invalid? + end + + def test_validates_refresh_format + zone = valid_zone + + zone.refresh = 'text' + assert zone.invalid? + + zone.refresh = '1.1' + assert zone.invalid? + + zone.refresh = '1' + assert zone.valid? + end + + def test_invalid_without_retry + zone = valid_zone + zone.retry = '' + assert zone.invalid? + end + + def test_validates_retry_format + zone = valid_zone + + zone.retry = 'text' + assert zone.invalid? + + zone.retry = '1.1' + assert zone.invalid? + + zone.retry = '1' + assert zone.valid? + end + + def test_invalid_without_expire + zone = valid_zone + zone.expire = '' + assert zone.invalid? + end + + def test_validates_expire_format + zone = valid_zone + + zone.expire = 'text' + assert zone.invalid? + + zone.expire = '1.1' + assert zone.invalid? + + zone.expire = '1' + assert zone.valid? + end + + def test_invalid_without_minimum_ttl + zone = valid_zone + zone.minimum_ttl = '' + assert zone.invalid? + end + + def test_validates_minimum_ttl_format + zone = valid_zone + + zone.minimum_ttl = 'text' + assert zone.invalid? + + zone.minimum_ttl = '1.1' + assert zone.invalid? + + zone.minimum_ttl = '1' + assert zone.valid? + end + + def test_invalid_without_email + zone = valid_zone + zone.email = '' + assert zone.invalid? + end + + def test_invalid_without_master_nameserver + zone = valid_zone + zone.master_nameserver = '' + assert zone.invalid? + end + + private + + def valid_zone + dns_zones(:one) + end +end diff --git a/test/models/domain_test.rb b/test/models/domain_test.rb index 98baa084a..4cbcda0b7 100644 --- a/test/models/domain_test.rb +++ b/test/models/domain_test.rb @@ -3,16 +3,271 @@ require 'test_helper' class DomainTest < ActiveSupport::TestCase setup do @domain = domains(:shop) + + @original_nameserver_required = Setting.nameserver_required + @original_min_admin_contact_count = Setting.admin_contacts_min_count + @original_max_admin_contact_count = Setting.admin_contacts_max_count + @original_min_tech_contact_count = Setting.tech_contacts_min_count + @original_max_tech_contact_count = Setting.tech_contacts_max_count end - def test_valid_fixture_is_valid - assert @domain.valid? + teardown do + Setting.nameserver_required = @original_nameserver_required + Setting.admin_contacts_min_count = @original_min_admin_contact_count + Setting.admin_contacts_max_count = @original_max_admin_contact_count + Setting.tech_contacts_min_count = @original_min_tech_contact_count + Setting.tech_contacts_max_count = @original_max_tech_contact_count + end + + def test_valid_domain_is_valid + assert valid_domain.valid?, proc { valid_domain.errors.full_messages } end def test_invalid_fixture_is_invalid assert domains(:invalid).invalid? end + # https://www.internet.ee/domeenid/ee-domeenireeglid#domeeninimede-registreerimine + def test_validates_name_format + assert_equal dns_zones(:one).origin, 'test' + domain = valid_domain + subdomain_min_length = 2 + subdomain_max_length = 63 + + domain.name = '!invalid' + assert domain.invalid? + + domain.name = 'aa--a.test' + assert domain.invalid? + + domain.name = '-example.test' + assert domain.invalid? + + domain.name = 'example-.test' + assert domain.invalid? + + domain.name = "#{'a' * subdomain_min_length.pred}.test" + assert domain.invalid? + + domain.name = "#{'a' * subdomain_max_length.next}.test" + assert domain.invalid? + + domain.name = 'рф.test' + assert domain.invalid? + + domain.name = "#{'a' * subdomain_min_length}.test" + assert domain.valid? + + domain.name = "#{'a' * subdomain_max_length}.test" + assert domain.valid? + + domain.name = 'example-1-2.test' + assert domain.valid? + + domain.name = 'EXAMPLE.test' + assert domain.valid? + + domain.name = 'äõöüšž.test' + assert domain.valid? + + domain.name = 'xn--mnchen-3ya.test' + assert domain.valid? + end + + def test_invalid_when_name_is_already_taken + Setting.admin_contacts_min_count = Setting.tech_contacts_min_count = 0 + another_domain = valid_domain + domain = another_domain.dup + + domain.name = another_domain.name + assert domain.invalid? + + domain.name = "new.#{dns_zones(:one).origin}" + assert domain.valid?, proc { domain.errors.full_messages } + end + + def test_invalid_when_name_is_zone + name = dns_zones(:one).origin + domain = valid_domain + + domain.name = name + + assert domain.invalid? + assert_includes domain.errors.full_messages, 'Data management policy violation:' \ + ' Domain name is blocked [name]' + end + + def test_invalid_without_transfer_code + domain = valid_domain + domain.transfer_code = '' + assert domain.invalid? + end + + def test_invalid_when_domain_is_reserved + reserved_domain = reserved_domains(:one) + domain = valid_domain.dup + domain.name = reserved_domain.name + + assert domain.invalid? + assert_includes domain.errors.full_messages, 'Required parameter missing; reserved>' \ + 'pw element required for reserved domains' + end + + def test_invalid_without_registration_period + domain = valid_domain + domain.period = '' + assert domain.invalid? + end + + def test_validates_registration_period_format + domain = valid_domain + + domain.period = 'invalid' + assert domain.invalid? + + domain.period = 1.1 + assert domain.invalid? + + domain.period = 1 + assert domain.valid? + end + + def test_invalid_when_the_same_admin_contact_is_linked_twice + domain = valid_domain + contact = contacts(:john) + + domain.admin_contacts << contact + domain.admin_contacts << contact + + assert domain.invalid? + end + + def test_invalid_when_the_same_tech_contact_is_linked_twice + domain = valid_domain + contact = contacts(:john) + + domain.tech_contacts << contact + domain.tech_contacts << contact + + assert domain.invalid? + end + + def test_validates_name_server_count_when_name_servers_are_required + nameserver_attributes = nameservers(:shop_ns1).dup.attributes + domain = valid_domain + Setting.nameserver_required = true + min_count = 1 + max_count = 2 + Setting.ns_min_count = min_count + Setting.ns_max_count = max_count + + domain.nameservers.clear + min_count.times { domain.nameservers.build(nameserver_attributes) } + assert domain.valid?, proc { domain.errors.full_messages } + + domain.nameservers.clear + max_count.times do |i| + domain.nameservers.build(nameserver_attributes.merge(hostname: "ns#{i}.test")) + end + assert domain.valid?, proc { domain.errors.full_messages } + + domain.nameservers.clear + assert domain.invalid? + + domain.nameservers.clear + max_count.next.times do |i| + domain.nameservers.build(nameserver_attributes.merge(hostname: "ns#{i}.test")) + end + assert domain.invalid? + end + + def test_valid_without_name_servers_when_they_are_optional + domain = valid_domain + domain.nameservers.clear + Setting.nameserver_required = false + Setting.ns_min_count = 1 + + assert domain.valid? + end + + def test_validates_admin_contact_count + domain_contact_attributes = domain_contacts(:shop_jane).dup.attributes + domain = valid_domain + min_count = 1 + max_count = 2 + Setting.admin_contacts_min_count = min_count + Setting.admin_contacts_max_count = max_count + + domain.admin_domain_contacts.clear + min_count.times { domain.admin_domain_contacts.build(domain_contact_attributes) } + assert domain.valid?, proc { domain.errors.full_messages } + + domain.admin_domain_contacts.clear + max_count.times { domain.admin_domain_contacts.build(domain_contact_attributes) } + assert domain.valid?, proc { domain.errors.full_messages } + + domain.admin_domain_contacts.clear + assert domain.invalid? + + domain.admin_domain_contacts.clear + max_count.next.times { domain.admin_domain_contacts.build(domain_contact_attributes) } + assert domain.invalid? + end + + def test_validates_tech_contact_count + domain_contact_attributes = domain_contacts(:shop_william).dup.attributes + domain = valid_domain + min_count = 1 + max_count = 2 + Setting.tech_contacts_min_count = min_count + Setting.tech_contacts_max_count = max_count + + domain.tech_domain_contacts.clear + min_count.times { domain.tech_domain_contacts.build(domain_contact_attributes) } + assert domain.valid?, proc { domain.errors.full_messages } + + domain.tech_domain_contacts.clear + max_count.times { domain.tech_domain_contacts.build(domain_contact_attributes) } + assert domain.valid?, proc { domain.errors.full_messages } + + domain.tech_domain_contacts.clear + assert domain.invalid? + + domain.tech_domain_contacts.clear + max_count.next.times { domain.tech_domain_contacts.build(domain_contact_attributes) } + assert domain.invalid? + end + + def test_outzone_candidates_scope_returns_records_with_outzone_at_in_the_past + travel_to Time.zone.parse('2010-07-05 08:00:00') + domain1 = domains(:shop) + domain1.update!(outzone_at: Time.zone.parse('2010-07-05 07:59:59')) + domain2 = domains(:airport) + domain2.update!(outzone_at: Time.zone.parse('2010-07-05 08:00:00')) + domain3 = domains(:library) + domain3.update!(outzone_at: Time.zone.parse('2010-07-05 08:00:01')) + Domain.connection.disable_referential_integrity do + Domain.delete_all("id NOT IN (#{[domain1.id, domain2.id, domain3.id].join(',')})") + end + + assert_equal [domain1.id], Domain.outzone_candidates.ids + end + + def test_expired_scope_returns_records_with_valid_to_in_the_past + travel_to Time.zone.parse('2010-07-05 08:00:00') + domain1 = domains(:shop) + domain1.update!(valid_to: Time.zone.parse('2010-07-05 07:59:59')) + domain2 = domains(:airport) + domain2.update!(valid_to: Time.zone.parse('2010-07-05 08:00:00')) + domain3 = domains(:library) + domain3.update!(valid_to: Time.zone.parse('2010-07-05 08:00:01')) + Domain.connection.disable_referential_integrity do + Domain.delete_all("id NOT IN (#{[domain1.id, domain2.id, domain3.id].join(',')})") + end + + assert_equal [domain1.id, domain2.id], Domain.expired.ids + end + def test_domain_name domain = Domain.new(name: 'shop.test') assert_equal 'shop.test', domain.domain_name.to_s @@ -79,4 +334,87 @@ class DomainTest < ActiveSupport::TestCase assert_equal %w[john@inbox.test william@inbox.test].sort, @domain.primary_contact_emails.sort end -end \ No newline at end of file + + def test_normalizes_name + unnormalized_name = ' Foo.test ' + domain = Domain.new(name: unnormalized_name) + + assert_equal 'foo.test', domain.name + assert_equal 'foo.test', domain.name_puny + assert_equal unnormalized_name, domain.name_dirty + end + + def test_converts_name_to_punycode + domain = Domain.new(name: 'münchen.test') + assert_equal 'xn--mnchen-3ya.test', domain.name_puny + end + + def test_returns_new_registrant_id + id = 1 + domain = Domain.new(pending_json: { new_registrant_id: id }) + + assert_equal id, domain.new_registrant_id + end + + def test_returns_new_registrant_email + email = 'john@inbox.test' + domain = Domain.new(pending_json: { new_registrant_email: email }) + + assert_equal email, domain.new_registrant_email + end + + def test_expiration + now = Time.zone.parse('2010-07-05 08:00:00') + travel_to now + domain = Domain.new + + domain.valid_to = now + 1.second + assert domain.registered? + assert_not domain.expired? + + domain.valid_to = now + assert domain.expired? + assert_not domain.registered? + + domain.valid_to = now - 1.second + assert domain.expired? + assert_not domain.registered? + end + + def test_activation + domain = inactive_domain + + assert domain.inactive? + assert_not domain.active? + + domain.activate + + assert domain.active? + assert_not domain.inactive? + end + + def test_deactivation + domain = @domain + + assert domain.active? + assert_not domain.inactive? + + domain.deactivate + + assert domain.inactive? + assert_not domain.active? + end + + private + + def valid_domain + domains(:shop) + end + + def inactive_domain + Setting.nameserver_required = true + domain = @domain + domain.update!(statuses: [DomainStatus::INACTIVE]) + domain + end +end diff --git a/test/models/white_ip_test.rb b/test/models/white_ip_test.rb new file mode 100644 index 000000000..607887730 --- /dev/null +++ b/test/models/white_ip_test.rb @@ -0,0 +1,54 @@ +require 'test_helper' + +class WhiteIpTest < ActiveSupport::TestCase + def test_either_ipv4_or_ipv6_is_required + white_ip = valid_white_ip + + white_ip.ipv4 = '' + white_ip.ipv6 = '' + assert white_ip.invalid? + assert_includes white_ip.errors.full_messages, 'IPv4 or IPv6 must be present' + + white_ip.ipv4 = valid_ipv4 + white_ip.ipv6 = '' + assert white_ip.valid? + + white_ip.ipv4 = '' + white_ip.ipv6 = valid_ipv6 + assert white_ip.valid? + end + + def test_validates_ipv4_format + white_ip = valid_white_ip + + white_ip.ipv4 = 'invalid' + assert white_ip.invalid? + + white_ip.ipv4 = valid_ipv4 + assert white_ip.valid? + end + + def test_validates_ipv6_format + white_ip = valid_white_ip + + white_ip.ipv6 = 'invalid' + assert white_ip.invalid? + + white_ip.ipv6 = valid_ipv6 + assert white_ip.valid? + end + + private + + def valid_white_ip + white_ips(:one) + end + + def valid_ipv4 + '192.0.2.1' + end + + def valid_ipv6 + '2001:db8::1' + end +end diff --git a/test/system/admin_area/prices_test.rb b/test/system/admin_area/prices_test.rb new file mode 100644 index 000000000..dbb91966a --- /dev/null +++ b/test/system/admin_area/prices_test.rb @@ -0,0 +1,47 @@ +require 'application_system_test_case' + +class AdminAreaPricesTest < ApplicationSystemTestCase + setup do + sign_in users(:admin) + @price = billing_prices(:create_one_month) + end + + def test_adds_new_price_with_required_attributes + effective_date = Date.parse('2010-07-06') + assert_nil Billing::Price.find_by(valid_from: effective_date) + + visit admin_prices_url + click_on 'New price' + + select dns_zones(:one).origin, from: 'Zone' + select Billing::Price.operation_categories.first, from: 'Operation category' + select '3 months', from: 'Duration' + fill_in 'Price', with: '1' + fill_in 'Valid from', with: effective_date + click_on 'Create price' + + assert_text 'Price has been created' + assert_text I18n.localize(effective_date) + end + + def test_changes_price + new_effective_date = Date.parse('2010-07-06') + assert_not_equal new_effective_date, @price.valid_from + + visit admin_prices_url + find('.edit-price-btn').click + fill_in 'Valid from', with: new_effective_date + click_on 'Update price' + + assert_text 'Price has been updated' + assert_text I18n.localize(new_effective_date) + end + + def test_expires_price + visit admin_prices_url + find('.edit-price-btn').click + click_on 'Expire' + + assert_text 'Price has been expired' + end +end diff --git a/test/system/admin_area/settings_test.rb b/test/system/admin_area/settings_test.rb new file mode 100644 index 000000000..0097381d9 --- /dev/null +++ b/test/system/admin_area/settings_test.rb @@ -0,0 +1,13 @@ +require 'application_system_test_case' + +class AdminAreaSettingsTest < ApplicationSystemTestCase + setup do + sign_in users(:admin) + end + + def test_saves_settings + visit admin_settings_url + click_link_or_button 'Save' + assert_text 'Settings have been successfully updated' + end +end diff --git a/test/system/admin_area/zones_test.rb b/test/system/admin_area/zones_test.rb new file mode 100644 index 000000000..d7ad9d690 --- /dev/null +++ b/test/system/admin_area/zones_test.rb @@ -0,0 +1,46 @@ +require 'application_system_test_case' + +class AdminAreaZonesTest < ApplicationSystemTestCase + setup do + sign_in users(:admin) + @zone = dns_zones(:one) + end + + def test_creates_new_zone_with_required_attributes + origin = 'com.test' + assert_nil DNS::Zone.find_by(origin: origin) + + visit admin_zones_url + click_on 'New zone' + + fill_in 'Origin', with: origin + fill_in 'Ttl', with: '1' + fill_in 'Refresh', with: '1' + fill_in 'Retry', with: '1' + fill_in 'Expire', with: '1' + fill_in 'Minimum ttl', with: '1' + fill_in 'Email', with: 'new.registry.test' + fill_in 'Master nameserver', with: 'any.test' + click_on 'Create zone' + + assert_text 'Zone has been created' + assert_text origin + end + + def test_changes_zone + new_email = 'new@registry.test' + assert_not_equal new_email, @zone.email + + visit admin_zones_url + click_on 'admin-edit-zone-btn' + fill_in 'Email', with: new_email + click_on 'Update zone' + + assert_text 'Zone has been updated' + end + + def test_origin_is_not_editable + visit edit_admin_zone_url(@zone) + assert_no_field 'Origin' + end +end diff --git a/test/system/registrar_area/base_test.rb b/test/system/registrar_area/base_test.rb new file mode 100644 index 000000000..35b64df69 --- /dev/null +++ b/test/system/registrar_area/base_test.rb @@ -0,0 +1,33 @@ +require 'application_system_test_case' + +class RegistrarAreaBaseTestTest < ApplicationSystemTestCase + def test_user_cannot_access_without_ip_address_being_whitelisted + Setting.registrar_ip_whitelist_enabled = true + WhiteIp.delete_all + + visit new_registrar_user_session_url + + assert_text 'Access denied from IP 127.0.0.1' + assert_no_button 'Login' + end + + def test_user_can_access_when_ip_is_whitelisted + white_ips(:one).update!(ipv4: '127.0.0.1', interfaces: [WhiteIp::REGISTRAR]) + Setting.registrar_ip_whitelist_enabled = true + + visit new_registrar_user_session_url + + assert_no_text 'Access denied from IP 127.0.0.1' + assert_button 'Login' + end + + def test_user_can_access_when_ip_is_not_whitelisted_and_whitelist_is_disabled + Setting.registrar_ip_whitelist_enabled = false + WhiteIp.delete_all + + visit new_registrar_user_session_url + + assert_no_text 'Access denied from IP 127.0.0.1' + assert_button 'Login' + end +end