diff --git a/app/controllers/admin/registrars_controller.rb b/app/controllers/admin/registrars_controller.rb index 8d020787b..82fa37be4 100644 --- a/app/controllers/admin/registrars_controller.rb +++ b/app/controllers/admin/registrars_controller.rb @@ -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 diff --git a/app/models/registrar.rb b/app/models/registrar.rb index 2aa9ea3e4..5fd0008b5 100644 --- a/app/models/registrar.rb +++ b/app/models/registrar.rb @@ -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,10 @@ 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 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 }, @@ -177,4 +150,29 @@ class Registrar < ActiveRecord::Base 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 end diff --git a/app/views/admin/bank_transactions/show.haml b/app/views/admin/bank_transactions/show.haml index 4133386e5..60515200a 100644 --- a/app/views/admin/bank_transactions/show.haml +++ b/app/views/admin/bank_transactions/show.haml @@ -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) diff --git a/app/views/admin/registrars/_billing.html.erb b/app/views/admin/registrars/_billing.html.erb new file mode 100644 index 000000000..f3960233e --- /dev/null +++ b/app/views/admin/registrars/_billing.html.erb @@ -0,0 +1,17 @@ +
+
+ <%= t '.header' %> +
+
+
+
<%= Registrar.human_attribute_name :vat_no %>
+
<%= registrar.vat_no %>
+ +
<%= Registrar.human_attribute_name :accounting_customer_code %>
+
<%= registrar.accounting_customer_code %>
+ +
<%= Registrar.human_attribute_name :billing_email %>
+
<%= registrar.billing_email %>
+
+
+
diff --git a/app/views/admin/registrars/_contacts.html.erb b/app/views/admin/registrars/_contacts.html.erb new file mode 100644 index 000000000..190e48458 --- /dev/null +++ b/app/views/admin/registrars/_contacts.html.erb @@ -0,0 +1,24 @@ +
+
+ <%= t '.header' %> +
+ +
+
+
<%= t(:country) %>
+
<%= @registrar.country %>
+ +
<%= t(:address) %>
+
<%= @registrar.address %>
+ +
<%= t(:contact_phone) %>
+
<%= @registrar.phone %>
+ +
<%= t(:contact_email) %>
+
<%= @registrar.email %>
+ +
<%= Registrar.human_attribute_name :billing_email %>
+
<%= @registrar.billing_email %>
+
+
+
diff --git a/app/views/admin/registrars/_details.html.erb b/app/views/admin/registrars/_details.html.erb new file mode 100644 index 000000000..c640075ba --- /dev/null +++ b/app/views/admin/registrars/_details.html.erb @@ -0,0 +1,27 @@ +
+
+ <%= t '.header' %> +
+ +
+
+
<%= Registrar.human_attribute_name :name %>
+
<%= registrar.name %>
+ +
<%= Registrar.human_attribute_name :reg_no %>
+
<%= registrar.reg_no %>
+ +
<%= Registrar.human_attribute_name :reference_no %>
+
<%= registrar.reference_no %>
+ +
<%= Registrar.human_attribute_name :code %>
+
<%= registrar.code %>
+ +
<%= Registrar.human_attribute_name :balance %>
+
<%= registrar.balance %>
+ +
<%= Registrar.human_attribute_name :website %>
+
<%= registrar.website %>
+
+
+
diff --git a/app/views/admin/registrars/_form.html.erb b/app/views/admin/registrars/_form.html.erb index 65a5351ad..71c4fb68f 100644 --- a/app/views/admin/registrars/_form.html.erb +++ b/app/views/admin/registrars/_form.html.erb @@ -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 %> +
@@ -133,7 +134,9 @@ <%= f.label :code %>
- <%= 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' %>
diff --git a/app/views/admin/registrars/show/_preferences.html.erb b/app/views/admin/registrars/_preferences.html.erb similarity index 100% rename from app/views/admin/registrars/show/_preferences.html.erb rename to app/views/admin/registrars/_preferences.html.erb diff --git a/app/views/admin/registrars/_users.html.erb b/app/views/admin/registrars/_users.html.erb new file mode 100644 index 000000000..f182e4615 --- /dev/null +++ b/app/views/admin/registrars/_users.html.erb @@ -0,0 +1,28 @@ +
+
+ <%= t '.header' %> +
+ + + + + + + + + + + <% registrar.api_users.each do |user| %> + + + + + <% end %> + +
<%= ApiUser.human_attribute_name :username %><%= ApiUser.human_attribute_name :active %>
<%= link_to(user, [:admin, user]) %><%= user.active %>
+ + +
diff --git a/app/views/admin/registrars/_white_ips.html.erb b/app/views/admin/registrars/_white_ips.html.erb new file mode 100644 index 000000000..c86c85eb9 --- /dev/null +++ b/app/views/admin/registrars/_white_ips.html.erb @@ -0,0 +1,38 @@ +
+
+ <%= t '.header' %> +
+ + + + + + + + + + + + <% registrar.white_ips.each do |white_ip| %> + + + + + + <% end %> + +
<%= WhiteIp.human_attribute_name :ipv4 %><%= WhiteIp.human_attribute_name :ipv6 %><%= WhiteIp.human_attribute_name :interfaces %>
+ <% if white_ip.ipv4.present? %> + <%= link_to(white_ip.ipv4, [:admin, registrar, white_ip]) %> + <% end %> + + <% if white_ip.ipv6.present? %> + <%= link_to(white_ip.ipv6, [:admin, registrar, white_ip]) %> + <% end %> + <%= white_ip.interfaces.join(', ').upcase %>
+ + +
diff --git a/app/views/admin/registrars/edit.html.erb b/app/views/admin/registrars/edit.html.erb index 71d6bd882..205ba6b28 100644 --- a/app/views/admin/registrars/edit.html.erb +++ b/app/views/admin/registrars/edit.html.erb @@ -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}" %> + + + + <%= render 'form' %> diff --git a/app/views/admin/registrars/index.html.erb b/app/views/admin/registrars/index.html.erb index 5533a6f07..a66816568 100644 --- a/app/views/admin/registrars/index.html.erb +++ b/app/views/admin/registrars/index.html.erb @@ -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) %> + +
@@ -12,10 +20,10 @@ <%= sort_link(@q, 'name') %> - <%= sort_link(@q, 'reg_no', t(:reg_no)) %> + <%= sort_link(@q, 'reg_no', Registrar.human_attribute_name(:reg_no)) %> - <%= t(:credit_balance) %> + <%= Registrar.human_attribute_name :balance %> <%= t(:test_registrar) %> diff --git a/app/views/admin/registrars/new.html.erb b/app/views/admin/registrars/new.html.erb index 70154d217..e813bdd57 100644 --- a/app/views/admin/registrars/new.html.erb +++ b/app/views/admin/registrars/new.html.erb @@ -1,2 +1,9 @@ -<%= render 'shared/title', name: t(:new_registrar) %> + + + + <%= render 'form' %> diff --git a/app/views/admin/registrars/show.html.erb b/app/views/admin/registrars/show.html.erb index a6f2240a9..65435ef77 100644 --- a/app/views/admin/registrars/show.html.erb +++ b/app/views/admin/registrars/show.html.erb @@ -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? %> - (test) - <% end %> -<% end %> -<%= render 'shared/title', name: @registrar.name %> -<% if @registrar.errors.any? %> - <% @registrar.errors.each do |attr, err| %> - <%= err %> -
- <% end %> -<% end %> -<% if @registrar.errors.any? %> -
-<% end %> + + + + +
-
-
-

- <%= t(:general) %> -

-
-
-
-
- <%= t(:name) %> -
-
- <%= @registrar.name %> -
-
- <%= t(:reg_no) %> -
-
- <%= @registrar.reg_no %> -
-
- <%= t(:vat_no) %> -
-
- <%= @registrar.vat_no %> -
-
- <%= t(:reference_no) %> -
-
- <%= @registrar.reference_no %> -
-
- <%= t(:id) %> -
-
- <%= @registrar.code %> -
-
- <%= t(:credit_balance) %> -
-
- <%= @registrar.balance %> -
-
- <%= Registrar.human_attribute_name :website %> -
-
- <%= @registrar.website %> -
-
- <%= Registrar.human_attribute_name :accounting_customer_code %> -
-
- <%= @registrar.accounting_customer_code %> -
-
-
-
+ <%= render 'details', registrar: @registrar %>
-
-
-

- <%= t(:contact) %> -

-
-
-
-
- <%= t(:country) %> -
-
- <%= @registrar.country %> -
-
- <%= t(:address) %> -
-
- <%= @registrar.address %> -
-
- <%= t(:contact_phone) %> -
-
- <%= @registrar.phone %> -
-
- <%= t(:contact_email) %> -
-
- <%= @registrar.email %> -
-
- <%= t(:billing_email) %> -
-
- <%= @registrar.billing_email %> -
-
-
-
- <%= render 'admin/registrars/show/preferences', registrar: registrar %> + <%= render 'contacts', registrar: @registrar %> + <%= render 'billing', registrar: @registrar %> + <%= render 'preferences', registrar: registrar %>
+
-
-
-
- <%= t('.api_users') %> -
-
- <%= link_to(t('.new_api_use_btn'), new_admin_registrar_api_user_path(@registrar), class: 'btn btn-default btn-xs') %> -
-
-
- - - - - - - - - <% @registrar.api_users.each do |x| %> - - - - - <% end %> - -
- <%= t(:username) %> - - <%= t('.active') %> -
- <%= link_to(x, [:admin, x]) %> - - <%= x.active %> -
-
-
+ <%= render 'users', registrar: @registrar %>
+
-
-
-
- <%= t(:white_ips) %> -
-
- <%= link_to(t(:create_new_white_ip), new_admin_registrar_white_ip_path(@registrar), class: 'btn btn-default btn-xs') %> -
-
-
- - - - - - - - - - <% @registrar.white_ips.each do |x| %> - - - - - - <% end %> - -
- <%= t(:ipv4) %> - - <%= t(:ipv6) %> - - <%= t(:interfaces) %> -
- <% if x.ipv4.present? %> - <%= link_to(x.ipv4, [:admin, @registrar, x]) %> - <% end %> - - <% if x.ipv6.present? %> - <%= link_to(x.ipv6, [:admin, @registrar, x]) %> - <% end %> - - <%= x.interfaces.join(', ').upcase %> -
-
-
+ <%= render 'white_ips', registrar: @registrar %>
diff --git a/app/views/admin/white_ips/new.haml b/app/views/admin/white_ips/new.haml index 99150a871..220599d2a 100644 --- a/app/views/admin/white_ips/new.haml +++ b/app/views/admin/white_ips/new.haml @@ -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' diff --git a/app/views/admin/white_ips/show.haml b/app/views/admin/white_ips/show.haml index 33688d9fe..2ec354aa4 100644 --- a/app/views/admin/white_ips/show.haml +++ b/app/views/admin/white_ips/show.haml @@ -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 diff --git a/app/views/registrant/registrars/index.haml b/app/views/registrant/registrars/index.haml index 0489bcf52..03bd5a02a 100644 --- a/app/views/registrant/registrars/index.haml +++ b/app/views/registrant/registrars/index.haml @@ -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 diff --git a/app/views/registrant/registrars/show.haml b/app/views/registrant/registrars/show.haml index e0da73ee3..678e387de 100644 --- a/app/views/registrant/registrars/show.haml +++ b/app/views/registrant/registrars/show.haml @@ -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) diff --git a/app/views/registrar/invoices/partials/_details.haml b/app/views/registrar/invoices/partials/_details.haml index 1375c76f8..69248b457 100644 --- a/app/views/registrar/invoices/partials/_details.haml +++ b/app/views/registrar/invoices/partials/_details.haml @@ -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 diff --git a/app/views/registrar/invoices/partials/_seller.haml b/app/views/registrar/invoices/partials/_seller.haml index 0008c2f13..30f27bcef 100644 --- a/app/views/registrar/invoices/partials/_seller.haml +++ b/app/views/registrar/invoices/partials/_seller.haml @@ -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) diff --git a/app/views/registrar/invoices/pdf.haml b/app/views/registrar/invoices/pdf.haml index a74254a2a..c3f5fba75 100644 --- a/app/views/registrar/invoices/pdf.haml +++ b/app/views/registrar/invoices/pdf.haml @@ -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 @@ -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 diff --git a/config/locales/admin/registrars.en.yml b/config/locales/admin/registrars.en.yml index 3d269f64b..9acfca542 100644 --- a/config/locales/admin/registrars.en.yml +++ b/config/locales/admin/registrars.en.yml @@ -2,23 +2,31 @@ 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 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 +38,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 diff --git a/config/locales/admin/white_ips.en.yml b/config/locales/admin/white_ips.en.yml new file mode 100644 index 000000000..b42db4cff --- /dev/null +++ b/config/locales/admin/white_ips.en.yml @@ -0,0 +1,5 @@ +en: + admin: + white_ips: + new: + header: New whitelisted IP diff --git a/config/locales/en.yml b/config/locales/en.yml index 6366faca0..1e65f7e29 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -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' @@ -584,7 +572,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 +636,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 +648,6 @@ en: not_valid_domain_verification_body: This could mean your verification has been expired or done already.

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' @@ -751,7 +735,6 @@ en: 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 +760,8 @@ en: delimiter: " " precision: 2 unit: € + + attributes: + vat_no: VAT number + ipv4: IPv4 + ipv6: IPv6 diff --git a/config/locales/registrars.en.yml b/config/locales/registrars.en.yml new file mode 100644 index 000000000..60cb9d5c5 --- /dev/null +++ b/config/locales/registrars.en.yml @@ -0,0 +1,8 @@ +en: + activerecord: + errors: + models: + registrar: + attributes: + code: + forbidden: is forbidden diff --git a/config/routes.rb b/config/routes.rb index 77f856c8f..9caeef4a2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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 diff --git a/db/migrate/20180309053424_add_registrars_unique_constraints.rb b/db/migrate/20180309053424_add_registrars_unique_constraints.rb new file mode 100644 index 000000000..fb3455896 --- /dev/null +++ b/db/migrate/20180309053424_add_registrars_unique_constraints.rb @@ -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 diff --git a/db/migrate/20180309053921_remove_registrars_indexes.rb b/db/migrate/20180309053921_remove_registrars_indexes.rb new file mode 100644 index 000000000..0613d9fc6 --- /dev/null +++ b/db/migrate/20180309053921_remove_registrars_indexes.rb @@ -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 diff --git a/db/migrate/20180309054510_add_registrars_not_null_constraints.rb b/db/migrate/20180309054510_add_registrars_not_null_constraints.rb new file mode 100644 index 000000000..33d464356 --- /dev/null +++ b/db/migrate/20180309054510_add_registrars_not_null_constraints.rb @@ -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 diff --git a/db/structure.sql b/db/structure.sql index a9257ffa3..e95d61ae5 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -2136,22 +2136,22 @@ 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, @@ -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,30 @@ 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_reg_no; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY registrars + ADD CONSTRAINT unique_reg_no UNIQUE (reg_no); + + -- -- Name: unique_session_id; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: -- @@ -3853,20 +3885,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: -- @@ -4679,3 +4697,9 @@ 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'); + diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake index f26ad252f..9c439f7a7 100644 --- a/lib/tasks/import.rake +++ b/lib/tasks/import.rake @@ -100,7 +100,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 diff --git a/spec/models/registrar_spec.rb b/spec/models/registrar_spec.rb deleted file mode 100644 index 4a8110d45..000000000 --- a/spec/models/registrar_spec.rb +++ /dev/null @@ -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 diff --git a/spec/requests/admin/registrars/update_spec.rb b/spec/requests/admin/registrars/update_spec.rb deleted file mode 100644 index 7bffb99d0..000000000 --- a/spec/requests/admin/registrars/update_spec.rb +++ /dev/null @@ -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 diff --git a/spec/routing/admin/registrars_routing_spec.rb b/spec/routing/admin/registrars_routing_spec.rb deleted file mode 100644 index 14ec765e9..000000000 --- a/spec/routing/admin/registrars_routing_spec.rb +++ /dev/null @@ -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 diff --git a/spec/views/admin/registrars/_form.html.erb_spec.rb b/spec/views/admin/registrars/_form.html.erb_spec.rb deleted file mode 100644 index 83b727a30..000000000 --- a/spec/views/admin/registrars/_form.html.erb_spec.rb +++ /dev/null @@ -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 diff --git a/spec/views/admin/registrars/show.haml_spec.rb b/spec/views/admin/registrars/show.haml_spec.rb deleted file mode 100644 index 4def10e8c..000000000 --- a/spec/views/admin/registrars/show.haml_spec.rb +++ /dev/null @@ -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 diff --git a/test/controllers/admin/registrars/update_test.rb b/test/controllers/admin/registrars/update_test.rb deleted file mode 100644 index 2c996ef44..000000000 --- a/test/controllers/admin/registrars/update_test.rb +++ /dev/null @@ -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 diff --git a/test/fixtures/accounts.yml b/test/fixtures/accounts.yml index ea51ff7eb..a7060c249 100644 --- a/test/fixtures/accounts.yml +++ b/test/fixtures/accounts.yml @@ -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 diff --git a/test/fixtures/registrars.yml b/test/fixtures/registrars.yml index 0026f323b..b0cc371a7 100644 --- a/test/fixtures/registrars.yml +++ b/test/fixtures/registrars.yml @@ -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 @@ -16,3 +20,12 @@ goodnames: country_code: US 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 diff --git a/test/integration/admin/registrars/delete_test.rb b/test/integration/admin/registrars/delete_test.rb new file mode 100644 index 000000000..34eb142bf --- /dev/null +++ b/test/integration/admin/registrars/delete_test.rb @@ -0,0 +1,30 @@ +require 'test_helper' + +class AdminAreaDeleteRegistrarTest < ActionDispatch::IntegrationTest + def setup + 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 diff --git a/test/integration/admin/registrars/edit_registrar_test.rb b/test/integration/admin/registrars/edit_registrar_test.rb deleted file mode 100644 index ada794032..000000000 --- a/test/integration/admin/registrars/edit_registrar_test.rb +++ /dev/null @@ -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 diff --git a/test/integration/admin/registrars/edit_test.rb b/test/integration/admin/registrars/edit_test.rb new file mode 100644 index 000000000..af420b179 --- /dev/null +++ b/test/integration/admin/registrars/edit_test.rb @@ -0,0 +1,69 @@ +require 'test_helper' + +class AdminAreaEditRegistrarTest < ActionDispatch::IntegrationTest + def setup + 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 diff --git a/test/integration/admin/registrars/new_registrar_test.rb b/test/integration/admin/registrars/new_registrar_test.rb deleted file mode 100644 index 33deea9e8..000000000 --- a/test/integration/admin/registrars/new_registrar_test.rb +++ /dev/null @@ -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 diff --git a/test/integration/admin/registrars/new_test.rb b/test/integration/admin/registrars/new_test.rb new file mode 100644 index 000000000..61a7a43be --- /dev/null +++ b/test/integration/admin/registrars/new_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' + +class AdminAreaNewRegistrarTest < ActionDispatch::IntegrationTest + def setup + 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' + 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 diff --git a/test/models/registrar/code_test.rb b/test/models/registrar/code_test.rb new file mode 100644 index 000000000..7b5188878 --- /dev/null +++ b/test/models/registrar/code_test.rb @@ -0,0 +1,29 @@ +require 'test_helper' + +class RegistrarCodeTest < ActiveSupport::TestCase + def setup + @registrar = registrars(:bestnames).dup + end + + def test_registrar_is_invalid_without_code + @registrar.code = '' + assert @registrar.invalid? + end + + def test_special_code_validation + @registrar.code = 'CID' + assert @registrar.invalid? + assert_includes @registrar.errors.full_messages, 'Code is forbidden' + end + + def test_cannot_be_changed_once_registrar_is_created + registrar = registrars(:bestnames) + registrar.update!(code: 'new-code') + refute_equal 'new-code', registrar.code + end + + def test_normalization + @registrar.code = 'with spaces:and:colon.' + assert_equal 'WITHSPACESANDCOLON.', @registrar.code + end +end diff --git a/test/models/registrar/delete_test.rb b/test/models/registrar/delete_test.rb new file mode 100644 index 000000000..2020c76dc --- /dev/null +++ b/test/models/registrar/delete_test.rb @@ -0,0 +1,37 @@ +require 'test_helper' + +class DeleteRegistrarTest < ActiveSupport::TestCase + def setup + @registrar = registrars(:not_in_use) + end + + def test_can_be_deleted_if_not_in_use + assert_difference 'Registrar.count', -1 do + @registrar.destroy + end + end + + def test_cannot_be_deleted_if_has_at_least_one_user + users(:api_bestnames).update!(registrar: @registrar) + + assert_no_difference 'Registrar.count' do + @registrar.destroy + end + end + + def test_cannot_be_deleted_if_has_at_least_one_contact + contacts(:john).update!(registrar: @registrar) + + assert_no_difference 'Registrar.count' do + @registrar.destroy + end + end + + def test_cannot_be_deleted_if_has_at_least_one_domain + domains(:shop).update!(registrar: @registrar) + + assert_no_difference 'Registrar.count' do + @registrar.destroy + end + end +end diff --git a/test/models/registrar_test.rb b/test/models/registrar_test.rb index 58a06b0ae..fda377d9b 100644 --- a/test/models/registrar_test.rb +++ b/test/models/registrar_test.rb @@ -9,21 +9,33 @@ class RegistrarTest < ActiveSupport::TestCase assert @registrar.valid? end - def test_rejects_absent_accounting_customer_code - @registrar.accounting_customer_code = nil - @registrar.validate + def test_invalid_without_name + @registrar.name = '' + assert @registrar.invalid? + end + + def test_invalid_without_reg_no + @registrar.reg_no = '' + assert @registrar.invalid? + end + + def test_invalid_without_email + @registrar.email = '' + assert @registrar.invalid? + end + + def test_invalid_without_accounting_customer_code + @registrar.accounting_customer_code = '' assert @registrar.invalid? end def test_requires_country_code - @registrar.country_code = nil - @registrar.validate + @registrar.country_code = '' assert @registrar.invalid? end - def test_requires_language - @registrar.language = nil - @registrar.validate + def test_invalid_without_language + @registrar.language = '' assert @registrar.invalid? end @@ -38,4 +50,13 @@ class RegistrarTest < ActiveSupport::TestCase registrar = Registrar.new(language: 'de') assert_equal 'de', registrar.language end + + def test_full_address + assert_equal 'Main Street, New York, New York, 12345', @registrar.address + end + + def test_reference_number_generation + @registrar.validate + refute_empty @registrar.reference_no + end end