@@ -25,7 +25,9 @@ def test_single_entity_changed() -> None:
2525 """
2626 learning_package = api .create_learning_package (key = "lp1" , title = "Test LP 📦" )
2727
28- entity = api .create_publishable_entity (learning_package .id , key = "entity1" , created = now_time , created_by = None )
28+ # Note: creating an entity does not emit any events until we create a version of that entity.
29+ with capture_events (expected_count = 0 ):
30+ entity = api .create_publishable_entity (learning_package .id , key = "entity1" , created = now_time , created_by = None )
2931
3032 NEW_VERSION_NUM = 3 # Just for fun let's use a version number other than 1
3133
@@ -70,3 +72,56 @@ def test_single_entity_changed_abort() -> None:
7072 raise DeliberateRollbackException ()
7173 except DeliberateRollbackException :
7274 pass
75+
76+
77+ def test_multiple_entites_changed () -> None :
78+ """
79+ Test that LEARNING_PACKAGE_ENTITIES_CHANGED is emitted when we change
80+ several publishable entities in a single edit.
81+ """
82+ learning_package = api .create_learning_package (key = "lp1" , title = "Test LP 📦" )
83+
84+ # Entity 1 will have no initial version:
85+ entity1 = api .create_publishable_entity (learning_package .id , key = "entity1" , created = now_time , created_by = None )
86+ # Entity 2 will have an initial version:
87+ entity2 = api .create_publishable_entity (learning_package .id , key = "entity2" , created = now_time , created_by = None )
88+ api .create_publishable_entity_version (
89+ entity2 .id , version_num = 1 , title = "Entity 2 V1" , created = now_time , created_by = None
90+ )
91+ # Entity 3 will have an initial version that later gets deleted:
92+ entity3 = api .create_publishable_entity (learning_package .id , key = "entity3" , created = now_time , created_by = None )
93+ api .create_publishable_entity_version (
94+ entity3 .id , version_num = 1 , title = "Entity 3 V1" , created = now_time , created_by = None
95+ )
96+
97+ with capture_events (expected_count = 1 ) as captured :
98+ with api .bulk_draft_changes_for (learning_package .id , changed_by = None , changed_at = now_time ) as draft_change_log :
99+ # Create two versions of entity1:
100+ api .create_publishable_entity_version (
101+ entity1 .id , version_num = 1 , title = "Entity 1 V1" , created = now_time , created_by = None
102+ )
103+ api .create_publishable_entity_version (
104+ entity1 .id , version_num = 2 , title = "Entity 1 V2" , created = now_time , created_by = None
105+ )
106+ # Create a version 2 of entity 2:
107+ api .create_publishable_entity_version (
108+ entity2 .id , version_num = 2 , title = "Entity 2 V2" , created = now_time , created_by = None
109+ )
110+ # Delete entity 3:
111+ api .set_draft_version (entity3 .id , None , set_at = now_time , set_by = None )
112+
113+ event = captured [0 ]
114+ assert event .signal is api .signals .LEARNING_PACKAGE_ENTITIES_CHANGED
115+ assert event .kwargs ["learning_package" ].id == learning_package .id
116+ assert event .kwargs ["learning_package" ].title == "Test LP 📦"
117+ assert event .kwargs ["changed_by" ].user_id is None
118+ assert event .kwargs ["change_log" ].draft_change_log_id == draft_change_log .id
119+ assert event .kwargs ["change_log" ].changes == [
120+ # Entity 1 jumps from no version to version 2:
121+ api .signals .ChangeLogRecordData (entity_id = entity1 .id , old_version = None , new_version = 2 ),
122+ # Entity 2 jumps v1 -> v2:
123+ api .signals .ChangeLogRecordData (entity_id = entity2 .id , old_version = 1 , new_version = 2 ),
124+ # Entity 3 gets deleted:
125+ api .signals .ChangeLogRecordData (entity_id = entity3 .id , old_version = 1 , new_version = None ),
126+ ]
127+ assert event .kwargs ["metadata" ].time == now_time
0 commit comments