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::SessionsController#mid_status
- Registrant::WhoisController#index - Registrant::WhoisController#index
- Registrar::AccountActivitiesController#index - Registrar::AccountActivitiesController#index
- Registrar::BaseController#check_ip
- Registrar::ContactsController#download_list - Registrar::ContactsController#download_list
- Registrar::ContactsController#index - Registrar::ContactsController#index
- Registrar::ContactsController#normalize_search_parameters - Registrar::ContactsController#normalize_search_parameters
@ -666,7 +665,6 @@ TooManyStatements:
- Registrant::SessionsController#mid - Registrant::SessionsController#mid
- Registrant::SessionsController#mid_status - Registrant::SessionsController#mid_status
- Registrar::AccountActivitiesController#index - Registrar::AccountActivitiesController#index
- Registrar::BaseController#check_ip
- Registrar::ContactsController#download_list - Registrar::ContactsController#download_list
- Registrar::ContactsController#index - Registrar::ContactsController#index
- Registrar::ContactsController#normalize_search_parameters - 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 19.03.2018
* EPP transfer and REPP bulk transfer reuses contact objects [#746](https://github.com/internetee/registry/issues/746) * 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) * 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) unicode_utils (~> 1.4)
crack (0.4.3) crack (0.4.3)
safe_yaml (~> 1.0.0) safe_yaml (~> 1.0.0)
crass (1.0.3)
daemons (1.2.4) daemons (1.2.4)
daemons-rails (1.2.1) daemons-rails (1.2.1)
daemons daemons
@ -247,7 +248,8 @@ GEM
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
libxml-ruby (3.0.0) libxml-ruby (3.0.0)
liquid (3.0.6) liquid (3.0.6)
loofah (2.0.3) loofah (2.2.2)
crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.6.6) mail (2.6.6)
mime-types (>= 1.16, < 4) mime-types (>= 1.16, < 4)

View file

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

View file

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

View file

@ -6,6 +6,7 @@
#= require jquery-ui/datepicker #= require jquery-ui/datepicker
#= require select2 #= require select2
#= require datepicker #= require datepicker
#= require spell_check
#= require shared/general #= require shared/general
#= require registrar/autocomplete #= require registrar/autocomplete
#= require registrar/application #= 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]) @invoice = Invoice.find_by(id: params[:invoice_id])
@bank_transaction = @bank_statement.bank_transactions.build( @bank_transaction = @bank_statement.bank_transactions.build(
description: @invoice.to_s, description: @invoice.to_s,
sum: @invoice.sum, sum: @invoice.total,
reference_no: @invoice.reference_no, reference_no: @invoice.reference_no,
paid_at: Time.zone.now.to_date, paid_at: Time.zone.now.to_date,
currency: 'EUR' currency: 'EUR'

View file

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

View file

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

View file

@ -3,7 +3,7 @@ class Registrar
protect_from_forgery except: :back protect_from_forgery except: :back
skip_authorization_check # actually anyone can pay, no problems at all 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 before_action :check_bank
# to handle existing model we should # to handle existing model we should

View file

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

View file

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

View file

@ -3,7 +3,7 @@ class Directo < ActiveRecord::Base
belongs_to :item, polymorphic: true belongs_to :item, polymorphic: true
def self.send_receipts 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 total = new_trans.count
counter = 0 counter = 0
Rails.logger.info("[DIRECTO] Will try to send #{total} invoices") Rails.logger.info("[DIRECTO] Will try to send #{total} invoices")
@ -15,7 +15,7 @@ class Directo < ActiveRecord::Base
group.each do |invoice| group.each do |invoice|
if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil? || 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") Rails.logger.info("[DIRECTO] Invoice #{invoice.number} has been skipped")
next next
end end
@ -29,12 +29,14 @@ class Directo < ActiveRecord::Base
"InvoiceDate" => invoice.created_at.strftime("%Y-%m-%dT%H:%M:%S"), "InvoiceDate" => invoice.created_at.strftime("%Y-%m-%dT%H:%M:%S"),
"PaymentTerm" => Setting.directo_receipt_payment_term, "PaymentTerm" => Setting.directo_receipt_payment_term,
"Currency" => invoice.currency, "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( xml.line(
"ProductID" => Setting.directo_receipt_product_name, "ProductID" => Setting.directo_receipt_product_name,
"Quantity" => 1, "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 "ProductName" => invoice.order
) )
} }

View file

@ -18,7 +18,7 @@ class Epp::Domain < Domain
after_validation :validate_contacts after_validation :validate_contacts
def validate_contacts def validate_contacts
return true if is_renewal || is_transfer return true if is_transfer
ok = true ok = true
active_admins = admin_domain_contacts.select { |x| !x.marked_for_destruction? } 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 attr_accessor :billing_email
validates :billing_email, email_format: { message: :invalid }, allow_blank: true validates :billing_email, email_format: { message: :invalid }, allow_blank: true
validates :invoice_type, :due_date, :currency, :seller_name, validates :due_date, :currency, :seller_name,
:seller_iban, :buyer_name, :invoice_items, :vat_prc, presence: true :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 def set_invoice_number
last_no = Invoice.order(number: :desc).where('number IS NOT NULL').limit(1).pluck(:number).first 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 false
end 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 class << self
def cancel_overdue_invoices def cancel_overdue_invoices
STDOUT << "#{Time.zone.now.utc} - Cancelling overdue invoices\n" unless Rails.env.test? STDOUT << "#{Time.zone.now.utc} - Cancelling overdue invoices\n" unless Rails.env.test?
@ -106,12 +104,12 @@ class Invoice < ActiveRecord::Base
def buyer_country def buyer_country
Country.new(buyer_country_code) Country.new(buyer_country_code)
end end
# order is used for directo/banklink description # order is used for directo/banklink description
def order def order
"Order nr. #{number}" "Order nr. #{number}"
end end
def pdf(html) def pdf(html)
kit = PDFKit.new(html) kit = PDFKit.new(html)
kit.to_pdf kit.to_pdf
@ -152,15 +150,31 @@ class Invoice < ActiveRecord::Base
invoice_items invoice_items
end end
def sum_without_vat def subtotal
(items.map(&:item_sum_without_vat).sum).round(2) invoice_items.map(&:item_sum_without_vat).reduce(:+)
end end
def vat def vat_amount
(sum_without_vat * vat_prc).round(2) return 0 unless vat_rate
subtotal * vat_rate / 100
end end
def sum def total
(sum_without_vat + vat).round(2) 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
end end

View file

@ -6,7 +6,7 @@ class Registrar < ActiveRecord::Base
has_many :api_users, dependent: :restrict_with_error has_many :api_users, dependent: :restrict_with_error
has_many :messages has_many :messages
has_many :invoices, foreign_key: 'buyer_id' has_many :invoices, foreign_key: 'buyer_id'
has_many :accounts has_many :accounts, dependent: :destroy
has_many :nameservers, through: :domains has_many :nameservers, through: :domains
has_many :whois_records has_many :whois_records
has_many :white_ips, dependent: :destroy has_many :white_ips, dependent: :destroy
@ -17,37 +17,19 @@ class Registrar < ActiveRecord::Base
validates :name, :reference_no, :code, uniqueness: true validates :name, :reference_no, :code, uniqueness: true
validates :accounting_customer_code, presence: true validates :accounting_customer_code, presence: true
validates :language, 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 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 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, validates :email, :billing_email,
email_format: { message: :invalid }, email_format: { message: :invalid },
@ -76,12 +58,10 @@ class Registrar < ActiveRecord::Base
# rubocop:disable Metrics/AbcSize # rubocop:disable Metrics/AbcSize
def issue_prepayment_invoice(amount, description = nil) def issue_prepayment_invoice(amount, description = nil)
invoices.create( invoices.create(
invoice_type: 'DEB',
due_date: (Time.zone.now.to_date + Setting.days_to_keep_invoices_active.days).end_of_day, due_date: (Time.zone.now.to_date + Setting.days_to_keep_invoices_active.days).end_of_day,
payment_term: 'prepayment', payment_term: 'prepayment',
description: description, description: description,
currency: 'EUR', currency: 'EUR',
vat_prc: Setting.registry_vat_prc,
seller_name: Setting.registry_juridical_name, seller_name: Setting.registry_juridical_name,
seller_reg_no: Setting.registry_reg_no, seller_reg_no: Setting.registry_reg_no,
seller_iban: Setting.registry_iban, seller_iban: Setting.registry_iban,
@ -97,7 +77,7 @@ class Registrar < ActiveRecord::Base
seller_url: Setting.registry_url, seller_url: Setting.registry_url,
seller_email: Setting.registry_email, seller_email: Setting.registry_email,
seller_contact_name: Setting.registry_invoice_contact, seller_contact_name: Setting.registry_invoice_contact,
buyer_id: id, buyer: self,
buyer_name: name, buyer_name: name,
buyer_reg_no: reg_no, buyer_reg_no: reg_no,
buyer_country_code: country_code, buyer_country_code: country_code,
@ -132,11 +112,6 @@ class Registrar < ActiveRecord::Base
cash_account.account_activities.create!(args) cash_account.account_activities.create!(args)
end end
def credit!(args)
args[:currency] = 'EUR'
cash_account.account_activities.create!(args)
end
def address def address
[street, city, state, zip].reject(&:blank?).compact.join(', ') [street, city, state, zip].reject(&:blank?).compact.join(', ')
end end
@ -172,9 +147,50 @@ class Registrar < ActiveRecord::Base
end end
end end
def effective_vat_rate
if home_vat_payer?
Registry.instance.vat_rate
else
vat_rate
end
end
private private
def set_defaults def set_defaults
self.language = Setting.default_language unless language self.language = Setting.default_language unless language
end 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 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) %dt= t(:currency)
%dd= @bank_transaction.currency %dd= @bank_transaction.currency
%dt= t(:reference_no) %dt= BankTransaction.human_attribute_name :reference_no
%dd= @bank_transaction.reference_no %dd= @bank_transaction.reference_no
%dt= t(:paid_at) %dt= t(:paid_at)

View file

@ -37,7 +37,7 @@
= f.email_field :bcc, class: 'form-control' = f.email_field :bcc, class: 'form-control'
.form-group .form-group
.col-md-12 .col-md-12
= f.label :body, t(:html_body) = f.label :body, t('admin.mail_templates.html_body')
= liquid_help = liquid_help
.col-md-12 .col-md-12
= f.text_area(:body, class: 'form-control', size: '15x15') = f.text_area(:body, class: 'form-control', size: '15x15')
@ -48,7 +48,7 @@
.col-md-12 .col-md-12
= f.text_area(:text_body, class: 'form-control', size: '15x15') = f.text_area(:text_body, class: 'form-control', size: '15x15')
%hr %hr
.row .row
.col-md-12.text-right .col-md-12.text-right
= button_tag(t(:save), class: 'btn btn-primary') = 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 = 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| %> <%= 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="row">
<div class="col-md-8"> <div class="col-md-8">
<div class="panel panel-default"> <div class="panel panel-default">
@ -133,7 +134,9 @@
<%= f.label :code %> <%= f.label :code %>
</div> </div>
<div class="col-md-7"> <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>
</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 %> <ol class="breadcrumb">
<%= link_to(t(:back_to_registrar), [:admin, @registrar], class: 'btn btn-default') %> <li><%= link_to t('admin.registrars.index.header'), admin_registrars_path %></li>
<% end %> <li><%= link_to @registrar.name, admin_registrar_path(@registrar) %></li>
<%= render 'shared/title', name: "#{t(:edit)}: #{@registrar.name}" %> </ol>
<div class="page-header">
<h1><%= t '.header' %></h1>
</div>
<%= render 'form' %> <%= render 'form' %>

View file

@ -17,6 +17,19 @@
</div> </div>
</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="form-group">
<div class="col-md-4 control-label"> <div class="col-md-4 control-label">
<%= f.label :accounting_customer_code %> <%= f.label :accounting_customer_code %>

View file

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

View file

@ -1,218 +1,50 @@
<% registrar = RegistrarPresenter.new(registrar: @registrar, view: self) %> <% registrar = RegistrarPresenter.new(registrar: @registrar, view: self) %>
<% content_for :actions do %>
<%= link_to(t(:edit), edit_admin_registrar_path(@registrar), class: 'btn btn-primary') %> <ol class="breadcrumb">
<%= link_to(t(:delete), admin_registrar_path(@registrar), method: :delete, data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger') %> <li><%= link_to t('admin.registrars.index.header'), admin_registrars_path %></li>
<% end %> </ol>
<% content_for :page_name do %>
<%= @registrar.name %> <div class="page-header">
<% if @registrar.test_registrar? %> <div class="row">
<span style="color: #c9302c;">(test)</span> <div class="col-md-6">
<% end %> <h1>
<% end %> <%= @registrar.name %>
<%= render 'shared/title', name: @registrar.name %> <% if @registrar.test_registrar? %>
<% if @registrar.errors.any? %> <span class="text-danger"> (test)</span>
<% @registrar.errors.each do |attr, err| %> <% end %>
<%= err %> </h1>
<br/> </div>
<% end %>
<% end %> <div class="col-md-6 text-right">
<% if @registrar.errors.any? %> <%= link_to t('.edit_btn'), edit_admin_registrar_path(@registrar),
<hr/> class: 'btn btn-primary' %>
<% end %> <%= 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="row">
<div class="col-md-6"> <div class="col-md-6">
<div class="panel panel-default"> <%= render 'details', registrar: @registrar %>
<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>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="panel panel-default"> <%= render 'contacts', registrar: @registrar %>
<div class="panel-heading"> <%= render 'billing', registrar: @registrar %>
<h3 class="panel-title"> <%= render 'preferences', registrar: registrar %>
<%= 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 %>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="panel panel-default" id="epp-users"> <%= render 'users', registrar: @registrar %>
<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>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="panel panel-default" id="epp-users"> <%= render 'white_ips', registrar: @registrar %>
<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>
</div> </div>
</div> </div>

View file

@ -1,5 +1,5 @@
- content_for :actions do - content_for :actions do
= link_to(t(:back_to_registrar), admin_registrar_path(@registrar), class: 'btn btn-default') = 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' = render 'form'

View file

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

View file

@ -10,7 +10,7 @@
%th{class: 'col-xs-6'} %th{class: 'col-xs-6'}
= sort_link(@q, 'name') = sort_link(@q, 'name')
%th{class: 'col-xs-6'} %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 %tbody
- @registrars.each do |x| - @registrars.each do |x|
%tr %tr

View file

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

View file

@ -33,11 +33,11 @@
.col-md-3 .col-md-3
.form-group .form-group
= f.label t(:minimum_total) = 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 .col-md-3
.form-group .form-group
= f.label t(:maximum_total) = 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;'} .col-md-3{style: 'padding-top: 25px;'}
%button.btn.btn-default %button.btn.btn-default
&nbsp; &nbsp;
@ -67,7 +67,7 @@
%td{class: 'text-danger'}= t(:unpaid) %td{class: 'text-danger'}= t(:unpaid)
%td= l(x.due_date, format: :date_long) %td= l(x.due_date, format: :date_long)
%td= currency(x.sum) %td= currency(x.total)
.row .row
.col-md-12 .col-md-12
= paginate @invoices = paginate @invoices

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -43,6 +43,7 @@ Rails.application.configure do
config.log_level = :debug config.log_level = :debug
config.active_job.queue_adapter = :test config.active_job.queue_adapter = :test
config.logger = ActiveSupport::Logger.new(nil) config.logger = ActiveSupport::Logger.new(nil)
config.active_support.test_order = :random # :random is the default in Rails 5
end end
# In this mode, any jobs you queue will be run in the same thread, synchronously # 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: admin:
registrars: registrars:
index: index:
header: Registrars
new_btn: New registrar new_btn: New registrar
show: new:
new_api_use_btn: New API user header: New registrar
active: Active
api_users: API users
preferences: show:
header: Preferences 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: create:
created: Registrar has been successfully created created: Registrar has been successfully created
not_created: Unable to create registrar
update: update:
updated: Registrar has been successfully updated updated: Registrar has been successfully updated
not_updated: Unable to update registrar
destroy:
deleted: Registrar has been successfully deleted
form: form:
misc: Miscellaneous misc: Miscellaneous
@ -30,3 +44,20 @@ en:
preferences: preferences:
header: 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' alg: 'Algorithm'
public_key: 'Public key' public_key: 'Public key'
registrar: registrar:
billing_email: 'Billing e-mail'
phone: 'Contact phone' phone: 'Contact phone'
email: 'Contact e-mail' email: 'Contact e-mail'
state: 'State / Province' state: 'State / Province'
deposit: deposit:
amount: 'Amount' amount: 'Amount'
white_ip:
ipv4: 'IPv4'
ipv6: 'IPv6'
errors: errors:
messages: messages:
@ -302,7 +298,6 @@ en:
reg_no: 'Reg. no' reg_no: 'Reg. no'
status: 'Status' status: 'Status'
contact: 'Contact' contact: 'Contact'
credit_balance: 'Credit balance'
starting_balance: 'Starting balance' starting_balance: 'Starting balance'
destroyed: 'Destroyed' destroyed: 'Destroyed'
@ -313,13 +308,7 @@ en:
edit_statuses: 'Edit statuses' edit_statuses: 'Edit statuses'
history: 'History' history: 'History'
new_registrar: 'New registrar'
registrar_details: 'Registrar details'
vat_no: 'VAT no'
edit_registrar: 'Edit registrar'
back_to_registrar: 'Back to registrar' back_to_registrar: 'Back to registrar'
registrar_deleted: 'Registrar deleted'
failed_to_delete_registrar: 'Failed to delete registrar'
users: 'Users' users: 'Users'
user_details: 'User details' user_details: 'User details'
@ -393,7 +382,6 @@ en:
choose: 'Choose...' choose: 'Choose...'
created_before: 'Created before' created_before: 'Created before'
created_after: 'Created after' created_after: 'Created after'
billing_email: 'Billing e-mail'
contact_phone: 'Contact phone' contact_phone: 'Contact phone'
contact_email: 'Contact e-mail' contact_email: 'Contact e-mail'
address_help: 'Street name, house no - apartment no, city, county, country, zip' address_help: 'Street name, house no - apartment no, city, county, country, zip'
@ -550,7 +538,6 @@ en:
invoice_number: Invoice no. invoice_number: Invoice no.
seller: 'Seller' seller: 'Seller'
prepayment: 'Prepayment' prepayment: 'Prepayment'
vat: 'VAT (%{vat_prc}%)'
unpaid: 'Unpaid' unpaid: 'Unpaid'
your_current_account_balance_is: 'Your current account balance is %{balance} %{currency}' your_current_account_balance_is: 'Your current account balance is %{balance} %{currency}'
billing: 'Billing' billing: 'Billing'
@ -568,7 +555,6 @@ en:
unit: 'Unit' unit: 'Unit'
price: 'Price' price: 'Price'
total: 'Total' total: 'Total'
total_without_vat: 'Total without VAT'
paid_at: 'Paid at' paid_at: 'Paid at'
invoice: 'Invoice' invoice: 'Invoice'
bank_statements: 'Bank statements' bank_statements: 'Bank statements'
@ -584,7 +570,6 @@ en:
queried_at: 'Queried at' queried_at: 'Queried at'
import_file_path: 'Import file path' import_file_path: 'Import file path'
bank_code: 'Bank code' bank_code: 'Bank code'
reference_no: 'Reference no'
currency: 'Currency' currency: 'Currency'
buyer_name: 'Buyer name' buyer_name: 'Buyer name'
buyer_iban: 'Buyer IBAN' buyer_iban: 'Buyer IBAN'
@ -649,7 +634,6 @@ en:
due_date_until: 'Due date until' due_date_until: 'Due date until'
minimum_total: 'Minimum total' minimum_total: 'Minimum total'
maximum_total: 'Maximum total' maximum_total: 'Maximum total'
forbidden_code: 'is forbidden to use'
unimplemented_object_service: 'Unimplemented object service' 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' 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' 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. 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' upload_crt: 'Upload CRT'
crt_or_csr_must_be_present: 'CRT or CSR must be present' 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' ipv4_or_ipv6_must_be_present: 'IPv4 or IPv6 must be present'
white_ip: 'White IP' white_ip: 'White IP'
edit_white_ip: 'Edit white IP' edit_white_ip: 'Edit white IP'
@ -747,11 +729,9 @@ en:
is_registrant: 'Is registrant' is_registrant: 'Is registrant'
force_delete_set_on_domain: 'Force delete set on domain %{domain_name}' force_delete_set_on_domain: 'Force delete set on domain %{domain_name}'
mail_templates: Mail Templates mail_templates: Mail Templates
new_mail_template: New mail template
failure: "It was not saved" failure: "It was not saved"
contact_is_not_valid: 'Contact %{value} is not valid, please fix the invalid contact' contact_is_not_valid: 'Contact %{value} is not valid, please fix the invalid contact'
welcome_to_eis_registrar_portal: 'Welcome to EIS Registrar portal' welcome_to_eis_registrar_portal: 'Welcome to EIS Registrar portal'
interfaces: 'Interfaces'
next: 'Next' next: 'Next'
previous: 'Previous' previous: 'Previous'
personal_domain_verification_url: 'Personal domain verification url' personal_domain_verification_url: 'Personal domain verification url'
@ -777,3 +757,9 @@ en:
delimiter: " " delimiter: " "
precision: 2 precision: 2
unit: 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' get 'pay/go/:bank' => 'payments#pay', as: 'payment_with'
end end
# REGISTRANT ROUTES
namespace :registrant do namespace :registrant do
root 'domains#index' root 'domains#index'
@ -111,17 +110,6 @@ Rails.application.routes.draw do
end end
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_update_confirms
resources :domain_delete_confirms resources :domain_delete_confirms
@ -150,8 +138,6 @@ Rails.application.routes.draw do
end end
resources :registrars do resources :registrars do
resources :api_users
resources :white_ips
collection do collection do
get :search get :search
end 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, id integer NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_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, due_date timestamp without time zone NOT NULL,
payment_term character varying, payment_term character varying,
currency character varying NOT NULL, currency character varying NOT NULL,
description character varying, description character varying,
reference_no character varying, reference_no character varying,
vat_prc numeric(10,2) NOT NULL, vat_rate numeric(4,3),
paid_at timestamp without time zone, paid_at timestamp without time zone,
seller_id integer, seller_id integer,
seller_name character varying NOT NULL, seller_name character varying NOT NULL,
@ -1037,8 +1036,9 @@ CREATE TABLE invoices (
updator_str character varying, updator_str character varying,
number integer, number integer,
cancelled_at timestamp without time zone, cancelled_at timestamp without time zone,
sum_cache numeric(10,2), total numeric(10,2) NOT NULL,
in_directo boolean DEFAULT false 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 ( CREATE TABLE registrars (
id integer NOT NULL, id integer NOT NULL,
name character varying, name character varying NOT NULL,
reg_no character varying, reg_no character varying NOT NULL,
vat_no character varying, vat_no character varying,
created_at timestamp without time zone, created_at timestamp without time zone,
updated_at timestamp without time zone, updated_at timestamp without time zone,
creator_str character varying, creator_str character varying,
updator_str character varying, updator_str character varying,
phone character varying, phone character varying,
email character varying, email character varying NOT NULL,
billing_email character varying, billing_email character varying,
country_code character varying, country_code character varying NOT NULL,
state character varying, state character varying,
city character varying, city character varying,
street character varying, street character varying,
zip character varying, zip character varying,
code character varying, code character varying NOT NULL,
website character varying, website character varying,
accounting_customer_code character varying NOT NULL, accounting_customer_code character varying NOT NULL,
vat boolean,
legacy_id integer, legacy_id integer,
reference_no character varying, reference_no character varying,
test_registrar boolean DEFAULT false, 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); 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: -- 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); 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: -- 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); 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: -- 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 ('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 ('20180306180401');
INSERT INTO schema_migrations (version) VALUES ('20180306181538'); 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 ('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,-378 -124,-378 "/>
<polyline fill="none" stroke="black" points="-300,-354 -124,-354 "/> <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="-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> <text text-anchor="start" x="-292" y="-308.8" font-family="Times,serif" font-size="14.00">role_base_root_url</text>
</g> </g>
<!-- Registrar::PollsController --> <!-- 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="-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="-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="-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="-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> <text text-anchor="start" x="1600.5" y="-2309.3" font-family="Times,serif" font-size="14.00">reference_no :string</text>
</g> </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="-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="-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="-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="-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="-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="-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="-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="-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="-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="-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> <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="-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="-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="-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> </g>
<!-- Registrar&#45;&gt;Invoice --> <!-- Registrar&#45;&gt;Invoice -->
<g id="edge64" class="edge"><title>Registrar&#45;&gt;Invoice</title> <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), zip: x.postalcode.try(:strip),
url: x.url.try(:strip), url: x.url.try(:strip),
accounting_customer_code: x.directo_handle.try(:strip), accounting_customer_code: x.directo_handle.try(:strip),
vat: x.vat,
legacy_id: x.id, legacy_id: x.id,
creator_str: user, creator_str: user,
updator_str: user, updator_str: user,
@ -100,7 +99,7 @@ namespace :import do
puts "-----> Generating reference numbers" puts "-----> Generating reference numbers"
Registrar.all.each do |x| Registrar.all.each do |x|
x.generate_iso_11649_reference_no x.send(:generate_iso_11649_reference_no)
x.save(validate: false) x.save(validate: false)
end end

View file

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

View file

@ -13,10 +13,8 @@ describe Invoice do
"Currency is missing", "Currency is missing",
"Due date is missing", "Due date is missing",
"Invoice items is missing", "Invoice items is missing",
"Invoice type is missing",
"Seller iban is missing", "Seller iban is missing",
"Seller name is missing", "Seller name is missing",
"Vat prc is missing"
]) ])
end end
@ -52,20 +50,6 @@ describe Invoice do
@invoice.seller_address.should == 'Paldiski mnt. 123, Tallinn' @invoice.seller_address.should == 'Paldiski mnt. 123, Tallinn'
end 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 it 'should cancel overdue invoices' do
create(:invoice, created_at: Time.zone.now - 35.days, due_date: Time.zone.now - 30.days) create(:invoice, created_at: Time.zone.now - 35.days, due_date: Time.zone.now - 30.days)
Invoice.cancel_overdue_invoices 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 balance: 100
currency: EUR currency: EUR
registrar: bestnames registrar: bestnames
not_in_use_cash:
account_type: cash
balance: 0
currency: EUR
registrar: not_in_use

View file

@ -1,7 +1,31 @@
cash: create_one_month:
duration: 1 year duration: 1 month
price_cents: 500 price_cents: 100
operation_category: create operation_category: create
valid_from: 2010-07-05 valid_from: 2010-07-05
valid_to: 2010-07-05 valid_to: 2010-07-05
zone: test 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: invalid:
name: invalid.test name: invalid.test
transfer_code: any transfer_code: 1438d6
valid_to: 2010-07-05 valid_to: <%= Time.zone.parse('2010-07-05').utc.to_s(:db) %>
registrar: bestnames registrar: bestnames
registrant: invalid registrant: invalid

View file

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

View file

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

View file

@ -3,6 +3,10 @@ bestnames:
reg_no: 1234 reg_no: 1234
code: bestnames code: bestnames
email: info@bestnames.test email: info@bestnames.test
street: Main Street
zip: 12345
city: New York
state: New York
country_code: US country_code: US
accounting_customer_code: bestnames accounting_customer_code: bestnames
language: en language: en
@ -13,6 +17,36 @@ goodnames:
reg_no: 12345 reg_no: 12345
code: goodnames code: goodnames
email: info@goodnames.test email: info@goodnames.test
country_code: US country_code: DE
vat_no: DE123456789
accounting_customer_code: goodnames accounting_customer_code: goodnames
language: en 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 class AdminAreaDomainForceDeleteTest < ActionDispatch::IntegrationTest
include ActionMailer::TestHelper include ActionMailer::TestHelper
def setup setup do
login_as users(:admin) login_as users(:admin)
@domain = domains(:shop) @domain = domains(:shop)
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear

View file

@ -1,7 +1,7 @@
require 'test_helper' require 'test_helper'
class AdminDomainsTestTest < ActionDispatch::IntegrationTest class AdminDomainsTestTest < ActionDispatch::IntegrationTest
def setup setup do
login_as users(:admin) login_as users(:admin)
end 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' require 'test_helper'
class APIDomainTransfersTest < ActionDispatch::IntegrationTest class APIDomainTransfersTest < ActionDispatch::IntegrationTest
def setup setup do
@domain = domains(:shop) @domain = domains(:shop)
@new_registrar = registrars(:goodnames) @new_registrar = registrars(:goodnames)
Setting.transfer_wait_time = 0 # Auto-approval Setting.transfer_wait_time = 0 # Auto-approval

View file

@ -1,7 +1,7 @@
require 'test_helper' require 'test_helper'
class EppDomainCreateTransferCodeTest < ActionDispatch::IntegrationTest class EppDomainCreateTransferCodeTest < ActionDispatch::IntegrationTest
def setup setup do
travel_to Time.zone.parse('2010-07-05') travel_to Time.zone.parse('2010-07-05')
end 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' require 'test_helper'
class EppDomainTransferRequestTest < ActionDispatch::IntegrationTest class EppDomainTransferRequestTest < ActionDispatch::IntegrationTest
def setup setup do
@domain = domains(:shop) @domain = domains(:shop)
@new_registrar = registrars(:goodnames) @new_registrar = registrars(:goodnames)
Setting.transfer_wait_time = 0 Setting.transfer_wait_time = 0

View file

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

View file

@ -1,7 +1,7 @@
require 'test_helper' require 'test_helper'
class RegistrantDomainsTest < ActionDispatch::IntegrationTest class RegistrantDomainsTest < ActionDispatch::IntegrationTest
def setup setup do
login_as users(:registrant) login_as users(:registrant)
Setting.days_to_keep_business_registry_cache = 1 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' require 'test_helper'
class RegistrarDomainTransfersTest < ActionDispatch::IntegrationTest class RegistrarDomainTransfersTest < ActionDispatch::IntegrationTest
def setup setup do
WebMock.reset! WebMock.reset!
login_as users(:api_goodnames) login_as users(:api_goodnames)
end end

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