Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

business registry contacts - endpoints for send status of contacts and receive confirmation #2309

Merged
merged 2 commits into from
Mar 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
/config/application.yml
/config/environments/development.rb
/config/deploy.rb
/config/master.key
/.idea

# Do not commit one. Instead, download the latest from https://github.com/internetee/style-guide.
Expand Down
2 changes: 1 addition & 1 deletion .ruby-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.1.1
3.0.3
11 changes: 11 additions & 0 deletions app/controllers/api/v1/registrant/contacts_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,17 @@ def show
end
end

def do_need_update_contact
result = current_registrant_user.do_need_update_contact?
render json: { update_contacts: result[:result], counter: result[:counter] }
end

def update_company_contacts
companies = current_registrant_user.update_company_contacts

render json: { message: 'get it', companies: companies }
end

def update
logger.debug 'Received update request'
logger.debug params
Expand Down
25 changes: 18 additions & 7 deletions app/models/registrant_user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,27 @@ def country
def companies(company_register = CompanyRegister::Client.new)
return [] if ident.include?('-')

companies = company_register.representation_rights(citizen_personal_code: ident,
citizen_country_code: country.alpha3)

companies = update_contacts_before_receive(companies)
companies
company_register.representation_rights(citizen_personal_code: ident,
citizen_country_code: country.alpha3)
rescue CompanyRegister::NotAvailableError
return []
[]
end

def do_need_update_contact?
return { result: false, counter: 0 } if companies.blank?

counter = 0
companies.each do |company|
counter += Contact.where(ident: company.registration_number, ident_country_code: 'EE')&.
reject { |contact| contact.name == company.company_name }.size
end

return { result: true, counter: counter } if counter.positive?

{ result: false, counter: 0 }
end

def update_contacts_before_receive(companies)
def update_company_contacts
return [] if companies.blank?

companies.each do |company|
Expand Down
5 changes: 4 additions & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,10 @@
resources :domains, only: %i[index show], param: :uuid do
resource :registry_lock, only: %i[create destroy]
end
resources :contacts, only: %i[index show update], param: :uuid
resources :contacts, only: %i[index show update], param: :uuid do
get 'do_need_update_contact', to: 'contacts#do_need_update_contact', as: :do_need_update_contact
post 'update_company_contacts', to: 'contacts#update_company_contacts', as: :update_company_contacts
end
resources :companies, only: %i[index]
end

Expand Down
160 changes: 144 additions & 16 deletions db/structure.sql
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,20 @@ CREATE EXTENSION IF NOT EXISTS hstore WITH SCHEMA public;
COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs';


--
-- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: -
--

CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA public;


--
-- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner: -
--

COMMENT ON EXTENSION pg_stat_statements IS 'track execution statistics of all SQL statements executed';


--
-- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: -
--
Expand Down Expand Up @@ -202,6 +216,8 @@ CREATE FUNCTION public.generate_zonefile(i_origin character varying) RETURNS tex

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: account_activities; Type: TABLE; Schema: public; Owner: -
--
Expand Down Expand Up @@ -809,7 +825,9 @@ CREATE TABLE public.dnskeys (
creator_str character varying,
updator_str character varying,
legacy_domain_id integer,
updated_at timestamp without time zone
updated_at timestamp without time zone,
validation_datetime timestamp without time zone,
failed_validation_reason character varying
);


Expand Down Expand Up @@ -936,15 +954,15 @@ CREATE TABLE public.domains (
pending_json jsonb,
force_delete_date date,
statuses character varying[],
status_notes public.hstore,
statuses_before_force_delete character varying[] DEFAULT '{}'::character varying[],
upid integer,
up_date timestamp without time zone,
uuid uuid DEFAULT public.gen_random_uuid() NOT NULL,
locked_by_registrant_at timestamp without time zone,
force_delete_start timestamp without time zone,
force_delete_data public.hstore,
json_statuses_history jsonb,
status_notes public.hstore
json_statuses_history jsonb
);


Expand Down Expand Up @@ -1177,6 +1195,7 @@ CREATE TABLE public.invoices (
buyer_vat_no character varying,
issue_date date NOT NULL,
e_invoice_sent_at timestamp without time zone,
payment_link character varying,
CONSTRAINT invoices_due_date_is_not_before_issue_date CHECK ((due_date >= issue_date))
);

Expand Down Expand Up @@ -2263,6 +2282,74 @@ CREATE SEQUENCE public.payment_orders_id_seq
ALTER SEQUENCE public.payment_orders_id_seq OWNED BY public.payment_orders.id;


--
-- Name: pghero_query_stats; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public.pghero_query_stats (
id bigint NOT NULL,
database text,
"user" text,
query text,
query_hash bigint,
total_time double precision,
calls bigint,
captured_at timestamp without time zone
);


--
-- Name: pghero_query_stats_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public.pghero_query_stats_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;


--
-- Name: pghero_query_stats_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public.pghero_query_stats_id_seq OWNED BY public.pghero_query_stats.id;


--
-- Name: pghero_space_stats; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public.pghero_space_stats (
id bigint NOT NULL,
database text,
schema text,
relation text,
size bigint,
captured_at timestamp without time zone
);


--
-- Name: pghero_space_stats_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public.pghero_space_stats_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;


--
-- Name: pghero_space_stats_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public.pghero_space_stats_id_seq OWNED BY public.pghero_space_stats.id;


--
-- Name: prices; Type: TABLE; Schema: public; Owner: -
--
Expand Down Expand Up @@ -2623,8 +2710,7 @@ CREATE TABLE public.validation_events (
validation_eventable_type character varying,
validation_eventable_id bigint,
created_at timestamp(6) without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL,
event_type public.validation_type
updated_at timestamp(6) without time zone NOT NULL
);


Expand Down Expand Up @@ -3166,6 +3252,20 @@ ALTER TABLE ONLY public.notifications ALTER COLUMN id SET DEFAULT nextval('publi
ALTER TABLE ONLY public.payment_orders ALTER COLUMN id SET DEFAULT nextval('public.payment_orders_id_seq'::regclass);


--
-- Name: pghero_query_stats id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public.pghero_query_stats ALTER COLUMN id SET DEFAULT nextval('public.pghero_query_stats_id_seq'::regclass);


--
-- Name: pghero_space_stats id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public.pghero_space_stats ALTER COLUMN id SET DEFAULT nextval('public.pghero_space_stats_id_seq'::regclass);


--
-- Name: prices id; Type: DEFAULT; Schema: public; Owner: -
--
Expand Down Expand Up @@ -3689,6 +3789,22 @@ ALTER TABLE ONLY public.payment_orders
ADD CONSTRAINT payment_orders_pkey PRIMARY KEY (id);


--
-- Name: pghero_query_stats pghero_query_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public.pghero_query_stats
ADD CONSTRAINT pghero_query_stats_pkey PRIMARY KEY (id);


--
-- Name: pghero_space_stats pghero_space_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public.pghero_space_stats
ADD CONSTRAINT pghero_space_stats_pkey PRIMARY KEY (id);


--
-- Name: prices prices_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
Expand Down Expand Up @@ -4459,6 +4575,20 @@ CREATE INDEX index_notifications_on_registrar_id ON public.notifications USING b
CREATE INDEX index_payment_orders_on_invoice_id ON public.payment_orders USING btree (invoice_id);


--
-- Name: index_pghero_query_stats_on_database_and_captured_at; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX index_pghero_query_stats_on_database_and_captured_at ON public.pghero_query_stats USING btree (database, captured_at);


--
-- Name: index_pghero_space_stats_on_database_and_captured_at; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX index_pghero_space_stats_on_database_and_captured_at ON public.pghero_space_stats USING btree (database, captured_at);


--
-- Name: index_prices_on_zone_id; Type: INDEX; Schema: public; Owner: -
--
Expand Down Expand Up @@ -4515,13 +4645,6 @@ CREATE INDEX index_users_on_registrar_id ON public.users USING btree (registrar_
CREATE INDEX index_validation_events_on_event_data ON public.validation_events USING gin (event_data);


--
-- Name: index_validation_events_on_event_type; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX index_validation_events_on_event_type ON public.validation_events USING btree (event_type);


--
-- Name: index_validation_events_on_validation_eventable; Type: INDEX; Schema: public; Owner: -
--
Expand Down Expand Up @@ -5267,15 +5390,20 @@ INSERT INTO "schema_migrations" (version) VALUES
('20210708131814'),
('20210729131100'),
('20210729134625'),
('20210827185249'),
('20211029073644'),
('20211028122103'),
('20211028125245'),
('20211029082225'),
('20211124071418'),
('20211124084308'),
('20211125181033'),
('20211125184334'),
('20211126085139'),
('20211231113934'),
('20220106123143'),
('20220113201642'),
('20220113220809');

('20220113220809'),
('20220124105717'),
('20220216113112'),
('20220228093211');


39 changes: 35 additions & 4 deletions test/models/registrant_user_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,8 @@ def test_should_update_org_contact_if_data_from_business_registry_dismatch

company = Company.new(org.ident, "ace")

company_register = Minitest::Mock.new
company_register.expect(:representation_rights, [company], [{ citizen_personal_code: '1234',
citizen_country_code: 'USA' }])
@user.companies(company_register)
Spy.on(@user, :companies).and_return([company])
@user.update_company_contacts
org.reload

assert_equal org.name, company.company_name
Expand All @@ -63,6 +61,39 @@ def test_queries_company_register_for_associated_companies
company_register.verify
end

def test_should_return_zero_count_of_companies
assert_equal 'US-1234', @user.registrant_ident
org = contacts(:acme_ltd)
org.ident_country_code = 'EE'
org.save(validate: false)
org.reload

company_one = Company.new(org.ident, 'Acme Ltd')

Spy.on(@user, :companies).and_return([company_one])
response = @user.do_need_update_contact?
org.reload

assert_equal response[:counter], 0
end

def test_should_return_count_of_contact_which_should_be_updated
assert_equal 'US-1234', @user.registrant_ident
org = contacts(:acme_ltd)
org.ident_country_code = 'EE'
org.save(validate: false)
org.reload

company_one = Company.new(org.ident, 'ace')
company_two = Company.new(org.ident, 'acer')

Spy.on(@user, :companies).and_return([company_one, company_two])
response = @user.do_need_update_contact?
org.reload

assert_equal response[:counter], 2
end

def test_returns_contacts
Contact.stub(:registrant_user_contacts, %w(john jane)) do
assert_equal %w(john jane), @user.contacts
Expand Down