File size: 23,751 Bytes
a3934b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7bbd836
 
a3934b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
# test_integration_workflows.py
"""
Integration tests for complete verification workflows.

Tests end-to-end workflows including:
- Full verification workflow: select dataset → review message → provide feedback → view results → export CSV
- Session resumption workflow
- Error recovery workflows
"""

import pytest
from datetime import datetime
from src.core.verification_models import (
    VerificationSession,
    TestMessage,
)
from src.core.verification_store import JSONVerificationStore
from src.core.message_queue_manager import MessageQueueManager
from src.core.verification_feedback_handler import VerificationFeedbackHandler
from src.core.verification_metrics import VerificationMetricsCalculator
from src.core.verification_csv_exporter import VerificationCSVExporter
from src.core.test_datasets import TestDatasetManager


class TestCompleteVerificationWorkflow:
    """Tests for complete verification workflow."""

    def test_full_workflow_select_dataset_to_export_csv(
        self, temp_storage_dir, test_data_generator, assertion_helpers
    ):
        """
        Test full workflow: select dataset → review message → provide feedback → view results → export CSV
        
        This test verifies the complete end-to-end workflow of the verification mode.
        """
        # Step 1: Initialize storage and create session
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        
        # Step 2: Select a dataset (using mixed scenarios for variety)
        dataset = TestDatasetManager.MIXED_SCENARIOS_DATASET
        assert dataset is not None
        assert len(dataset.messages) > 0
        
        # Step 3: Create a verification session
        session = test_data_generator.create_verification_session(
            session_id="workflow_test_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        # Step 4: Initialize message queue
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        # Step 5: Create feedback handler
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Step 6: Process first 3 messages
        messages_to_process = dataset.messages[:3]
        
        for i, message in enumerate(messages_to_process):
            # Get current message
            current_msg_id = queue_manager.get_current_message_id()
            assert current_msg_id == message.message_id
            
            # Provide feedback (alternate between correct and incorrect)
            if i % 2 == 0:
                # Mark as correct
                handler.handle_correct_feedback(
                    message=message,
                    classifier_decision=message.pre_classified_label,
                    classifier_confidence=0.85,
                    classifier_indicators=["test_indicator"],
                )
            else:
                # Mark as incorrect with correction
                correction = "red" if message.pre_classified_label != "red" else "green"
                handler.handle_incorrect_feedback(
                    message=message,
                    classifier_decision=message.pre_classified_label,
                    classifier_confidence=0.85,
                    classifier_indicators=["test_indicator"],
                    ground_truth_label=correction,
                    verifier_notes="Test correction",
                )
        
        # Step 7: Verify session statistics
        stats = handler.get_session_statistics()
        assert stats["verified_count"] == 3
        assert stats["correct_count"] == 2  # First and third are correct
        assert stats["incorrect_count"] == 1  # Second is incorrect
        
        # Step 8: Export to CSV
        csv_content = store.export_to_csv(session.session_id)
        
        # Step 9: Verify CSV content
        assertion_helpers.assert_csv_has_summary_section(csv_content)
        assertion_helpers.assert_csv_contains_columns(
            csv_content,
            ["Patient Message", "Classifier Said", "You Said", "Notes", "Date"]
        )
        
        # Verify CSV has correct number of data rows (3 messages + header + summary)
        lines = csv_content.split("\n")
        assert len(lines) > 5  # Summary + header + at least 3 data rows
        
        # Verify accuracy in CSV
        assert "Accuracy %" in csv_content
        assert "66" in csv_content or "67" in csv_content  # 2/3 ≈ 66.67%

    def test_workflow_with_all_correct_feedback(
        self, temp_storage_dir, test_data_generator, assertion_helpers
    ):
        """Test workflow where all feedback is marked as correct."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        dataset = TestDatasetManager.HEALTHY_POSITIVE_DATASET
        
        session = test_data_generator.create_verification_session(
            session_id="all_correct_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Mark all messages as correct
        for message in dataset.messages[:5]:
            handler.handle_correct_feedback(
                message=message,
                classifier_decision=message.pre_classified_label,
                classifier_confidence=0.90,
                classifier_indicators=["positive"],
            )
        
        # Verify all are correct
        stats = handler.get_session_statistics()
        assert stats["verified_count"] == 5
        assert stats["correct_count"] == 5
        assert stats["incorrect_count"] == 0
        assert stats["accuracy"] == 100.0
        
        # Export and verify
        csv_content = store.export_to_csv(session.session_id)
        assert "100.0" in csv_content  # 100% accuracy

    def test_workflow_with_all_incorrect_feedback(
        self, temp_storage_dir, test_data_generator, assertion_helpers
    ):
        """Test workflow where all feedback is marked as incorrect."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        dataset = TestDatasetManager.SUICIDAL_IDEATION_DATASET
        
        session = test_data_generator.create_verification_session(
            session_id="all_incorrect_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Mark all messages as incorrect (change red to yellow)
        for message in dataset.messages[:5]:
            handler.handle_incorrect_feedback(
                message=message,
                classifier_decision=message.pre_classified_label,
                classifier_confidence=0.90,
                classifier_indicators=["severe"],
                ground_truth_label="yellow",  # Wrong correction
                verifier_notes="Classifier was wrong",
            )
        
        # Verify all are incorrect
        stats = handler.get_session_statistics()
        assert stats["verified_count"] == 5
        assert stats["correct_count"] == 0
        assert stats["incorrect_count"] == 5
        assert stats["accuracy"] == 0.0
        
        # Export and verify
        csv_content = store.export_to_csv(session.session_id)
        assert "0.0" in csv_content  # 0% accuracy

    def test_workflow_with_mixed_classifications(
        self, temp_storage_dir, test_data_generator, assertion_helpers
    ):
        """Test workflow with mixed classification types."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        dataset = TestDatasetManager.MIXED_SCENARIOS_DATASET
        
        session = test_data_generator.create_verification_session(
            session_id="mixed_class_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Process messages and verify accuracy by type
        for message in dataset.messages[:6]:
            handler.handle_correct_feedback(
                message=message,
                classifier_decision=message.pre_classified_label,
                classifier_confidence=0.85,
                classifier_indicators=["test"],
            )
        
        stats = handler.get_session_statistics()
        
        # Verify accuracy by type is calculated
        assert "accuracy_by_type" in stats
        assert "green" in stats["accuracy_by_type"]
        assert "yellow" in stats["accuracy_by_type"]
        assert "red" in stats["accuracy_by_type"]


class TestSessionResumptionWorkflow:
    """Tests for session resumption workflow."""

    def test_resume_session_after_partial_verification(
        self, temp_storage_dir, test_data_generator
    ):
        """Test resuming a session after partial verification."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        dataset = TestDatasetManager.ANXIETY_WORRY_DATASET
        
        # Create and partially complete a session
        session = test_data_generator.create_verification_session(
            session_id="resume_test_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Process first 3 messages
        for message in dataset.messages[:3]:
            handler.handle_correct_feedback(
                message=message,
                classifier_decision=message.pre_classified_label,
                classifier_confidence=0.85,
                classifier_indicators=["anxiety"],
            )
        
        # Get stats before closing
        stats_before = handler.get_session_statistics()
        assert stats_before["verified_count"] == 3
        
        # Simulate closing and reopening the session
        loaded_session = store.load_session(session.session_id)
        assert loaded_session is not None
        assert len(loaded_session.verifications) == 3
        
        # Resume with new queue manager and handler
        queue_manager_resumed = MessageQueueManager(loaded_session)
        queue_manager_resumed.initialize_queue(dataset.messages)
        
        handler_resumed = VerificationFeedbackHandler(
            loaded_session, store, queue_manager_resumed
        )
        
        # Verify we can continue from where we left off
        stats_after = handler_resumed.get_session_statistics()
        assert stats_after["verified_count"] == 3
        assert stats_after["correct_count"] == 3
        
        # Process more messages
        for message in dataset.messages[3:5]:
            handler_resumed.handle_correct_feedback(
                message=message,
                classifier_decision=message.pre_classified_label,
                classifier_confidence=0.85,
                classifier_indicators=["anxiety"],
            )
        
        # Verify total count increased
        stats_final = handler_resumed.get_session_statistics()
        assert stats_final["verified_count"] == 5

    def test_resume_session_preserves_all_data(
        self, temp_storage_dir, test_data_generator, assertion_helpers
    ):
        """Test that resuming a session preserves all verification data."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        dataset = TestDatasetManager.MIXED_SCENARIOS_DATASET
        
        session = test_data_generator.create_verification_session(
            session_id="preserve_data_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Create records with specific notes
        test_notes = [
            "First message note",
            "Second message note",
            "Third message note",
        ]
        
        for i, message in enumerate(dataset.messages[:3]):
            if i == 0:
                handler.handle_correct_feedback(
                    message=message,
                    classifier_decision=message.pre_classified_label,
                    classifier_confidence=0.85,
                    classifier_indicators=["test"],
                )
            else:
                handler.handle_incorrect_feedback(
                    message=message,
                    classifier_decision=message.pre_classified_label,
                    classifier_confidence=0.85,
                    classifier_indicators=["test"],
                    ground_truth_label="green" if message.pre_classified_label != "green" else "red",
                    verifier_notes=test_notes[i],
                )
        
        # Load session and verify data is preserved
        loaded_session = store.load_session(session.session_id)
        
        assert len(loaded_session.verifications) == 3
        assert loaded_session.verifications[0].is_correct is True
        assert loaded_session.verifications[1].verifier_notes == test_notes[1]
        assert loaded_session.verifications[2].verifier_notes == test_notes[2]

    def test_get_last_session_returns_most_recent(
        self, temp_storage_dir, test_data_generator
    ):
        """Test that get_last_session returns the most recently created session."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        
        # Create multiple sessions
        session1 = test_data_generator.create_verification_session(
            session_id="session_1",
            verifier_name="Verifier 1",
        )
        store.save_session(session1)
        
        session2 = test_data_generator.create_verification_session(
            session_id="session_2",
            verifier_name="Verifier 2",
        )
        store.save_session(session2)
        
        session3 = test_data_generator.create_verification_session(
            session_id="session_3",
            verifier_name="Verifier 3",
        )
        store.save_session(session3)
        
        # Get last session
        last_session = store.get_last_session()
        
        # Should be session 3 (most recent)
        assert last_session is not None
        assert last_session.session_id == "session_3"


class TestErrorRecoveryWorkflows:
    """Tests for error recovery workflows."""

    def test_recovery_from_failed_feedback_submission(
        self, temp_storage_dir, test_data_generator
    ):
        """Test recovery when feedback submission fails."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        dataset = TestDatasetManager.HEALTHY_POSITIVE_DATASET
        
        session = test_data_generator.create_verification_session(
            session_id="error_recovery_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Try to handle feedback with missing correction (should fail)
        with pytest.raises(Exception):
            handler.handle_incorrect_feedback(
                message=dataset.messages[0],
                classifier_decision=dataset.messages[0].pre_classified_label,
                classifier_confidence=0.85,
                classifier_indicators=["test"],
                ground_truth_label="",  # Missing correction
                verifier_notes="",
            )
        
        # Verify session is still in valid state
        loaded_session = store.load_session(session.session_id)
        assert len(loaded_session.verifications) == 0  # No records added
        
        # Should be able to retry with valid data
        result = handler.handle_correct_feedback(
            message=dataset.messages[0],
            classifier_decision=dataset.messages[0].pre_classified_label,
            classifier_confidence=0.85,
            classifier_indicators=["test"],
        )
        assert result is True
        
        # Verify record was saved on retry
        loaded_session = store.load_session(session.session_id)
        assert len(loaded_session.verifications) == 1

    def test_recovery_from_csv_export_failure(
        self, temp_storage_dir, test_data_generator
    ):
        """Test recovery when CSV export fails."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        
        session = test_data_generator.create_verification_session(
            session_id="csv_error_001",
            total_messages=0,
        )
        store.save_session(session)
        
        # Try to export with no verified messages (should fail)
        # The error message is formatted by the error handler
        with pytest.raises((ValueError, RuntimeError)):
            store.export_to_csv(session.session_id)
        
        # Add some messages and retry
        dataset = TestDatasetManager.HEALTHY_POSITIVE_DATASET
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        handler.handle_correct_feedback(
            message=dataset.messages[0],
            classifier_decision=dataset.messages[0].pre_classified_label,
            classifier_confidence=0.85,
            classifier_indicators=["test"],
        )
        
        # Now export should succeed
        csv_content = store.export_to_csv(session.session_id)
        assert csv_content is not None
        assert len(csv_content) > 0

    def test_recovery_from_session_load_failure(
        self, temp_storage_dir, test_data_generator
    ):
        """Test recovery when session load fails."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        
        # Try to load non-existent session
        loaded_session = store.load_session("non_existent_session")
        assert loaded_session is None
        
        # Should be able to create new session
        session = test_data_generator.create_verification_session(
            session_id="recovery_new_session",
        )
        store.save_session(session)
        
        # Now load should succeed
        loaded_session = store.load_session("recovery_new_session")
        assert loaded_session is not None
        assert loaded_session.session_id == "recovery_new_session"

    def test_recovery_from_invalid_correction_selection(
        self, temp_storage_dir, test_data_generator
    ):
        """Test recovery when invalid correction is selected."""
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        dataset = TestDatasetManager.ANXIETY_WORRY_DATASET
        
        session = test_data_generator.create_verification_session(
            session_id="invalid_correction_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Try with invalid correction
        with pytest.raises(Exception):
            handler.handle_incorrect_feedback(
                message=dataset.messages[0],
                classifier_decision=dataset.messages[0].pre_classified_label,
                classifier_confidence=0.85,
                classifier_indicators=["test"],
                ground_truth_label="invalid_option",
                verifier_notes="",
            )
        
        # Verify session is still valid
        loaded_session = store.load_session(session.session_id)
        assert len(loaded_session.verifications) == 0
        
        # Should be able to retry with valid correction
        result = handler.handle_incorrect_feedback(
            message=dataset.messages[0],
            classifier_decision=dataset.messages[0].pre_classified_label,
            classifier_confidence=0.85,
            classifier_indicators=["test"],
            ground_truth_label="red",
            verifier_notes="",
        )
        assert result is True

    def test_recovery_from_completed_session_modification_attempt(
        self, temp_storage_dir, test_data_generator
    ):
        """Test recovery when attempting to modify a completed session."""
        from src.core.verification_feedback_handler import FeedbackValidationError
        
        store = JSONVerificationStore(storage_dir=temp_storage_dir)
        dataset = TestDatasetManager.HEALTHY_POSITIVE_DATASET
        
        session = test_data_generator.create_verification_session(
            session_id="completed_session_001",
            dataset_id=dataset.dataset_id,
            dataset_name=dataset.name,
            total_messages=len(dataset.messages),
        )
        store.save_session(session)
        
        queue_manager = MessageQueueManager(session)
        queue_manager.initialize_queue(dataset.messages)
        
        handler = VerificationFeedbackHandler(session, store, queue_manager)
        
        # Add some feedback
        handler.handle_correct_feedback(
            message=dataset.messages[0],
            classifier_decision=dataset.messages[0].pre_classified_label,
            classifier_confidence=0.85,
            classifier_indicators=["test"],
        )
        
        # Mark session as complete
        store.mark_session_complete(session.session_id)
        
        # Try to add more feedback (should fail with FeedbackValidationError)
        with pytest.raises(FeedbackValidationError, match="Cannot modify completed session"):
            handler.handle_correct_feedback(
                message=dataset.messages[1],
                classifier_decision=dataset.messages[1].pre_classified_label,
                classifier_confidence=0.85,
                classifier_indicators=["test"],
            )
        
        # Verify original feedback is still there
        loaded_session = store.load_session(session.session_id)
        assert len(loaded_session.verifications) == 1
        assert loaded_session.is_complete is True