Пример #1
0
        "preview": False,
        "safe": False,
        "postVoucherEnabled": True,
        "hasEvent": False,
        "eventTitle": "صدور فاکتور با پایتون",
        "eventTimeZone": "Asia/Tehran",
        "eventDescription": "این رویداد برای یک فاکتور که از طریق پایتون ثبت شده، ثبت شده است",
        "metadata": {"name": "reza", "family": "zare", "price": 12000000},
        "eventMetadata": {"event_type": ["email", "notification"], "id": "1,2"},
        "eventReminders": [{"id": 1, "alarmTime": 1578472427000, "alarmType": "Email"},
                           {"id": 2, "alarmTime": 1578472427000, "alarmType": "Notification"}],
        "sc_voucher_hash": SC_VOUCHER_HASH,
        "sc_api_key": SC_API_KEY,
    }

    invoice = pod_billing.issue_invoice(products=products, guild_code=GUILD_CODE, **params)
    print("Invoice :\n", invoice)
    # OUTPUT
    # Invoice :
    # {
    #     'id': 59678,
    #     'totalAmountWithoutDiscount': 44500,
    #     'delegationAmount': 0,
    #     'totalAmount': 44500,
    #     'payableAmount': 48505,
    #     'vat': 4005,
    #     'issuanceDate': 1578481916475,
    #     'deliveryDate': 1582144200000,
    #     'billNumber': 'Py_56555977',
    #     'paymentBillNumber': '1048043',
    #     'uniqueNumber': 'f924fcbf0949e9b',
class TestPodVoucher(unittest.TestCase):
    __slots__ = ("__voucher", "__billing")

    def setUp(self):
        self.__voucher = PodVoucher(api_token=API_TOKEN, server_type=SERVER_MODE)
        self.__billing = PodBilling(api_token=API_TOKEN, server_type=SERVER_MODE)

    def test_1_define_credit_voucher(self):
        vouchers = [{
            "name": "کد اعتبار 1 ریالی تست پایتون",
            "amount": 1,
            "count": 1,
            "description": "این کد اعتبار به صورت تستی و با پایتون ثبت شده است "
        }]
        expire_date = "1420/12/01"
        result = self.__voucher.define_credit_voucher(vouchers=vouchers, guild_code=GUILD_CODE, expire_date=expire_date)
        self.assertIsInstance(result, list, msg="define credit voucher (all params) : check instance")
        self.assertEqual(len(result), 1, msg="define credit voucher (all params) : check len")

    @staticmethod
    def __generate_random_voucher(prefix=""):
        return "{}{}".format(prefix, randrange(1000, 2000000))

    def test_1_define_credit_voucher_all_params(self):
        vouchers = [{
            "name": "کد اعتبار 1 ریالی تست پایتون",
            "amount": 1,
            "count": 2,
            "description": "این کد اعتبار به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("CREDIT-"), self.__generate_random_voucher("CREDIT-")]
        }, {
            "name": "کد اعتبار 2 ریالی تست پایتون",
            "amount": 2,
            "count": 1,
            "description": "این کد اعتبار به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("CREDIT-")]
        }]
        expire_date = "1420/12/01"
        result = self.__voucher.define_credit_voucher(vouchers=vouchers, guild_code=GUILD_CODE, expire_date=expire_date,
                                                      limited_consumer_id=USER_ID, currency_code="IRR")
        self.assertIsInstance(result, list, msg="define credit voucher (all params) : check instance")
        self.assertEqual(len(result), 3, msg="define credit voucher (all params) : check len")

    def test_1_define_credit_voucher_invalid_hash_length(self):
        vouchers = [{
            "name": "کد اعتبار 1 ریالی تست پایتون",
            "amount": 1,
            "count": 3,  # changed
            "description": "این کد اعتبار به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("CREDIT-"), self.__generate_random_voucher("CREDIT-")]
        }, {
            "name": "کد اعتبار 2 ریالی تست پایتون",
            "amount": 2,
            "count": 1,
            "description": "این کد اعتبار به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("CREDIT-")]
        }]
        expire_date = "1420/12/01"

        with self.assertRaises(InvalidDataException, msg="define credit voucher : invalid hash length"):
            self.__voucher.define_credit_voucher(vouchers=vouchers, guild_code=GUILD_CODE, expire_date=expire_date,
                                                 limited_consumer_id=USER_ID, currency_code="IRR")

    def test_1_define_credit_voucher_validation_error(self):
        vouchers = [{
            "name": "کد اعتبار 1 ریالی تست پایتون",
            "amount": "1",  # should be int
            "count": "3",  # should be int
            "description": "این کد اعتبار به صورت تستی و با پایتون ثبت شده است "
        }, {
            "name": "کد اعتبار 1 ریالی تست پایتون",
            "amount": "1",  # should be int
            "count": "1",  # should be int
            "description": "این کد اعتبار به صورت تستی و با پایتون ثبت شده است "
        }]
        expire_date = "1420-12-01"  # correct format yyyy/mm/dd
        limited_consumer_id = "123"  # should be int
        with self.assertRaises(InvalidDataException, msg="define credit voucher : validation error"):
            self.__voucher.define_credit_voucher(vouchers=vouchers, guild_code=GUILD_CODE, expire_date=expire_date,
                                                 limited_consumer_id=limited_consumer_id, currency_code="IRR")

    def test_1_define_credit_voucher_required_params(self):
        with self.assertRaises(TypeError, msg="define credit voucher : required params"):
            self.__voucher.define_credit_voucher()

    def test_2_define_discount_amount_voucher(self):
        vouchers = [{
            "name": "کد تخفیف 1 ریالی تست پایتون",
            "amount": 1,
            "count": 2,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است "
        }, {
            "name": "کد تخفیف 1 ریالی تست پایتون",
            "amount": 1,
            "count": 1,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است "
        }]
        expire_date = "1420/12/01"
        result = self.__voucher.define_discount_amount_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                               expire_date=expire_date)

        self.assertIsInstance(result, list, msg="define discount amount voucher (all params) : check instance")
        self.assertEqual(len(result), 3, msg="define discount amount voucher (all params) : check len")

    def test_2_define_discount_amount_voucher_all_params(self):
        vouchers = [{
            "name": "کد تخفیف 1 ریالی تست پایتون",
            "amount": 1,
            "count": 2,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS1-"), self.__generate_random_voucher("DIS1-")]
        }, {
            "name": "کد تخفیف 1 ریالی تست پایتون",
            "amount": 1,
            "count": 1,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS2-")]
        }]
        expire_date = "1420/12/01"
        product_list = PRODUCT_IDs
        dealer_business_id_list = DEALER_BUSINESS_IDs
        result = self.__voucher.define_discount_amount_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                               expire_date=expire_date, limited_consumer_id=USER_ID,
                                                               currency_code="IRR", product_id=product_list,
                                                               dealer_business_id=dealer_business_id_list)

        self.assertIsInstance(result, list, msg="define discount amount voucher (all params) : check instance")
        self.assertEqual(len(result), 3, msg="define discount amount voucher (all params) : check len")

    def test_2_define_discount_amount_voucher_invalid_hash_len(self):
        vouchers = [{
            "name": "کد تخفیف 1 ریالی تست پایتون",
            "amount": 1,
            "count": 3,  # changed
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS1-"), self.__generate_random_voucher("DIS1-")]
        }, {
            "name": "کد تخفیف 1 ریالی تست پایتون",
            "amount": 1,
            "count": 1,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS2-")]
        }]
        expire_date = "1420/11/01"
        with self.assertRaises(InvalidDataException, msg="define discount amount voucher : invalid hash len"):
            self.__voucher.define_discount_amount_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                          expire_date=expire_date, limited_consumer_id=USER_ID,
                                                          currency_code="IRR")

    def test_2_define_discount_amount_voucher_validation_error(self):
        vouchers = [{
            "name": "کد تخفیف 1 ریالی تست پایتون",
            "amount": "1",  # should be int
            "count": "3",  # should be int
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS1-"), self.__generate_random_voucher("DIS1-")]
        }, {
            "name": "کد تخفیف 1 ریالی تست پایتون",
            "amount": "1",  # should be int
            "count": "1",  # should be int
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS2-")]
        }]
        expire_date = "1420-11-01"  # correct format yyyy/mm/dd
        with self.assertRaises(InvalidDataException, msg="define discount amount voucher : validation error"):
            self.__voucher.define_discount_amount_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                          expire_date=expire_date, limited_consumer_id=USER_ID,
                                                          currency_code="IRR")

    def test_2_define_discount_amount_voucher_required_params(self):
        with self.assertRaises(TypeError, msg="define discount amount voucher : required params"):
            self.__voucher.define_discount_amount_voucher()

    def test_3_define_discount_percentage_voucher(self):
        vouchers = [{
            "name": "کد تخفیف 1 درصدی تست پایتون",
            "discountPercentage": 1,
            "amount": 100,
            "count": 2,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است "
        }, {
            "name": "کد تخفیف 2 درصدی تست پایتون",
            "discountPercentage": 2,
            "amount": 200,
            "count": 1,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است "
        }]
        expire_date = "1420/12/01"
        discount_type = PodVoucher.DISCOUNT_TYPE_ONE_TIME_INVOICE
        result = self.__voucher.define_discount_percentage_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                                   expire_date=expire_date, discount_type=discount_type)

        self.assertIsInstance(result, list, msg="define discount percentage voucher (all params) : check instance")
        self.assertEqual(len(result), 3, msg="define discount percentage voucher (all params) : check len")

    def test_3_define_discount_percentage_voucher_all_params(self):
        vouchers = [{
            "name": "کد تخفیف 1 درصدی تست پایتون",
            "discountPercentage": 1,
            "amount": 100,
            "count": 2,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS1-"), self.__generate_random_voucher("DIS1-")]
        }, {
            "name": "کد تخفیف 2 درصدی تست پایتون",
            "discountPercentage": 2,
            "amount": 200,
            "count": 1,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS2-")]
        }]
        expire_date = "1420/12/01"
        product_list = PRODUCT_IDs
        dealer_business_id_list = DEALER_BUSINESS_IDs
        discount_type = PodVoucher.DISCOUNT_TYPE_ONE_TIME_INVOICE
        result = self.__voucher.define_discount_percentage_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                                   expire_date=expire_date, limited_consumer_id=USER_ID,
                                                                   currency_code="IRR", product_id=product_list,
                                                                   dealer_business_id=dealer_business_id_list,
                                                                   discount_type=discount_type)

        self.assertIsInstance(result, list, msg="define discount percentage voucher (all params) : check instance")
        self.assertEqual(len(result), 3, msg="define discount percentage voucher (all params) : check len")

    def test_3_define_discount_percentage_voucher_invalid_hash_len(self):
        vouchers = [{
            "name": "کد تخفیف 1 درصدی تست پایتون",
            "discountPercentage": 1,
            "amount": 100,
            "count": 3,  # changed
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS1-"), self.__generate_random_voucher("DIS1-")]
        }, {
            "name": "کد تخفیف 2 درصدی تست پایتون",
            "discountPercentage": 2,
            "amount": 200,
            "count": 1,
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS2-")]
        }]
        expire_date = "1420/11/01"
        discount_type = PodVoucher.DISCOUNT_TYPE_ONE_TIME_INVOICE
        with self.assertRaises(InvalidDataException, msg="define discount percentage voucher : invalid hash len"):
            self.__voucher.define_discount_percentage_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                              expire_date=expire_date, limited_consumer_id=USER_ID,
                                                              currency_code="IRR", discount_type=discount_type)

    def test_3_define_discount_percentage_voucher_validation_error(self):
        vouchers = [{
            "name": "کد تخفیف 1 درصدی تست پایتون",
            "discountPercentage": "1",
            "amount": "100",  # should be int
            "count": "3",  # should be int
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS1-"), self.__generate_random_voucher("DIS1-")]
        }, {
            "name": "کد تخفیف 2 درصدی تست پایتون",
            "discountPercentage": "2",
            "amount": "200",  # should be int
            "count": "1",  # should be int
            "description": "این کد تخفیف به صورت تستی و با پایتون ثبت شده است ",
            "hash": [self.__generate_random_voucher("DIS2-")]
        }]
        expire_date = "1420-11-01"  # correct format yyyy/mm/dd
        discount_type = 3  # one of PodVoucher.DISCOUNT_TYPE_ONE_TIME_ITEM or PodVoucher.DISCOUNT_TYPE_ONE_TIME_INVOICE
        # or PodVoucher.DISCOUNT_TYPE_UNLIMITED

        with self.assertRaises(InvalidDataException, msg="define discount percentage voucher : validation error"):
            self.__voucher.define_discount_percentage_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                              expire_date=expire_date, limited_consumer_id=USER_ID,
                                                              currency_code="IRR", discount_type=discount_type)

    def test_3_define_discount_percentage_voucher_required_params(self):
        with self.assertRaises(TypeError, msg="define discount percentage voucher : required params"):
            self.__voucher.define_discount_percentage_voucher()

    def __get_invoice(self, **kwargs):
        kwargs["products"] = [
            {
                "productId": 0,
                "price": 50000,
                "quantity": 1,
                "productDescription": "محصول اول در پایتون"
            }
        ]
        kwargs["guild_code"] = GUILD_CODE
        kwargs["description"] = "تست اعمال کد تخفیف بر روی فاکتور بعد از صدور فاکتور - پایتون تست"
        return self.__billing.issue_invoice(**kwargs)

    def __get_voucher(self):
        vouchers = [
            {
                "name": "تخفیف 5000",
                "amount": 5000,
                "count": 1,
                "description": "Discount 5000 Rials"
            }
        ]
        voucher = self.__voucher.define_discount_amount_voucher(vouchers=vouchers, guild_code=GUILD_CODE,
                                                                expire_date="1420/12/01")
        return voucher[0]

    def test_4_apply_voucher(self):
        invoice = self.__get_invoice(postVoucherEnabled=True)
        voucher = self.__get_voucher()
        result = self.__voucher.apply_voucher(invoice_id=invoice["id"], voucher_hash=voucher["hash"])

        self.assertIsInstance(result, dict, msg="apply voucher : check instance")
        self.assertEqual(result["invoiceItemSrvs"][0]["discount"], voucher["creditAmount"],
                         msg="apply voucher : check amount")

    def test_4_apply_voucher_validation_error(self):
        with self.assertRaises(InvalidDataException, msg="apply voucher : validation error"):
            self.__voucher.apply_voucher(invoice_id="123456", voucher_hash="ABCDE")

    def test_4_apply_voucher_required_params(self):
        with self.assertRaises(TypeError, msg="apply voucher : required params"):
            self.__voucher.apply_voucher()

    def test_5_get_voucher_list(self):
        params = {
            "page": 1,
            "size": 50
        }
        result = self.__voucher.get_voucher_list(**params)
        self.assertIsInstance(result, list, msg="get voucher list : check instance")

    def test_5_get_voucher_list_all_params(self):
        params = {
            "page": 1,
            "size": 50,
            "type": PodVoucher.DISCOUNT_TYPE_ONE_TIME_INVOICE | PodVoucher.DISCOUNT_TYPE_ONE_TIME_ITEM |
                    PodVoucher.DISCOUNT_TYPE_UNLIMITED,
            "consumerId": 123456,
            "hash": "",
            "name": "",
            "guildCode": ["API_GUILD", "CLOTHING_GUILD"],
            "currencyCode": "IRR",
            "amountFrom": 0,
            "amountTo": 2000,
            "discountPercentageFrom": 5,
            "discountPercentageTo": 10,
            "expireDateFrom": "1398/12/01",
            "expireDateTo": "1399/01/01",
            "productId": [1234, 4567],
            "consumDateFrom": "1398/12/15",
            "consumDateTo": "1398/12/17",
            "usedAmountFrom": 10000,
            "usedAmountTo": 200000,
            "active": True,
            "used": False
        }

        result = self.__voucher.get_voucher_list(**params)
        self.assertIsInstance(result, list, msg="get voucher list (all params) : check instance")

    def test_5_get_voucher_list_validation_error(self):
        params = {
            "page": 1,
            "size": 50,
            "type": "1",    # should be int
            "consumerId": "123456",    # should be int
            "hash": 123,    # should be str
            "name": 123,
            "guildCode": ["API_GUILD", "CLOTHING_GUILD"],
            "currencyCode": "IRR",
            "amountFrom": 0,
            "amountTo": 2000,
            "discountPercentageFrom": 5,
            "discountPercentageTo": 10,
            "expireDateFrom": "1398-12-01",    # should be format yyyy/mm/dd
            "expireDateTo": "1399-01-01",    # should be format yyyy/mm/dd
            "productId": [1234, 4567],
            "consumDateFrom": "1398-12-15",    # should be format yyyy/mm/dd
            "consumDateTo": "1398-12-17",    # should be format yyyy/mm/dd
            "usedAmountFrom": "10000",    # should be int
            "usedAmountTo": "200000",    # should be int
            "active": "True",    # should be boolean
            "used": "False"    # should be boolean
        }
        with self.assertRaises(InvalidDataException, msg="get voucher list : validation error"):
            self.__voucher.get_voucher_list(**params)

    def test_6_activate_voucher(self):
        voucher = self.__get_voucher()

        result = self.__voucher.activate_voucher(voucher["id"])
        self.assertIsInstance(result, dict, msg="activate voucher : check instance")
        self.assertEqual(result["active"], True, msg="activate voucher : check status")

    def test_6_activate_voucher_required_params(self):
        with self.assertRaises(TypeError, msg="activate voucher : required param"):
            self.__voucher.activate_voucher()

    def test_6_activate_voucher_validation_error(self):
        with self.assertRaises(InvalidDataException, msg="activate voucher : validation error"):
            self.__voucher.activate_voucher(voucher_id="123456")

    def test_7_deactivate_voucher(self):
        voucher = self.__get_voucher()

        result = self.__voucher.deactivate_voucher(voucher["id"])
        self.assertIsInstance(result, dict, msg="deactivate voucher : check instance")
        self.assertEqual(result["active"], False, msg="deactivate voucher : check status")

    def test_7_deactivate_voucher_required_params(self):
        with self.assertRaises(TypeError, msg="deactivate voucher : required param"):
            self.__voucher.deactivate_voucher()

    def test_7_deactivate_voucher_validation_error(self):
        with self.assertRaises(InvalidDataException, msg="deactivate voucher : validation error"):
            self.__voucher.deactivate_voucher(voucher_id="123456")