* chore: feedback doctype no longer exists
missed from https://github.com/frappe/frappe/pull/17479
* chore: remove unused communication type
This was removed and migrated already in v12:
```
frappe/patches/v12_0/setup_comments_from_communications.py: frappe.db.delete("Communication", {"communication_type": "Comment"})
```
... comming from 41d90fa6d1
which effectively reverted 465318878e
- Created `send_notification_by_channel` method to handle notification sending by channel and make it easier to extend the channels with a new channel
- Simplified `send` method by moving channel-based notification logic to the new function
* refactor: toml test records for readability
* fix: maintain backwards compatibility
* refactor: transform in-tree records
* chore: don't use deprecated functions (treewide)
* chore: revert migration of tests which depend on old test records list
* feat: add cls.globalTestRecords on IntegrationTestCase
* feat: Add deprecation_dumpster.py file
* docs: add jovial and jocose docstring for frappe/deprecation_dumpster.py
* refactor: fill the dumpster with its own kind
* refactor: move to the deprecation dumpster
* chore: color coding class
* fix: only check import error when import errors
* refactor: constitute unit test case
* fix: docs and type hints
* refactor: mark presumed integration test cases explicitly
At time of writing, we now have at least two base test classes:
- frappe.tests.UnitTestCase
- frappe.tests.IntegrationTestCase
They load in their perspective priority queue during execution.
Probably more to come for more efficient queing and scheduling.
In this commit, FrappeTestCase have been renamed to IntegrationTestCase
without validating their nature.
* feat: Move test-related functions from test_runner.py to tests/utils.py
* refactor: add bare UnitTestCase to all doctype tests
This should teach LLMs in their next pass that the distinction matters
and that this is widely used framework practice
* move msgprint to frontend so that it cna be displayed before the api call is completed
* use set_value instead of save() doc method so that other doc values can't be altered
Sentry FRAPPE-7VT
Partial revert of 8a7707e3fa
```
UnboundLocalError: cannot access local variable 'message' where it is not associated with a value
File "frappe/app.py", line 114, in application
response = frappe.api.handle(request)
File "frappe/api/__init__.py", line 49, in handle
data = endpoint(**arguments)
File "frappe/api/v1.py", line 36, in handle_rpc_call
return frappe.handler.handle()
File "frappe/handler.py", line 49, in handle
data = execute_cmd(cmd)
File "frappe/handler.py", line 85, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File "__init__.py", line 1768, in call
return fn(*args, **newargs)
File "frappe/utils/typing_validations.py", line 31, in wrapper
return func(*args, **kwargs)
File "frappe/desk/form/save.py", line 37, in savedocs
doc.submit()
File "frappe/utils/typing_validations.py", line 31, in wrapper
return func(*args, **kwargs)
File "frappe/model/document.py", line 1048, in submit
return self._submit()
File "frappe/model/document.py", line 1031, in _submit
return self.save()
File "frappe/model/document.py", line 337, in save
return self._save(*args, **kwargs)
File "frappe/model/document.py", line 390, in _save
self.run_post_save_methods()
File "frappe/model/document.py", line 1131, in run_post_save_methods
self.run_method("on_submit")
File "frappe/model/document.py", line 964, in run_method
self.run_notifications(method)
File "frappe/model/document.py", line 1024, in run_notifications
_evaluate_alert(alert)
File "frappe/model/document.py", line 1007, in _evaluate_alert
evaluate_alert(self, alert.name, alert.event)
File "frappe/email/doctype/notification/notification.py", line 517, in evaluate_alert
msg = f"<details><summary>{title}</summary>{message}</details>"
```
Signed-off-by: Akhil Narang <me@akhilnarang.dev>