"""Independent expected-output checks for the original six-row exercise."""
import csv
import unittest
from pathlib import Path
from clean_orders import clean


class CleanerChecks(unittest.TestCase):
    def test_fixture(self):
        with Path(__file__).with_name('orders-messy.csv').open(newline='', encoding='utf-8') as file:
            accepted, rejected = clean(csv.DictReader(file))
        self.assertEqual(accepted, [
            {'order_id': '101', 'region': 'north', 'units': 3},
            {'order_id': '103', 'region': 'west', 'units': 2},
            {'order_id': '105', 'region': 'west', 'units': 0},
        ])
        self.assertEqual(rejected, [
            {'order_id': '102', 'reason': 'missing units'},
            {'order_id': '104', 'reason': 'invalid units'},
            {'order_id': '106', 'reason': 'unknown region'},
        ])
        self.assertEqual(sum(row['units'] for row in accepted), 5)
        self.assertEqual(len(accepted) + len(rejected), 6)

    def test_edges(self):
        accepted, rejected = clean([
            {'order_id': 'a', 'region': ' north ', 'units': ' 4 '},
            {'order_id': 'b', 'region': 'north', 'units': '-1'},
            {'order_id': 'c', 'region': 'north', 'units': '2.5'},
        ])
        self.assertEqual(accepted, [{'order_id': 'a', 'region': 'north', 'units': 4}])
        self.assertEqual([r['reason'] for r in rejected], ['invalid units', 'invalid units'])
        self.assertEqual(clean([]), ([], []))


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