# Test Coverage Plan (فارسی) 🌐 **Languages:** 🇺🇸 [English](../../../../ops/COVERAGE_PLAN.md) · 🇪🇹 [am](../../../am/docs/ops/COVERAGE_PLAN.md) · 🇸🇦 [ar](../../../ar/docs/ops/COVERAGE_PLAN.md) · 🇦🇿 [az](../../../az/docs/ops/COVERAGE_PLAN.md) · 🇧🇬 [bg](../../../bg/docs/ops/COVERAGE_PLAN.md) · 🇧🇩 [bn](../../../bn/docs/ops/COVERAGE_PLAN.md) · 🇧🇦 [bs](../../../bs/docs/ops/COVERAGE_PLAN.md) · 🇨🇿 [cs](../../../cs/docs/ops/COVERAGE_PLAN.md) · 🇩🇰 [da](../../../da/docs/ops/COVERAGE_PLAN.md) · 🇩🇪 [de](../../../de/docs/ops/COVERAGE_PLAN.md) · 🇬🇷 [el](../../../el/docs/ops/COVERAGE_PLAN.md) · 🇪🇸 [es](../../../es/docs/ops/COVERAGE_PLAN.md) · 🇪🇪 [et](../../../et/docs/ops/COVERAGE_PLAN.md) · 🇫🇮 [fi](../../../fi/docs/ops/COVERAGE_PLAN.md) · 🇫🇷 [fr](../../../fr/docs/ops/COVERAGE_PLAN.md) · 🇮🇪 [ga](../../../ga/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [gu](../../../gu/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [ha](../../../ha/docs/ops/COVERAGE_PLAN.md) · 🇮🇱 [he](../../../he/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [hi](../../../hi/docs/ops/COVERAGE_PLAN.md) · 🇭🇷 [hr](../../../hr/docs/ops/COVERAGE_PLAN.md) · 🇭🇺 [hu](../../../hu/docs/ops/COVERAGE_PLAN.md) · 🇦🇲 [hy](../../../hy/docs/ops/COVERAGE_PLAN.md) · 🇮🇩 [id](../../../id/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [ig](../../../ig/docs/ops/COVERAGE_PLAN.md) · 🇮🇹 [it](../../../it/docs/ops/COVERAGE_PLAN.md) · 🇯🇵 [ja](../../../ja/docs/ops/COVERAGE_PLAN.md) · 🇬🇪 [ka](../../../ka/docs/ops/COVERAGE_PLAN.md) · 🇰🇭 [km](../../../km/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [kn](../../../kn/docs/ops/COVERAGE_PLAN.md) · 🇰🇷 [ko](../../../ko/docs/ops/COVERAGE_PLAN.md) · 🇱🇹 [lt](../../../lt/docs/ops/COVERAGE_PLAN.md) · 🇱🇻 [lv](../../../lv/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [ml](../../../ml/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [mr](../../../mr/docs/ops/COVERAGE_PLAN.md) · 🇲🇾 [ms](../../../ms/docs/ops/COVERAGE_PLAN.md) · 🇲🇹 [mt](../../../mt/docs/ops/COVERAGE_PLAN.md) · 🇲🇲 [my](../../../my/docs/ops/COVERAGE_PLAN.md) · 🇳🇵 [ne](../../../ne/docs/ops/COVERAGE_PLAN.md) · 🇳🇱 [nl](../../../nl/docs/ops/COVERAGE_PLAN.md) · 🇳🇴 [no](../../../no/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [or](../../../or/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [pa](../../../pa/docs/ops/COVERAGE_PLAN.md) · 🇵🇭 [phi](../../../phi/docs/ops/COVERAGE_PLAN.md) · 🇵🇱 [pl](../../../pl/docs/ops/COVERAGE_PLAN.md) · 🇵🇹 [pt](../../../pt/docs/ops/COVERAGE_PLAN.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/COVERAGE_PLAN.md) · 🇷🇴 [ro](../../../ro/docs/ops/COVERAGE_PLAN.md) · 🇷🇺 [ru](../../../ru/docs/ops/COVERAGE_PLAN.md) · 🇱🇰 [si](../../../si/docs/ops/COVERAGE_PLAN.md) · 🇸🇰 [sk](../../../sk/docs/ops/COVERAGE_PLAN.md) · 🇸🇮 [sl](../../../sl/docs/ops/COVERAGE_PLAN.md) · 🇷🇸 [sr](../../../sr/docs/ops/COVERAGE_PLAN.md) · 🇸🇪 [sv](../../../sv/docs/ops/COVERAGE_PLAN.md) · 🇰🇪 [sw](../../../sw/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [ta](../../../ta/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [te](../../../te/docs/ops/COVERAGE_PLAN.md) · 🇹🇭 [th](../../../th/docs/ops/COVERAGE_PLAN.md) · 🇹🇷 [tr](../../../tr/docs/ops/COVERAGE_PLAN.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/COVERAGE_PLAN.md) · 🇵🇰 [ur](../../../ur/docs/ops/COVERAGE_PLAN.md) · 🇺🇿 [uz](../../../uz/docs/ops/COVERAGE_PLAN.md) · 🇻🇳 [vi](../../../vi/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [yo](../../../yo/docs/ops/COVERAGE_PLAN.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/COVERAGE_PLAN.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/COVERAGE_PLAN.md) --- آخرین بهروزرسانی: 2026-06-28 > وضعیت اندازهگیریشده در 2026-05-13: خطوط 82.58%، دستورات 82.58%، توابع 84.23% و شاخهها 75.22%. فازهای 1 تا 5 تکمیل شدهاند. تمرکز فعلی بر فاز 6 (>=85%) و فاز 7 (>=90%) است. ## خط مبنا بسته به نحوه محاسبه گزارش، چندین عدد برای پوشش وجود دارد. برای برنامهریزی، فقط یکی از آنها مفید است. | معیار | محدوده | دستورات / خطوط | شاخهها | توابع | یادداشتها | | ----------------- | ---------------------------------------------------------- | -------------: | -----: | -----: | --------------------------------------------------------------- | | قدیمی | `npm run test:coverage` قدیمی | 79.42% | 75.15% | 67.94% | متورمشده: فایلهای آزمون را میشمارد و `open-sse` را مستثنا میکند | | تشخیصی | فقط کد منبع، با استثنا کردن آزمونها و `open-sse` | 68.16% | 63.55% | 64.06% | فقط برای جداسازی `src/**` مفید است | | خط مبنای توصیهشده | فقط کد منبع، با استثنا کردن آزمونها و شامل کردن `open-sse` | 82.58% | 75.22% | 84.23% | این خط مبنای کل پروژه است که باید بهبود یابد | خط مبنای توصیهشده عددی است که باید بر اساس آن بهینهسازی انجام شود. ## قواعد - اهداف پوشش برای فایلهای منبع اعمال میشوند، نه برای `tests/**`. - `open-sse/**` بخشی از محصول است و باید در محدوده باقی بماند. - کد جدید نباید پوشش را در بخشهای تغییریافته کاهش دهد. - آزمون رفتار و نتایج شاخهها را به جزئیات پیادهسازی ترجیح دهید. - برای `src/lib/db/**`، پایگاههای داده موقت SQLite و دادههای آزمون کوچک را به ماکهای گسترده ترجیح دهید. ## مجموعه دستورات فعلی - `npm run test:coverage` - دروازه اصلی پوشش کد منبع برای مجموعه آزمون واحد - `text-summary`، `html`، `json-summary` و `lcov` را تولید میکند - `npm run coverage:report` - گزارش تفصیلی فایلبهفایل از آخرین اجرا - `npm run test:coverage:legacy` - فقط برای مقایسه تاریخی ## نقاط عطف | فاز | هدف | تمرکز | وضعیت | | ----- | -----------------: | --------------------------------------------------- | ------------ | | فاز 1 | 60% دستورات / خطوط | دستاوردهای سریع و پوشش ابزارهای کمریسک | ✅ انجامشده | | فاز 2 | 65% دستورات / خطوط | مبانی پایگاه داده و مسیرها | ✅ انجامشده | | فاز 3 | 70% دستورات / خطوط | اعتبارسنجی ارائهدهنده و تحلیل میزان استفاده | ✅ انجامشده | | فاز 4 | 75% دستورات / خطوط | مترجمها و توابع کمکی `open-sse` | ✅ انجامشده | | فاز 5 | 80% دستورات / خطوط | کنترلکنندههای `open-sse` و شاخههای اجراکننده | ✅ انجامشده | | فاز 6 | 85% دستورات / خطوط | موارد مرزی دشوارتر، بدهی شاخهها و مجموعههای رگرسیون | در حال انجام | | فاز 7 | 90% دستورات / خطوط | بررسی نهایی، رفع شکافها و افزایش سختگیرانه | در انتظار | شاخهها و توابع باید در هر فاز بهصورت تدریجی افزایش یابند، اما هدف اصلی و قطعی، دستورات / خطوط است. ## نقاط بحرانی اولویتدار این فایلها در حال حاضر کمترین پوشش خط را دارند (< 60%) و بهترین بازده را برای فازهای 6-7 ارائه میدهند. این فهرست در تاریخ 2026-05-13 از `coverage/coverage-summary.json` ایجاد شده است: | # | فایل | درصد خطوط | | --- | ------------------------------------------------------------ | --------: | | 1 | `open-sse/services/compression/validation.ts` | 7.87% | | 2 | `src/app/api/v1/batches/route.ts` | 9.67% | | 3 | `src/app/docs/components/FeedbackWidget.tsx` | 9.80% | | 4 | `open-sse/services/compression/toolResultCompressor.ts` | 10.00% | | 5 | `src/app/docs/components/DocCodeBlocks.tsx` | 10.63% | | 6 | `open-sse/services/compression/engines/rtk/lineFilter.ts` | 10.96% | | 7 | `open-sse/services/specificityRules.ts` | 11.28% | | 8 | `src/mitm/systemCommands.ts` | 12.19% | | 9 | `open-sse/services/compression/aggressive.ts` | 12.77% | | 10 | `src/app/api/v1/batches/[id]/cancel/route.ts` | 12.98% | | 11 | `open-sse/services/compression/progressiveAging.ts` | 13.26% | | 12 | `open-sse/services/compression/engines/rtk/smartTruncate.ts` | 13.43% | | 13 | `open-sse/services/compression/engines/rtk/deduplicator.ts` | 13.51% | | 14 | `src/lib/cloudAgent/agents/jules.ts` | 13.52% | | 15 | `open-sse/services/compression/lite.ts` | 14.46% | | 16 | `src/app/api/v1/rerank/route.ts` | 14.94% | | 17 | `open-sse/services/compression/preservation.ts` | 15.07% | | 18 | `src/lib/cloudAgent/agents/codex.ts` | 15.54% | | 19 | `open-sse/services/tierResolver.ts` | 16.66% | | 20 | `src/app/docs/components/DocsLazyWrapper.tsx` | 16.66% | محورهای اصلی فازهای 6-7: - `open-sse/services/compression/**` متراکمترین مجموعه با پوشش پایین است و بخش عمده شکاف باقیمانده را تشکیل میدهد. - مسیرهای API مربوط به batch و rerank (`src/app/api/v1/batches/**`، `src/app/api/v1/rerank/route.ts`) به تستهای سطح handler نیاز دارند. - آداپتورهای عامل ابری (`src/lib/cloudAgent/agents/jules.ts`، `codex.ts`) و `tierResolver.ts` به تستهای سناریومحور نیاز دارند. - کامپوننتهای رابط کاربری مستندات و `src/mitm/systemCommands.ts` اولویت پایینتری دارند، اما فرصتهای کمهزینهای برای پوشش شاخهها هستند. ## چکلیست اجرا ### فاز 1: 56.95% -> 60% - [x] اصلاح معیار پوشش تا بهجای فایلهای تست، کد منبع را منعکس کند - [x] حفظ یک اسکریپت قدیمی پوشش برای مقایسه - [x] ثبت خط مبنا و نقاط بحرانی در مخزن - [ ] افزودن تستهای متمرکز برای ابزارهای کمریسک: - `src/shared/utils/upstreamError.ts` - `src/shared/utils/fetchTimeout.ts` - `src/lib/api/errorResponse.ts` - `src/shared/utils/apiAuth.ts` - `src/lib/display/names.ts` - [ ] افزودن تست مسیر برای: - `src/app/api/settings/require-login/route.ts` - `src/app/api/providers/[id]/models/route.ts` ### فاز 2: 60% -> 65% - [ ] افزودن تستهای مبتنی بر پایگاه داده برای: - `src/lib/db/modelComboMappings.ts` - `src/lib/db/settings.ts` - `src/lib/db/registeredKeys.ts` - [ ] پوشش رفتار شاخهها در: - `src/lib/providers/validation.ts` - `src/app/api/v1/embeddings/route.ts` - `src/app/api/v1/moderations/route.ts` ### فاز 3: 65% -> 70% - [ ] افزودن تستهای تحلیل مصرف برای: - `src/lib/usage/usageHistory.ts` - `src/lib/usage/usageStats.ts` - `src/lib/usage/costCalculator.ts` - [ ] گسترش پوشش مسیرها برای مدیریت پروکسی و شاخههای تنظیمات ### فاز 4: 70% -> 75% - [ ] پوشش ابزارهای کمکی مترجم و مسیرهای مرکزی ترجمه: - `open-sse/translator/index.ts` - `open-sse/translator/helpers/*` - `open-sse/translator/request/*` - `open-sse/translator/response/*` ### فاز 5: 75% -> 80% - [ ] افزودن تستهای سطح handler برای: - `open-sse/handlers/chatCore.ts` - `open-sse/handlers/responsesHandler.js` - `open-sse/handlers/imageGeneration.js` - `open-sse/handlers/embeddings.js` - [ ] افزودن پوشش شاخههای executor برای احراز هویت مختص ارائهدهنده، تلاشهای مجدد و بازنویسی endpointها ### فاز 6: 80% -> 85% - [ ] ادغام مجموعهتستهای بیشتری از حالتهای مرزی در مسیر اصلی پوشش - [ ] افزایش پوشش توابع برای ماژولهای پایگاه دادهای که پوشش ضعیفی برای constructorها و helperها دارند - [ ] بستن شکافهای پوشش شاخه در `settings.ts`، `registeredKeys.ts`، `validation.ts` و ابزارهای کمکی مترجم ### فاز 7: 85% -> 90% - [ ] در نظر گرفتن فایلهای باقیمانده با پوشش پایین بهعنوان عوامل مسدودکننده - [ ] افزودن تستهای رگرسیون برای هر باگ کد عملیاتی که در جریان رسیدن به پوشش 90% رفع میشود - [ ] افزایش آستانه پوشش در CI تنها پس از آنکه خط مبنای محلی برای حداقل دو اجرای متوالی پایدار باشد ## سیاست جغجغهای آستانههای `npm run test:coverage` را تنها زمانی بهروزرسانی کنید که پروژه واقعاً با حاشیهای مطمئن از نقطهٔ عطف بعدی عبور کرده باشد. **حد فعلی:** `npm run test:coverage` مقادیر **60 دستور / 60 خط / 60 تابع / 60 شاخه** را اعمال میکند (معیار در Quality-Gates Fase 6A.1 مجدداً مبناگذاری شد — خط مبنای قبلی 82.58% بیشبرآورد شده بود، زیرا فایلهای آزمون را محاسبه و `open-sse` را مستثنا میکرد). فرمان `test:coverage:legacy` معیار قدیمی 50/50/50 را برای مقایسهٔ تاریخی حفظ میکند. برای بررسی موردی آستانهها در برابر آخرین گزارش، از این فرمان استفاده کنید: ```bash node scripts/check/test-report-summary.mjs --threshold 75 ``` توالی پیشنهادی افزایش جغجغهای (ترتیب بهصورت `دستورها-خطوط / شاخهها / توابع` است): 1. 55/60/55 2. 60/62/58 3. 65/64/62 4. 70/66/66 5. 75/70/72 <-- حد فعلی (75/70/75) 6. 80/75/78 7. 85/80/84 8. 90/85/88 هدف بعدی افزایش جغجغهای `80/75/78` است؛ مشروط بر اینکه پوشش شاخهها در دو اجرای متوالی بالاتر از 78% باقی بماند. ## شکاف شناختهشده فرمان فعلی پوشش، مجموعهٔ اصلی آزمونهای واحد Node را اندازهگیری میکند و کد منبعی را که از طریق آن اجرا میشود، از جمله `open-sse`، در بر میگیرد. این فرمان هنوز پوشش Vitest را در یک گزارش یکپارچه ادغام نمیکند. انجام این ادغام در آینده ارزشمند است، اما مانعی برای آغاز صعود از 60% به 80% محسوب نمیشود.