AnasSarkiz/usb-c-pd-brushed-motor

USB-C PD-powered motor controller with protected input, selectable 5/9/12 V buck supply, MCU qualification, PWM H-bridge drive, overvoltage sensing, regenerative energy-dump resistors, and safety interlocks.

Version
0.0.1-a48-cloud-pipeline9-unrouted-c41d79a-305b1e7a
License
unset
Stars
0

scripts/test_assembly_packet.py

"""Independent row-loss, duplicate and quoting regressions for assembly splits."""
import unittest
from assembly_packet import MANUAL_REFERENCES, read_export_rows, split_assembly_rows, write_export_rows


class AssemblyPacketTest(unittest.TestCase):
    def test_assembly_split_preserves_data_and_rejects_incomplete_exports(self):
        refs=set(MANUAL_REFERENCES)|{f"R{index}" for index in range(1, 130)}
        rows=[{"Designator":ref,"Comment":'10k, \"speed\"',"JLCPCB Part #":"C5710902"} for ref in sorted(refs)]
        headers=list(rows[0])
        _,decoded=read_export_rows(write_export_rows(headers,rows))
        automatic,manual=split_assembly_rows(decoded,refs)
        self.assertEqual(len(automatic),129)
        self.assertEqual(len(manual),11)
        self.assertEqual(set(row["Designator"] for row in manual),MANUAL_REFERENCES)
        self.assertEqual(sorted(automatic+manual,key=lambda row:row["Designator"]),rows)
        with self.assertRaisesRegex(ValueError,"Duplicate"):
            split_assembly_rows(rows+[rows[0]],refs)
        with self.assertRaisesRegex(ValueError,"engineering BOM"):
            split_assembly_rows(rows[:-1],refs)
        invalid=[dict(row) for row in rows];invalid[0]["JLCPCB Part #"]=""
        with self.assertRaisesRegex(ValueError,"supplier code"):
            split_assembly_rows(invalid,refs)
        with self.assertRaisesRegex(ValueError,"Malformed"):
            read_export_rows('Designator,Comment\nR1,10k,unexpected\n')


if __name__ == "__main__":
    unittest.main()