Merge branch 'master' into remove-unused-cron-task

This commit is contained in:
Artur Beljajev 2018-04-13 17:55:29 +03:00
commit b1209f7078
121 changed files with 1401 additions and 814 deletions

2
.reek
View file

@ -191,7 +191,6 @@ DuplicateMethodCall:
- Registrant::SessionsController#mid_status
- Registrant::WhoisController#index
- Registrar::AccountActivitiesController#index
- Registrar::BaseController#check_ip
- Registrar::ContactsController#download_list
- Registrar::ContactsController#index
- Registrar::ContactsController#normalize_search_parameters
@ -666,7 +665,6 @@ TooManyStatements:
- Registrant::SessionsController#mid
- Registrant::SessionsController#mid_status
- Registrar::AccountActivitiesController#index
- Registrar::BaseController#check_ip
- Registrar::ContactsController#download_list
- Registrar::ContactsController#index
- Registrar::ContactsController#normalize_search_parameters

View file

@ -1,3 +1,12 @@
03.04.2018
* BUG: Fixed bug with sometimes failing bank-link payments [#642](https://github.com/internetee/registry/issues/642)
* EPP: Domain and associated objects are now validated on domain renew [#678](https://github.com/internetee/registry/issues/678)
* Admin: drop uniqueness requirement from registrar's registry number field [#776](https://github.com/internetee/registry/issues/776)
* Security: Loofah gem update to 2.2.2 [#783](https://github.com/internetee/registry/pull/783)
* Disabled spellcheck for browsers to cleanup UI [#759](https://github.com/internetee/registry/issues/759)
* Admin: refactored registrar management [#770](https://github.com/internetee/registry/pull/770)
* Fix structure.sql [#796](https://github.com/internetee/registry/pull/796)
19.03.2018
* EPP transfer and REPP bulk transfer reuses contact objects [#746](https://github.com/internetee/registry/issues/746)
* Gems: Rack (1.6.9) and Rack-protection (1.5.5) update [#768](https://github.com/internetee/registry/issues/768)

View file

@ -160,6 +160,7 @@ GEM
unicode_utils (~> 1.4)
crack (0.4.3)
safe_yaml (~> 1.0.0)
crass (1.0.3)
daemons (1.2.4)
daemons-rails (1.2.1)
daemons
@ -247,7 +248,8 @@ GEM
activesupport (>= 3.0.0)
libxml-ruby (3.0.0)
liquid (3.0.6)
loofah (2.0.3)
loofah (2.2.2)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.6.6)
mime-types (>= 1.16, < 4)

View file

@ -9,6 +9,7 @@
#= require select2
#= require jquery.doubleScroll
#= require datepicker
#= require spell_check
#= require admin/application
#= require admin/app
#= require_tree ./admin

View file

@ -4,4 +4,5 @@
#= require jquery-ui/datepicker
#= require select2
#= require datepicker
#= require spell_check
#= require shared/general

View file

@ -6,6 +6,7 @@
#= require jquery-ui/datepicker
#= require select2
#= require datepicker
#= require spell_check
#= require shared/general
#= require registrar/autocomplete
#= require registrar/application

View file

@ -0,0 +1,12 @@
(function() {
function disableSpellCheck() {
let selector = 'input[type=text], textarea';
let textFields = document.querySelectorAll(selector);
for (let field of textFields) {
field.spellcheck = false;
}
}
disableSpellCheck();
})();

View file

@ -24,7 +24,7 @@ module Admin
@invoice = Invoice.find_by(id: params[:invoice_id])
@bank_transaction = @bank_statement.bank_transactions.build(
description: @invoice.to_s,
sum: @invoice.sum,
sum: @invoice.total,
reference_no: @invoice.reference_no,
paid_at: Time.zone.now.to_date,
currency: 'EUR'

View file

@ -19,17 +19,15 @@ module Admin
def create
@registrar = Registrar.new(registrar_params)
begin
if @registrar.valid?
@registrar.transaction do
@registrar.save!
@registrar.accounts.create!(account_type: Account::CASH, currency: 'EUR')
end
flash[:notice] = t('.created')
redirect_to [:admin, @registrar]
rescue ActiveRecord::RecordInvalid
flash.now[:alert] = t('.not_created')
render 'new'
redirect_to [:admin, @registrar], notice: t('.created')
else
render :new
end
end
@ -38,21 +36,19 @@ module Admin
def update
if @registrar.update(registrar_params)
flash[:notice] = t('.updated')
redirect_to [:admin, @registrar]
redirect_to [:admin, @registrar], notice: t('.updated')
else
flash.now[:alert] = t('.not_updated')
render 'edit'
render :edit
end
end
def destroy
if @registrar.destroy
flash[:notice] = I18n.t('registrar_deleted')
redirect_to admin_registrars_path
flash[:notice] = t('.deleted')
redirect_to admin_registrars_url
else
flash.now[:alert] = I18n.t('failed_to_delete_registrar')
render 'show'
flash[:alert] = @registrar.errors.full_messages.first
redirect_to admin_registrar_url(@registrar)
end
end
@ -65,7 +61,6 @@ module Admin
def registrar_params
params.require(:registrar).permit(:name,
:reg_no,
:vat_no,
:street,
:city,
:state,
@ -74,10 +69,12 @@ module Admin
:email,
:phone,
:website,
:billing_email,
:code,
:test_registrar,
:vat_no,
:vat_rate,
:accounting_customer_code,
:billing_email,
:language)
end
end

View file

@ -55,8 +55,8 @@ class Registrar
end
def normalize_search_parameters
params[:q][:sum_cache_gteq].gsub!(',', '.') if params[:q][:sum_cache_gteq]
params[:q][:sum_cache_lteq].gsub!(',', '.') if params[:q][:sum_cache_lteq]
params[:q][:total_gteq].gsub!(',', '.') if params[:q][:total_gteq]
params[:q][:total_lteq].gsub!(',', '.') if params[:q][:total_lteq]
ca_cache = params[:q][:due_date_lteq]
begin

View file

@ -3,7 +3,7 @@ class Registrar
protect_from_forgery except: :back
skip_authorization_check # actually anyone can pay, no problems at all
skip_before_action :authenticate_user!, :check_ip, only: [:back]
skip_before_action :authenticate_user!, :check_ip_restriction, only: [:back]
before_action :check_bank
# to handle existing model we should

View file

@ -29,7 +29,7 @@ class BankLink
hash["VK_VERSION"] = "008"
hash["VK_SND_ID"] = ENV["payments_#{type}_seller_account"]
hash["VK_STAMP"] = invoice.number
hash["VK_AMOUNT"] = number_with_precision(invoice.sum_cache, :precision => 2, :separator => ".")
hash["VK_AMOUNT"] = number_with_precision(invoice.total, :precision => 2, :separator => ".")
hash["VK_CURR"] = invoice.currency
hash["VK_REF"] = ""
hash["VK_MSG"] = invoice.order
@ -140,7 +140,7 @@ class BankLink
def validate_amount
source = number_with_precision(BigDecimal.new(params["VK_AMOUNT"].to_s), precision: 2, separator: ".")
target = number_with_precision(invoice.sum_cache, precision: 2, separator: ".")
target = number_with_precision(invoice.total, precision: 2, separator: ".")
source == target
end

View file

@ -47,7 +47,7 @@ class BankTransaction < ActiveRecord::Base
return if invoice.binded?
return if invoice.cancelled?
return if invoice.sum != sum
return if invoice.total != sum
create_activity(registrar, invoice)
end
# rubocop: enable Metrics/PerceivedComplexity
@ -76,7 +76,7 @@ class BankTransaction < ActiveRecord::Base
return
end
if invoice.sum != sum
if invoice.total != sum
errors.add(:base, I18n.t('invoice_and_transaction_sums_do_not_match'))
return
end
@ -88,7 +88,7 @@ class BankTransaction < ActiveRecord::Base
create_account_activity(
account: registrar.cash_account,
invoice: invoice,
sum: invoice.sum_without_vat,
sum: invoice.subtotal,
currency: currency,
description: description,
activity_type: AccountActivity::ADD_CREDIT

View file

@ -3,7 +3,7 @@ class Directo < ActiveRecord::Base
belongs_to :item, polymorphic: true
def self.send_receipts
new_trans = Invoice.where(invoice_type: "DEB", in_directo: false).where(cancelled_at: nil)
new_trans = Invoice.where(in_directo: false).where(cancelled_at: nil)
total = new_trans.count
counter = 0
Rails.logger.info("[DIRECTO] Will try to send #{total} invoices")
@ -15,7 +15,7 @@ class Directo < ActiveRecord::Base
group.each do |invoice|
if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil? ||
invoice.account_activity.bank_transaction.sum.nil? || invoice.account_activity.bank_transaction.sum != invoice.sum_cache
invoice.account_activity.bank_transaction.sum.nil? || invoice.account_activity.bank_transaction.sum != invoice.total
Rails.logger.info("[DIRECTO] Invoice #{invoice.number} has been skipped")
next
end
@ -29,12 +29,14 @@ class Directo < ActiveRecord::Base
"InvoiceDate" => invoice.created_at.strftime("%Y-%m-%dT%H:%M:%S"),
"PaymentTerm" => Setting.directo_receipt_payment_term,
"Currency" => invoice.currency,
"CustomerCode"=> invoice.buyer.accounting_customer_code
"CustomerCode"=> invoice.buyer.accounting_customer_code,
'TotalVAT' => ActionController::Base.helpers.number_with_precision(invoice.vat_amount, precision: 2, separator: '.')
){
xml.line(
"ProductID" => Setting.directo_receipt_product_name,
"Quantity" => 1,
"UnitPriceWoVAT" => ActionController::Base.helpers.number_with_precision(invoice.sum_cache/(1+invoice.vat_prc), precision: 2, separator: "."),
"UnitPriceWoVAT" => ActionController::Base.helpers.number_with_precision(invoice.subtotal, precision: 2, separator: '.'),
'VATCode' => invoice.buyer_vat_no,
"ProductName" => invoice.order
)
}

View file

@ -18,7 +18,7 @@ class Epp::Domain < Domain
after_validation :validate_contacts
def validate_contacts
return true if is_renewal || is_transfer
return true if is_transfer
ok = true
active_admins = admin_domain_contacts.select { |x| !x.marked_for_destruction? }

View file

@ -27,12 +27,18 @@ class Invoice < ActiveRecord::Base
attr_accessor :billing_email
validates :billing_email, email_format: { message: :invalid }, allow_blank: true
validates :invoice_type, :due_date, :currency, :seller_name,
:seller_iban, :buyer_name, :invoice_items, :vat_prc, presence: true
validates :due_date, :currency, :seller_name,
:seller_iban, :buyer_name, :invoice_items, presence: true
validates :vat_rate, numericality: { greater_than_or_equal_to: 0, less_than: 100 },
allow_nil: true
before_create :set_invoice_number, :check_vat
before_create :set_invoice_number
before_create :apply_default_vat_rate, unless: :vat_rate?
before_create :calculate_total, unless: :total?
before_create :apply_default_buyer_vat_no, unless: :buyer_vat_no?
before_save :check_vat
attribute :vat_rate, ::Type::VATRate.new
attr_readonly :vat_rate
def set_invoice_number
last_no = Invoice.order(number: :desc).where('number IS NOT NULL').limit(1).pluck(:number).first
@ -50,14 +56,6 @@ class Invoice < ActiveRecord::Base
false
end
def check_vat
if buyer.country_code != 'EE' && buyer.vat_no.present?
self.vat_prc = 0
end
end
before_save -> { self.sum_cache = sum }
class << self
def cancel_overdue_invoices
STDOUT << "#{Time.zone.now.utc} - Cancelling overdue invoices\n" unless Rails.env.test?
@ -106,12 +104,12 @@ class Invoice < ActiveRecord::Base
def buyer_country
Country.new(buyer_country_code)
end
# order is used for directo/banklink description
def order
"Order nr. #{number}"
end
def pdf(html)
kit = PDFKit.new(html)
kit.to_pdf
@ -152,15 +150,31 @@ class Invoice < ActiveRecord::Base
invoice_items
end
def sum_without_vat
(items.map(&:item_sum_without_vat).sum).round(2)
def subtotal
invoice_items.map(&:item_sum_without_vat).reduce(:+)
end
def vat
(sum_without_vat * vat_prc).round(2)
def vat_amount
return 0 unless vat_rate
subtotal * vat_rate / 100
end
def sum
(sum_without_vat + vat).round(2)
def total
calculate_total unless total?
read_attribute(:total)
end
private
def apply_default_vat_rate
self.vat_rate = buyer.effective_vat_rate
end
def apply_default_buyer_vat_no
self.buyer_vat_no = buyer.vat_no
end
def calculate_total
self.total = subtotal + vat_amount
end
end

View file

@ -6,7 +6,7 @@ class Registrar < ActiveRecord::Base
has_many :api_users, dependent: :restrict_with_error
has_many :messages
has_many :invoices, foreign_key: 'buyer_id'
has_many :accounts
has_many :accounts, dependent: :destroy
has_many :nameservers, through: :domains
has_many :whois_records
has_many :white_ips, dependent: :destroy
@ -17,37 +17,19 @@ class Registrar < ActiveRecord::Base
validates :name, :reference_no, :code, uniqueness: true
validates :accounting_customer_code, presence: true
validates :language, presence: true
validate :forbidden_codes
validate :forbid_special_code
validates :vat_rate, presence: true, if: 'foreign_vat_payer? && vat_no.blank?'
validates :vat_rate, absence: true, if: :home_vat_payer?
validates :vat_rate, absence: true, if: 'foreign_vat_payer? && vat_no?'
validates :vat_rate, numericality: { greater_than_or_equal_to: 0, less_than: 100 },
allow_nil: true
validate :forbid_special_code
attribute :vat_rate, ::Type::VATRate.new
after_initialize :set_defaults
def forbidden_codes
return true unless ['CID'].include? code
errors.add(:code, I18n.t(:forbidden_code))
false
end
before_validation :generate_iso_11649_reference_no
def generate_iso_11649_reference_no
return if reference_no.present?
loop do
base = nil
loop do
base = SecureRandom.random_number.to_s.last(8)
break if base.to_i != 0 && base.length == 8
end
control_base = (base + '2715' + '00').to_i
reminder = control_base % 97
check_digits = 98 - reminder
check_digits = check_digits < 10 ? "0#{check_digits}" : check_digits.to_s
self.reference_no = "RF#{check_digits}#{base}"
break unless self.class.exists?(reference_no: reference_no)
end
end
validates :email, :billing_email,
email_format: { message: :invalid },
@ -76,12 +58,10 @@ class Registrar < ActiveRecord::Base
# rubocop:disable Metrics/AbcSize
def issue_prepayment_invoice(amount, description = nil)
invoices.create(
invoice_type: 'DEB',
due_date: (Time.zone.now.to_date + Setting.days_to_keep_invoices_active.days).end_of_day,
payment_term: 'prepayment',
description: description,
currency: 'EUR',
vat_prc: Setting.registry_vat_prc,
seller_name: Setting.registry_juridical_name,
seller_reg_no: Setting.registry_reg_no,
seller_iban: Setting.registry_iban,
@ -97,7 +77,7 @@ class Registrar < ActiveRecord::Base
seller_url: Setting.registry_url,
seller_email: Setting.registry_email,
seller_contact_name: Setting.registry_invoice_contact,
buyer_id: id,
buyer: self,
buyer_name: name,
buyer_reg_no: reg_no,
buyer_country_code: country_code,
@ -132,11 +112,6 @@ class Registrar < ActiveRecord::Base
cash_account.account_activities.create!(args)
end
def credit!(args)
args[:currency] = 'EUR'
cash_account.account_activities.create!(args)
end
def address
[street, city, state, zip].reject(&:blank?).compact.join(', ')
end
@ -172,9 +147,50 @@ class Registrar < ActiveRecord::Base
end
end
def effective_vat_rate
if home_vat_payer?
Registry.instance.vat_rate
else
vat_rate
end
end
private
def set_defaults
self.language = Setting.default_language unless language
end
def forbid_special_code
errors.add(:code, :forbidden) if code == 'CID'
end
def generate_iso_11649_reference_no
return if reference_no.present?
loop do
base = nil
loop do
base = SecureRandom.random_number.to_s.last(8)
break if base.to_i != 0 && base.length == 8
end
control_base = (base + '2715' + '00').to_i
reminder = control_base % 97
check_digits = 98 - reminder
check_digits = check_digits < 10 ? "0#{check_digits}" : check_digits.to_s
self.reference_no = "RF#{check_digits}#{base}"
break unless self.class.exists?(reference_no: reference_no)
end
end
def home_vat_payer?
country == Registry.instance.legal_address_country
end
def foreign_vat_payer?
!home_vat_payer?
end
end

11
app/models/registry.rb Normal file
View file

@ -0,0 +1,11 @@
class Registry
include Singleton
def vat_rate
Setting.registry_vat_prc.to_d * 100
end
def legal_address_country
Country.new(Setting.registry_country_code)
end
end

View file

@ -0,0 +1,11 @@
module Type
class VATRate < ActiveRecord::Type::Decimal
def type_cast_from_database(value)
super * 100 if value
end
def type_cast_for_database(value)
super / 100.0 if value
end
end
end

View file

@ -41,7 +41,7 @@
%dt= t(:currency)
%dd= @bank_transaction.currency
%dt= t(:reference_no)
%dt= BankTransaction.human_attribute_name :reference_no
%dd= @bank_transaction.reference_no
%dt= t(:paid_at)

View file

@ -37,7 +37,7 @@
= f.email_field :bcc, class: 'form-control'
.form-group
.col-md-12
= f.label :body, t(:html_body)
= f.label :body, t('admin.mail_templates.html_body')
= liquid_help
.col-md-12
= f.text_area(:body, class: 'form-control', size: '15x15')
@ -48,7 +48,7 @@
.col-md-12
= f.text_area(:text_body, class: 'form-control', size: '15x15')
%hr
%hr
.row
.col-md-12.text-right
= button_tag(t(:save), class: 'btn btn-primary')

View file

@ -1,3 +1,3 @@
= render 'shared/title', name: t(:new_mail_template)
= render 'shared/title', name: t('admin.mail_templates.new_mail_template')
= render 'form', mail_template: @mail_template

View file

@ -0,0 +1,20 @@
<div class="panel panel-default">
<div class="panel-heading">
<%= t '.header' %>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt><%= Registrar.human_attribute_name :vat_no %></dt>
<dd><%= registrar.vat_no %></dd>
<dt><%= Registrar.human_attribute_name :vat_rate %></dt>
<dd><%= number_to_percentage(registrar.vat_rate, precision: 1) %></dd>
<dt><%= Registrar.human_attribute_name :accounting_customer_code %></dt>
<dd><%= registrar.accounting_customer_code %></dd>
<dt><%= Registrar.human_attribute_name :billing_email %></dt>
<dd><%= registrar.billing_email %></dd>
</dl>
</div>
</div>

View file

@ -0,0 +1,24 @@
<div class="panel panel-default">
<div class="panel-heading">
<%= t '.header' %>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt><%= t(:country) %></dt>
<dd><%= @registrar.country %></dd>
<dt><%= t(:address) %></dt>
<dd><%= @registrar.address %></dd>
<dt><%= t(:contact_phone) %></dt>
<dd><%= @registrar.phone %></dd>
<dt><%= t(:contact_email) %></dt>
<dd><%= @registrar.email %></dd>
<dt><%= Registrar.human_attribute_name :billing_email %></dt>
<dd><%= @registrar.billing_email %></dd>
</dl>
</div>
</div>

View file

@ -0,0 +1,27 @@
<div class="panel panel-default">
<div class="panel-heading">
<%= t '.header' %>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt><%= Registrar.human_attribute_name :name %></dt>
<dd><%= registrar.name %></dd>
<dt><%= Registrar.human_attribute_name :reg_no %></dt>
<dd><%= registrar.reg_no %></dd>
<dt><%= Registrar.human_attribute_name :reference_no %></dt>
<dd><%= registrar.reference_no %></dd>
<dt><%= Registrar.human_attribute_name :code %></dt>
<dd><%= registrar.code %></dd>
<dt><%= Registrar.human_attribute_name :balance %></dt>
<dd><%= registrar.balance %></dd>
<dt><%= Registrar.human_attribute_name :website %></dt>
<dd><%= registrar.website %></dd>
</dl>
</div>
</div>

View file

@ -1,5 +1,6 @@
<%= form_for([:admin, @registrar], html: { class: 'form-horizontal' }) do |f| %>
<%= render 'shared/full_errors', object: @registrar %>
<%= render 'form_errors', target: @registrar %>
<div class="row">
<div class="col-md-8">
<div class="panel panel-default">
@ -133,7 +134,9 @@
<%= f.label :code %>
</div>
<div class="col-md-7">
<%= f.text_field :code, required: f.object.new_record?, class: 'form-control', disabled: !f.object.new_record? %>
<%= f.text_field :code, required: f.object.new_record?,
disabled: f.object.persisted?,
class: 'form-control' %>
</div>
</div>

View file

@ -0,0 +1,28 @@
<div class="panel panel-default">
<div class="panel-heading">
<%= t '.header' %>
</div>
<table class="table table-hover table-bordered table-condensed">
<thead>
<tr>
<th class="col-xs-6"><%= ApiUser.human_attribute_name :username %></th>
<th class="col-xs-6"><%= ApiUser.human_attribute_name :active %></th>
</tr>
</thead>
<tbody>
<% registrar.api_users.each do |user| %>
<tr>
<td><%= link_to(user, [:admin, user]) %></td>
<td><%= user.active %></td>
</tr>
<% end %>
</tbody>
</table>
<div class="panel-footer text-right">
<%= link_to t('.new_btn'), new_admin_registrar_api_user_path(registrar),
class: 'btn btn-default btn-xs' %>
</div>
</div>

View file

@ -0,0 +1,38 @@
<div class="panel panel-default">
<div class="panel-heading">
<%= t '.header' %>
</div>
<table class="table table-hover table-bordered table-condensed">
<thead>
<tr>
<th class="col-xs-4"><%= WhiteIp.human_attribute_name :ipv4 %></th>
<th class="col-xs-6"><%= WhiteIp.human_attribute_name :ipv6 %></th>
<th class="col-xs-2"><%= WhiteIp.human_attribute_name :interfaces %></th>
</tr>
</thead>
<tbody>
<% registrar.white_ips.each do |white_ip| %>
<tr>
<td>
<% if white_ip.ipv4.present? %>
<%= link_to(white_ip.ipv4, [:admin, registrar, white_ip]) %>
<% end %>
</td>
<td>
<% if white_ip.ipv6.present? %>
<%= link_to(white_ip.ipv6, [:admin, registrar, white_ip]) %>
<% end %>
</td>
<td><%= white_ip.interfaces.join(', ').upcase %></td>
</tr>
<% end %>
</tbody>
</table>
<div class="panel-footer text-right">
<%= link_to t('.new_btn'), new_admin_registrar_white_ip_path(registrar),
class: 'btn btn-default btn-xs' %>
</div>
</div>

View file

@ -1,5 +1,10 @@
<% content_for :actions do %>
<%= link_to(t(:back_to_registrar), [:admin, @registrar], class: 'btn btn-default') %>
<% end %>
<%= render 'shared/title', name: "#{t(:edit)}: #{@registrar.name}" %>
<ol class="breadcrumb">
<li><%= link_to t('admin.registrars.index.header'), admin_registrars_path %></li>
<li><%= link_to @registrar.name, admin_registrar_path(@registrar) %></li>
</ol>
<div class="page-header">
<h1><%= t '.header' %></h1>
</div>
<%= render 'form' %>

View file

@ -17,6 +17,19 @@
</div>
</div>
<div class="form-group">
<div class="col-md-4 control-label">
<%= f.label :vat_rate %>
</div>
<div class="col-md-3">
<div class="input-group">
<%= f.number_field :vat_rate, min: 0, max: 99.9, step: 0.1,
class: 'form-control' %>
<div class="input-group-addon">%</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-4 control-label">
<%= f.label :accounting_customer_code %>

View file

@ -1,7 +1,15 @@
<% content_for :actions do %>
<%= link_to(t('.new_btn'), new_admin_registrar_path, class: 'btn btn-primary') %>
<% end %>
<%= render 'shared/title', name: t(:registrars) %>
<div class="page-header">
<div class="row">
<div class="col-sm-10">
<h1><%= t '.header' %></h1>
</div>
<div class="col-sm-2 text-right">
<%= link_to t('.new_btn'), new_admin_registrar_path, class: 'btn btn-primary' %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="table-responsive">
@ -12,10 +20,10 @@
<%= sort_link(@q, 'name') %>
</th>
<th class="col-xs-4">
<%= sort_link(@q, 'reg_no', t(:reg_no)) %>
<%= sort_link(@q, 'reg_no', Registrar.human_attribute_name(:reg_no)) %>
</th>
<th class="col-xs-4">
<%= t(:credit_balance) %>
<%= Registrar.human_attribute_name :balance %>
</th>
<th class="col-xs-4">
<%= t(:test_registrar) %>

View file

@ -1,2 +1,9 @@
<%= render 'shared/title', name: t(:new_registrar) %>
<ol class="breadcrumb">
<li><%= link_to t('admin.registrars.index.header'), admin_registrars_path %></li>
</ol>
<div class="page-header">
<h1><%= t '.header' %></h1>
</div>
<%= render 'form' %>

View file

@ -1,218 +1,50 @@
<% registrar = RegistrarPresenter.new(registrar: @registrar, view: self) %>
<% content_for :actions do %>
<%= link_to(t(:edit), edit_admin_registrar_path(@registrar), class: 'btn btn-primary') %>
<%= link_to(t(:delete), admin_registrar_path(@registrar), method: :delete, data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger') %>
<% end %>
<% content_for :page_name do %>
<%= @registrar.name %>
<% if @registrar.test_registrar? %>
<span style="color: #c9302c;">(test)</span>
<% end %>
<% end %>
<%= render 'shared/title', name: @registrar.name %>
<% if @registrar.errors.any? %>
<% @registrar.errors.each do |attr, err| %>
<%= err %>
<br/>
<% end %>
<% end %>
<% if @registrar.errors.any? %>
<hr/>
<% end %>
<ol class="breadcrumb">
<li><%= link_to t('admin.registrars.index.header'), admin_registrars_path %></li>
</ol>
<div class="page-header">
<div class="row">
<div class="col-md-6">
<h1>
<%= @registrar.name %>
<% if @registrar.test_registrar? %>
<span class="text-danger"> (test)</span>
<% end %>
</h1>
</div>
<div class="col-md-6 text-right">
<%= link_to t('.edit_btn'), edit_admin_registrar_path(@registrar),
class: 'btn btn-primary' %>
<%= link_to t('.delete_btn'), admin_registrar_path(@registrar),
method: :delete,
data: { confirm: t('.delete_btn_confirm') },
class: 'btn btn-default' %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<%= t(:general) %>
</h3>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt>
<%= t(:name) %>
</dt>
<dd>
<%= @registrar.name %>
</dd>
<dt>
<%= t(:reg_no) %>
</dt>
<dd>
<%= @registrar.reg_no %>
</dd>
<dt>
<%= t(:vat_no) %>
</dt>
<dd>
<%= @registrar.vat_no %>
</dd>
<dt>
<%= t(:reference_no) %>
</dt>
<dd>
<%= @registrar.reference_no %>
</dd>
<dt>
<%= t(:id) %>
</dt>
<dd>
<%= @registrar.code %>
</dd>
<dt>
<%= t(:credit_balance) %>
</dt>
<dd>
<%= @registrar.balance %>
</dd>
<dt>
<%= Registrar.human_attribute_name :website %>
</dt>
<dd>
<%= @registrar.website %>
</dd>
<dt>
<%= Registrar.human_attribute_name :accounting_customer_code %>
</dt>
<dd>
<%= @registrar.accounting_customer_code %>
</dd>
</dl>
</div>
</div>
<%= render 'details', registrar: @registrar %>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<%= t(:contact) %>
</h3>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt>
<%= t(:country) %>
</dt>
<dd>
<%= @registrar.country %>
</dd>
<dt>
<%= t(:address) %>
</dt>
<dd>
<%= @registrar.address %>
</dd>
<dt>
<%= t(:contact_phone) %>
</dt>
<dd>
<%= @registrar.phone %>
</dd>
<dt>
<%= t(:contact_email) %>
</dt>
<dd>
<%= @registrar.email %>
</dd>
<dt>
<%= t(:billing_email) %>
</dt>
<dd>
<%= @registrar.billing_email %>
</dd>
</dl>
</div>
</div>
<%= render 'admin/registrars/show/preferences', registrar: registrar %>
<%= render 'contacts', registrar: @registrar %>
<%= render 'billing', registrar: @registrar %>
<%= render 'preferences', registrar: registrar %>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-default" id="epp-users">
<div class="panel-heading clearfix">
<div class="pull-left">
<%= t('.api_users') %>
</div>
<div class="pull-right">
<%= link_to(t('.new_api_use_btn'), new_admin_registrar_api_user_path(@registrar), class: 'btn btn-default btn-xs') %>
</div>
</div>
<div class="table-responsive">
<table class="table table-hover table-bordered table-condensed">
<thead>
<tr>
<th class="col-xs-6">
<%= t(:username) %>
</th>
<th class="col-xs-6">
<%= t('.active') %>
</th>
</tr>
</thead>
<tbody>
<% @registrar.api_users.each do |x| %>
<tr>
<td>
<%= link_to(x, [:admin, x]) %>
</td>
<td>
<%= x.active %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<%= render 'users', registrar: @registrar %>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-default" id="epp-users">
<div class="panel-heading clearfix">
<div class="pull-left">
<%= t(:white_ips) %>
</div>
<div class="pull-right">
<%= link_to(t(:create_new_white_ip), new_admin_registrar_white_ip_path(@registrar), class: 'btn btn-default btn-xs') %>
</div>
</div>
<div class="table-responsive">
<table class="table table-hover table-bordered table-condensed">
<thead>
<tr>
<th class="col-xs-4">
<%= t(:ipv4) %>
</th>
<th class="col-xs-6">
<%= t(:ipv6) %>
</th>
<th class="col-xs-2">
<%= t(:interfaces) %>
</th>
</tr>
</thead>
<tbody>
<% @registrar.white_ips.each do |x| %>
<tr>
<td>
<% if x.ipv4.present? %>
<%= link_to(x.ipv4, [:admin, @registrar, x]) %>
<% end %>
</td>
<td>
<% if x.ipv6.present? %>
<%= link_to(x.ipv6, [:admin, @registrar, x]) %>
<% end %>
</td>
<td>
<%= x.interfaces.join(', ').upcase %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<%= render 'white_ips', registrar: @registrar %>
</div>
</div>

View file

@ -1,5 +1,5 @@
- content_for :actions do
= link_to(t(:back_to_registrar), admin_registrar_path(@registrar), class: 'btn btn-default')
= render 'shared/title', name: t(:create_new_white_ip)
= render 'shared/title', name: t('.header')
= render 'form'

View file

@ -14,11 +14,11 @@
%dt= t(:registrar_name)
%dd= link_to(@registrar, [:admin, @registrar])
%dt= t(:ipv4)
%dt= WhiteIp.human_attribute_name :ipv4
%dd= @white_ip.ipv4
%dt= t(:ipv6)
%dt= WhiteIp.human_attribute_name :ipv6
%dd= @white_ip.ipv6
%dt= t(:interfaces)
%dt= WhiteIp.human_attribute_name :interfaces
%dd= @white_ip.interfaces.join(', ').upcase

View file

@ -10,7 +10,7 @@
%th{class: 'col-xs-6'}
= sort_link(@q, 'name')
%th{class: 'col-xs-6'}
= sort_link(@q, 'reg_no', t(:reg_no))
= sort_link(@q, 'reg_no', Registrar.human_attribute_name(:reg_no))
%tbody
- @registrars.each do |x|
%tr

View file

@ -16,10 +16,10 @@
%dt= t(:name)
%dd= @registrar.name
%dt= t(:reg_no)
%dt= Registrar.human_attribute_name :reg_no
%dd= @registrar.reg_no
%dt= t(:vat_no)
%dt= Registrar.human_attribute_name :vat_no
%dd= @registrar.vat_no
%dt= t(:id)

View file

@ -33,11 +33,11 @@
.col-md-3
.form-group
= f.label t(:minimum_total)
= f.search_field :sum_cache_gteq, class: 'form-control', placeholder: t(:minimum_total), autocomplete: 'off'
= f.search_field :total_gteq, class: 'form-control', placeholder: t(:minimum_total), autocomplete: 'off'
.col-md-3
.form-group
= f.label t(:maximum_total)
= f.search_field :sum_cache_lteq, class: 'form-control', placeholder: t(:maximum_total), autocomplete: 'off'
= f.search_field :total_lteq, class: 'form-control', placeholder: t(:maximum_total), autocomplete: 'off'
.col-md-3{style: 'padding-top: 25px;'}
%button.btn.btn-default
&nbsp;
@ -67,7 +67,7 @@
%td{class: 'text-danger'}= t(:unpaid)
%td= l(x.due_date, format: :date_long)
%td= currency(x.sum)
%td= currency(x.total)
.row
.col-md-12
= paginate @invoices

View file

@ -32,5 +32,5 @@
%dt= t(:description)
%dd=@invoice.description
%dt= t(:reference_no)
%dt= Invoice.human_attribute_name :reference_no
%dd= @invoice.reference_no

View file

@ -20,13 +20,13 @@
%tfoot
%tr
%th{colspan: 3}
%th= t(:total_without_vat)
%td= currency(@invoice.sum_without_vat)
%th= Invoice.human_attribute_name :subtotal
%td= number_to_currency @invoice.subtotal
%tr
%th.no-border{colspan: 3}
%th= t('vat', vat_prc: (@invoice.vat_prc * 100).round)
%td= currency(@invoice.vat)
%th= "VAT #{number_to_percentage(@invoice.vat_rate, precision: 1)}"
%td= number_to_currency @invoice.vat_amount
%tr
%th.no-border{colspan: 3}
%th= t(:total)
%td= currency(@invoice.sum)
%td= number_to_currency @invoice.total

View file

@ -4,7 +4,7 @@
%dt= t(:name)
%dd= @invoice.seller_name
%dt= t(:reg_no)
%dt= Registrar.human_attribute_name :reg_no
%dd= @invoice.seller_reg_no
%dt= t(:iban)
@ -16,7 +16,7 @@
%dt= t(:swift)
%dd= @invoice.seller_swift
%dt= t(:vat_no)
%dt= Registrar.human_attribute_name :vat_no
%dd= @invoice.seller_vat_no
%dt= t(:address)

View file

@ -182,7 +182,7 @@
%dt= t(:description)
%dd=@invoice.description
%dt= t(:reference_no)
%dt= Invoice.human_attribute_name :reference_no
%dd= @invoice.reference_no
.col-md-6.right
@ -238,16 +238,16 @@
%tfoot
%tr
%th{colspan: 3}
%th= t(:total_without_vat)
%td= "#{currency(@invoice.sum_without_vat)} #{@invoice.currency}"
%th= Invoice.human_attribute_name :subtotal
%td= number_to_currency @invoice.subtotal
%tr
%th.no-border{colspan: 3}
%th= t('vat', vat_prc: (@invoice.vat_prc * 100).round)
%td= "#{currency(@invoice.vat)} #{@invoice.currency}"
%th= "VAT #{number_to_percentage(@invoice.vat_rate, precision: 1)}"
%td= number_to_currency @invoice.vat_amount
%tr
%th.no-border{colspan: 3}
%th= t(:total)
%td= "#{currency(@invoice.sum)} #{@invoice.currency}"
%td= number_to_currency @invoice.total
#footer
%hr
@ -261,7 +261,7 @@
%br
= "#{t('reg_no')} #{@invoice.seller_reg_no}"
%br
= "#{t('vat_no')} #{@invoice.seller_vat_no}"
= "#{Registrar.human_attribute_name :vat_no} #{@invoice.seller_vat_no}"
.col-md-3.left
= @invoice.seller_phone

View file

@ -7,7 +7,6 @@
<div class="col-md-5">
<%= text_field_tag :old_hostname, params[:old_hostname], autofocus: true,
required: true,
spellcheck: false,
class: 'form-control' %>
</div>
</div>
@ -19,7 +18,6 @@
<div class="col-md-5">
<%= text_field_tag :new_hostname, params[:new_hostname], required: true,
spellcheck: false,
class: 'form-control' %>
</div>
</div>
@ -30,7 +28,7 @@
</div>
<div class="col-md-3">
<%= text_area_tag :ipv4, params[:ipv4], spellcheck: false, class: 'form-control' %>
<%= text_area_tag :ipv4, params[:ipv4], class: 'form-control' %>
</div>
</div>
@ -40,7 +38,7 @@
</div>
<div class="col-md-3">
<%= text_area_tag :ipv6, params[:ipv6], spellcheck: false, class: 'form-control' %>
<%= text_area_tag :ipv6, params[:ipv6], class: 'form-control' %>
<span class="help-block"><%= t '.ip_hint' %></span>
</div>
</div>

View file

@ -15,7 +15,7 @@ require 'rails/all'
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module Registry
module DomainNameRegistry
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers

View file

@ -43,6 +43,7 @@ Rails.application.configure do
config.log_level = :debug
config.active_job.queue_adapter = :test
config.logger = ActiveSupport::Logger.new(nil)
config.active_support.test_order = :random # :random is the default in Rails 5
end
# In this mode, any jobs you queue will be run in the same thread, synchronously

View file

@ -0,0 +1,5 @@
en:
admin:
mail_templates:
html_body: HTML body
new_mail_template: New mail template

View file

@ -2,23 +2,37 @@ en:
admin:
registrars:
index:
header: Registrars
new_btn: New registrar
show:
new_api_use_btn: New API user
active: Active
api_users: API users
new:
header: New registrar
preferences:
header: Preferences
show:
edit_btn: Edit
delete_btn: Delete
delete_btn_confirm: Are you sure you want delete registrar?
edit:
header: Edit registrar
billing:
header: Billing
edit:
header: Edit registrar
billing:
header: Billing
create:
created: Registrar has been successfully created
not_created: Unable to create registrar
update:
updated: Registrar has been successfully updated
not_updated: Unable to update registrar
destroy:
deleted: Registrar has been successfully deleted
form:
misc: Miscellaneous
@ -30,3 +44,20 @@ en:
preferences:
header: Preferences
details:
header: Details
contacts:
header: Contacts
preferences:
header: Preferences
users:
header: API Users
new_btn: New API user
white_ips:
header: Whitelisted IPs
new_btn: New whitelisted IP

View file

@ -0,0 +1,5 @@
en:
admin:
white_ips:
new:
header: New whitelisted IP

View file

@ -197,15 +197,11 @@ en:
alg: 'Algorithm'
public_key: 'Public key'
registrar:
billing_email: 'Billing e-mail'
phone: 'Contact phone'
email: 'Contact e-mail'
state: 'State / Province'
deposit:
amount: 'Amount'
white_ip:
ipv4: 'IPv4'
ipv6: 'IPv6'
errors:
messages:
@ -302,7 +298,6 @@ en:
reg_no: 'Reg. no'
status: 'Status'
contact: 'Contact'
credit_balance: 'Credit balance'
starting_balance: 'Starting balance'
destroyed: 'Destroyed'
@ -313,13 +308,7 @@ en:
edit_statuses: 'Edit statuses'
history: 'History'
new_registrar: 'New registrar'
registrar_details: 'Registrar details'
vat_no: 'VAT no'
edit_registrar: 'Edit registrar'
back_to_registrar: 'Back to registrar'
registrar_deleted: 'Registrar deleted'
failed_to_delete_registrar: 'Failed to delete registrar'
users: 'Users'
user_details: 'User details'
@ -393,7 +382,6 @@ en:
choose: 'Choose...'
created_before: 'Created before'
created_after: 'Created after'
billing_email: 'Billing e-mail'
contact_phone: 'Contact phone'
contact_email: 'Contact e-mail'
address_help: 'Street name, house no - apartment no, city, county, country, zip'
@ -550,7 +538,6 @@ en:
invoice_number: Invoice no.
seller: 'Seller'
prepayment: 'Prepayment'
vat: 'VAT (%{vat_prc}%)'
unpaid: 'Unpaid'
your_current_account_balance_is: 'Your current account balance is %{balance} %{currency}'
billing: 'Billing'
@ -568,7 +555,6 @@ en:
unit: 'Unit'
price: 'Price'
total: 'Total'
total_without_vat: 'Total without VAT'
paid_at: 'Paid at'
invoice: 'Invoice'
bank_statements: 'Bank statements'
@ -584,7 +570,6 @@ en:
queried_at: 'Queried at'
import_file_path: 'Import file path'
bank_code: 'Bank code'
reference_no: 'Reference no'
currency: 'Currency'
buyer_name: 'Buyer name'
buyer_iban: 'Buyer IBAN'
@ -649,7 +634,6 @@ en:
due_date_until: 'Due date until'
minimum_total: 'Minimum total'
maximum_total: 'Maximum total'
forbidden_code: 'is forbidden to use'
unimplemented_object_service: 'Unimplemented object service'
contact_email_update_subject: 'Teie domeenide kontakt epostiaadress on muutunud / Contact e-mail addresses of your domains have changed'
object_status_prohibits_operation: 'Object status prohibits operation'
@ -662,8 +646,6 @@ en:
not_valid_domain_verification_body: This could mean your verification has been expired or done already.<br><br>Please contact us if you think something is wrong.
upload_crt: 'Upload CRT'
crt_or_csr_must_be_present: 'CRT or CSR must be present'
white_ips: 'White IP-s'
create_new_white_ip: 'Create new white IP'
ipv4_or_ipv6_must_be_present: 'IPv4 or IPv6 must be present'
white_ip: 'White IP'
edit_white_ip: 'Edit white IP'
@ -747,11 +729,9 @@ en:
is_registrant: 'Is registrant'
force_delete_set_on_domain: 'Force delete set on domain %{domain_name}'
mail_templates: Mail Templates
new_mail_template: New mail template
failure: "It was not saved"
contact_is_not_valid: 'Contact %{value} is not valid, please fix the invalid contact'
welcome_to_eis_registrar_portal: 'Welcome to EIS Registrar portal'
interfaces: 'Interfaces'
next: 'Next'
previous: 'Previous'
personal_domain_verification_url: 'Personal domain verification url'
@ -777,3 +757,9 @@ en:
delimiter: " "
precision: 2
unit:
attributes:
vat_no: VAT number
vat_rate: VAT rate
ipv4: IPv4
ipv6: IPv6

View file

@ -0,0 +1,8 @@
en:
activerecord:
errors:
models:
registrar:
attributes:
code:
forbidden: is forbidden

View file

@ -97,7 +97,6 @@ Rails.application.routes.draw do
get 'pay/go/:bank' => 'payments#pay', as: 'payment_with'
end
# REGISTRANT ROUTES
namespace :registrant do
root 'domains#index'
@ -111,17 +110,6 @@ Rails.application.routes.draw do
end
end
# resources :invoices do
# member do
# get 'download_pdf'
# match 'forward', via: [:post, :get]
# patch 'cancel'
# end
# end
# resources :deposits
# resources :account_activities
resources :domain_update_confirms
resources :domain_delete_confirms
@ -150,8 +138,6 @@ Rails.application.routes.draw do
end
resources :registrars do
resources :api_users
resources :white_ips
collection do
get :search
end

View file

@ -0,0 +1,5 @@
class AddRegistrarsVatRate < ActiveRecord::Migration
def change
add_column :registrars, :vat_rate, :decimal, precision: 4, scale: 3
end
end

View file

@ -0,0 +1,5 @@
class RenameInvoicesVatPrcToVatRate < ActiveRecord::Migration
def change
rename_column :invoices, :vat_prc, :vat_rate
end
end

View file

@ -0,0 +1,5 @@
class ChangeInvoicesVatRateType < ActiveRecord::Migration
def change
change_column :invoices, :vat_rate, :decimal, precision: 4, scale: 3
end
end

View file

@ -0,0 +1,5 @@
class ChangeInvoiceVatRateToNull < ActiveRecord::Migration
def change
change_column_null :invoices, :vat_rate, true
end
end

View file

@ -0,0 +1,5 @@
class RemoveRegistrarsVat < ActiveRecord::Migration
def change
remove_column :registrars, :vat, :boolean
end
end

View file

@ -0,0 +1,17 @@
class AddRegistrarsUniqueConstraints < ActiveRecord::Migration
def up
execute <<-SQL
ALTER TABLE registrars ADD CONSTRAINT unique_name UNIQUE (name);
ALTER TABLE registrars ADD CONSTRAINT unique_reference_no UNIQUE (reference_no);
ALTER TABLE registrars ADD CONSTRAINT unique_code UNIQUE (code);
SQL
end
def down
execute <<-SQL
ALTER TABLE registrars DROP CONSTRAINT unique_name;
ALTER TABLE registrars DROP CONSTRAINT unique_reference_no;
ALTER TABLE registrars DROP CONSTRAINT unique_code;
SQL
end
end

View file

@ -0,0 +1,6 @@
class RemoveRegistrarsIndexes < ActiveRecord::Migration
def change
remove_index :registrars, name: :index_registrars_on_code
remove_index :registrars, name: :index_registrars_on_legacy_id
end
end

View file

@ -0,0 +1,9 @@
class AddRegistrarsNotNullConstraints < ActiveRecord::Migration
def change
change_column_null :registrars, :name, false
change_column_null :registrars, :reg_no, false
change_column_null :registrars, :country_code, false
change_column_null :registrars, :email, false
change_column_null :registrars, :code, false
end
end

View file

@ -0,0 +1,5 @@
class RemoveInvoicesInvoiceType < ActiveRecord::Migration
def change
remove_column :invoices, :invoice_type, :string
end
end

View file

@ -0,0 +1,5 @@
class RenameInvoicesSumCacheToTotal < ActiveRecord::Migration
def change
rename_column :invoices, :sum_cache, :total
end
end

View file

@ -0,0 +1,5 @@
class ChangeInvoicesTotalToNotNull < ActiveRecord::Migration
def change
change_column_null :invoices, :total, false
end
end

View file

@ -0,0 +1,5 @@
class AddInvoicesBuyerVatNo < ActiveRecord::Migration
def change
add_column :invoices, :buyer_vat_no, :string
end
end

View file

@ -998,13 +998,12 @@ CREATE TABLE invoices (
id integer NOT NULL,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
invoice_type character varying NOT NULL,
due_date timestamp without time zone NOT NULL,
payment_term character varying,
currency character varying NOT NULL,
description character varying,
reference_no character varying,
vat_prc numeric(10,2) NOT NULL,
vat_rate numeric(4,3),
paid_at timestamp without time zone,
seller_id integer,
seller_name character varying NOT NULL,
@ -1037,8 +1036,9 @@ CREATE TABLE invoices (
updator_str character varying,
number integer,
cancelled_at timestamp without time zone,
sum_cache numeric(10,2),
in_directo boolean DEFAULT false
total numeric(10,2) NOT NULL,
in_directo boolean DEFAULT false,
buyer_vat_no character varying
);
@ -2136,29 +2136,29 @@ ALTER SEQUENCE registrant_verifications_id_seq OWNED BY registrant_verifications
CREATE TABLE registrars (
id integer NOT NULL,
name character varying,
reg_no character varying,
name character varying NOT NULL,
reg_no character varying NOT NULL,
vat_no character varying,
created_at timestamp without time zone,
updated_at timestamp without time zone,
creator_str character varying,
updator_str character varying,
phone character varying,
email character varying,
email character varying NOT NULL,
billing_email character varying,
country_code character varying,
country_code character varying NOT NULL,
state character varying,
city character varying,
street character varying,
zip character varying,
code character varying,
code character varying NOT NULL,
website character varying,
accounting_customer_code character varying NOT NULL,
vat boolean,
legacy_id integer,
reference_no character varying,
test_registrar boolean DEFAULT false,
language character varying NOT NULL
language character varying NOT NULL,
vat_rate numeric(4,3)
);
@ -3243,6 +3243,14 @@ ALTER TABLE ONLY settings
ADD CONSTRAINT settings_pkey PRIMARY KEY (id);
--
-- Name: unique_code; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
ALTER TABLE ONLY registrars
ADD CONSTRAINT unique_code UNIQUE (code);
--
-- Name: unique_contact_code; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@ -3251,6 +3259,22 @@ ALTER TABLE ONLY contacts
ADD CONSTRAINT unique_contact_code UNIQUE (code);
--
-- Name: unique_name; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
ALTER TABLE ONLY registrars
ADD CONSTRAINT unique_name UNIQUE (name);
--
-- Name: unique_reference_no; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
ALTER TABLE ONLY registrars
ADD CONSTRAINT unique_reference_no UNIQUE (reference_no);
--
-- Name: unique_session_id; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@ -3853,20 +3877,6 @@ CREATE INDEX index_registrant_verifications_on_created_at ON registrant_verifica
CREATE INDEX index_registrant_verifications_on_domain_id ON registrant_verifications USING btree (domain_id);
--
-- Name: index_registrars_on_code; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
CREATE INDEX index_registrars_on_code ON registrars USING btree (code);
--
-- Name: index_registrars_on_legacy_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
CREATE INDEX index_registrars_on_legacy_id ON registrars USING btree (legacy_id);
--
-- Name: index_settings_on_thing_type_and_thing_id_and_var; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@ -4659,6 +4669,16 @@ INSERT INTO schema_migrations (version) VALUES ('20180214213743');
INSERT INTO schema_migrations (version) VALUES ('20180218004148');
INSERT INTO schema_migrations (version) VALUES ('20180228055259');
INSERT INTO schema_migrations (version) VALUES ('20180228064342');
INSERT INTO schema_migrations (version) VALUES ('20180228070102');
INSERT INTO schema_migrations (version) VALUES ('20180228070431');
INSERT INTO schema_migrations (version) VALUES ('20180228074442');
INSERT INTO schema_migrations (version) VALUES ('20180306180401');
INSERT INTO schema_migrations (version) VALUES ('20180306181538');
@ -4679,3 +4699,17 @@ INSERT INTO schema_migrations (version) VALUES ('20180306183549');
INSERT INTO schema_migrations (version) VALUES ('20180308123240');
INSERT INTO schema_migrations (version) VALUES ('20180309053424');
INSERT INTO schema_migrations (version) VALUES ('20180309053921');
INSERT INTO schema_migrations (version) VALUES ('20180309054510');
INSERT INTO schema_migrations (version) VALUES ('20180310142630');
INSERT INTO schema_migrations (version) VALUES ('20180313090437');
INSERT INTO schema_migrations (version) VALUES ('20180313124751');
INSERT INTO schema_migrations (version) VALUES ('20180314122722');

View file

@ -492,7 +492,6 @@
<polyline fill="none" stroke="black" points="-300,-378 -124,-378 "/>
<polyline fill="none" stroke="black" points="-300,-354 -124,-354 "/>
<text text-anchor="start" x="-292" y="-338.8" font-family="Times,serif" font-size="14.00">_layout</text>
<text text-anchor="start" x="-292" y="-323.8" font-family="Times,serif" font-size="14.00">check_ip</text>
<text text-anchor="start" x="-292" y="-308.8" font-family="Times,serif" font-size="14.00">role_base_root_url</text>
</g>
<!-- Registrar::PollsController -->

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Before After
Before After

View file

@ -1489,7 +1489,6 @@
<text text-anchor="start" x="1600.5" y="-2399.3" font-family="Times,serif" font-size="14.00">zip :string</text>
<text text-anchor="start" x="1600.5" y="-2384.3" font-family="Times,serif" font-size="14.00">code :string</text>
<text text-anchor="start" x="1600.5" y="-2369.3" font-family="Times,serif" font-size="14.00">url :string</text>
<text text-anchor="start" x="1600.5" y="-2339.3" font-family="Times,serif" font-size="14.00">vat :boolean</text>
<text text-anchor="start" x="1600.5" y="-2324.3" font-family="Times,serif" font-size="14.00">legacy_id :integer</text>
<text text-anchor="start" x="1600.5" y="-2309.3" font-family="Times,serif" font-size="14.00">reference_no :string</text>
</g>
@ -1614,13 +1613,12 @@
<text text-anchor="start" x="121.5" y="-1571.3" font-family="Times,serif" font-size="14.00">id :integer</text>
<text text-anchor="start" x="121.5" y="-1556.3" font-family="Times,serif" font-size="14.00">created_at :datetime</text>
<text text-anchor="start" x="121.5" y="-1541.3" font-family="Times,serif" font-size="14.00">updated_at :datetime</text>
<text text-anchor="start" x="121.5" y="-1526.3" font-family="Times,serif" font-size="14.00">invoice_type :string</text>
<text text-anchor="start" x="121.5" y="-1511.3" font-family="Times,serif" font-size="14.00">due_date :datetime</text>
<text text-anchor="start" x="121.5" y="-1496.3" font-family="Times,serif" font-size="14.00">payment_term :string</text>
<text text-anchor="start" x="121.5" y="-1481.3" font-family="Times,serif" font-size="14.00">currency :string</text>
<text text-anchor="start" x="121.5" y="-1466.3" font-family="Times,serif" font-size="14.00">description :string</text>
<text text-anchor="start" x="121.5" y="-1451.3" font-family="Times,serif" font-size="14.00">reference_no :string</text>
<text text-anchor="start" x="121.5" y="-1436.3" font-family="Times,serif" font-size="14.00">vat_prc :decimal</text>
<text text-anchor="start" x="121.5" y="-1436.3" font-family="Times,serif" font-size="14.00">vat_rate :decimal</text>
<text text-anchor="start" x="121.5" y="-1421.3" font-family="Times,serif" font-size="14.00">paid_at :datetime</text>
<text text-anchor="start" x="121.5" y="-1406.3" font-family="Times,serif" font-size="14.00">seller_id :integer</text>
<text text-anchor="start" x="121.5" y="-1391.3" font-family="Times,serif" font-size="14.00">seller_name :string</text>
@ -1653,7 +1651,7 @@
<text text-anchor="start" x="121.5" y="-986.3" font-family="Times,serif" font-size="14.00">updator_str :string</text>
<text text-anchor="start" x="121.5" y="-971.3" font-family="Times,serif" font-size="14.00">number :integer</text>
<text text-anchor="start" x="121.5" y="-956.3" font-family="Times,serif" font-size="14.00">cancelled_at :datetime</text>
<text text-anchor="start" x="121.5" y="-941.3" font-family="Times,serif" font-size="14.00">sum_cache :decimal</text>
<text text-anchor="start" x="121.5" y="-941.3" font-family="Times,serif" font-size="14.00">total :decimal</text>
</g>
<!-- Registrar&#45;&gt;Invoice -->
<g id="edge64" class="edge"><title>Registrar&#45;&gt;Invoice</title>

Before

Width:  |  Height:  |  Size: 220 KiB

After

Width:  |  Height:  |  Size: 220 KiB

Before After
Before After

View file

@ -87,7 +87,6 @@ namespace :import do
zip: x.postalcode.try(:strip),
url: x.url.try(:strip),
accounting_customer_code: x.directo_handle.try(:strip),
vat: x.vat,
legacy_id: x.id,
creator_str: user,
updator_str: user,
@ -100,7 +99,7 @@ namespace :import do
puts "-----> Generating reference numbers"
Registrar.all.each do |x|
x.generate_iso_11649_reference_no
x.send(:generate_iso_11649_reference_no)
x.save(validate: false)
end

View file

@ -3,12 +3,11 @@ FactoryBot.define do
buyer_name 'Registrar 1'
currency { 'EUR' }
due_date { Time.zone.now.to_date + 1.day }
invoice_type 'DEB'
seller_iban { '123' }
seller_name { 'EIS' }
seller_city { 'Tallinn' }
seller_street { 'Paldiski mnt. 123' }
vat_prc 0.2
vat_rate 0.2
buyer { FactoryBot.create(:registrar) }
after :build do |invoice|

View file

@ -13,10 +13,8 @@ describe Invoice do
"Currency is missing",
"Due date is missing",
"Invoice items is missing",
"Invoice type is missing",
"Seller iban is missing",
"Seller name is missing",
"Vat prc is missing"
])
end
@ -52,20 +50,6 @@ describe Invoice do
@invoice.seller_address.should == 'Paldiski mnt. 123, Tallinn'
end
it 'should calculate sums correctly' do
@invoice = create(:invoice)
@invoice.vat_prc.should == BigDecimal.new('0.2')
@invoice.sum_without_vat.should == BigDecimal.new('300.0')
@invoice.vat.should == BigDecimal.new('60.0')
@invoice.sum.should == BigDecimal.new('360.0')
ii = @invoice.items.first
ii.item_sum_without_vat.should == BigDecimal.new('150.0')
ii = @invoice.items.last
ii.item_sum_without_vat.should == BigDecimal.new('150.0')
end
it 'should cancel overdue invoices' do
create(:invoice, created_at: Time.zone.now - 35.days, due_date: Time.zone.now - 30.days)
Invoice.cancel_overdue_invoices

View file

@ -1,118 +0,0 @@
require 'rails_helper'
describe Registrar do
context 'with invalid attribute' do
before :all do
@registrar = Registrar.new
end
it 'is not valid' do
@registrar.valid?
@registrar.errors.full_messages.should include(*[
'Contact e-mail is missing',
'Country code is missing',
'Name is missing',
'Reg no is missing',
'Code is missing'
])
end
it 'returns an error with invalid email' do
@registrar.email = 'bla'
@registrar.billing_email = 'bla'
@registrar.valid?
@registrar.errors[:email].should == ['is invalid']
@registrar.errors[:billing_email].should == ['is invalid']
end
it 'should not have valid code' do
@registrar.code.should == nil
end
it 'should generate reference number' do
@registrar.generate_iso_11649_reference_no
@registrar.reference_no.should_not be_blank
@registrar.reference_no.last(10).to_i.should_not == 0
end
end
context 'with valid attributes' do
before :all do
@registrar = create(:registrar)
end
it 'should be valid' do
@registrar.valid?
@registrar.errors.full_messages.should match_array([])
end
it 'should be valid twice' do
@registrar = create(:registrar)
@registrar.valid?
@registrar.errors.full_messages.should match_array([])
end
it 'should remove blank from code' do
registrar = build(:registrar, code: 'with blank')
registrar.valid?
registrar.errors.full_messages.should match_array([
])
registrar.code.should == 'WITHBLANK'
end
it 'should remove colon from code' do
registrar = build(:registrar, code: 'with colon:and:blank')
registrar.valid?
registrar.errors.full_messages.should match_array([
])
registrar.code.should == 'WITHCOLONANDBLANK'
end
it 'should allow dot in code' do
registrar = build(:registrar, code: 'with.dot')
registrar.valid?
registrar.errors.full_messages.should match_array([
])
registrar.code.should == 'WITH.DOT'
end
it 'should have one version' do
with_versioning do
@registrar.versions.should == []
@registrar.name = 'New name'
@registrar.save
@registrar.errors.full_messages.should match_array([])
@registrar.versions.size.should == 1
end
end
it 'should return full address' do
registrar = described_class.new(street: 'Street 999', city: 'Town', state: 'County', zip: 'Postal')
registrar.address.should == 'Street 999, Town, County, Postal'
end
it 'should not be able to change code' do
registrar = create(:registrar, code: 'TEST')
registrar.code = 'new-code'
expect(registrar.code).to eq('TEST')
end
it 'should be able to issue a prepayment invoice' do
Setting.days_to_keep_invoices_active = 30
create(:registrar, name: 'EIS', reg_no: '90010019')
@registrar.issue_prepayment_invoice(200, 'add some money')
@registrar.invoices.count.should == 1
i = @registrar.invoices.first
i.sum.should == BigDecimal.new('240.0')
i.due_date.should be_within(0.1).of((Time.zone.now + 30.days).end_of_day)
i.description.should == 'add some money'
end
it 'should not allaw to use CID as code for leagcy reasons' do
registrar = build(:registrar, code: 'CID')
registrar.valid?
registrar.errors.full_messages.should == ['Code is forbidden to use']
end
end
end

View file

@ -1,42 +0,0 @@
require 'rails_helper'
RSpec.describe 'admin registrar update' do
before :example do
sign_in_to_admin_area
end
it 'updates website' do
registrar = create(:registrar, website: 'test')
patch admin_registrar_path(registrar), registrar: attributes_for(:registrar, website: 'new-website')
registrar.reload
expect(registrar.website).to eq('new-website')
end
it 'updates email' do
registrar = create(:registrar, email: 'test@test.com')
patch admin_registrar_path(registrar), registrar: attributes_for(:registrar, email: 'new-test@test.com')
registrar.reload
expect(registrar.email).to eq('new-test@test.com')
end
it 'updates billing email' do
registrar = create(:registrar, billing_email: 'test@test.com')
patch admin_registrar_path(registrar), registrar: attributes_for(:registrar, billing_email: 'new-test@test.com')
registrar.reload
expect(registrar.billing_email).to eq('new-test@test.com')
end
it 'redirects to :show' do
registrar = create(:registrar)
patch admin_registrar_path(registrar), { registrar: attributes_for(:registrar) }
expect(response).to redirect_to admin_registrar_path(registrar)
end
end

View file

@ -1,33 +0,0 @@
require 'rails_helper'
RSpec.describe Admin::RegistrarsController do
describe 'routing' do
it 'routes to #index' do
expect(get: '/admin/registrars').to route_to('admin/registrars#index')
end
it 'routes to #new' do
expect(get: '/admin/registrars/new').to route_to('admin/registrars#new')
end
it 'routes to #show' do
expect(get: '/admin/registrars/1').to route_to('admin/registrars#show', id: '1')
end
it 'routes to #edit' do
expect(get: '/admin/registrars/1/edit').to route_to('admin/registrars#edit', id: '1')
end
it 'routes to #create' do
expect(post: '/admin/registrars').to route_to('admin/registrars#create')
end
it 'routes to #update' do
expect(patch: '/admin/registrars/1').to route_to('admin/registrars#update', id: '1')
end
it 'routes to #destroy' do
expect(delete: '/admin/registrars/1').to route_to('admin/registrars#destroy', id: '1')
end
end
end

View file

@ -1,19 +0,0 @@
require 'rails_helper'
RSpec.describe 'admin/registrars/_form' do
let(:registrar) { build_stubbed(:registrar) }
before :example do
assign(:registrar, registrar)
stub_template 'shared/_full_errors' => ''
without_partial_double_verification do
allow(view).to receive(:available_languages).and_return({})
end
end
it 'has website' do
render
expect(rendered).to have_css('[name="registrar[website]"]')
end
end

View file

@ -1,19 +0,0 @@
require 'rails_helper'
RSpec.describe 'admin/registrars/show' do
let(:registrar) { build_stubbed(:registrar, website: 'test website') }
before :example do
assign(:registrar, registrar)
stub_template 'shared/_title' => ''
without_partial_double_verification do
allow(view).to receive(:available_languages).and_return({})
end
end
it 'has website' do
render
expect(rendered).to have_text('test website')
end
end

View file

@ -1,30 +0,0 @@
require 'test_helper'
class RegistrarsControllerTest < ActionDispatch::IntegrationTest
def setup
login_as users(:admin)
@registrar = registrars(:bestnames)
end
def test_updates_website
patch admin_registrar_path(@registrar), registrar: @registrar.attributes.merge(website: 'new.example.com')
@registrar.reload
assert_equal 'new.example.com', @registrar.website
end
def test_updates_email
patch admin_registrar_path(@registrar), registrar: @registrar.attributes.merge(email: 'new@example.com')
@registrar.reload
assert_equal 'new@example.com', @registrar.email
end
def test_updates_billing_email
patch admin_registrar_path(@registrar),
registrar: @registrar.attributes.merge(billing_email: 'new-billing@example.com')
@registrar.reload
assert_equal 'new-billing@example.com', @registrar.billing_email
end
end

View file

@ -3,3 +3,9 @@ cash:
balance: 100
currency: EUR
registrar: bestnames
not_in_use_cash:
account_type: cash
balance: 0
currency: EUR
registrar: not_in_use

View file

@ -1,7 +1,31 @@
cash:
duration: 1 year
price_cents: 500
create_one_month:
duration: 1 month
price_cents: 100
operation_category: create
valid_from: 2010-07-05
valid_to: 2010-07-05
zone: test
renew_one_month:
duration: 1 month
price_cents: 100
operation_category: renew
valid_from: 2010-07-05
valid_to: 2010-07-05
zone: test
create_one_year:
duration: 1 year
price_cents: 1000
operation_category: create
valid_from: 2010-07-05
valid_to: 2010-07-05
zone: test
renew_one_year:
duration: 1 year
price_cents: 1000
operation_category: renew
valid_from: 2010-07-05
valid_to: 2010-07-05
zone: test

View file

@ -40,7 +40,7 @@ metro:
invalid:
name: invalid.test
transfer_code: any
valid_to: 2010-07-05
transfer_code: 1438d6
valid_to: <%= Time.zone.parse('2010-07-05').utc.to_s(:db) %>
registrar: bestnames
registrant: invalid

View file

@ -1,13 +1,13 @@
DEFAULTS: &DEFAULTS
one:
description: Acme services
price: 5
amount: 1
unit: pc
invoice: valid
two:
description: Acme services
price: 5
amount: 2
unit: pc
price: 5
valid:
<<: *DEFAULTS
invoice: valid
another:
<<: *DEFAULTS
invoice: valid

View file

@ -1,12 +1,13 @@
DEFAULTS: &DEFAULTS
created_at: <%= Date.parse '2010-07-05' %>
due_date: <%= Date.parse '2010-07-06' %>
invoice_type: DEB
currency: EUR
seller_name: John Doe
seller_iban: 1234
buyer: bestnames
buyer_name: Jane Doe
vat_prc: 0.2
vat_rate: 0.1
total: 16.50
valid:
<<: *DEFAULTS
@ -21,7 +22,7 @@ cancelled:
paid:
<<: *DEFAULTS
sum_cache: 1
total: 1
outstanding:
<<: *DEFAULTS

View file

@ -3,6 +3,10 @@ bestnames:
reg_no: 1234
code: bestnames
email: info@bestnames.test
street: Main Street
zip: 12345
city: New York
state: New York
country_code: US
accounting_customer_code: bestnames
language: en
@ -13,6 +17,36 @@ goodnames:
reg_no: 12345
code: goodnames
email: info@goodnames.test
country_code: US
country_code: DE
vat_no: DE123456789
accounting_customer_code: goodnames
language: en
not_in_use:
name: any
reg_no: any
code: any
email: any@example.com
country_code: US
accounting_customer_code: any
language: en
complete:
name: Complete Names
reg_no: 123456
code: completenames
email: completenames@example.com
country_code: US
accounting_customer_code: US0001
language: en
vat_no: US12345
vat_rate: 0.05
not_in_use:
name: any
reg_no: any
code: any
email: any@example.com
country_code: US
accounting_customer_code: any
language: en

View file

@ -3,7 +3,7 @@ require 'test_helper'
class AdminAreaDomainForceDeleteTest < ActionDispatch::IntegrationTest
include ActionMailer::TestHelper
def setup
setup do
login_as users(:admin)
@domain = domains(:shop)
ActionMailer::Base.deliveries.clear

View file

@ -1,7 +1,7 @@
require 'test_helper'
class AdminDomainsTestTest < ActionDispatch::IntegrationTest
def setup
setup do
login_as users(:admin)
end

View file

@ -0,0 +1,14 @@
require 'test_helper'
class AdminAreaNewMailTemplateTest < ActionDispatch::IntegrationTest
setup do
login_as users(:admin)
end
def test_new_mail_template_does_not_throw_template_error
visit admin_mail_templates_url
click_link_or_button 'New'
assert_text "HTML body"
assert_text "New mail template"
end
end

View file

@ -0,0 +1,30 @@
require 'test_helper'
class AdminAreaDeleteRegistrarTest < ActionDispatch::IntegrationTest
setup do
login_as users(:admin)
end
def test_can_be_deleted_when_not_in_use
visit admin_registrar_url(registrars(:not_in_use))
assert_difference 'Registrar.count', -1 do
click_link_or_button 'Delete'
end
assert_current_path admin_registrars_path
assert_text 'Registrar has been successfully deleted'
end
def test_cannot_be_deleted_when_in_use
registrar = registrars(:bestnames)
visit admin_registrar_url(registrar)
assert_no_difference 'Registrar.count' do
click_link_or_button 'Delete'
end
assert_current_path admin_registrar_path(registrar)
assert_text 'Cannot delete record because dependent domains exist'
end
end

View file

@ -0,0 +1,18 @@
require 'test_helper'
class AdminAreaRegistrarDetailsTest < ActionDispatch::IntegrationTest
include ActionView::Helpers::NumberHelper
setup do
login_as users(:admin)
@registrar = registrars(:complete)
end
def test_registrar_details
visit admin_registrar_path(@registrar)
assert_text 'Accounting customer code US0001'
assert_text 'VAT number US12345'
assert_text 'VAT rate 5.0%'
assert_text 'Language English'
end
end

View file

@ -1,17 +0,0 @@
require 'test_helper'
class EditRegistrarTest < ActionDispatch::IntegrationTest
def setup
login_as users(:admin)
@registrar = registrars(:bestnames)
end
def test_updates_registrar
visit admin_registrar_path(@registrar)
click_link_or_button 'Edit'
click_link_or_button 'Update registrar'
assert_current_path admin_registrar_path(@registrar)
assert_text 'Registrar has been successfully updated'
end
end

View file

@ -0,0 +1,69 @@
require 'test_helper'
class AdminAreaEditRegistrarTest < ActionDispatch::IntegrationTest
setup do
login_as users(:admin)
@registrar = registrars(:bestnames)
end
def test_attributes_update
visit admin_registrar_path(@registrar)
click_link_or_button 'Edit'
fill_in 'Name', with: 'new name'
fill_in 'Reg no', with: '4727673'
fill_in 'Contact phone', with: '2570937'
fill_in 'Website', with: 'http://new.example.com'
fill_in 'Contact e-mail', with: 'new@example.com'
fill_in 'Street', with: 'new street'
fill_in 'Zip', with: 'new zip'
fill_in 'City', with: 'new city'
fill_in 'State / Province', with: 'new state'
select 'Germany', from: 'Country'
fill_in 'VAT number', with: '2386449'
fill_in 'Accounting customer code', with: '866477'
fill_in 'Billing email', with: 'new-billing@example.com'
select 'Estonian', from: 'Language'
click_link_or_button 'Update registrar'
@registrar.reload
assert_equal 'new name', @registrar.name
assert_equal '4727673', @registrar.reg_no
assert_equal '2570937', @registrar.phone
assert_equal 'http://new.example.com', @registrar.website
assert_equal 'new@example.com', @registrar.email
assert_equal 'new street', @registrar.street
assert_equal 'new zip', @registrar.zip
assert_equal 'new city', @registrar.city
assert_equal 'new state', @registrar.state
assert_equal Country.new('DE'), @registrar.country
assert_equal '2386449', @registrar.vat_no
assert_equal '866477', @registrar.accounting_customer_code
assert_equal 'new-billing@example.com', @registrar.billing_email
assert_equal 'et', @registrar.language
assert_current_path admin_registrar_path(@registrar)
assert_text 'Registrar has been successfully updated'
end
def test_code_cannot_be_changed
visit admin_registrar_path(@registrar)
click_link_or_button 'Edit'
assert_no_field 'Code'
end
def test_fails_gracefully
visit admin_registrar_path(@registrar)
click_link_or_button 'Edit'
fill_in 'Name', with: 'Good Names'
click_link_or_button 'Update registrar'
assert_field 'Name', with: 'Good Names'
assert_text 'Name has already been taken'
end
end

View file

@ -1,23 +0,0 @@
require 'test_helper'
class NewRegistrarTest < ActionDispatch::IntegrationTest
def setup
login_as users(:admin)
end
def test_creates_registrar
visit admin_registrars_path
click_link_or_button 'New registrar'
fill_in 'registrar[name]', with: 'John Doe'
fill_in 'registrar[reg_no]', with: '1234567'
fill_in 'registrar[email]', with: 'test@test.com'
fill_in 'registrar[code]', with: 'test'
fill_in 'registrar[accounting_customer_code]', with: 'test'
click_link_or_button 'Create registrar'
assert_current_path admin_registrar_path(Registrar.last)
assert_text 'Registrar has been successfully created'
assert_text 'John Doe'
end
end

View file

@ -0,0 +1,50 @@
require 'test_helper'
class AdminAreaNewRegistrarTest < ActionDispatch::IntegrationTest
setup do
login_as users(:admin)
end
def test_new_registrar_creation_with_required_params
visit admin_registrars_url
click_link_or_button 'New registrar'
fill_in 'Name', with: 'Brand new names'
fill_in 'Reg no', with: '55555555'
fill_in 'Contact e-mail', with: 'test@example.com'
select 'United States', from: 'Country'
fill_in 'Accounting customer code', with: 'test'
fill_in 'Code', with: 'test'
assert_difference 'Registrar.count' do
click_link_or_button 'Create registrar'
end
assert_current_path admin_registrar_path(Registrar.last)
assert_text 'Registrar has been successfully created'
end
def test_fails_gracefully
visit admin_registrars_url
click_link_or_button 'New registrar'
fill_in 'Name', with: 'Best Names'
fill_in 'Reg no', with: '55555555'
fill_in 'Contact e-mail', with: 'test@example.com'
fill_in 'Accounting customer code', with: 'test'
fill_in 'Code', with: 'test'
assert_no_difference 'Registrar.count' do
click_link_or_button 'Create registrar'
end
assert_field 'Name', with: 'Best Names'
assert_text 'Name has already been taken'
end
def test_pre_populated_default_language
Setting.default_language = 'en'
visit admin_registrars_url
click_link_or_button 'New registrar'
assert_field 'Language', with: 'en'
end
end

View file

@ -1,19 +0,0 @@
require 'test_helper'
class ShowRegistrarTest < ActionDispatch::IntegrationTest
include ActionView::Helpers::NumberHelper
def setup
login_as users(:admin)
@registrar = registrars(:bestnames)
visit admin_registrar_path(@registrar)
end
def test_accounting_customer_code
assert_text 'bestnames'
end
def test_language
assert_text 'Language English'
end
end

View file

@ -1,7 +1,7 @@
require 'test_helper'
class APIDomainTransfersTest < ActionDispatch::IntegrationTest
def setup
setup do
@domain = domains(:shop)
@new_registrar = registrars(:goodnames)
Setting.transfer_wait_time = 0 # Auto-approval

View file

@ -1,7 +1,7 @@
require 'test_helper'
class EppDomainCreateTransferCodeTest < ActionDispatch::IntegrationTest
def setup
setup do
travel_to Time.zone.parse('2010-07-05')
end

View file

@ -0,0 +1,32 @@
require 'test_helper'
class EppDomainRenewTest < ActionDispatch::IntegrationTest
self.use_transactional_fixtures = false
setup do
travel_to Time.zone.parse('2010-07-05')
end
def test_domain_cannot_be_renewed_when_invalid
request_xml = <<-XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="https://epp.tld.ee/schema/epp-ee-1.0.xsd">
<command>
<renew>
<domain:renew xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd">
<domain:name>invalid.test</domain:name>
<domain:curExpDate>2010-07-05</domain:curExpDate>
<domain:period unit="m">1</domain:period>
</domain:renew>
</renew>
</command>
</epp>
XML
assert_no_changes -> { domains(:invalid).valid_to } do
post '/epp/command/renew', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
end
assert_equal '2304', Nokogiri::XML(response.body).at_css('result')[:code],
Nokogiri::XML(response.body).css('result').text
end
end

View file

@ -1,7 +1,7 @@
require 'test_helper'
class EppDomainTransferRequestTest < ActionDispatch::IntegrationTest
def setup
setup do
@domain = domains(:shop)
@new_registrar = registrars(:goodnames)
Setting.transfer_wait_time = 0

View file

@ -1,7 +1,7 @@
require 'test_helper'
class EppLoginSessionLimitTest < ActionDispatch::IntegrationTest
def setup
setup do
travel_to Time.zone.parse('2010-07-05')
EppSession.delete_all
end

View file

@ -1,7 +1,7 @@
require 'test_helper'
class RegistrantDomainsTest < ActionDispatch::IntegrationTest
def setup
setup do
login_as users(:registrant)
Setting.days_to_keep_business_registry_cache = 1

View file

@ -0,0 +1,25 @@
require 'test_helper'
class BalanceTopUpTest < ActionDispatch::IntegrationTest
setup do
login_as users(:api_bestnames)
end
def test_creates_new_invoice
Setting.registry_vat_prc = 0.1
visit registrar_invoices_url
click_link_or_button 'Add deposit'
fill_in 'Amount', with: '25.5'
assert_difference 'Invoice.count' do
click_link_or_button 'Add'
end
invoice = Invoice.last
assert_equal BigDecimal(10), invoice.vat_rate
assert_equal BigDecimal('28.05'), invoice.total
assert_text 'Please pay the following invoice'
end
end

View file

@ -1,7 +1,7 @@
require 'test_helper'
class RegistrarDomainTransfersTest < ActionDispatch::IntegrationTest
def setup
setup do
WebMock.reset!
login_as users(:api_goodnames)
end

Some files were not shown because too many files have changed in this diff Show more