api.Contact.create happy to create invalid employer relationship
Overview
api.Contact.create does not check that the relationship between employer_id
and the contact is valid.
Reproduction steps
Reproduced on dmaster.demo using combo of UI and API 3 Explorer. Showing as command line here to better illustrate.
$ cv api Contact.create first_name="Mickey" last_name="Mouse" email="mickey.mouse@example.com" contact_type="Individual"
{
"is_error": 0,
"version": 3,
"count": 1,
"id": 9,
"values": {...}
}
$ cv api Contact.create first_name="Minnie" last_name="Mouse" email="minnie.mouse@example.com" contact_type="Individual"
{
"is_error": 0,
"version": 3,
"count": 1,
"id": 10,
"values": {...}
}
$ cv api RelationshipType.getsingle name_b_a="Employer of" return="id,contact_type_b"
{
"id": "5",
"contact_type_b": "Organization"
}
$ cv api Relationship.create contact_id_a="9" contact_id_b="10" relationship_type_id="5"
{
"tip": "add debug=1 to your API call to have more info about the error",
"is_error": 1,
"error_message": "Invalid Relationship"
}
$ cv api Contact.create id="9" employer_id="10"
{
"is_error": 0,
"version": 3,
"count": 1,
"id": 9,
"values": {...}
}
$ cv api Relationship.get contact_id_a="9"
{
"is_error": 0,
"version": 3,
"count": 1,
"id": 5,
"values": {
"5": {
"id": "5",
"contact_id_a": "9",
"contact_id_b": "10",
"relationship_type_id": "5",
"is_active": "1",
"is_permission_a_b": "0",
"is_permission_b_a": "0",
"created_date": "2022-10-05 19:48:23",
"modified_date": "2022-10-05 19:48:23"
}
}
}
Current behaviour
An invalid relationship is created. On the contact summary screen, an employer may or may not be listed, but it's unlikely to be the invalid contact (i.e. it lists a unrelated org instead).
Expected behaviour
The API call should fail for the same reason as api.Relationship.create.
Environment information
Confirmed on dmaster.demo, and a local vanilla install of D9/Civi 5.48.2.