Validate Relationship#person
This commit is contained in:
parent
0cc33233d2
commit
6e2c9ede99
|
@ -165,6 +165,7 @@ class AddHierarchy < ActiveRecord::Migration[6.0]
|
|||
$$
|
||||
DECLARE
|
||||
org_unit record;
|
||||
person record;
|
||||
parent_unit record;
|
||||
parent_rel record;
|
||||
BEGIN
|
||||
|
@ -172,15 +173,28 @@ class AddHierarchy < ActiveRecord::Migration[6.0]
|
|||
RAISE EXCEPTION 'does not have org unit';
|
||||
END IF;
|
||||
|
||||
IF NEW.person_id IS NULL THEN
|
||||
RAISE EXCEPTION 'does not have person';
|
||||
END IF;
|
||||
|
||||
SELECT *
|
||||
FROM org_units
|
||||
INTO org_unit
|
||||
WHERE id = NEW.org_unit_id;
|
||||
|
||||
SELECT *
|
||||
FROM people
|
||||
INTO person
|
||||
WHERE id = NEW.person_id;
|
||||
|
||||
IF org_unit IS NULL THEN
|
||||
RAISE EXCEPTION 'can not find org unit';
|
||||
END IF;
|
||||
|
||||
IF person IS NULL THEN
|
||||
RAISE EXCEPTION 'can not find person';
|
||||
END IF;
|
||||
|
||||
SELECT *
|
||||
FROM org_units
|
||||
INTO parent_unit
|
||||
|
@ -217,11 +231,16 @@ class AddHierarchy < ActiveRecord::Migration[6.0]
|
|||
RAISE EXCEPTION 'parent rel is invalid';
|
||||
END IF;
|
||||
|
||||
IF parent_rel.person_id != person.id THEN
|
||||
RAISE EXCEPTION 'person is invalid';
|
||||
END IF;
|
||||
|
||||
IF (
|
||||
NEW.level != org_unit.level OR
|
||||
NEW.level != parent_unit.level + 1 OR
|
||||
NEW.level != parent_rel.level + 1
|
||||
) THEN
|
||||
RAISE EXCEPTION 'level is invalid';
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
|
|
|
@ -318,6 +318,7 @@ CREATE FUNCTION public.validate_relationship_hierarchy() RETURNS trigger
|
|||
AS $$
|
||||
DECLARE
|
||||
org_unit record;
|
||||
person record;
|
||||
parent_unit record;
|
||||
parent_rel record;
|
||||
BEGIN
|
||||
|
@ -325,15 +326,28 @@ BEGIN
|
|||
RAISE EXCEPTION 'does not have org unit';
|
||||
END IF;
|
||||
|
||||
IF NEW.person_id IS NULL THEN
|
||||
RAISE EXCEPTION 'does not have person';
|
||||
END IF;
|
||||
|
||||
SELECT *
|
||||
FROM org_units
|
||||
INTO org_unit
|
||||
WHERE id = NEW.org_unit_id;
|
||||
|
||||
SELECT *
|
||||
FROM people
|
||||
INTO person
|
||||
WHERE id = NEW.person_id;
|
||||
|
||||
IF org_unit IS NULL THEN
|
||||
RAISE EXCEPTION 'can not find org unit';
|
||||
END IF;
|
||||
|
||||
IF person IS NULL THEN
|
||||
RAISE EXCEPTION 'can not find person';
|
||||
END IF;
|
||||
|
||||
SELECT *
|
||||
FROM org_units
|
||||
INTO parent_unit
|
||||
|
@ -370,11 +384,16 @@ BEGIN
|
|||
RAISE EXCEPTION 'parent rel is invalid';
|
||||
END IF;
|
||||
|
||||
IF parent_rel.person_id != person.id THEN
|
||||
RAISE EXCEPTION 'person is invalid';
|
||||
END IF;
|
||||
|
||||
IF (
|
||||
NEW.level != org_unit.level OR
|
||||
NEW.level != parent_unit.level + 1 OR
|
||||
NEW.level != parent_rel.level + 1
|
||||
) THEN
|
||||
RAISE EXCEPTION 'level is invalid';
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
|
|
|
@ -14,7 +14,9 @@ FactoryBot.define do
|
|||
association :org_unit, factory: :some_children_org_unit
|
||||
|
||||
parent_rel do
|
||||
create :some_root_relationship, org_unit: org_unit&.parent_unit
|
||||
create :some_root_relationship,
|
||||
person: person,
|
||||
org_unit: org_unit&.parent_unit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -23,13 +25,13 @@ FactoryBot.define do
|
|||
parent: :some_root_relationship,
|
||||
traits: %i[with_parent]
|
||||
|
||||
factory :excluded_relationship, parent: :some_children_relationship do
|
||||
factory :excluded_relationship, parent: :some_root_relationship do
|
||||
association :org_unit, factory: :lpr_org_unit
|
||||
association :status, factory: :excluded_member_relation_status
|
||||
parent_rel { nil }
|
||||
end
|
||||
|
||||
factory :included_relationship, parent: :some_children_relationship do
|
||||
factory :included_relationship, parent: :some_root_relationship do
|
||||
association :org_unit, factory: :lpr_org_unit
|
||||
association :status, factory: :included_relation_status
|
||||
parent_rel { nil }
|
||||
|
@ -38,48 +40,48 @@ FactoryBot.define do
|
|||
factory :supporter_relationship, parent: :excluded_relationship do
|
||||
association :org_unit, factory: :moscow_reg_dept_org_unit
|
||||
association :status, factory: :supporter_relation_status
|
||||
association :parent_rel, factory: :included_relationship
|
||||
parent_rel { create :included_relationship, person: person }
|
||||
end
|
||||
|
||||
factory :member_relationship, parent: :excluded_relationship do
|
||||
association :org_unit, factory: :moscow_reg_dept_org_unit
|
||||
association :status, factory: :active_member_relation_status
|
||||
association :parent_rel, factory: :included_relationship
|
||||
parent_rel { create :included_relationship, person: person }
|
||||
end
|
||||
|
||||
factory :federal_manager_relationship, parent: :excluded_relationship do
|
||||
association :org_unit, factory: :fed_management_org_unit
|
||||
association :status, factory: :fed_manager_relation_status
|
||||
association :parent_rel, factory: :included_relationship
|
||||
parent_rel { create :included_relationship, person: person }
|
||||
end
|
||||
|
||||
factory :federal_supervisor_relationship, parent: :excluded_relationship do
|
||||
association :org_unit, factory: :fed_supervision_org_unit
|
||||
association :status, factory: :fed_supervisor_relation_status
|
||||
association :parent_rel, factory: :included_relationship
|
||||
parent_rel { create :included_relationship, person: person }
|
||||
end
|
||||
|
||||
factory :regional_manager_relationship, parent: :excluded_relationship do
|
||||
association :org_unit, factory: :moscow_reg_management_org_unit
|
||||
association :status, factory: :reg_manager_relation_status
|
||||
association :parent_rel, factory: :member_relationship
|
||||
parent_rel { create :member_relationship, person: person }
|
||||
end
|
||||
|
||||
factory :regional_supervisor_relationship, parent: :excluded_relationship do
|
||||
association :org_unit, factory: :moscow_reg_supervision_org_unit
|
||||
association :status, factory: :reg_supervisor_relation_status
|
||||
association :parent_rel, factory: :member_relationship
|
||||
parent_rel { create :member_relationship, person: person }
|
||||
end
|
||||
|
||||
factory :federal_secretary_relationship, parent: :excluded_relationship do
|
||||
association :org_unit, factory: :fed_management_org_unit
|
||||
association :status, factory: :fed_secretary_relation_status
|
||||
association :parent_rel, factory: :included_relationship
|
||||
parent_rel { create :included_relationship, person: person }
|
||||
end
|
||||
|
||||
factory :regional_secretary_relationship, parent: :excluded_relationship do
|
||||
association :org_unit, factory: :moscow_reg_management_org_unit
|
||||
association :status, factory: :reg_secretary_relation_status
|
||||
association :parent_rel, factory: :member_relationship
|
||||
parent_rel { create :member_relationship, person: person }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -58,21 +58,26 @@ RSpec.describe Person do
|
|||
end
|
||||
|
||||
describe '#all_relationships' do
|
||||
let(:parent_relationship) { create :included_relationship, person: subject }
|
||||
|
||||
let! :relationship_2 do
|
||||
create :supporter_relationship,
|
||||
person: subject,
|
||||
parent_rel: parent_relationship,
|
||||
from_date: 4.days.ago
|
||||
end
|
||||
|
||||
let! :relationship_3 do
|
||||
create :supporter_relationship,
|
||||
person: subject,
|
||||
parent_rel: parent_relationship,
|
||||
from_date: 2.days.ago
|
||||
end
|
||||
|
||||
let! :relationship_1 do
|
||||
create :supporter_relationship,
|
||||
person: subject,
|
||||
parent_rel: parent_relationship,
|
||||
from_date: 6.days.ago
|
||||
end
|
||||
|
||||
|
@ -87,6 +92,7 @@ RSpec.describe Person do
|
|||
|
||||
specify do
|
||||
expect(subject.all_relationships).to eq [
|
||||
parent_relationship,
|
||||
relationship_1,
|
||||
relationship_2,
|
||||
relationship_3,
|
||||
|
|
Reference in New Issue