Repository navigation
Expand file tree
/
Copy pathtest_original_script.py
More file actions
97 lines (79 loc) · 3.52 KB
/
Copy pathtest_original_script.py
File metadata and controls
97 lines (79 loc) · 3.52 KB
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
"""Tests that run the original script ("ticket management system.py") as a real program.
Each test feeds scripted keyboard input to the script inside a temporary folder,
so the real tickets.txt is never touched. Run with: python -m unittest -v
"""
import os
import subprocess
import sys
import tempfile
import unittest
SCRIPT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ticket management system.py")
class OriginalScriptTests(unittest.TestCase):
def setUp(self):
self._tmp = tempfile.TemporaryDirectory()
self.addCleanup(self._tmp.cleanup)
self.folder = self._tmp.name
def run_script(self, *inputs):
"""Run the script with the given menu inputs; every session must end with '11'."""
result = subprocess.run(
[sys.executable, SCRIPT],
input="\n".join(inputs) + "\n",
capture_output=True,
text=True,
cwd=self.folder,
timeout=30,
)
self.assertEqual(result.returncode, 0, result.stderr)
return result.stdout
def data_lines(self):
with open(os.path.join(self.folder, "tickets.txt"), encoding="utf-8") as file:
return file.read().splitlines()
def test_closed_count_is_correct(self):
out = self.run_script("1", "1", "Asha", "Login", "1", "4", "1", "10", "11")
self.assertIn("closed tickets: 1", out)
def test_ticket_is_saved_only_once(self):
self.run_script("1", "1", "Asha", "Login", "1", "11")
self.assertEqual(len(self.data_lines()), 1)
out = self.run_script("8", "11")
self.assertIn("total tickets 1", out)
def test_vip_priority_survives_restart(self):
self.run_script("1", "5", "VIP Co", "Server down", "2", "Medium", "11")
out = self.run_script("2", "11")
self.assertIn("priority: Medium", out)
def test_commas_in_text_survive_restart(self):
self.run_script("1", "1", "Asha", "Login failed, error 500", "1", "11")
out = self.run_script("2", "11")
self.assertIn("Issue: Login failed, error 500", out)
def test_invalid_ticket_type_adds_nothing(self):
out = self.run_script("1", "1", "Asha", "Login", "9", "8", "11")
self.assertIn("Invalid Ticket Type", out)
self.assertIn("total tickets 0", out)
def test_duplicate_id_is_rejected(self):
out = self.run_script(
"1", "1", "Asha", "Login", "1",
"1", "1",
"8", "11",
)
self.assertIn("Ticket ID already exists.", out)
self.assertIn("total tickets 1", out)
def test_open_count_prints_once(self):
out = self.run_script(
"1", "1", "A", "x", "1",
"1", "2", "B", "y", "1",
"1", "3", "C", "z", "1",
"9", "11",
)
self.assertEqual(out.count("Open Tickets:"), 1)
self.assertIn("Open Tickets: 3", out)
def test_reopen_updates_counts(self):
out = self.run_script("1", "1", "A", "x", "1", "4", "1", "6", "1", "9", "10", "11")
self.assertIn("Open Tickets: 1", out)
self.assertIn("closed tickets: 0", out)
def test_old_four_column_file_still_loads_without_duplicates(self):
with open(os.path.join(self.folder, "tickets.txt"), "w", encoding="utf-8") as file:
file.write("1,Asha,Login,Open\n1,Asha,Login,Open\n2,Ravi,Billing,Closed\n")
out = self.run_script("8", "10", "11")
self.assertIn("total tickets 2", out)
self.assertIn("closed tickets: 1", out)
if __name__ == "__main__":
unittest.main()