Add some tests for domain transfer

This commit is contained in:
Martin Lensment 2014-09-29 11:54:24 +03:00
parent b48b91878d
commit 72a37f3b08
14 changed files with 120 additions and 39 deletions

View file

@ -2,8 +2,7 @@ class Client::ContactsController < ClientController
before_action :set_contact, only: [:show, :destroy, :edit, :update]
def index
@q = Contact.search(params[:q]) if current_user.admin?
@q = current_user.registrar.contacts.search(params[:q]) unless current_user.admin?
@q = Contact.search(params[:q])
@contacts = @q.result.page(params[:page])
end

View file

@ -7,14 +7,27 @@ class Client::DomainTransfersController < ClientController
end
def create
@domain_transfer = @domain.pending_transfer || @domain.domain_transfers.build(domain_transfer_params)
if can? :read, @domain_transfer
@domain_transfer.save
flash[:notice] = I18n.t('shared.domain_transfer_requested') if @domain.registrar != current_registrar
@domain_transfer = @domain.pending_transfer
if @domain_transfer
if can? :read, @domain_transfer
flash[:notice] = I18n.t('shared.domain_transfer_requested') if @domain.registrar != current_registrar
redirect_to [:client, @domain_transfer] and return
else
flash.now[:alert] = I18n.t('shared.other_registrar_has_already_requested_to_transfer_this_domain')
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.now[:alert] = I18n.t('shared.other_registrar_has_already_requested_to_transfer_this_domain')
render 'new'
flash[:notice] = I18n.t('shared.domain_transfer_requested')
redirect_to [:client, @domain_transfer]
end
end
@ -36,21 +49,12 @@ class Client::DomainTransfersController < ClientController
end
def domain_transfer_params
ret = {
{
status: DomainTransfer::PENDING,
transfer_requested_at: Time.zone.now,
transfer_to: current_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
def set_domain

View file

@ -5,6 +5,7 @@ class SessionsController < Devise::SessionsController
# if Rails.env.development? || Rails.env.test?
@user = User.find_by(username: 'gitlab') if params[:gitlab]
@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?

View file

@ -14,6 +14,7 @@ class Ability
elsif user.persisted?
can :manage, Domain, registrar_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
end
# Define abilities for the passed in user here. For example:

View file

@ -11,6 +11,10 @@ class DomainTransfer < ActiveRecord::Base
SERVER_APPROVED = 'serverApproved'
SERVER_CANCELLED = 'serverCancelled'
def approved?
status == CLIENT_APPROVED || status == SERVER_APPROVED
end
def transfer_confirm_time
wait_time = SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i
transfer_requested_at + wait_time.hours
@ -27,4 +31,16 @@ class DomainTransfer < ActiveRecord::Base
domain.save(validate: false)
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

View file

@ -12,8 +12,8 @@
.row
.col-md-6
.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')
.row
.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')

View file

@ -12,7 +12,7 @@
%title Eesti Interneti SA
%body
/ Static navbar
.navbar.navbar-default.navbar-static-top{role: "navigation"}
.navbar.navbar-inverse.navbar-static-top{role: "navigation"}
.container
.navbar-header
%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'
.navbar-collapse.collapse
%ul.nav.navbar-nav
%li
= link_to t('shared.dashboard'), root_path
%li
= link_to t('shared.registrars'), admin_registrars_path
%li
= link_to t('shared.domains'), admin_domains_path
%li
= link_to t('shared.contacts'), admin_contacts_path
%li
= link_to t('shared.eedirekt'), client_domains_path
= link_to t('shared.registrars'), admin_registrars_path
%li.dropdown
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
= t('shared.settings')

View file

@ -12,7 +12,7 @@
%title= t('shared.eedirekt')
%body
/ Static navbar
.navbar.navbar-inverse.navbar-static-top{role: "navigation"}
.navbar.navbar-default.navbar-static-top{role: "navigation"}
.container
.navbar-header
%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'
.navbar-collapse.collapse
%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: "#"}
= t('shared.domains')
%span.caret
@ -33,16 +34,16 @@
%li
= 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: "#"}
= t('shared.contacts')
%span.caret
%ul.dropdown-menu{role: "menu"}
%li
= link_to t('shared.contact_list'), client_contacts_path
%ul.nav.navbar-nav.navbar-right
- if current_user.admin?
%li
= link_to 'Admin', admin_root_path
%li.dropdown
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
= current_registrar
@ -52,7 +53,6 @@
- next if x == current_registrar
%li
= link_to x, switch_registrar_sessions_path(registrar_id: x)
%ul.nav.navbar-nav.navbar-right
%li= link_to t('shared.log_out'), '/logout'
/ /.nav-collapse
.container

View file

@ -23,3 +23,4 @@
/ 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 (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'