diff --git a/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation.js
new file mode 100644
index 0000000..81e512b
--- /dev/null
+++ b/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation.js
@@ -0,0 +1,75 @@
+QUnit.module('Buying');
+
+QUnit.test("test: supplier quotation", function(assert) {
+	assert.expect(11);
+	let done = assert.async();
+	let date;
+
+	frappe.run_serially([
+		() => {
+			date = frappe.datetime.add_days(frappe.datetime.now_date(), 10);
+			return frappe.tests.make('Supplier Quotation', [
+				{supplier: 'Test Supplier'},
+				{transaction_date: date},
+				{company: 'Wind Power LLC'},
+				{buying_price_list: 'Test-Buying-USD'},
+				{currency: 'USD'},
+				{items: [
+					[
+						{"item_code": 'Test Product 4'},
+						{"qty": 5},
+						{"uom": 'Unit'},
+						{"rate": 200},
+						{"warehouse": 'All Warehouses - WP'}
+					]
+				]},
+				{apply_discount_on: 'Grand Total'},
+				{additional_discount_percentage: 10},
+				{tc_name: 'Test Term 1'},
+				{terms: 'This is a term'}
+			]);
+		},
+		() => {
+			// Get Supplier details
+			assert.ok(cur_frm.doc.supplier == 'Test Supplier', "Supplier correct");
+			assert.ok(cur_frm.doc.company == 'Wind Power LLC', "Company correct");
+			// Get Contact details
+			assert.ok(cur_frm.doc.contact_display == 'Contact 3', "Conatct correct");
+			assert.ok(cur_frm.doc.contact_email == 'test@supplier.com', "Email correct");
+			// Get uom
+			assert.ok(cur_frm.doc.items[0].uom == 'Unit', "Multi uom correct");
+			assert.ok(cur_frm.doc.total ==  1000, "Total correct");
+			// Calculate total after discount
+			assert.ok(cur_frm.doc.grand_total ==  900, "Grand total correct");
+			// Get terms
+			assert.ok(cur_frm.doc.tc_name == 'Test Term 1', "Terms correct");
+		},
+
+		() => cur_frm.print_doc(),
+		() => frappe.timeout(1),
+		() => {
+			assert.ok($('.btn-print-print').is(':visible'), "Print Format Available");
+			assert.ok($("table > tbody > tr > td:nth-child(3) > div").text().includes("Test Product 4"), "Print Preview Works As Expected");
+		},
+		() => cur_frm.print_doc(),
+		() => frappe.timeout(1),
+		() => frappe.click_button('Get items from'),
+		() => frappe.timeout(0.3),
+		() => frappe.click_link('Material Request'),
+		() => frappe.timeout(0.3),
+		() => frappe.click_button('Get Items'),
+		() => frappe.timeout(1),
+		() => {
+			// Get item from Material Requests
+			assert.ok(cur_frm.doc.items[1].item_name == 'Test Product 1', "Getting items from material requests work");
+		},
+
+		() => cur_frm.save(),
+		() => frappe.timeout(1),
+		() => frappe.tests.click_button('Submit'),
+		() => frappe.tests.click_button('Yes'),
+		() => frappe.timeout(0.3),
+
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation_for_taxes_and_charges.js b/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation_for_taxes_and_charges.js
new file mode 100644
index 0000000..e1e393b
--- /dev/null
+++ b/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation_for_taxes_and_charges.js
@@ -0,0 +1,62 @@
+QUnit.module('Buying');
+
+QUnit.test("test: supplier quotation with taxes and charges", function(assert) {
+	assert.expect(3);
+	let done = assert.async();
+	let supplier_quotation_name;
+
+	frappe.run_serially([
+		() => {
+			return frappe.tests.make('Supplier Quotation', [
+				{supplier: 'Test Supplier'},
+				{items: [
+					[
+						{"item_code": 'Test Product 4'},
+						{"qty": 5},
+						{"rate": 100},
+						{"warehouse": 'Stores - WP'},
+					]
+				]},
+			]);
+		},
+		() => {supplier_quotation_name = cur_frm.doc.name;},
+		() => frappe.set_route('Form', 'Purchase Taxes and Charges Template', 'New Purchase Taxes and Charges Template'),
+		() => frappe.timeout(1),
+		() => {
+			return frappe.tests.set_form_values(cur_frm, [
+				{title:'TEST In State GST'},
+				{taxes: [
+					[
+						{"charge_type": 'On Net Total'},
+						{"account_head": 'CGST - WP'}
+					],
+					[
+						{"charge_type": 'On Net Total'},
+						{"account_head": 'SGST - WP'}
+					]
+				]},
+			]);
+		},
+		() => cur_frm.save(),
+		() => frappe.set_route('Form', 'Supplier Quotation', supplier_quotation_name),
+		() => frappe.timeout(1),
+		() => {
+			return frappe.tests.set_form_values(cur_frm, [
+				{taxes_and_charges:'TEST In State GST'}
+			]);
+		},
+
+		() => {
+			assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
+			assert.ok(cur_frm.doc.total_taxes_and_charges == 45, "Taxes and charges correct");
+			assert.ok(cur_frm.doc.grand_total == 545, "Grand total correct");
+		},
+
+		() => cur_frm.save(),
+		() => frappe.timeout(0.3),
+		() => frappe.tests.click_button('Submit'),
+		() => frappe.tests.click_button('Yes'),
+		() => frappe.timeout(0.3),
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt
index e962ea6..0bc61fa 100644
--- a/erpnext/tests/ui/tests.txt
+++ b/erpnext/tests/ui/tests.txt
@@ -80,4 +80,6 @@
 erpnext/schools/doctype/assessment_result/test_assessment_result.js
 erpnext/schools/doctype/assessment_result_tool/test_assessment_result_tool.js
 erpnext/buying/doctype/supplier/test_supplier.js
-erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.js
\ No newline at end of file
+erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.js
+erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation.js
+erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation_for_taxes_and_charges.js
\ No newline at end of file
