Bladeren bron

Fix wrong tests

jrobinAV 1 jaar geleden
bovenliggende
commit
afff84c123

+ 1 - 1
taipy/core/data/data_node.py

@@ -403,7 +403,7 @@ class DataNode(_Entity, _Labeled):
         """Creates and adds a new entry in the edits attribute without writing the data.
 
         Parameters:
-            options (dict[str, any)): track `timestamp`, `comments`, `job_id`. The others are user-custom, users can
+            options (dict[str, any]): track `timestamp`, `comments`, `job_id`. The others are user-custom, users can
                 use options to attach any information to an external edit of a data node.
         """
         edit = {k: v for k, v in options.items() if v is not None}

+ 20 - 20
tests/core/_entity/test_ready_to_run_property.py

@@ -16,6 +16,7 @@ from taipy import ScenarioId, SequenceId, TaskId
 from taipy.config.common.frequency import Frequency
 from taipy.config.common.scope import Scope
 from taipy.config.config import Config
+from taipy.core import taipy
 from taipy.core._entity._ready_to_run_property import _ReadyToRunProperty
 from taipy.core.data._data_manager_factory import _DataManagerFactory
 from taipy.core.data.pickle import PickleDataNode
@@ -69,7 +70,7 @@ def test_scenario_submittable_even_with_output_not_ready_to_run():
     assert scenario.id not in _ReadyToRunProperty._submittable_id_datanodes
 
 
-def test_scenario_not_submittable_if_one_input_never_been_written():
+def test_scenario_not_submittable_not_in_property_because_it_is_lazy():
     scenario_manager = _ScenarioManagerFactory._build_manager()
     dn_config_1 = Config.configure_in_memory_data_node("dn_1", 10)
     dn_config_2 = Config.configure_in_memory_data_node("dn_2")
@@ -83,13 +84,10 @@ def test_scenario_not_submittable_if_one_input_never_been_written():
     assert not dn_2.is_ready_for_reading
     assert not scenario_manager._is_submittable(scenario)
 
-    assert scenario.id in _ReadyToRunProperty._submittable_id_datanodes
-    assert dn_1.id not in _ReadyToRunProperty._submittable_id_datanodes[scenario.id]
-    assert dn_2.id in _ReadyToRunProperty._submittable_id_datanodes[scenario.id]
+    # Since it is a lazy property, the scenario and the datanodes is not yet in the dictionary
+    assert scenario.id not in _ReadyToRunProperty._submittable_id_datanodes
     assert dn_1.id not in _ReadyToRunProperty._datanode_id_submittables
-    assert dn_2.id in _ReadyToRunProperty._datanode_id_submittables
-    assert scenario.id in _ReadyToRunProperty._datanode_id_submittables[dn_2.id]
-    assert _ReadyToRunProperty._submittable_id_datanodes[scenario.id][dn_2.id] == {f"DataNode {dn_2.id} is not written"}
+    assert dn_2.id not in _ReadyToRunProperty._datanode_id_submittables
 
 
 def test_scenario_not_submittable_if_one_input_edit_in_progress():
@@ -150,7 +148,8 @@ def test_writing_input_remove_reasons():
 
     assert not dn_1.is_ready_for_reading
     assert not scenario_manager._is_submittable(scenario)
-    assert _ReadyToRunProperty._submittable_id_datanodes[scenario.id][dn_1.id] == {f"DataNode {dn_1.id} is not written"}
+    # Since it is a lazy property, the scenario is not yet in the dictionary
+    assert scenario.id not in _ReadyToRunProperty._submittable_id_datanodes
 
     dn_1.lock_edit()
     assert (_ReadyToRunProperty._submittable_id_datanodes[scenario.id][dn_1.id]
@@ -166,18 +165,19 @@ def identity(arg):
     return arg
 
 
-def __assert_not_submittable_becomes_submittable(scenario, sequence, manager):
-    dn_2 = scenario.dn_2
-    assert not dn_2.is_ready_for_reading
+def __assert_not_submittable_becomes_submittable_when_dn_edited(sequence, manager, dn):
+    assert not dn.is_ready_for_reading
     assert not manager._is_submittable(sequence)
-    assert _ReadyToRunProperty._submittable_id_datanodes[sequence.id][dn_2.id] == {f"DataNode {dn_2.id} is not written"}
-    dn_2.lock_edit()
-    assert (_ReadyToRunProperty._submittable_id_datanodes[sequence.id][dn_2.id]
-            == {f"DataNode {dn_2.id} is being edited", f"DataNode {dn_2.id} is not written"})
-    dn_2.write("ANY VALUE")
+    # Since it is a lazy property, the sequence is not yet in the dictionary
+    assert sequence.id not in _ReadyToRunProperty._submittable_id_datanodes
+
+    dn.lock_edit()
+    assert (_ReadyToRunProperty._submittable_id_datanodes[sequence.id][dn.id]
+            == {f"DataNode {dn.id} is being edited", f"DataNode {dn.id} is not written"})
+    dn.write("ANY VALUE")
     assert manager._is_submittable(sequence)
     assert sequence.id not in _ReadyToRunProperty._submittable_id_datanodes
-    assert dn_2.id not in _ReadyToRunProperty._datanode_id_submittables
+    assert dn.id not in _ReadyToRunProperty._datanode_id_submittables
 
 
 def test_writing_config_sequence_input_remove_reasons():
@@ -192,7 +192,7 @@ def test_writing_config_sequence_input_remove_reasons():
     scenario = scenario_manager._create(scenario_config)
 
     manager = _SequenceManagerFactory._build_manager()
-    __assert_not_submittable_becomes_submittable(scenario, scenario.sequences["seq"], manager)
+    __assert_not_submittable_becomes_submittable_when_dn_edited(scenario.sequences["seq"], manager, scenario.dn_2)
 
 
 def test_writing_runtime_sequence_input_remove_reasons():
@@ -207,7 +207,7 @@ def test_writing_runtime_sequence_input_remove_reasons():
     scenario.add_sequence("seq", [scenario.tasks["task_2"]])
 
     manager = _SequenceManagerFactory._build_manager()
-    __assert_not_submittable_becomes_submittable(scenario, scenario.sequences["seq"], manager)
+    __assert_not_submittable_becomes_submittable_when_dn_edited(scenario.sequences["seq"], manager, scenario.dn_2)
 
 
 def test_writing_task_input_remove_reasons():
@@ -221,4 +221,4 @@ def test_writing_task_input_remove_reasons():
     scenario = scenario_manager._create(scenario_config)
 
     manager = _TaskManagerFactory._build_manager()
-    __assert_not_submittable_becomes_submittable(scenario, scenario.tasks["task_2"], manager)
+    __assert_not_submittable_becomes_submittable_when_dn_edited(scenario.tasks["task_2"], manager, scenario.dn_2)

+ 3 - 8
tests/core/notification/test_events_published.py

@@ -149,14 +149,9 @@ def test_events_published_for_writing_dn():
     # for last_edit_date, editor_id, editor_expiration_date and edit_in_progress
     scenario.the_input.write("test")
     snapshot = all_evts.capture()
-    assert len(snapshot.collected_events) == 13
-    assert snapshot.entity_type_collected.get(EventEntityType.CYCLE, 0) == 0
-    assert snapshot.entity_type_collected.get(EventEntityType.DATA_NODE, 0) == 6
-    assert snapshot.entity_type_collected.get(EventEntityType.TASK, 0) == 2
-    assert snapshot.entity_type_collected.get(EventEntityType.SEQUENCE, 0) == 2
-    assert snapshot.entity_type_collected.get(EventEntityType.SCENARIO, 0) == 2
-    assert snapshot.operation_collected.get(EventOperation.CREATION, 0) == 0
-    assert snapshot.operation_collected.get(EventOperation.UPDATE, 0) == 13
+    assert len(snapshot.collected_events) == 4
+    assert snapshot.entity_type_collected.get(EventEntityType.DATA_NODE, 0) == 4
+    assert snapshot.operation_collected.get(EventOperation.UPDATE, 0) == 4
     all_evts.stop()
 
 

+ 34 - 8
tests/core/notification/test_published_ready_to_run_event.py

@@ -46,7 +46,7 @@ def test_lock_edit_publish_submittable_event():
     assert snapshot.attr_value_collected["is_submittable"] == [False, False, False]
 
 
-def test_write_never_written_input_publish_submittable_event():
+def test_write_never_written_input_does_not_publish_submittable_event():
     dn_config_1 = Config.configure_pickle_data_node("dn_1")
     dn_config_2 = Config.configure_pickle_data_node("dn_2")
     task_config = Config.configure_task("task", empty_fct, [dn_config_1], [dn_config_2])
@@ -60,14 +60,40 @@ def test_write_never_written_input_publish_submittable_event():
     scenario.dn_1.write(15)
     snapshot = all_evts.capture()
 
-    assert len(snapshot.collected_events) == 7
+    # Since it is a lazy property, no submittable event is published. Only the data node update events are published.
+    assert len(snapshot.collected_events) == 4
     assert snapshot.entity_type_collected.get(EventEntityType.DATA_NODE, 0) == 4
-    assert snapshot.entity_type_collected.get(EventEntityType.TASK, 0) == 1
-    assert snapshot.entity_type_collected.get(EventEntityType.SEQUENCE, 0) == 1
-    assert snapshot.entity_type_collected.get(EventEntityType.SCENARIO, 0) == 1
-    assert snapshot.operation_collected.get(EventOperation.UPDATE, 0) == 7
-    assert snapshot.attr_name_collected["is_submittable"] == 3
-    assert snapshot.attr_value_collected["is_submittable"] == [True, True, True]
+    assert snapshot.operation_collected.get(EventOperation.UPDATE, 0) == 4
+
+def test_write_never_written_input_publish_submittable_event_if_scenario_in_property():
+    dn_config_1 = Config.configure_pickle_data_node("dn_1")
+    dn_config_2 = Config.configure_pickle_data_node("dn_2")
+    task_config = Config.configure_task("task", empty_fct, [dn_config_1], [dn_config_2])
+    scenario_config = Config.configure_scenario("sc", [task_config])
+    scenario = _ScenarioManagerFactory._build_manager()._create(scenario_config)
+    scenario.add_sequences({"sequence": [scenario.task]})
+    register_id_0, register_queue_0 = Notifier.register()
+    all_evts = RecordingConsumer(register_id_0, register_queue_0)
+
+    # This makes the dn_1 not ready for 2 reasons. 1. It is not written. 2. It is locked. PLus it makes the scenario,
+    # the sequence and the task handled by the property.
+    scenario.dn_1.lock_edit()
+
+    all_evts.start()
+    scenario.dn_1.write(15)
+    snapshot = all_evts.capture()
+
+    # Since it is a lazy property, no submittable event is published. Only the data node update events are published.
+    assert len(snapshot.collected_events) == 13
+    assert snapshot.entity_type_collected.get(EventEntityType.DATA_NODE, 0) == 7
+    assert snapshot.entity_type_collected.get(EventEntityType.TASK, 0) == 2
+    assert snapshot.entity_type_collected.get(EventEntityType.SEQUENCE, 0) == 2
+    assert snapshot.entity_type_collected.get(EventEntityType.SCENARIO, 0) == 2
+    assert snapshot.operation_collected.get(EventOperation.UPDATE, 0) == 13
+    assert snapshot.attr_name_collected["is_submittable"] == 6
+    assert snapshot.attr_value_collected["is_submittable"] == [False, False, False, True, True, True]
+
+
 
 def test_write_output_does_not_publish_submittable_event():
     dn_config_1 = Config.configure_pickle_data_node("dn_1", default_data="any value")