Skip to content

Commit be21aab

Browse files
Merge pull request #1224 from hinashi/fixed/trigger_exception
Fixed failed invoke trigger for oldUI
2 parents 910f57e + d8f565f commit be21aab

File tree

3 files changed

+168
-22
lines changed

3 files changed

+168
-22
lines changed

entry/tests/test_view.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1976,6 +1976,7 @@ def test_create_entry_with_trigger_configuration(self):
19761976
"entry_name": "Jhon Doe",
19771977
"attrs": [
19781978
{
1979+
"entity_attr_id": str(entity.attrs.get(name="address").id),
19791980
"id": str(entity.attrs.get(name="address").id),
19801981
"type": str(AttrType.STRING),
19811982
"value": [{"data": "", "index": 0}],
@@ -2101,7 +2102,7 @@ def test_edit_entry_with_trigger_configuration(self):
21012102
"entry_name": "entry",
21022103
"attrs": [
21032104
{
2104-
"entity_attr_id": "",
2105+
"entity_attr_id": str(entity.attrs.get(name="address").id),
21052106
"id": str(entry.attrs.get(schema__name="address").id),
21062107
"value": [{"data": "", "index": 0}],
21072108
"referral_key": [{"data": "unknown", "index": 0}],

trigger/models.py

+5-21
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from airone.lib.types import AttrType
1212
from entity.models import Entity, EntityAttr
1313
from entry.api_v2.serializers import EntryUpdateSerializer
14-
from entry.models import Attribute, Entry
14+
from entry.models import Entry
1515

1616
if TYPE_CHECKING:
1717
from django.db.models import Manager
@@ -431,20 +431,11 @@ def get_invoked_actions(cls, entity: Entity, recv_data: list):
431431
# But in the APIv1, the "id" parameter in the recv_data variable means Attribute ID
432432
# of Entry. So, it's necessary to refer "entity_attr_id" parameter to be compatible
433433
# with both API versions.
434-
if any([("entity_attr_id" in x) or ("referral_key" in x) for x in recv_data]):
434+
if any(["entity_attr_id" in x for x in recv_data]):
435435
# This is for APIv1
436436
params = []
437437
for data in recv_data:
438-
# this is for create Item operation
439-
entity_attr = EntityAttr.objects.filter(id=data["id"]).first()
440-
441-
# this is for update Item operation
442-
if entity_attr is None:
443-
attr = Attribute.objects.filter(id=data["id"]).first()
444-
entity_attr = attr.schema if attr else None
445-
446-
if entity_attr is None and data["entity_attr_id"]:
447-
entity_attr = EntityAttr.objects.filter(id=data["entity_attr_id"]).first()
438+
entity_attr = EntityAttr.objects.filter(id=data["entity_attr_id"]).first()
448439

449440
if entity_attr.type & AttrType._NAMED and entity_attr.type & AttrType.OBJECT:
450441
# merge name and id value to the data parameter to be compatible with APIv2
@@ -462,16 +453,9 @@ def get_invoked_actions(cls, entity: Entity, recv_data: list):
462453
sorted(data["referral_key"], key=lambda x: x["index"]),
463454
)
464455
]
465-
params.append(
466-
{"attr_id": int(entity_attr.id) if entity_attr else 0, "value": v}
467-
)
456+
params.append({"attr_id": int(entity_attr.id), "value": v})
468457
else:
469-
params.append(
470-
{
471-
"attr_id": int(entity_attr.id) if entity_attr else 0,
472-
"value": data["value"],
473-
}
474-
)
458+
params.append({"attr_id": int(entity_attr.id), "value": data["value"]})
475459
else:
476460
# This is for APIv2
477461
params = [{"attr_id": int(x["id"]), "value": x["value"]} for x in recv_data]

trigger/tests/test_models.py

+161
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,167 @@ def test_condition_can_be_invoked_for_each_attribute_types(self):
509509
else:
510510
self.assertEqual(len(actions), 0)
511511

512+
def test_condition_can_be_invoked_for_each_attribute_types_with_oldui(self):
513+
self.add_entry(self.user, "test_entry", self.entity)
514+
515+
# register TriggerCondition and its Actions
516+
settingTriggerAction = self.FULL_ACTION_CONFIGURATION_PARAMETERS.copy()[0]
517+
518+
for cond_param in self.FULL_CONDITION_CONFIGURATION_PARAMETERS:
519+
TriggerCondition.register(self.entity, [cond_param], [settingTriggerAction])
520+
521+
# These are testing parameters whether specifying "vlaue" could invoke TriggerCondition
522+
# for each typed Attributes.
523+
test_input_params = [
524+
{
525+
"attrname": "str_trigger",
526+
"value": [{"data": ""}],
527+
"referral_key": [],
528+
"will_invoke": False,
529+
},
530+
{
531+
"attrname": "str_trigger",
532+
"value": [{"data": "Open Sesame"}],
533+
"referral_key": [],
534+
"will_invoke": False,
535+
},
536+
{
537+
"attrname": "str_trigger",
538+
"value": [{"data": FAT_LADY_PASSWDS[0]}],
539+
"referral_key": [],
540+
"will_invoke": True,
541+
},
542+
{
543+
"attrname": "ref_trigger",
544+
"value": [{"data": None, "index": "0"}],
545+
"referral_key": [],
546+
"will_invoke": False,
547+
},
548+
{
549+
"attrname": "ref_trigger",
550+
"value": [{"data": self.entry_refs[0].id, "index": "0"}],
551+
"referral_key": [],
552+
"will_invoke": False,
553+
},
554+
{
555+
"attrname": "ref_trigger",
556+
"value": [{"data": self.entry_refs[2].id, "index": "0"}],
557+
"referral_key": [],
558+
"will_invoke": True,
559+
},
560+
{
561+
"attrname": "named_trigger",
562+
"value": [{"data": self.entry_refs[0].id, "index": "0"}],
563+
"referral_key": [{"data": "Open Sesame", "index": "0"}],
564+
"will_invoke": False,
565+
},
566+
{
567+
"attrname": "named_trigger",
568+
"value": [{"data": self.entry_refs[0].id, "index": "0"}],
569+
"referral_key": [{"data": "", "index": "0"}],
570+
"will_invoke": False,
571+
},
572+
{
573+
"attrname": "named_trigger",
574+
"value": [{"data": None, "index": "0"}],
575+
"referral_key": [{"data": "Unexpected words", "index": "0 "}],
576+
"will_invoke": False,
577+
},
578+
{
579+
"attrname": "named_trigger",
580+
"value": [{"data": None, "index": "0"}],
581+
"referral_key": [{"data": FAT_LADY_PASSWDS[0], "index": "0"}],
582+
"will_invoke": True,
583+
},
584+
{
585+
"attrname": "named_trigger",
586+
"value": [{"data": self.entry_refs[2].id, "index": "0"}],
587+
"referral_key": [{"data": "", "index": "0"}],
588+
"will_invoke": True,
589+
},
590+
{
591+
"attrname": "named_trigger",
592+
"value": [{"data": self.entry_refs[2].id, "index": "0"}],
593+
"referral_key": [{"data": FAT_LADY_PASSWDS[0], "index": "0"}],
594+
"will_invoke": True,
595+
},
596+
{
597+
"attrname": "arr_str_trigger",
598+
"value": [{"data": "", "index": "0"}],
599+
"referral_key": [],
600+
"will_invoke": False,
601+
},
602+
{
603+
"attrname": "arr_str_trigger",
604+
"value": [{"data": "Open Sesame", "index": "0"}],
605+
"referral_key": [],
606+
"will_invoke": False,
607+
},
608+
{
609+
"attrname": "arr_str_trigger",
610+
"value": [
611+
{"data": "Open Sesame", "index": "0"},
612+
{"data": FAT_LADY_PASSWDS[0], "index": "1"},
613+
],
614+
"referral_key": [],
615+
"will_invoke": True,
616+
},
617+
{"attrname": "arr_ref_trigger", "value": [], "referral_key": [], "will_invoke": False},
618+
{
619+
"attrname": "arr_ref_trigger",
620+
"value": [
621+
{"data": self.entry_refs[0].id, "index": "0"},
622+
{"data": self.entry_refs[1].id, "index": "1"},
623+
],
624+
"referral_key": [],
625+
"will_invoke": False,
626+
},
627+
{
628+
"attrname": "arr_ref_trigger",
629+
"value": [
630+
{"data": self.entry_refs[0].id, "index": "0"},
631+
{"data": self.entry_refs[1].id, "index": "1"},
632+
{"data": self.entry_refs[2].id, "index": "2"},
633+
],
634+
"referral_key": [],
635+
"will_invoke": True,
636+
},
637+
{
638+
"attrname": "arr_named_trigger",
639+
"value": [{"data": self.entry_refs[0].id, "index": "0"}],
640+
"referral_key": [{"data": "Open Sesame", "index": "0"}],
641+
"will_invoke": False,
642+
},
643+
{
644+
"attrname": "arr_named_trigger",
645+
"value": [
646+
{"data": self.entry_refs[0].id, "index": "0"},
647+
{"data": self.entry_refs[2].id, "index": "1"},
648+
],
649+
"referral_key": [
650+
{"data": "Open Sesame", "index": "0"},
651+
{"data": FAT_LADY_PASSWDS[0], "index": "1"},
652+
],
653+
"will_invoke": True,
654+
},
655+
]
656+
for test_input_param in test_input_params:
657+
attr = self.entity.attrs.get(name=test_input_param["attrname"])
658+
actions = TriggerCondition.get_invoked_actions(
659+
self.entity,
660+
[
661+
{
662+
"entity_attr_id": attr.id,
663+
"value": test_input_param["value"],
664+
"referral_key": test_input_param["referral_key"],
665+
}
666+
],
667+
)
668+
if test_input_param["will_invoke"]:
669+
self.assertGreaterEqual(len(actions), 1)
670+
else:
671+
self.assertEqual(len(actions), 0)
672+
512673
def test_register_conditions_with_blank_values(self):
513674
# register TriggerCondition and its Actions
514675
settingTriggerAction = self.FULL_ACTION_CONFIGURATION_PARAMETERS.copy()[0]

0 commit comments

Comments
 (0)