test: new test cases for sla
This commit is contained in:
parent
88becdd869
commit
65e0ae2171
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user