|
2 | 2 | # Licensed under the MIT License.
|
3 | 3 |
|
4 | 4 | import aiounittest
|
5 |
| -from botbuilder.dialogs import DialogSet, ComponentDialog, WaterfallDialog |
| 5 | +from botbuilder.dialogs import ( |
| 6 | + DialogDependencies, |
| 7 | + DialogSet, |
| 8 | + ComponentDialog, |
| 9 | + WaterfallDialog, |
| 10 | +) |
6 | 11 | from botbuilder.core import ConversationState, MemoryStorage, NullTelemetryClient
|
7 | 12 |
|
8 | 13 |
|
@@ -90,6 +95,73 @@ def test_dialogset_nulltelemetryset(self):
|
90 | 95 | )
|
91 | 96 | )
|
92 | 97 |
|
| 98 | + def test_dialogset_raises_on_repeated_id(self): |
| 99 | + convo_state = ConversationState(MemoryStorage()) |
| 100 | + dialog_state_property = convo_state.create_property("dialogstate") |
| 101 | + dialog_set = DialogSet(dialog_state_property) |
| 102 | + |
| 103 | + dialog_set.add(WaterfallDialog("A")) |
| 104 | + with self.assertRaises(TypeError): |
| 105 | + dialog_set.add(WaterfallDialog("A")) |
| 106 | + |
| 107 | + self.assertTrue(dialog_set.find_dialog("A") is not None) |
| 108 | + |
| 109 | + def test_dialogset_idempotenticy_add(self): |
| 110 | + convo_state = ConversationState(MemoryStorage()) |
| 111 | + dialog_state_property = convo_state.create_property("dialogstate") |
| 112 | + dialog_set = DialogSet(dialog_state_property) |
| 113 | + dialog_a = WaterfallDialog("A") |
| 114 | + dialog_set.add(dialog_a) |
| 115 | + dialog_set.add(dialog_a) |
| 116 | + |
| 117 | + async def test_dialogset_dependency_tree_add(self): |
| 118 | + class MyDialog(WaterfallDialog, DialogDependencies): |
| 119 | + def __init__(self, *args, **kwargs): |
| 120 | + super().__init__(*args, **kwargs) |
| 121 | + self._dependencies = [] |
| 122 | + |
| 123 | + def add_dependency(self, dialog): |
| 124 | + self._dependencies.append(dialog) |
| 125 | + |
| 126 | + def get_dependencies(self): |
| 127 | + return self._dependencies |
| 128 | + |
| 129 | + convo_state = ConversationState(MemoryStorage()) |
| 130 | + dialog_state_property = convo_state.create_property("dialogstate") |
| 131 | + dialog_set = DialogSet(dialog_state_property) |
| 132 | + |
| 133 | + dialog_a = MyDialog("A") |
| 134 | + dialog_b = MyDialog("B") |
| 135 | + dialog_c = MyDialog("C") |
| 136 | + dialog_d = MyDialog("D") |
| 137 | + dialog_e = MyDialog("E") |
| 138 | + dialog_i = MyDialog("I") |
| 139 | + |
| 140 | + dialog_a.add_dependency(dialog_b) |
| 141 | + |
| 142 | + # Multi-hierarchy should be OK |
| 143 | + dialog_b.add_dependency(dialog_d) |
| 144 | + dialog_b.add_dependency(dialog_e) |
| 145 | + |
| 146 | + # circular dependencies should be OK |
| 147 | + dialog_c.add_dependency(dialog_d) |
| 148 | + dialog_d.add_dependency(dialog_c) |
| 149 | + |
| 150 | + assert dialog_set.find_dialog(dialog_a.id) is None |
| 151 | + dialog_set.add(dialog_a) |
| 152 | + |
| 153 | + for dialog in [ |
| 154 | + dialog_a, |
| 155 | + dialog_b, |
| 156 | + dialog_c, |
| 157 | + dialog_d, |
| 158 | + dialog_e, |
| 159 | + ]: |
| 160 | + self.assertTrue(dialog_set.find_dialog(dialog.id) is dialog) |
| 161 | + self.assertTrue(await dialog_set.find(dialog.id) is dialog) |
| 162 | + |
| 163 | + assert dialog_set.find_dialog(dialog_i.id) is None |
| 164 | + |
93 | 165 | # pylint: disable=pointless-string-statement
|
94 | 166 | """
|
95 | 167 | This test will be enabled when telematry tests are fixed for DialogSet telemetry
|
|
0 commit comments