test(scripts): покрий разпознаването на липсваща таблица в safeD1 (#277) - #295
Merged
Conversation
Поправката от #277 нямаше нищо, което да я пази: `import.mjs` изпълнява код при внасяне, тъй че `safeD1` не се тества модулно. Сглобката от #270 обаче кара истинския скрипт като отделен процес с подставен `wrangler`, и това е достатъчно. Подставката е сверена срещу истинския двоичен файл, а не измислена - при `d1 execute --json` върху липсваща таблица грешката от SQLite излиза на stdout, известията на stderr, а съобщението на изключението е само „Command failed". Точно това разминаване изпускаше старата проверка. Наблюдаваният изход е записан в теста. Мутациите: връщането на проверката само върху `err.message` вали два теста, а превръщането на safeD1 в общ капан вали третия.
Test coverage
✅ No workspace dropped below its baseline (tolerance 0.5pp). 📈 Coverage rose by more than 1pp — run |
midt-admin
approved these changes
Aug 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Дългът от #277. Там писах, че тест няма как да се направи, понеже
import.mjsизпълнява код при внасяне иsafeD1не се тества модулно. Това вече не е вярно: #270 донесе сглобка, която кара истинския скрипт като отделен процес с подставенwranglerнай-отпред в PATH.Какво пази
safeD1трябва да различи „тази таблица още я няма" (поправимо -latestLoadedDateпада къмdata_freshness) от всеки друг провал (трябва да се вдигне нагоре). Сгрешено, това чупиimport --catchup --plan-onlyв нормалното му състояние:drop-transient-stagingмахаraw_contractsвfinally, а--plan-onlyизлиза преди основният поток да я пресъздаде.Три теста: падането към
data_freshnessработи; заявката къмdata_freshnessнаистина се пуска (иначе първият тест би минал по случайност); и грешка, която не е липсваща таблица, продължава да се вдига.Подставката е сверена срещу истинския инструмент
Това е същината на теста, тъй че моделиране по памет не би доказало нищо. Наблюдавано от
wrangler d1 execute sigma --local --json --command "SELECT 1 FROM no_such_table_xyz":Тоест грешката от SQLite е на stdout, известията на stderr, а съобщението на изключението не носи нито едното. Това разминаване е точно каквото старата проверка само върху
err.messageизпускаше:Наблюдаваният изход е записан в теста, редом с подставката.
Уточнение, понеже двете лесно се бъркат: това не противоречи на #293. Там ставаше дума за известието
▲ [WARNING], което е на stderr; тук за грешката от SQLite, която е на stdout. Различни потоци, различни твърдения - и двете вече проверени.Мутации
err.messagesafeD1става общ капан за всяка грешкаСамо тест; поведението не се променя.
scripts/: 89 теста минават.Заслугата за самата поправка е на @StanislavBG - вж. коментара по #277.