""" اعراب و «ی»ِ اضافه به کاربر نمی‌رسد (تصمیمِ شرکت، ۲۰۲۶-۱۰-۱۴): قاعده (`content.plain_math.plain_persian`) و لایه‌ی خروجیِ API (`config.renderers.PlainPersianJSONRenderer`). دیتابیس متنِ اصلی را نگه می‌دارد. """ from django.core.cache import cache from django.test import SimpleTestCase, TestCase from rest_framework.test import APIClient from content.models import Grade from content.plain_math import plain_persian, plain_persian_utf8 class PlainPersianRuleTests(SimpleTestCase): def test_kasra_and_written_ezafe_ye_go(self): self.assertEqual(plain_persian('از پایه‌ی سوم، ریاضیِ کتابِ خودت'), 'از پایه سوم، ریاضی کتاب خودت') def test_fatha_damma_shadda_sukun_and_hamza_above_go(self): self.assertEqual(plain_persian('اَوّلُ خانهٔ مْ'), 'اول خانه م') def test_tanwin_stays_because_it_is_spelling(self): self.assertEqual(plain_persian('قبلاً، موقتاً'), 'قبلاً، موقتاً') def test_ye_that_is_part_of_a_word_stays(self): # «ه‌ای» (نکره) و «ه‌یی…» که حرفِ دیگری به «ی» چسبیده، اضافه نیستند. self.assertEqual(plain_persian('جزیره‌ای تازه'), 'جزیره‌ای تازه') self.assertEqual(plain_persian('خانه‌یمان'), 'خانه‌یمان') def test_idempotent_and_non_strings_untouched(self): once = plain_persian('همه‌ی جزیره‌های پایه‌ی هشتمِ') self.assertEqual(plain_persian(once), once) self.assertIsNone(plain_persian(None)) self.assertEqual(plain_persian(5), 5) def test_utf8_version_matches_the_text_version(self): sample = '{"t": "همه‌ی جزیره‌ی", "u": "خانه‌یمان، قبلاً، اَوّلُ، پایه‌ی ۸", "id": 12}' self.assertEqual(plain_persian_utf8(sample.encode()).decode(), plain_persian(sample)) class ApiOutputTests(TestCase): def setUp(self): cache.clear() def test_api_json_is_clean_while_the_database_keeps_the_original(self): Grade.objects.create(id=8, number=8, title='پایه‌ی هشتمِ', icon='x', color='#000') body = APIClient().get('/api/grades').content.decode('utf-8') self.assertIn('پایه هشتم', body) self.assertNotIn('ِ', body) self.assertNotIn('ه‌ی', body) self.assertEqual(Grade.objects.get(id=8).title, 'پایه‌ی هشتمِ')