""" Tests for the meeting flow manager. """ import unittest import sys import os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from src.engine.meeting_flow import MeetingFlowManager class TestMeetingFlowManager(unittest.TestCase): """Tests for MeetingFlowManager.""" def setUp(self): self.meeting = MeetingFlowManager() def test_start_meeting(self): state = self.meeting.start_meeting("red", "body_report", "electrical") self.assertTrue(self.meeting.is_meeting_active()) self.assertEqual(state.called_by, "red") self.assertEqual(state.reason, "body_report") def test_submit_interrupt_note(self): self.meeting.start_meeting("red", "emergency") self.meeting.submit_interrupt_note("blue", {"was_doing": "going to electrical"}) note = self.meeting.current_meeting.interrupt_notes.get("blue") self.assertIsNotNone(note) self.assertEqual(note["was_doing"], "going to electrical") def test_meeting_scratchpad(self): self.meeting.start_meeting("red", "emergency") self.meeting.init_meeting_scratchpad("blue", {"suspects": []}) self.meeting.update_meeting_scratchpad("blue", {"suspects": ["red"]}) pad = self.meeting.get_meeting_scratchpad("blue") self.assertEqual(pad["suspects"], ["red"]) def test_add_message(self): self.meeting.start_meeting("red", "emergency") self.meeting.add_message("red", "Red", "Where was everyone?") self.meeting.add_message("blue", "Blue", "I was in medbay", target="Red") transcript = self.meeting.get_transcript() self.assertEqual(len(transcript), 2) self.assertEqual(transcript[1]["target"], "Red") def test_voting(self): self.meeting.start_meeting("red", "emergency") self.meeting.submit_vote("red", "blue") self.meeting.submit_vote("blue", "skip") self.meeting.submit_vote("green", "blue") self.assertTrue(self.meeting.has_voted("red")) self.assertTrue(self.meeting.all_voted(["red", "blue", "green"])) def test_tally_votes_ejection(self): self.meeting.start_meeting("red", "emergency") self.meeting.submit_vote("red", "blue") self.meeting.submit_vote("green", "blue") self.meeting.submit_vote("blue", "skip") ejected, details = self.meeting.tally_votes() self.assertEqual(ejected, "blue") self.assertEqual(details["counts"]["blue"], 2) def test_tally_votes_tie(self): self.meeting.start_meeting("red", "emergency") self.meeting.submit_vote("red", "blue") self.meeting.submit_vote("blue", "red") self.meeting.submit_vote("green", "skip") ejected, details = self.meeting.tally_votes() self.assertIsNone(ejected) self.assertTrue(details["was_tie"]) def test_tally_votes_skip_wins(self): self.meeting.start_meeting("red", "emergency") self.meeting.submit_vote("red", "skip") self.meeting.submit_vote("blue", "skip") self.meeting.submit_vote("green", "blue") ejected, details = self.meeting.tally_votes() self.assertIsNone(ejected) def test_end_meeting(self): self.meeting.start_meeting("red", "emergency") self.meeting.submit_vote("red", "blue") self.meeting.submit_vote("green", "blue") state = self.meeting.end_meeting("blue", was_impostor=True) self.assertFalse(self.meeting.is_meeting_active()) self.assertEqual(len(self.meeting.meeting_history), 1) self.assertEqual(state.ejected, "blue") self.assertTrue(state.was_impostor) if __name__ == "__main__": unittest.main()