def main(csv_path, source, share_price):

    payment_processor = PaymentProcessor()
    payments = payment_processor.get_payments(csv_path, source)
    eligible_payments = payment_processor.verify_payments(payments)

    share_engine = ShareEngine()
    share_orders = share_engine.generate_share_orders(share_price, eligible_payments)

    return generate_csv(["customer_id", "shares"], sorted(share_orders))
class TestShareEngine(unittest.TestCase):
    def setUp(self):
        self.share_engine = ShareEngine()
        self.share_price = Decimal("1.2")

    def test_generate_share_orders_different_customers(self):
        payments = [
            create_payment(456, Decimal("900")),
            create_payment(123, Decimal("4200")),
        ]

        result = self.share_engine.generate_share_orders(
            self.share_price, payments)

        self.assertEqual(result, [
            {
                "customer_id": 456,
                "shares": 750
            },
            {
                "customer_id": 123,
                "shares": 3500
            },
        ])

    def test_generate_share_orders_same_customer(self):
        payments = [
            create_payment(456, Decimal("900")),
            create_payment(456, Decimal("4200")),
        ]

        result = self.share_engine.generate_share_orders(
            self.share_price, payments)

        self.assertEqual(result, [
            {
                "customer_id": 456,
                "shares": 4250
            },
        ])
 def setUp(self):
     self.share_engine = ShareEngine()
     self.share_price = Decimal("1.2")