<%= t(:white_ips) %>
diff --git a/app/views/registrant/registrars/show.haml b/app/views/registrant/registrars/show.haml
index e0da73ee3..6d4aa9e79 100644
--- a/app/views/registrant/registrars/show.haml
+++ b/app/views/registrant/registrars/show.haml
@@ -19,7 +19,7 @@
%dt= t(: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/_seller.haml b/app/views/registrar/invoices/partials/_seller.haml
index 0008c2f13..9c5387e16 100644
--- a/app/views/registrar/invoices/partials/_seller.haml
+++ b/app/views/registrar/invoices/partials/_seller.haml
@@ -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 1622613f5..6f92c4a8a 100644
--- a/app/views/registrar/invoices/pdf.haml
+++ b/app/views/registrar/invoices/pdf.haml
@@ -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..5d212f219 100644
--- a/config/locales/admin/registrars.en.yml
+++ b/config/locales/admin/registrars.en.yml
@@ -2,9 +2,16 @@ en:
admin:
registrars:
index:
+ header: Registrars
new_btn: New registrar
+ new:
+ header: New registrar
+
show:
+ edit_btn: Edit
+ delete_btn: Delete
+ delete_btn_confirm: Are you sure you want delete registrar?
new_api_use_btn: New API user
active: Active
api_users: API users
@@ -12,13 +19,20 @@ en:
preferences:
header: Preferences
+ 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
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 6feb4c353..f2d08e7f0 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -199,7 +199,6 @@ en:
alg: 'Algorithm'
public_key: 'Public key'
registrar:
- billing_email: 'Billing e-mail'
phone: 'Contact phone'
email: 'Contact e-mail'
state: 'State / Province'
@@ -315,13 +314,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'
@@ -652,7 +645,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'
@@ -782,4 +774,5 @@ en:
unit: €
attributes:
+ vat_no: VAT number
vat_rate: VAT rate
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/db/migrate/20180309053424_add_registrars_unique_constraints.rb b/db/migrate/20180309053424_add_registrars_unique_constraints.rb
new file mode 100644
index 000000000..1c2d3c1b8
--- /dev/null
+++ b/db/migrate/20180309053424_add_registrars_unique_constraints.rb
@@ -0,0 +1,19 @@
+class AddRegistrarsUniqueConstraints < ActiveRecord::Migration
+ def up
+ execute <<-SQL
+ ALTER TABLE registrars ADD CONSTRAINT unique_name UNIQUE (name);
+ ALTER TABLE registrars ADD CONSTRAINT unique_reg_no UNIQUE (reg_no);
+ 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_reg_no;
+ 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 fbbb4a7d0..7c78da73d 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -2136,8 +2136,8 @@ 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,
billing_address character varying,
created_at timestamp without time zone,
@@ -2145,14 +2145,14 @@ CREATE TABLE registrars (
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,
legacy_id integer,
@@ -3244,6 +3244,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:
--
@@ -3252,6 +3260,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:
--
@@ -3854,20 +3886,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:
--
@@ -4688,3 +4706,9 @@ INSERT INTO schema_migrations (version) VALUES ('20180306183540');
INSERT INTO schema_migrations (version) VALUES ('20180306183549');
+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 6c4be1e53..0d309b539 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 301d59bcb..000000000
--- a/spec/models/registrar_spec.rb
+++ /dev/null
@@ -1,117 +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',
- '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..22e561664
--- /dev/null
+++ b/test/integration/admin/registrars/delete_test.rb
@@ -0,0 +1,18 @@
+require 'test_helper'
+
+class AdminAreaDeleteRegistrarTest < ActionDispatch::IntegrationTest
+ def setup
+ login_as users(:admin)
+ end
+
+ def test_can_be_deleted_if_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
+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 057c34f62..12d5be633 100644
--- a/test/models/registrar_test.rb
+++ b/test/models/registrar_test.rb
@@ -9,9 +9,23 @@ class RegistrarTest < ActiveSupport::TestCase
assert @registrar.valid?
end
+ 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_rejects_absent_accounting_customer_code
@registrar.accounting_customer_code = nil
- @registrar.validate
assert @registrar.invalid?
end
@@ -20,9 +34,8 @@ class RegistrarTest < ActiveSupport::TestCase
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,65 +51,12 @@ class RegistrarTest < ActiveSupport::TestCase
assert_equal 'de', registrar.language
end
- def test_rejects_vat_no_when_local_vat_payer
- Registry.instance.stub(:legal_address_country, Country.new('US')) do
- @registrar.vat_no = 'US1'
- @registrar.validate
- assert @registrar.invalid?
- end
+ def test_full_address
+ assert_equal 'Main Street, New York, New York, 12345', @registrar.address
end
- def test_rejects_vat_rate_when_local_vat_payer
- Registry.instance.stub(:legal_address_country, Country.new('US')) do
- @registrar.vat_rate = 20
- @registrar.validate
- assert @registrar.invalid?
- end
- end
-
- def test_rejects_negative_vat_rate
- @registrar.vat_rate = -1
+ def test_reference_number_generation
@registrar.validate
- assert @registrar.invalid?
- end
-
- def test_rejects_vat_rate_greater_than_max
- @registrar.vat_rate = 100
- @registrar.validate
- assert @registrar.invalid?
- end
-
- def test_requires_vat_rate_when_foreign_vat_payer_without_number
- Registry.instance.stub(:legal_address_country, Country.new('GB')) do
- @registrar.vat_no = nil
- @registrar.validate
- assert @registrar.invalid?
- end
- end
-
- def test_rejects_vat_rate_when_foreign_vat_payer_with_number
- Registry.instance.stub(:legal_address_country, Country.new('GB')) do
- @registrar.vat_no = 'US1'
- @registrar.vat_rate = 1
- @registrar.validate
- assert @registrar.invalid?
- end
- end
-
- def test_serializes_and_deserializes_vat_rate
- valid_attributes = registrars(:bestnames).attributes.except('id').merge({ name: 'uniq1',
- reg_no: 'uniq1',
- code: 'uniq1',
- country_code: 'GB' })
- registrar = Registrar.new(valid_attributes)
- registrar.vat_rate = 55
- registrar.save!
- registrar.reload
- assert_equal 55, registrar.vat_rate
- end
-
- def test_treats_empty_vat_rate_as_absent
- @registrar.vat_rate = ''
- assert_nil @registrar.vat_rate
+ refute_empty @registrar.reference_no
end
end