test: Basic report data testing

This commit is contained in:
Hussain Nagaria 2021-04-01 00:44:35 +05:30
parent 39b75c63ad
commit 1e772bb9a4
2 changed files with 153 additions and 1 deletions

View File

@ -99,7 +99,10 @@ class EmployeeHoursReport:
if self.filters.project:
additional_filters += f"AND ttd.project = '{self.filters.project}'"
if self.filters.company:
additional_filters += f"AND tt.company = '{self.filters.company}'"
self.filtered_time_logs = frappe.db.sql('''
SELECT tt.employee AS employee, ttd.hours AS hours, ttd.billable AS billable, ttd.project AS project
FROM `tabTimesheet Detail` AS ttd
@ -134,6 +137,8 @@ class EmployeeHoursReport:
data['per_util'] = flt(((data['billed_hours'] + data['non_billed_hours']) / TOTAL_HOURS) * 100, 2)
def generate_report_summary(self):
self.report_summary = []
if not self.data:
return

View File

@ -0,0 +1,147 @@
from __future__ import unicode_literals
import unittest
import frappe
from frappe.utils.make_random import get_random
from frappe.utils import get_timestamp
from erpnext.projects.report.employee_hours_utilisation_based_on_timesheet.employee_hours_utilisation_based_on_timesheet import execute
from erpnext.hr.doctype.employee.test_employee import make_employee
from erpnext.projects.doctype.project.test_project import make_project
class TestEmployeeUtilisation(unittest.TestCase):
@classmethod
def setUpClass(cls):
# Create test employee
cls.test_emp1 = make_employee("test@example.com", "_Test Company")
cls.test_emp2 = make_employee("test1@example.com", "_Test Company")
# Create test project
cls.test_project = make_project({"project_name": "_Test Project"})
# Create test timesheets
cls.create_test_timesheets()
@classmethod
def create_test_timesheets(cls):
timesheet1 = frappe.new_doc("Timesheet")
timesheet1.employee = cls.test_emp1
timesheet1.company = '_Test Company'
timesheet1.append("time_logs", {
"activity_type": get_random("Activity Type"),
"hours": 5,
"billable": 1,
"from_time": '2021-04-01 13:30:00.000000',
"to_time": '2021-04-01 18:30:00.000000'
})
timesheet1.save()
timesheet1.submit()
timesheet2 = frappe.new_doc("Timesheet")
timesheet2.employee = cls.test_emp2
timesheet2.company = '_Test Company'
timesheet2.append("time_logs", {
"activity_type": get_random("Activity Type"),
"hours": 10,
"billable": 0,
"from_time": '2021-04-01 13:30:00.000000',
"to_time": '2021-04-01 23:30:00.000000',
"project": cls.test_project.name
})
timesheet2.save()
timesheet2.submit()
@classmethod
def tearDownClass(cls):
# Delete time logs
frappe.db.sql("""
DELETE FROM `tabTimesheet Detail`
WHERE parent IN (
SELECT name
FROM `tabTimesheet`
WHERE company = '_Test Company'
)
""")
frappe.db.sql("DELETE FROM `tabTimesheet` WHERE company='_Test Company'")
frappe.db.sql(f"DELETE FROM `tabProject` WHERE name='{cls.test_project.name}'")
print(f"DELETE FROM `tabProject` WHERE name='{cls.test_project.name}'")
def test_utilisation_report_with_required_filters_only(self):
filters = {
"company": "_Test Company",
"from_date": "2021-04-01",
"to_date": "2021-04-03"
}
report = execute(filters)
expected_data = [
{
'employee': 'EMP-00002',
'billed_hours': 0.0,
'non_billed_hours': 10.0,
'total_hours': 18.0,
'untracked_hours': 8.0,
'per_util': 55.56
},
{
'employee': 'EMP-00001',
'billed_hours': 5.0,
'non_billed_hours': 0.0,
'total_hours': 18.0,
'untracked_hours': 13.0,
'per_util': 27.78
}
]
self.assertEqual(report[1], expected_data)
def test_utilisation_report_for_single_employee(self):
filters = {
"company": "_Test Company",
"from_date": "2021-04-01",
"to_date": "2021-04-03",
"employee": self.test_emp1
}
report = execute(filters)
expected_data = [
{
'employee': 'EMP-00001',
'billed_hours': 5.0,
'non_billed_hours': 0.0,
'total_hours': 18.0,
'untracked_hours': 13.0,
'per_util': 27.78
}
]
self.assertEqual(report[1], expected_data)
def test_utilisation_report_for_project(self):
filters = {
"company": "_Test Company",
"from_date": "2021-04-01",
"to_date": "2021-04-03",
"project": self.test_project.name
}
report = execute(filters)
expected_data = [
{
'employee': 'EMP-00002',
'billed_hours': 0.0,
'non_billed_hours': 10.0,
'total_hours': 18.0,
'untracked_hours': 8.0,
'per_util': 55.56
}
]
self.assertEqual(report[1], expected_data)