Files
upstream-frappe-crm/crm/tests/test_demo_data.py
upstream-mirror db69de1c11
Some checks failed
Frontend / Unit Tests & Coverage (push) Has been skipped
Regenerate POT file (translatable strings) / Regenerate POT file (develop) (push) Failing after 1m13s
Regenerate POT file (translatable strings) / Regenerate POT file (main-hotfix) (push) Failing after 6s
Server / Tests (frappe ${{ matrix.frappe-branch }}) (push) Has been skipped
Server / Resolve frappe matrix (push) Failing after 1s
Frontend / Lint (push) Failing after 1s
Frontend / Production Build (push) Failing after 1s
Server / Coverage Wrap Up (push) Has been skipped
Frontend / Coverage Wrap Up (push) Has been skipped
snapshot of https://github.com/frappe/crm.git (develop, 2026-09-18; blobs > 131072B omitted)
2026-09-18 01:36:01 +05:00

130 lines
5.0 KiB
Python

import json
import os
import frappe
from frappe.tests import IntegrationTestCase
class TestDemoData(IntegrationTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
from crm.demo.api import clear_demo_data
clear_demo_data()
def _check_demo_records_exist(self, doctype, record_names):
"""Helper method to check if specific demo records exist"""
if not record_names:
return False
for name in record_names:
if frappe.db.exists(doctype, name):
return True
return False
def test_demo_data_lifecycle(self):
from crm.demo.api import clear_demo_data, create_demo_data
from crm.demo.users import DEMO_USERS
DEMO_STATE_KEY = "crm_demo_data_created"
DEMO_LEADS_KEY = "crm_demo_leads"
DEMO_NOTES_KEY = "crm_demo_notes"
DEMO_TASKS_KEY = "crm_demo_tasks"
DEMO_CALL_LOGS_KEY = "crm_demo_call_logs"
DEMO_ACTIVITIES_KEY = "crm_demo_activities"
DEMO_DEALS_KEY = "crm_demo_deals"
# 1. Before creation: nothing should exist
for user in DEMO_USERS:
self.assertFalse(frappe.db.exists("User", user["email"]))
# Check that demo data defaults are not set
self.assertIsNone(frappe.db.get_default(DEMO_LEADS_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_NOTES_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_TASKS_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_CALL_LOGS_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_DEALS_KEY))
# 2. Create demo data
create_demo_data()
# Users
for user in DEMO_USERS:
doc = frappe.get_doc("User", user["email"])
self.assertIsNotNone(doc)
self.assertEqual(doc.user_image, user["avatar"])
self.assertTrue(doc.enabled)
self.assertEqual(doc.first_name, user["first_name"])
self.assertEqual(doc.last_name, user["last_name"])
# Leads - check that demo leads were created
demo_lead_names = json.loads(frappe.db.get_default(DEMO_LEADS_KEY) or "[]")
self.assertEqual(len(demo_lead_names), 12)
for lead_name in demo_lead_names:
lead = frappe.get_doc("CRM Lead", lead_name)
self.assertTrue(lead.first_name)
self.assertTrue(lead.organization)
# Notes, Tasks, Call Logs, Activities, Deals - check that demo data was created
demo_note_names = json.loads(frappe.db.get_default(DEMO_NOTES_KEY) or "[]")
demo_task_names = json.loads(frappe.db.get_default(DEMO_TASKS_KEY) or "[]")
demo_call_log_names = json.loads(frappe.db.get_default(DEMO_CALL_LOGS_KEY) or "[]")
demo_deal_data = json.loads(frappe.db.get_default(DEMO_DEALS_KEY) or "{}")
self.assertGreater(len(demo_note_names), 0)
self.assertGreater(len(demo_task_names), 0)
self.assertGreater(len(demo_call_log_names), 0)
if isinstance(demo_deal_data, dict):
self.assertGreater(len(demo_deal_data.get("deals", [])), 0)
# Avatars exist
avatar_dir = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "..", "crm", "public", "images", "demo")
)
for user in DEMO_USERS:
filename = user["avatar"].split("/")[-1]
path = os.path.join(avatar_dir, filename)
self.assertTrue(os.path.exists(path), f"Missing avatar: {path}")
# Site defaults set
self.assertEqual(frappe.db.get_default(DEMO_STATE_KEY), "1")
self.assertTrue(frappe.db.get_default(DEMO_LEADS_KEY))
self.assertTrue(frappe.db.get_default(DEMO_NOTES_KEY))
self.assertTrue(frappe.db.get_default(DEMO_TASKS_KEY))
self.assertTrue(frappe.db.get_default(DEMO_CALL_LOGS_KEY))
self.assertTrue(frappe.db.get_default(DEMO_ACTIVITIES_KEY))
self.assertTrue(frappe.db.get_default(DEMO_DEALS_KEY))
# 3. Capture demo record names before clearing
lead_names = json.loads(frappe.db.get_default(DEMO_LEADS_KEY) or "[]")
note_names = json.loads(frappe.db.get_default(DEMO_NOTES_KEY) or "[]")
task_names = json.loads(frappe.db.get_default(DEMO_TASKS_KEY) or "[]")
call_log_names = json.loads(frappe.db.get_default(DEMO_CALL_LOGS_KEY) or "[]")
deal_data = json.loads(frappe.db.get_default(DEMO_DEALS_KEY) or "{}")
# Clear demo data
clear_demo_data()
# All demo data should be gone - check using the tracked record names
# Users should be deleted
for user in DEMO_USERS:
self.assertFalse(frappe.db.exists("User", user["email"]))
# Demo records should not exist
self.assertFalse(self._check_demo_records_exist("CRM Lead", lead_names))
self.assertFalse(self._check_demo_records_exist("FCRM Note", note_names))
self.assertFalse(self._check_demo_records_exist("CRM Task", task_names))
self.assertFalse(self._check_demo_records_exist("CRM Call Log", call_log_names))
if isinstance(deal_data, dict) and deal_data.get("deals"):
self.assertFalse(self._check_demo_records_exist("CRM Deal", deal_data.get("deals", [])))
# Site defaults cleared
self.assertIsNone(frappe.db.get_default(DEMO_STATE_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_LEADS_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_NOTES_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_TASKS_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_CALL_LOGS_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_ACTIVITIES_KEY))
self.assertIsNone(frappe.db.get_default(DEMO_DEALS_KEY))