test: expense claim against fully and partially paid advances
diff --git a/erpnext/hr/doctype/expense_claim/test_expense_claim.py b/erpnext/hr/doctype/expense_claim/test_expense_claim.py
index 2a07920..e1f26e9 100644
--- a/erpnext/hr/doctype/expense_claim/test_expense_claim.py
+++ b/erpnext/hr/doctype/expense_claim/test_expense_claim.py
@@ -72,6 +72,57 @@
 		expense_claim = frappe.get_doc("Expense Claim", expense_claim.name)
 		self.assertEqual(expense_claim.status, "Unpaid")
 
+	def test_expense_claim_against_fully_paid_advances(self):
+		from erpnext.hr.doctype.employee_advance.test_employee_advance import get_advances_for_claim, make_employee_advance, make_payment_entry
+
+		frappe.db.delete("Employee Advance")
+
+		payable_account = get_payable_account("_Test Company")
+		claim = make_expense_claim(payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True)
+
+		advance = make_employee_advance(claim.employee)
+		pe = make_payment_entry(advance)
+		pe.submit()
+
+		# claim for already paid out advances
+		claim = get_advances_for_claim(claim, advance.name)
+		claim.save()
+		claim.submit()
+
+		self.assertEqual(claim.grand_total, 0)
+		self.assertEqual(claim.status, "Paid")
+
+	def test_expense_claim_partially_paid_via_advance(self):
+		from erpnext.hr.doctype.employee_advance.test_employee_advance import (
+			get_advances_for_claim,
+			make_employee_advance,
+			make_payment_entry as make_advance_payment
+		)
+
+		frappe.db.delete("Employee Advance")
+
+		payable_account = get_payable_account("_Test Company")
+		claim = make_expense_claim(payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True)
+
+		# link advance for partial amount
+		advance = make_employee_advance(claim.employee, {'advance_amount': 500})
+		pe = make_advance_payment(advance)
+		pe.submit()
+
+		claim = get_advances_for_claim(claim, advance.name)
+		claim.save()
+		claim.submit()
+
+		self.assertEqual(claim.grand_total, 500)
+		self.assertEqual(claim.status, "Unpaid")
+
+		# reimburse remaning amount
+		make_payment_entry(claim, payable_account, 500)
+		claim.reload()
+
+		self.assertEqual(claim.total_amount_reimbursed, 500)
+		self.assertEqual(claim.status, "Paid")
+
 	def test_expense_claim_gl_entry(self):
 		payable_account = get_payable_account(company_name)
 		taxes = generate_taxes()