← Files Technical Interview CopilotARCHIVED FILE
tests/test_practice_planner.py
1.91 KB · Nov 9, 2026 · 01:33 UTC
import unittest, sys
from pathlib import Path
sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'scripts'))
from practice_planner import allocate_minutes, weighted_coaching_score
class PlannerTests(unittest.TestCase):
def test_exact_minutes(self):
x=allocate_minutes(90, {'coding':3,'design':2,'behavioral':1}); self.assertEqual(x,{'coding':45,'design':30,'behavioral':15})
def test_rounding(self):
x=allocate_minutes(10,{'a':1,'b':1,'c':1});self.assertEqual(x,{'a':4,'b':3,'c':3})
def test_zero_time(self):self.assertEqual(allocate_minutes(0,{'a':1}),{'a':0})
def test_zero_weight_topic(self):self.assertEqual(allocate_minutes(5,{'a':1,'b':0}),{'a':5,'b':0})
def test_order_independent(self):self.assertEqual(allocate_minutes(7,{'b':1,'a':1}),allocate_minutes(7,{'a':1,'b':1}))
def test_bad_weights(self):
for weights in ({'a':-1},{'a':0},{'a':float('nan')},{}):
with self.assertRaises(ValueError):allocate_minutes(10,weights)
def test_bad_minutes(self):
for t in (-1,1.5,True):
with self.assertRaises(ValueError):allocate_minutes(t,{'a':1})
def test_score_weighted(self):self.assertEqual(weighted_coaching_score({'a':4,'b':2},{'a':3,'b':1}),3.5)
def test_unassessed_excluded(self):self.assertEqual(weighted_coaching_score({'a':4,'b':None},{'a':1,'b':4}),4.0)
def test_none_if_no_assessment(self):self.assertIsNone(weighted_coaching_score({'a':None},{'a':1}))
def test_mismatch(self):
with self.assertRaises(ValueError):weighted_coaching_score({'a':2},{'b':1})
def test_invalid_rating(self):
with self.assertRaises(ValueError):weighted_coaching_score({'a':5},{'a':1})
def test_bad_score_bool(self):
with self.assertRaises(ValueError):weighted_coaching_score({'a':True},{'a':1})
def test_zero_weights(self):self.assertIsNone(weighted_coaching_score({'a':2},{'a':0}))
if __name__ == '__main__':unittest.main()
SHA-256: c39795f9b02fec85a9632438b844013910b99d4800c501912e059eaba92ee748