test: new test cases for sla

This commit is contained in:
Himanshu Warekar 2019-06-10 11:24:24 +05:30
parent 88becdd869
commit 65e0ae2171
5 changed files with 146 additions and 122 deletions

View File

@ -11,7 +11,7 @@ from frappe.utils import now, time_diff_in_hours, now_datetime, getdate, get_wee
from datetime import datetime, timedelta
from frappe.model.mapper import get_mapped_doc
from frappe.utils.user import is_website_user
from ..service_level_agreement.service_level_agreement import get_active_service_level_agreement_for
from erpnext.support.doctype.service_level_agreement.service_level_agreement import get_active_service_level_agreement_for
from erpnext.crm.doctype.opportunity.opportunity import assign_to_user
from frappe.email.inbox import link_communication_to_document
@ -63,10 +63,10 @@ class Issue(Document):
def update_status(self):
status = frappe.db.get_value("Issue", self.name, "status")
if self.status!="Open" and status =="Open" and not self.first_responded_on:
self.first_responded_on = now_datetime()
self.first_responded_on = frappe.flags.current_time or now_datetime()
if self.status=="Closed" and status !="Closed":
self.resolution_date = now_datetime()
self.resolution_date = frappe.flags.current_time or now_datetime()
if frappe.db.get_value("Issue", self.name, "agreement_fulfilled") == "Ongoing":
set_service_level_agreement_variance(issue=self.name)
self.update_agreement_status()
@ -79,7 +79,9 @@ class Issue(Document):
current_time = frappe.flags.current_time or now_datetime()
if self.service_level_agreement and self.agreement_fulfilled == "Ongoing":
if self.response_by_variance < 0 or self.resolution_by_variance < 0:
if frappe.db.get_value("Issue", self.name, "response_by_variance") < 0 or \
frappe.db.get_value("Issue", self.name, "resolution_by_variance") < 0:
self.agreement_fulfilled = "Failed"
else:
self.agreement_fulfilled = "Fulfilled"

View File

@ -4,7 +4,7 @@ from __future__ import unicode_literals
import frappe
import unittest
from erpnext.support.doctype.service_level_agreement.test_service_level_agreement import make_service_level_agreement
from erpnext.support.doctype.service_level_agreement.test_service_level_agreement import create_service_level_agreements_for_issues
from frappe.utils import now_datetime
import datetime
from datetime import timedelta
@ -18,15 +18,30 @@ class TestIssue(unittest.TestCase):
def test_response_time_and_resolution_time_based_on_different_sla(self):
make_service_level_agreement()
create_service_level_agreements_for_issues()
creation = "2019-03-04 12:00:00"
# make issue with customer specific SLA
issue = make_issue(creation, '_Test Customer')
customer = create_customer("_Test Customer", "__Test SLA Customer Group", "__Test SLA Territory")
issue = make_issue(creation, "_Test Customer")
self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 7, 18, 0))
self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 9, 18, 0))
self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
# make issue with customer_group specific SLA
customer = create_customer("__Test Customer", "_Test SLA Customer Group", "__Test SLA Territory")
issue = make_issue(creation, "__Test Customer")
self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
# make issue with territory specific SLA
customer = create_customer("___Test Customer", "__Test SLA Customer Group", "_Test SLA Territory")
issue = make_issue(creation, "___Test Customer")
self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
# make issue with default SLA
issue = make_issue(creation)
@ -41,7 +56,7 @@ class TestIssue(unittest.TestCase):
self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 18, 0))
self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 6, 12, 0))
frappe.flags.current_time = datetime.datetime(2019, 3, 3, 12, 0)
frappe.flags.current_time = datetime.datetime(2019, 3, 4, 15, 0)
issue.status = 'Closed'
issue.save()
@ -52,10 +67,39 @@ def make_issue(creation=None, customer=None):
issue = frappe.get_doc({
"doctype": "Issue",
"subject": "Issue 1",
"subject": "Service Level Agreement Issue",
"customer": customer,
"raised_by": "test@example.com",
"creation": creation
}).insert(ignore_permissions=True)
return issue
return issue
def create_customer(name, customer_group, territory):
create_customer_group(customer_group)
create_territory(territory)
if not frappe.db.exists("Customer", {"customer_name": name}):
frappe.get_doc({
"doctype": "Customer",
"customer_name": name,
"customer_group": customer_group,
"territory": territory
}).insert(ignore_permissions=True)
def create_customer_group(customer_group):
if not frappe.db.exists("Customer Group", {"customer_group_name": customer_group}):
frappe.get_doc({
"doctype": "Customer Group",
"customer_group_name": customer_group
}).insert(ignore_permissions=True)
def create_territory(territory):
if not frappe.db.exists("Territory", {"territory_name": territory}):
frappe.get_doc({
"doctype": "Territory",
"territory_name": territory,
}).insert(ignore_permissions=True)

View File

@ -4,9 +4,6 @@
from __future__ import unicode_literals
from erpnext.hr.doctype.employee_group.test_employee_group import make_employee_group
from erpnext.support.doctype.issue_priority.test_issue_priority import make_priorities
from frappe.utils import now_datetime
import datetime
from datetime import timedelta
import frappe
import unittest
@ -14,45 +11,54 @@ import unittest
class TestServiceLevel(unittest.TestCase):
def test_service_level(self):
test_make_service_level = make_service_level()
get_make_service_level = get_service_level()
employee_group = make_employee_group()
make_holiday_list()
make_priorities()
# Default Service Level
test_make_service_level = create_service_level("__Test Service Level", "__Test Holiday List", employee_group, 4, 6)
get_make_service_level = get_service_level("__Test Service Level")
self.assertEqual(test_make_service_level.name, get_make_service_level.name)
self.assertEqual(test_make_service_level.holiday_list, get_make_service_level.holiday_list)
self.assertEqual(test_make_service_level.employee_group, get_make_service_level.employee_group)
def make_service_level():
employee_group = make_employee_group()
make_holiday_list()
make_priorities()
# Service Level
test_make_service_level = create_service_level("_Test Service Level", "__Test Holiday List", employee_group, 2, 3)
get_make_service_level = get_service_level("_Test Service Level")
# Default Service Level Agreement
default_service_level = frappe.get_doc({
self.assertEqual(test_make_service_level.name, get_make_service_level.name)
self.assertEqual(test_make_service_level.holiday_list, get_make_service_level.holiday_list)
self.assertEqual(test_make_service_level.employee_group, get_make_service_level.employee_group)
def create_service_level(service_level, holiday_list, employee_group, response_time, resolution_time):
sl = frappe.get_doc({
"doctype": "Service Level",
"service_level": "__Test Service Level",
"holiday_list": "__Test Holiday List",
"service_level": service_level,
"holiday_list": holiday_list,
"employee_group": employee_group,
"priorities": [
{
"priority": "Low",
"response_time": 4,
"response_time": response_time,
"response_time_period": "Hour",
"resolution_time": 6,
"resolution_time": resolution_time,
"resolution_time_period": "Hour",
},
{
"priority": "Medium",
"response_time": 4,
"response_time": response_time,
"default_priority": 1,
"response_time_period": "Hour",
"resolution_time": 6,
"resolution_time": resolution_time,
"resolution_time_period": "Hour",
},
{
"priority": "High",
"response_time": 4,
"response_time": response_time,
"response_time_period": "Hour",
"resolution_time": 6,
"resolution_time": resolution_time,
"resolution_time_period": "Hour",
}
],
@ -95,92 +101,21 @@ def make_service_level():
]
})
default_service_level_exists = frappe.db.exists("Service Level", "__Test Service Level")
if not default_service_level_exists:
default_service_level.insert()
sl_exists = frappe.db.exists("Service Level", {"service_level": service_level})
service_level = frappe.get_doc({
"doctype": "Service Level",
"service_level": "_Test Service Level",
"holiday_list": "__Test Holiday List",
"employee_group": employee_group,
"priorities": [
{
"priority": "Low",
"response_time": 2,
"response_time_period": "Day",
"resolution_time": 3,
"resolution_time_period": "Day",
},
{
"priority": "Medium",
"response_time": 2,
"default_priority": 1,
"response_time_period": "Day",
"resolution_time": 3,
"resolution_time_period": "Day",
},
{
"priority": "High",
"response_time": 2,
"response_time_period": "Day",
"resolution_time": 3,
"resolution_time_period": "Day",
}
],
"support_and_resolution": [
{
"workday": "Monday",
"start_time": "10:00:00",
"end_time": "18:00:00",
},
{
"workday": "Tuesday",
"start_time": "10:00:00",
"end_time": "18:00:00",
},
{
"workday": "Wednesday",
"start_time": "10:00:00",
"end_time": "18:00:00",
},
{
"workday": "Thursday",
"start_time": "10:00:00",
"end_time": "18:00:00",
},
{
"workday": "Friday",
"start_time": "10:00:00",
"end_time": "18:00:00",
},
{
"workday": "Saturday",
"start_time": "10:00:00",
"end_time": "18:00:00",
},
{
"workday": "Sunday",
"start_time": "10:00:00",
"end_time": "18:00:00",
}
]
})
service_level_exist = frappe.db.exists("Service Level", {"service_level": "_Test Service Level"})
if not service_level_exist:
service_level.insert()
return service_level
if not sl_exists:
sl.insert()
return sl
else:
return frappe.get_doc("Service Level", "_Test Service Level")
return frappe.get_doc("Service Level", {"service_level": service_level})
def get_service_level():
return frappe.get_doc("Service Level", "_Test Service Level")
def get_service_level(service_level):
return frappe.get_doc("Service Level", service_level)
def make_holiday_list():
holiday_list = frappe.db.exists("Holiday List", "__Test Holiday List")
if not holiday_list:
now = datetime.datetime.now()
now = frappe.utils.now_datetime()
holiday_list = frappe.get_doc({
"doctype": "Holiday List",
"holiday_list_name": "__Test Holiday List",
@ -200,4 +135,15 @@ def make_holiday_list():
"holiday_date": "2019-02-11"
},
]
}).insert()
}).insert()
def create_service_level_for_sla():
employee_group = make_employee_group()
make_holiday_list()
make_priorities()
# Default Service Level
create_service_level("__Test Service Level", "__Test Holiday List", employee_group, 4, 6)
# Service Level
create_service_level("_Test Service Level", "__Test Holiday List", employee_group, 2, 3)

View File

@ -62,7 +62,7 @@ def get_active_service_level_agreement_for(priority, customer=None, service_leve
or_filters.append(["Service Level Agreement", "default_service_level_agreement", "=", 1])
agreement = frappe.get_list("Service Level Agreement", filters=filters, or_filters=or_filters,
fields=["name", "default_priority"], debug=True)
fields=["name", "default_priority"])
return agreement[0] if agreement else None

View File

@ -5,12 +5,12 @@ from __future__ import unicode_literals
import frappe
import unittest
from erpnext.support.doctype.service_level.test_service_level import make_service_level
from erpnext.support.doctype.service_level.test_service_level import create_service_level_for_sla
class TestServiceLevelAgreement(unittest.TestCase):
def test_service_level_agreement(self):
make_service_level()
create_service_level_for_sla()
# Default Service Level Agreement
create_default_service_level_agreement = create_service_level_agreement(default_service_level_agreement=1,
@ -26,7 +26,7 @@ class TestServiceLevelAgreement(unittest.TestCase):
# Service Level Agreement for Customer
customer = create_customer()
create_customer_service_level_agreement = create_service_level_agreement(default_service_level_agreement=0,
service_level="__Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
apply_to="Customer", entity=customer, response_time=2, resolution_time=3)
get_customer_service_level_agreement = get_service_level_agreement(apply_to="Customer", entity=customer)
@ -38,8 +38,8 @@ class TestServiceLevelAgreement(unittest.TestCase):
# Service Level Agreement for Customer Group
customer_group = create_customer_group()
create_customer_group_service_level_agreement = create_service_level_agreement(default_service_level_agreement=0,
service_level="__Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
apply_to="Customer Group", entity=customer_group, response_time=4, resolution_time=6)
service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
apply_to="Customer Group", entity=customer_group, response_time=2, resolution_time=3)
get_customer_group_service_level_agreement = get_service_level_agreement(apply_to="Customer Group", entity=customer_group)
self.assertEqual(create_customer_group_service_level_agreement.name, get_customer_group_service_level_agreement.name)
@ -50,7 +50,7 @@ class TestServiceLevelAgreement(unittest.TestCase):
# Service Level Agreement for Territory
territory = create_territory()
create_territory_service_level_agreement = create_service_level_agreement(default_service_level_agreement=0,
service_level="__Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
apply_to="Territory", entity=territory, response_time=2, resolution_time=3)
get_territory_service_level_agreement = get_service_level_agreement(apply_to="Territory", entity=territory)
@ -67,7 +67,6 @@ def get_service_level_agreement(default_service_level_agreement=None, apply_to=N
filters = {"apply_to": apply_to, "entity": entity}
service_level_agreement = frappe.get_doc("Service Level Agreement", filters)
print(service_level_agreement)
return service_level_agreement
def create_service_level_agreement(default_service_level_agreement, service_level, holiday_list, employee_group,
@ -146,13 +145,24 @@ def create_service_level_agreement(default_service_level_agreement, service_leve
]
})
service_level_agreement_exists = frappe.db.exists("Service Level Agreement", service_level_agreement.name)
filters = {
"default_service_level_agreement": service_level_agreement.default_service_level_agreement,
"service_level": service_level_agreement.service_level
}
if not default_service_level_agreement:
filters.update({
"apply_to": apply_to,
"entity": entity
})
service_level_agreement_exists = frappe.db.exists("Service Level Agreement", filters)
if not service_level_agreement_exists:
service_level_agreement.insert(ignore_permissions=True)
return service_level_agreement
else:
return frappe.get_doc("Service Level Agreement", service_level_agreement.name)
return frappe.get_doc("Service Level Agreement", service_level_agreement_exists)
def create_customer():
customer = frappe.get_doc({
@ -190,4 +200,26 @@ def create_territory():
territory.insert()
return territory.name
else:
return frappe.db.exists("Territory", {"territory_name": "_Test SLA Territory"})
return frappe.db.exists("Territory", {"territory_name": "_Test SLA Territory"})
def create_service_level_agreements_for_issues():
create_service_level_for_sla()
create_service_level_agreement(default_service_level_agreement=1,
service_level="__Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
apply_to=None, entity=None, response_time=4, resolution_time=6)
create_customer()
create_service_level_agreement(default_service_level_agreement=0,
service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
apply_to="Customer", entity="_Test Customer", response_time=2, resolution_time=3)
create_customer_group()
create_service_level_agreement(default_service_level_agreement=0,
service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
apply_to="Customer Group", entity="_Test SLA Customer Group", response_time=2, resolution_time=3)
create_territory()
create_service_level_agreement(default_service_level_agreement=0,
service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
apply_to="Territory", entity="_Test SLA Territory", response_time=2, resolution_time=3)