mirror of
https://github.com/internetee/registry.git
synced 2025-05-17 09:57:23 +02:00
Add some tests for domain transfer
This commit is contained in:
parent
b48b91878d
commit
72a37f3b08
14 changed files with 120 additions and 39 deletions
|
@ -2,8 +2,7 @@ class Client::ContactsController < ClientController
|
||||||
before_action :set_contact, only: [:show, :destroy, :edit, :update]
|
before_action :set_contact, only: [:show, :destroy, :edit, :update]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@q = Contact.search(params[:q]) if current_user.admin?
|
@q = Contact.search(params[:q])
|
||||||
@q = current_user.registrar.contacts.search(params[:q]) unless current_user.admin?
|
|
||||||
@contacts = @q.result.page(params[:page])
|
@contacts = @q.result.page(params[:page])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,27 @@ class Client::DomainTransfersController < ClientController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@domain_transfer = @domain.pending_transfer || @domain.domain_transfers.build(domain_transfer_params)
|
@domain_transfer = @domain.pending_transfer
|
||||||
|
|
||||||
|
if @domain_transfer
|
||||||
if can? :read, @domain_transfer
|
if can? :read, @domain_transfer
|
||||||
@domain_transfer.save
|
|
||||||
flash[:notice] = I18n.t('shared.domain_transfer_requested') if @domain.registrar != current_registrar
|
flash[:notice] = I18n.t('shared.domain_transfer_requested') if @domain.registrar != current_registrar
|
||||||
redirect_to [:client, @domain_transfer]
|
redirect_to [:client, @domain_transfer] and return
|
||||||
else
|
else
|
||||||
flash.now[:alert] = I18n.t('shared.other_registrar_has_already_requested_to_transfer_this_domain')
|
flash.now[:alert] = I18n.t('shared.other_registrar_has_already_requested_to_transfer_this_domain')
|
||||||
render 'new'
|
render 'new' and return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@domain_transfer = @domain.domain_transfers.create(domain_transfer_params)
|
||||||
|
@domain_transfer.approve_as_server if SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i == 0
|
||||||
|
|
||||||
|
if @domain_transfer.approved?
|
||||||
|
flash[:notice] = I18n.t('shared.domain_transfer_approved')
|
||||||
|
redirect_to [:client, @domain_transfer]
|
||||||
|
else
|
||||||
|
flash[:notice] = I18n.t('shared.domain_transfer_requested')
|
||||||
|
redirect_to [:client, @domain_transfer]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -36,21 +49,12 @@ class Client::DomainTransfersController < ClientController
|
||||||
end
|
end
|
||||||
|
|
||||||
def domain_transfer_params
|
def domain_transfer_params
|
||||||
ret = {
|
{
|
||||||
status: DomainTransfer::PENDING,
|
status: DomainTransfer::PENDING,
|
||||||
transfer_requested_at: Time.zone.now,
|
transfer_requested_at: Time.zone.now,
|
||||||
transfer_to: current_registrar,
|
transfer_to: current_registrar,
|
||||||
transfer_from: @domain.registrar
|
transfer_from: @domain.registrar
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_time = SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i
|
|
||||||
|
|
||||||
if wait_time == 0
|
|
||||||
ret[:status] = DomainTransfer::SERVER_APPROVED
|
|
||||||
ret[:transferred_at] = Time.zone.now
|
|
||||||
end
|
|
||||||
|
|
||||||
ret
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_domain
|
def set_domain
|
||||||
|
|
|
@ -5,6 +5,7 @@ class SessionsController < Devise::SessionsController
|
||||||
# if Rails.env.development? || Rails.env.test?
|
# if Rails.env.development? || Rails.env.test?
|
||||||
@user = User.find_by(username: 'gitlab') if params[:gitlab]
|
@user = User.find_by(username: 'gitlab') if params[:gitlab]
|
||||||
@user = User.find_by(username: 'zone') if params[:zone]
|
@user = User.find_by(username: 'zone') if params[:zone]
|
||||||
|
@user = User.find_by(username: 'elkdata') if params[:elkdata]
|
||||||
|
|
||||||
session[:current_user_registrar_id] = Registrar.first.id if @user.admin?
|
session[:current_user_registrar_id] = Registrar.first.id if @user.admin?
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ class Ability
|
||||||
elsif user.persisted?
|
elsif user.persisted?
|
||||||
can :manage, Domain, registrar_id: user.registrar.id
|
can :manage, Domain, registrar_id: user.registrar.id
|
||||||
can :read, DomainTransfer, transfer_to_id: user.registrar.id
|
can :read, DomainTransfer, transfer_to_id: user.registrar.id
|
||||||
|
can :read, DomainTransfer, transfer_from_id: user.registrar.id
|
||||||
can :approve_as_client, DomainTransfer, transfer_from_id: user.registrar.id, status: DomainTransfer::PENDING
|
can :approve_as_client, DomainTransfer, transfer_from_id: user.registrar.id, status: DomainTransfer::PENDING
|
||||||
end
|
end
|
||||||
# Define abilities for the passed in user here. For example:
|
# Define abilities for the passed in user here. For example:
|
||||||
|
|
|
@ -11,6 +11,10 @@ class DomainTransfer < ActiveRecord::Base
|
||||||
SERVER_APPROVED = 'serverApproved'
|
SERVER_APPROVED = 'serverApproved'
|
||||||
SERVER_CANCELLED = 'serverCancelled'
|
SERVER_CANCELLED = 'serverCancelled'
|
||||||
|
|
||||||
|
def approved?
|
||||||
|
status == CLIENT_APPROVED || status == SERVER_APPROVED
|
||||||
|
end
|
||||||
|
|
||||||
def transfer_confirm_time
|
def transfer_confirm_time
|
||||||
wait_time = SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i
|
wait_time = SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i
|
||||||
transfer_requested_at + wait_time.hours
|
transfer_requested_at + wait_time.hours
|
||||||
|
@ -27,4 +31,16 @@ class DomainTransfer < ActiveRecord::Base
|
||||||
domain.save(validate: false)
|
domain.save(validate: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def approve_as_server
|
||||||
|
transaction do
|
||||||
|
self.status = DomainTransfer::SERVER_APPROVED
|
||||||
|
self.transferred_at = Time.zone.now
|
||||||
|
save
|
||||||
|
|
||||||
|
domain.generate_auth_info
|
||||||
|
domain.registrar = transfer_to
|
||||||
|
domain.save(validate: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
.row
|
.row
|
||||||
.col-md-6
|
.col-md-6
|
||||||
.form-group
|
.form-group
|
||||||
= label_tag :domain_pw
|
= label_tag :domain_pw, t('shared.domain_pw')
|
||||||
= text_field_tag(:domain_pw, params[:domain_pw], class: 'form-control')
|
= text_field_tag(:domain_pw, params[:domain_pw], class: 'form-control')
|
||||||
.row
|
.row
|
||||||
.col-md-12.text-right
|
.col-md-12.text-right
|
||||||
= button_tag(t('shared.save'), class: 'btn btn-primary', name: 'request')
|
= button_tag(t('shared.request_domain_transfer'), class: 'btn btn-primary', name: 'request')
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
%title Eesti Interneti SA
|
%title Eesti Interneti SA
|
||||||
%body
|
%body
|
||||||
/ Static navbar
|
/ Static navbar
|
||||||
.navbar.navbar-default.navbar-static-top{role: "navigation"}
|
.navbar.navbar-inverse.navbar-static-top{role: "navigation"}
|
||||||
.container
|
.container
|
||||||
.navbar-header
|
.navbar-header
|
||||||
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
|
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
|
||||||
|
@ -23,16 +23,12 @@
|
||||||
= link_to APP_CONFIG['app_name'], root_path, class: 'navbar-brand'
|
= link_to APP_CONFIG['app_name'], root_path, class: 'navbar-brand'
|
||||||
.navbar-collapse.collapse
|
.navbar-collapse.collapse
|
||||||
%ul.nav.navbar-nav
|
%ul.nav.navbar-nav
|
||||||
%li
|
|
||||||
= link_to t('shared.dashboard'), root_path
|
|
||||||
%li
|
|
||||||
= link_to t('shared.registrars'), admin_registrars_path
|
|
||||||
%li
|
%li
|
||||||
= link_to t('shared.domains'), admin_domains_path
|
= link_to t('shared.domains'), admin_domains_path
|
||||||
%li
|
%li
|
||||||
= link_to t('shared.contacts'), admin_contacts_path
|
= link_to t('shared.contacts'), admin_contacts_path
|
||||||
%li
|
%li
|
||||||
= link_to t('shared.eedirekt'), client_domains_path
|
= link_to t('shared.registrars'), admin_registrars_path
|
||||||
%li.dropdown
|
%li.dropdown
|
||||||
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
|
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
|
||||||
= t('shared.settings')
|
= t('shared.settings')
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
%title= t('shared.eedirekt')
|
%title= t('shared.eedirekt')
|
||||||
%body
|
%body
|
||||||
/ Static navbar
|
/ Static navbar
|
||||||
.navbar.navbar-inverse.navbar-static-top{role: "navigation"}
|
.navbar.navbar-default.navbar-static-top{role: "navigation"}
|
||||||
.container
|
.container
|
||||||
.navbar-header
|
.navbar-header
|
||||||
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
|
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
|
||||||
|
@ -23,7 +23,8 @@
|
||||||
= link_to t('shared.eedirekt'), client_domains_path, class: 'navbar-brand'
|
= link_to t('shared.eedirekt'), client_domains_path, class: 'navbar-brand'
|
||||||
.navbar-collapse.collapse
|
.navbar-collapse.collapse
|
||||||
%ul.nav.navbar-nav
|
%ul.nav.navbar-nav
|
||||||
%li.dropdown.active
|
- active_class = ['client/domains', 'client/domain_transfers'].include?(params[:controller]) ? 'active' :nil
|
||||||
|
%li.dropdown{class: active_class}
|
||||||
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
|
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
|
||||||
= t('shared.domains')
|
= t('shared.domains')
|
||||||
%span.caret
|
%span.caret
|
||||||
|
@ -33,16 +34,16 @@
|
||||||
%li
|
%li
|
||||||
= link_to t('shared.transfer_domain'), new_client_domain_transfer_path
|
= link_to t('shared.transfer_domain'), new_client_domain_transfer_path
|
||||||
|
|
||||||
%li.dropdown
|
- active_class = ['client/contacts'].include?(params[:controller]) ? 'active' :nil
|
||||||
|
%li.dropdown{class: active_class}
|
||||||
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
|
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
|
||||||
= t('shared.contacts')
|
= t('shared.contacts')
|
||||||
%span.caret
|
%span.caret
|
||||||
%ul.dropdown-menu{role: "menu"}
|
%ul.dropdown-menu{role: "menu"}
|
||||||
%li
|
%li
|
||||||
= link_to t('shared.contact_list'), client_contacts_path
|
= link_to t('shared.contact_list'), client_contacts_path
|
||||||
|
%ul.nav.navbar-nav.navbar-right
|
||||||
- if current_user.admin?
|
- if current_user.admin?
|
||||||
%li
|
|
||||||
= link_to 'Admin', admin_root_path
|
|
||||||
%li.dropdown
|
%li.dropdown
|
||||||
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
|
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
|
||||||
= current_registrar
|
= current_registrar
|
||||||
|
@ -52,7 +53,6 @@
|
||||||
- next if x == current_registrar
|
- next if x == current_registrar
|
||||||
%li
|
%li
|
||||||
= link_to x, switch_registrar_sessions_path(registrar_id: x)
|
= link_to x, switch_registrar_sessions_path(registrar_id: x)
|
||||||
%ul.nav.navbar-nav.navbar-right
|
|
||||||
%li= link_to t('shared.log_out'), '/logout'
|
%li= link_to t('shared.log_out'), '/logout'
|
||||||
/ /.nav-collapse
|
/ /.nav-collapse
|
||||||
.container
|
.container
|
||||||
|
|
|
@ -23,3 +23,4 @@
|
||||||
/ TODO: Refactor this when ID card login is done
|
/ TODO: Refactor this when ID card login is done
|
||||||
= button_to 'ID card (gitlab)', 'sessions', class: 'btn btn-lg btn-primary btn-block', name: 'gitlab'
|
= button_to 'ID card (gitlab)', 'sessions', class: 'btn btn-lg btn-primary btn-block', name: 'gitlab'
|
||||||
= button_to 'ID card (zone)', 'sessions', class: 'btn btn-lg btn-primary btn-block', name: 'zone'
|
= button_to 'ID card (zone)', 'sessions', class: 'btn btn-lg btn-primary btn-block', name: 'zone'
|
||||||
|
= button_to 'ID card (elkdata)', 'sessions', class: 'btn btn-lg btn-primary btn-block', name: 'elkdata'
|
||||||
|
|
|
@ -188,7 +188,6 @@ en:
|
||||||
action: 'Action'
|
action: 'Action'
|
||||||
edit: 'Edit'
|
edit: 'Edit'
|
||||||
save: 'Save'
|
save: 'Save'
|
||||||
dashboard: 'Dashboard'
|
|
||||||
log_out: 'Log out'
|
log_out: 'Log out'
|
||||||
system: 'System'
|
system: 'System'
|
||||||
settings: 'Settings'
|
settings: 'Settings'
|
||||||
|
@ -277,22 +276,23 @@ en:
|
||||||
failed_to_update_setting: 'Failed to update setting'
|
failed_to_update_setting: 'Failed to update setting'
|
||||||
status: 'Status'
|
status: 'Status'
|
||||||
eedirekt: 'EEDirekt'
|
eedirekt: 'EEDirekt'
|
||||||
|
|
||||||
domain_transfer_requested: 'Domain transfer requested!'
|
domain_transfer_requested: 'Domain transfer requested!'
|
||||||
domain_transfer_approved: 'Domain transfer approved!'
|
domain_transfer_approved: 'Domain transfer approved!'
|
||||||
failed_to_approve_domain_transfer: 'Failed to approve domain transfer'
|
failed_to_approve_domain_transfer: 'Failed to approve domain transfer'
|
||||||
approve: 'Approve'
|
approve: 'Approve'
|
||||||
domain_already_belongs_to_the_querying_registrar: 'Domain already belongs to the querying registrar'
|
domain_already_belongs_to_the_querying_registrar: 'Domain already belongs to the querying registrar'
|
||||||
other_registrar_has_already_requested_to_transfer_this_domain: 'Other registrar has already requested to transfer this domain.'
|
other_registrar_has_already_requested_to_transfer_this_domain: 'Other registrar has already requested to transfer this domain.'
|
||||||
transfer: 'Transfer'
|
|
||||||
transfer_domain: 'Transfer domain'
|
transfer_domain: 'Transfer domain'
|
||||||
failed_to_request_domain_transfer: 'Failed to request domain transfer'
|
failed_to_request_domain_transfer: 'Failed to request domain transfer' #not used atm
|
||||||
domain_transfer: 'Domain transfer'
|
domain_transfer: 'Domain transfer'
|
||||||
|
request_domain_transfer: 'Request domain transfer'
|
||||||
domain_valid_to: 'Domain valid to'
|
domain_valid_to: 'Domain valid to'
|
||||||
transfer_requested_at: 'Transfer requested at'
|
transfer_requested_at: 'Transfer requested at'
|
||||||
transfer_from: 'Transfer from'
|
transfer_from: 'Transfer from'
|
||||||
transferred_at: 'Transferred at'
|
transferred_at: 'Transferred at'
|
||||||
transfer_confirm_time: 'Transfer confirm time'
|
transfer_confirm_time: 'Transfer confirm time'
|
||||||
request_domain_transfer: 'Request domain transfer'
|
|
||||||
password_invalid: 'Password invalid!'
|
password_invalid: 'Password invalid!'
|
||||||
domain_was_not_found: 'Domain was not found!'
|
domain_was_not_found: 'Domain was not found!'
|
||||||
domain_list: 'Domain list'
|
domain_list: 'Domain list'
|
||||||
|
@ -301,3 +301,4 @@ en:
|
||||||
edit_statuses: 'Edit statuses'
|
edit_statuses: 'Edit statuses'
|
||||||
contact_list: 'Contact list'
|
contact_list: 'Contact list'
|
||||||
create_new_contact: 'Create new contact'
|
create_new_contact: 'Create new contact'
|
||||||
|
domain_pw: 'Domain password'
|
||||||
|
|
|
@ -26,3 +26,4 @@ EppUser.where(username: 'elkdata', password: '8932iods', active: true, registrar
|
||||||
|
|
||||||
User.where(username: 'gitlab', password: '12345', email: 'enquiries@gitlab.eu', admin: true, identity_code: '37810013855').first_or_create
|
User.where(username: 'gitlab', password: '12345', email: 'enquiries@gitlab.eu', admin: true, identity_code: '37810013855').first_or_create
|
||||||
User.where(username: 'zone', password: '54321', email: 'info-info@zone.ee', admin: false, identity_code: '37810010085', registrar_id: zone.id).first_or_create
|
User.where(username: 'zone', password: '54321', email: 'info-info@zone.ee', admin: false, identity_code: '37810010085', registrar_id: zone.id).first_or_create
|
||||||
|
User.where(username: 'elkdata', password: '32154', email: 'info-info@elkdata.ee', admin: false, identity_code: '37810010727', registrar_id: elkdata.id).first_or_create
|
||||||
|
|
52
spec/features/domain_transfer_spec.rb
Normal file
52
spec/features/domain_transfer_spec.rb
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
feature 'Domain transfer', type: :feature do
|
||||||
|
let(:elkdata) { Fabricate(:registrar, { name: 'Elkdata', reg_no: '123' }) }
|
||||||
|
let(:zone) { Fabricate(:registrar) }
|
||||||
|
let(:zone_user) { Fabricate(:user, registrar: zone, username: 'zone', admin: false) }
|
||||||
|
let(:elkdata_user) { Fabricate(:user, registrar: elkdata, username: 'elkdata', admin: false) }
|
||||||
|
|
||||||
|
background do
|
||||||
|
Fabricate(:domain_validation_setting_group)
|
||||||
|
Fabricate(:domain_general_setting_group)
|
||||||
|
Fabricate(:domain, registrar: zone)
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'when registrar requests transfer on own domain', js: true do
|
||||||
|
sign_in zone_user
|
||||||
|
click_on 'Domains'
|
||||||
|
click_on 'Transfer domain'
|
||||||
|
|
||||||
|
fill_in 'Domain name', with: 'false'
|
||||||
|
click_on 'Request domain transfer'
|
||||||
|
expect(page).to have_text('Domain was not found!')
|
||||||
|
|
||||||
|
d = Domain.first
|
||||||
|
fill_in 'Domain name', with: d.name
|
||||||
|
click_on 'Request domain transfer'
|
||||||
|
expect(page).to have_text('Password invalid!')
|
||||||
|
|
||||||
|
fill_in 'Domain password', with: d.auth_info
|
||||||
|
click_on 'Request domain transfer'
|
||||||
|
|
||||||
|
expect(page).to have_text('Domain already belongs to the querying registrar')
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'when other registrar requests transfer' do
|
||||||
|
sign_in elkdata_user
|
||||||
|
d = Domain.first
|
||||||
|
visit client_domains_path
|
||||||
|
expect(page).to_not have_link(d.name)
|
||||||
|
|
||||||
|
visit new_client_domain_transfer_path
|
||||||
|
fill_in 'Domain name', with: d.name
|
||||||
|
fill_in 'Domain password', with: d.auth_info
|
||||||
|
click_on 'Request domain transfer'
|
||||||
|
|
||||||
|
expect(page).to have_text('Domain transfer approved!')
|
||||||
|
expect(page).to have_text('serverApproved')
|
||||||
|
|
||||||
|
visit client_domains_path
|
||||||
|
expect(page).to have_link(d.name)
|
||||||
|
end
|
||||||
|
end
|
|
@ -20,9 +20,6 @@ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
||||||
ActiveRecord::Migration.maintain_test_schema!
|
ActiveRecord::Migration.maintain_test_schema!
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
|
||||||
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
|
||||||
|
|
||||||
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
||||||
# examples within a transaction, remove the following line or assign false
|
# examples within a transaction, remove the following line or assign false
|
||||||
# instead of true.
|
# instead of true.
|
||||||
|
|
12
spec/support/feature.rb
Normal file
12
spec/support/feature.rb
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
module Feature
|
||||||
|
def sign_in(user)
|
||||||
|
visit root_path
|
||||||
|
click_on 'ID card (gitlab)' if user.username == 'gitlab'
|
||||||
|
click_on 'ID card (zone)' if user.username == 'zone'
|
||||||
|
click_on 'ID card (elkdata)' if user.username == 'elkdata'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RSpec.configure do |c|
|
||||||
|
c.include Feature, type: :feature
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue