diff --git a/erpnext/accounts/report/purchase_register/purchase_register.py b/erpnext/accounts/report/purchase_register/purchase_register.py
index 616dca4..a6d0ea0 100644
--- a/erpnext/accounts/report/purchase_register/purchase_register.py
+++ b/erpnext/accounts/report/purchase_register/purchase_register.py
@@ -61,7 +61,6 @@
 		opening_row = get_opening_row(
 			"Supplier", filters.supplier, getdate(filters.from_date), filters.company
 		)[0]
-		print(opening_row)
 		res.append(
 			{
 				"payable_account": opening_row.account,
diff --git a/erpnext/accounts/report/purchase_register/test_purchase_register.py b/erpnext/accounts/report/purchase_register/test_purchase_register.py
new file mode 100644
index 0000000..6903662
--- /dev/null
+++ b/erpnext/accounts/report/purchase_register/test_purchase_register.py
@@ -0,0 +1,128 @@
+# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors
+# MIT License. See license.txt
+
+import frappe
+from frappe.tests.utils import FrappeTestCase
+from frappe.utils import add_months, getdate, today
+
+from erpnext.accounts.report.purchase_register.purchase_register import execute
+
+
+class TestPurchaseRegister(FrappeTestCase):
+	def test_purchase_register(self):
+		frappe.db.sql("delete from `tabPurchase Invoice` where company='_Test Company 6'")
+		frappe.db.sql("delete from `tabGL Entry` where company='_Test Company 6'")
+
+		filters = frappe._dict(
+			company="_Test Company 6", from_date=add_months(today(), -1), to_date=today()
+		)
+
+		pi = make_purchase_invoice()
+
+		report_results = execute(filters)
+		first_row = frappe._dict(report_results[1][0])
+		self.assertEqual(first_row.voucher_type, "Purchase Invoice")
+		self.assertEqual(first_row.voucher_no, pi.name)
+		self.assertEqual(first_row.payable_account, "Creditors - _TC6")
+		self.assertEqual(first_row.net_total, 1000)
+		self.assertEqual(first_row.total_tax, 100)
+		self.assertEqual(first_row.grand_total, 1100)
+
+	def test_purchase_register_ledger_view(self):
+		frappe.db.sql("delete from `tabPurchase Invoice` where company='_Test Company 6'")
+		frappe.db.sql("delete from `tabGL Entry` where company='_Test Company 6'")
+
+		filters = frappe._dict(
+			company="_Test Company 6",
+			from_date=add_months(today(), -1),
+			to_date=today(),
+			include_payments=True,
+			supplier="_Test Supplier",
+		)
+
+		pi = make_purchase_invoice()
+		pe = make_payment_entry()
+
+		report_results = execute(filters)
+		first_row = frappe._dict(report_results[1][2])
+		self.assertEqual(first_row.voucher_type, "Payment Entry")
+		self.assertEqual(first_row.voucher_no, pe.name)
+		self.assertEqual(first_row.payable_account, "Creditors - _TC6")
+		self.assertEqual(first_row.debit, 0)
+		self.assertEqual(first_row.credit, 600)
+		self.assertEqual(first_row.balance, 500)
+
+
+def make_purchase_invoice():
+	from erpnext.accounts.doctype.account.test_account import create_account
+	from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
+	from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
+
+	gst_acc = create_account(
+		account_name="GST",
+		account_type="Tax",
+		parent_account="Duties and Taxes - _TC6",
+		company="_Test Company 6",
+		account_currency="INR",
+	)
+	create_warehouse(warehouse_name="_Test Warehouse - _TC6", company="_Test Company 6")
+	create_cost_center(cost_center_name="_Test Cost Center", company="_Test Company 6")
+	pi = create_purchase_invoice_with_taxes()
+	pi.submit()
+	return pi
+
+
+def create_purchase_invoice_with_taxes():
+	return frappe.get_doc(
+		{
+			"doctype": "Purchase Invoice",
+			"posting_date": today(),
+			"supplier": "_Test Supplier",
+			"company": "_Test Company 6",
+			"cost_center": "_Test Cost Center - _TC6",
+			"taxes_and_charges": "",
+			"currency": "INR",
+			"credit_to": "Creditors - _TC6",
+			"items": [
+				{
+					"doctype": "Purchase Invoice Item",
+					"cost_center": "_Test Cost Center - _TC6",
+					"item_code": "_Test Item",
+					"qty": 1,
+					"rate": 1000,
+					"expense_account": "Stock Received But Not Billed - _TC6",
+				}
+			],
+			"taxes": [
+				{
+					"account_head": "GST - _TC6",
+					"cost_center": "_Test Cost Center - _TC6",
+					"add_deduct_tax": "Add",
+					"category": "Valuation and Total",
+					"charge_type": "Actual",
+					"description": "Shipping Charges",
+					"doctype": "Purchase Taxes and Charges",
+					"parentfield": "taxes",
+					"rate": 100,
+					"tax_amount": 100.0,
+				}
+			],
+		}
+	)
+
+
+def make_payment_entry():
+	frappe.set_user("Administrator")
+	from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
+
+	return create_payment_entry(
+		company="_Test Company 6",
+		party_type="Supplier",
+		party="_Test Supplier",
+		payment_type="Pay",
+		paid_from="Cash - _TC6",
+		paid_to="Creditors - _TC6",
+		paid_amount=600,
+		save=1,
+		submit=1,
+	)
