Merge pull request #1692 from internetee/1690-registrant-portal-returns-domains-with-no-access

Registrant: Query representable and other related contacts conditionally
This commit is contained in:
Timo Võhmar 2020-09-28 13:52:13 +03:00 committed by GitHub
commit a561394e00
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 40 additions and 11 deletions

View file

@ -91,7 +91,7 @@ module Api
private
def current_user_contacts
current_registrant_user.contacts
current_registrant_user.contacts(representable: false)
rescue CompanyRegister::NotAvailableError
current_registrant_user.direct_contacts
end

View file

@ -210,10 +210,13 @@ class Contact < ApplicationRecord
)
end
def registrant_user_contacts(registrant_user)
registrant_user_direct_contacts(registrant_user)
def registrant_user_contacts(registrant_user, representable: true)
represented_contacts = registrant_user_direct_contacts(registrant_user)
.or(registrant_user_company_contacts(registrant_user))
.or(registrant_user_indirect_contacts(registrant_user))
return represented_contacts if representable
represented_contacts.or(registrant_user_indirect_contacts(registrant_user))
end
def registrant_user_direct_contacts(registrant_user)

View file

@ -22,8 +22,8 @@ class RegistrantUser < User
citizen_country_code: country.alpha3)
end
def contacts
Contact.registrant_user_contacts(self)
def contacts(representable: true)
Contact.registrant_user_contacts(self, representable: representable)
end
def direct_contacts

View file

@ -78,6 +78,18 @@ identical_to_william:
auth_info: 5ab865
uuid: c0a191d5-3793-4f0b-8f85-491612d0293e
registrar_ltd:
name: Registrar Ltd
email: registrar@inbox.test
phone: '+555.555'
ident: 1234567890
ident_type: org
registrar: goodnames
ident_country_code: US
code: registrarltd-001
auth_info: e2c441
uuid: 28b65455-6f1a-49fd-961c-0758886dbd76
invalid:
name: any
code: invalid

View file

@ -12,7 +12,7 @@ class RegistrantApiContactsTest < ApplicationIntegrationTest
def test_root_accepts_limit_and_offset_parameters
contacts(:william).update!(ident: '1234', ident_type: 'priv', ident_country_code: 'US')
assert_equal 4, @user.contacts.size
assert_equal 4, @user.contacts(representable: false).size
get '/api/v1/registrant/contacts', params: { 'limit' => 1, 'offset' => 0 },
headers: @auth_headers
@ -22,7 +22,7 @@ class RegistrantApiContactsTest < ApplicationIntegrationTest
get '/api/v1/registrant/contacts', headers: @auth_headers
response_json = JSON.parse(response.body, symbolize_names: true)
assert_equal(@user.contacts.size, response_json.count)
assert_equal(@user.contacts(representable: false).size, response_json.count)
end
def test_get_contact_details_by_uuid

View file

@ -35,7 +35,7 @@ class RegistrantApiV1ContactListTest < ActionDispatch::IntegrationTest
get api_v1_registrant_contacts_path, as: :json, headers: { 'HTTP_AUTHORIZATION' => auth_token }
response_json = JSON.parse(response.body, symbolize_names: true)
assert_equal @user.contacts.count, response_json.size
assert_equal @user.contacts(representable: false).count, response_json.size
assert_includes response_json.map{ |hash| hash[:code] }, @contact.code
end

View file

@ -28,6 +28,20 @@ class RegistrantAreaDomainListTest < ApplicationSystemTestCase
assert_no_text 'metro.test'
end
def test_only_shows_direct_relation_and_or_company_domains
# case https://github.com/internetee/registry/issues/1690
tech_contact = contacts(:registrar_ltd)
# All domains share the same tech contact object
Domain.all.each do |domain|
DomainContact.create(domain: domain, contact: tech_contact, type: TechDomainContact)
end
visit registrant_domains_url
assert_no_text 'Company register is unavailable.'
assert_no_text 'metro.test'
end
def test_notification_when_company_register_is_unavailable
CompanyRegister::Client.stub(:new, CompanyRegisterClientStub.new) do
visit registrant_domains_url