fix: tests
diff --git a/erpnext/payroll/doctype/salary_slip/test_salary_slip.py b/erpnext/payroll/doctype/salary_slip/test_salary_slip.py
index 01e4170..9e7db97 100644
--- a/erpnext/payroll/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/payroll/doctype/salary_slip/test_salary_slip.py
@@ -8,7 +8,6 @@
 import calendar
 import random
 from erpnext.accounts.utils import get_fiscal_year
-from frappe.utils.make_random import get_random
 from frappe.utils import getdate, nowdate, add_days, add_months, flt, get_first_day, get_last_day, cstr
 from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
 from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_month_details
@@ -155,12 +154,14 @@
 		self.assertEqual(ss.gross_pay, 78000)
 
 	def test_payment_days(self):
+		from erpnext.payroll.doctype.salary_structure.test_salary_structure import create_salary_structure_assignment
+
 		no_of_days = self.get_no_of_days()
 		# Holidays not included in working days
 		frappe.db.set_value("Payroll Settings", None, "include_holidays_in_total_working_days", 1)
 
 		# set joinng date in the same month
-		make_employee("test_payment_days@salary.com")
+		employee = make_employee("test_payment_days@salary.com")
 		if getdate(nowdate()).day >= 15:
 			relieving_date = getdate(add_days(nowdate(),-10))
 			date_of_joining = getdate(add_days(nowdate(),-10))
@@ -174,25 +175,30 @@
 			date_of_joining = getdate(nowdate())
 			relieving_date = getdate(nowdate())
 
-		frappe.db.set_value("Employee", frappe.get_value("Employee",
-			{"employee_name":"test_payment_days@salary.com"}, "name"), "date_of_joining", date_of_joining)
-		frappe.db.set_value("Employee", frappe.get_value("Employee",
-			{"employee_name":"test_payment_days@salary.com"}, "name"), "relieving_date", None)
-		frappe.db.set_value("Employee", frappe.get_value("Employee",
-			{"employee_name":"test_payment_days@salary.com"}, "name"), "status", "Active")
+		frappe.db.set_value("Employee", employee, {
+			"date_of_joining": date_of_joining,
+			"relieving_date": None,
+			"status": "Active"
+		})
 
-		ss = make_employee_salary_slip("test_payment_days@salary.com", "Monthly", "Test Payment Days")
+		salary_structure = "Test Payment Days"
+		ss = make_employee_salary_slip("test_payment_days@salary.com", "Monthly", salary_structure)
 
 		self.assertEqual(ss.total_working_days, no_of_days[0])
 		self.assertEqual(ss.payment_days, (no_of_days[0] - getdate(date_of_joining).day + 1))
 
 		# set relieving date in the same month
-		frappe.db.set_value("Employee",frappe.get_value("Employee",
-			{"employee_name":"test_payment_days@salary.com"}, "name"), "date_of_joining", (add_days(nowdate(),-60)))
-		frappe.db.set_value("Employee", frappe.get_value("Employee",
-			{"employee_name":"test_payment_days@salary.com"}, "name"), "relieving_date", relieving_date)
-		frappe.db.set_value("Employee", frappe.get_value("Employee",
-			{"employee_name":"test_payment_days@salary.com"}, "name"), "status", "Left")
+		frappe.db.set_value("Employee", employee, {
+			"date_of_joining": add_days(nowdate(),-60),
+			"relieving_date": relieving_date,
+			"status": "Left"
+		})
+
+		if date_of_joining.day > 1:
+			self.assertRaises(frappe.ValidationError, ss.save)
+
+		create_salary_structure_assignment(employee, salary_structure)
+		ss.reload()
 		ss.save()
 
 		self.assertEqual(ss.total_working_days, no_of_days[0])
@@ -285,6 +291,7 @@
 
 	def test_multi_currency_salary_slip(self):
 		from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
+
 		applicant = make_employee("test_multi_currency_salary_slip@salary.com", company="_Test Company")
 		frappe.db.sql("""delete from `tabSalary Structure` where name='Test Multi Currency Salary Slip'""")
 		salary_structure = make_salary_structure("Test Multi Currency Salary Slip", "Monthly", employee=applicant, company="_Test Company", currency='USD')
@@ -325,7 +332,8 @@
 	def test_component_wise_year_to_date_computation(self):
 		from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
 
-		applicant = make_employee("test_ytd@salary.com", company="_Test Company")
+		employee_name = "test_component_wise_ytd@salary.com"
+		applicant = make_employee(employee_name, company="_Test Company")
 
 		payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company")
 
@@ -336,13 +344,13 @@
 			"Monthly", employee=applicant, company="_Test Company", currency="INR", payroll_period=payroll_period)
 
 		# clear salary slip for this employee
-		frappe.db.sql("DELETE FROM `tabSalary Slip` where employee_name = 'test_ytd@salary.com'")
+		frappe.db.sql("DELETE FROM `tabSalary Slip` where employee_name = '%s'" % employee_name)
 
 		create_salary_slips_for_payroll_period(applicant, salary_structure.name,
 			payroll_period, deduct_random=False, num=3)
 
 		salary_slips = frappe.get_all("Salary Slip", fields=["name"], filters={"employee_name":
-			"test_ytd@salary.com"}, order_by = "posting_date")
+			employee_name}, order_by="posting_date")
 
 		year_to_date = dict()
 		for slip in salary_slips:
@@ -380,10 +388,10 @@
 
 		from erpnext.payroll.doctype.salary_structure.test_salary_structure import \
 			make_salary_structure, create_salary_structure_assignment
+
 		salary_structure = make_salary_structure("Stucture to test tax", "Monthly",
-			other_details={"max_benefits": 100000}, test_tax=True)
-		create_salary_structure_assignment(employee, salary_structure.name,
-			payroll_period.start_date)
+			other_details={"max_benefits": 100000}, test_tax=True,
+			employee=employee, payroll_period=payroll_period)
 
 		# create salary slip for whole period deducting tax only on last period
 		# to find the total tax amount paid
@@ -469,6 +477,7 @@
 
 def make_employee_salary_slip(user, payroll_frequency, salary_structure=None):
 	from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
+
 	if not salary_structure:
 		salary_structure = payroll_frequency + " Salary Structure Test for Salary Slip"
 
diff --git a/erpnext/payroll/doctype/salary_structure/test_salary_structure.py b/erpnext/payroll/doctype/salary_structure/test_salary_structure.py
index 36387f2..26cd992 100644
--- a/erpnext/payroll/doctype/salary_structure/test_salary_structure.py
+++ b/erpnext/payroll/doctype/salary_structure/test_salary_structure.py
@@ -6,7 +6,7 @@
 import unittest
 import erpnext
 from frappe.utils.make_random import get_random
-from frappe.utils import nowdate, add_days, add_years, getdate, add_months
+from frappe.utils import nowdate, add_days, add_years, getdate, add_months, get_first_day, date_diff
 from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
 from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_earning_salary_component,\
 	make_deduction_salary_component, make_employee_salary_slip, create_tax_slab
@@ -113,8 +113,9 @@
 		sal_struct = make_salary_structure("Salary Structure Multi Currency", "Monthly", currency='USD')
 		self.assertEqual(sal_struct.currency, 'USD')
 
-def make_salary_structure(salary_structure, payroll_frequency, employee=None, dont_submit=False, other_details=None,
-	test_tax=False, company=None, currency=erpnext.get_default_currency(), payroll_period=None):
+def make_salary_structure(salary_structure, payroll_frequency, employee=None,
+	from_date=None, dont_submit=False, other_details=None,test_tax=False,
+	company=None, currency=erpnext.get_default_currency(), payroll_period=None):
 	if test_tax:
 		frappe.db.sql("""delete from `tabSalary Structure` where name=%s""",(salary_structure))
 
@@ -139,10 +140,23 @@
 	else:
 		salary_structure_doc = frappe.get_doc("Salary Structure", salary_structure)
 
+	filters = {'employee':employee, 'docstatus': 1}
+	if not from_date and payroll_period:
+		from_date = payroll_period.start_date
+
+	if from_date:
+		filters['from_date'] = from_date
+
 	if employee and not frappe.db.get_value("Salary Structure Assignment",
-		{'employee':employee, 'docstatus': 1}) and salary_structure_doc.docstatus==1:
-			create_salary_structure_assignment(employee, salary_structure, company=company, currency=currency,
-			payroll_period=payroll_period)
+		filters) and salary_structure_doc.docstatus==1:
+		create_salary_structure_assignment(
+			employee,
+			salary_structure,
+			from_date=from_date,
+			company=company,
+			currency=currency,
+			payroll_period=payroll_period
+		)
 
 	return salary_structure_doc
 
@@ -165,12 +179,13 @@
 	salary_structure_assignment.base = 50000
 	salary_structure_assignment.variable = 5000
 
-	if getdate(nowdate()).day == 1:
-		date = from_date or nowdate()
-	else:
-		date = from_date or add_days(nowdate(), -1)
+	if not from_date:
+		from_date = get_first_day(nowdate())
+		joining_date = frappe.get_cached_value("Employee", employee, "date_of_joining")
+		if date_diff(joining_date, from_date) > 0:
+			from_date = joining_date
 
-	salary_structure_assignment.from_date = date
+	salary_structure_assignment.from_date = from_date
 	salary_structure_assignment.salary_structure = salary_structure
 	salary_structure_assignment.currency = currency
 	salary_structure_assignment.payroll_payable_account = get_payable_account(company)
@@ -183,4 +198,4 @@
 def get_payable_account(company=None):
 	if not company:
 		company = erpnext.get_default_company()
-	return frappe.db.get_value("Company", company, "default_payroll_payable_account")
\ No newline at end of file
+	return frappe.db.get_value("Company", company, "default_payroll_payable_account")