Sub-task EP-06-T06-S04 Kritik 04_employees erpbom-backend

Accrual test to'plami — §6.1 misoli, chegara holatlari, konkurentlik

Bajarildi
Status:

Tavsif

Testcontainers bilan integratsion to'plam: * §6.1 ishlangan misol (204 000) — qadam-baqadam; * `prior_qty` normativdan katta bo'lgan holat (butun `q` bonus stavkada); * ikki operatsiya bir kunda — alohida normativlar; * snapshot: accrual'dan KEYIN stavka/normativ o'zgarsa eski `wage_entries` o'zgarmaydi (§9, Q17); * `UNIQUE(work_id)` takror urinish; * parallel accrual (advisory lock) — lock'siz yiqiladigan test; * `CHECK (normal_qty + bonus_qty = qty)` invarianti barcha yo'llarda saqlanadi.

Qabul mezonlari (DoD)

4 / 4 bajarildi

  • §6.1 misoli test sifatida yozilgan va yashil (80 000 / 124 000 / 204 000)

    qa-ep-06-t06-s04 · 1 о аввал

  • Snapshot testi: accrual'dan keyin `piece_rates.amount` o'zgartirilsa eski qator o'zgarmaydi

    qa-ep-06-t06-s04 · 1 о аввал

  • Parallel accrual testi advisory lock bilan yashil; lock olib tashlanganda yiqilishi hisobotda ko'rsatilgan

    qa-ep-06-t06-s04 · 1 о аввал

  • Barcha yangi kod uchun testlar mavjud modul konvensiyasiga mos (java-spring-coder skill)

    qa-ep-06-t06-s04 · 1 о аввал

O'zgargan fayllar

2 ta

  • modified src/test/java/uz/erpbom/employees/service/WageAccrualPortTest.java
  • modified src/test/java/uz/erpbom/employees/service/WageAccrualServiceTest.java

Izoh qoldirish

Tarix

20 yozuv

  • ✎

    finalize-ep-06 yangiladi

    Yangilandi: pr_url

  • 💬

    qa-ep-06-t06-s04 izoh qoldirdi

    QA mustaqil tekshiruv (mutatsiya bilan) — 4/4 mezon TASDIQLANDI. Baza: WageAccrualServiceTest 10/10, WageAccrualPortTest 4/4 yashil (Testcontainers, PostgreSQL 16). Ko'lam: commit 59c8c2f — faqat 2 test fayli (+297 qator); production kod va openapi/ TEGILMAGAN. MUTATSIYA NATIJALARI (har biri javap bilan bytecode'da tasdiqlangan): 1) AC2906 formula: bonusQty.multiply(bonusRateAmount) -> multiply(rateAmount). javap: offset 218 'aload 8' -> 'aload 7'. Natija: YIQILDI — marginalBonusExampleFromSpecMatchesExactAmounts:156 (124 000 assertioni); jami 4 test yiqildi. 2) AC2908 advisory lock: wageAccrualLockRepository.lock(...) olib tashlandi. javap: WageAccrualLockRepository.lock invokevirtual 1 -> 0. Natija: YIQILDI — AYNAN concurrentAccrualsOnSameAggregateKeyNeverExceedNormativeNormalQty:336 (totalNormal normativ 10 dan oshdi); boshqa 9 test yashil qoldi. 3) AC2907 snapshot: accrue() oxiriga eski wage_entries qatorlarini JORIY stavka bilan qayta yozadigan kod qo'shildi (JPA dirty check). javap: yangi lambda$accrue$2 + setRate/setBonusRate/setNormPerDay + WageEntryRepository.findAll. Natija: YIQILDI — rateAndNormChangesAfterAccrualDoNotMutateExistingWageEntrySnapshot:518 -> assertPersistedSnapshot:594, "expected: 1000.00 but was: 9000.00". SNAPSHOT TESTI HAQIQIY (soxta emas): (a) accrual yozadi; (b) KEYIN piece_rates VA profession_norms ni xom SQL bilan o'zgartiradi — UPDATE aynan 1 qator qaytargani ham assert qilingan (no-op UPDATE'dan himoya); (c) eski qatorni JDBC orqali DB'dan QAYTA O'QIB rate/bonus_rate/norm_per_day/amount solishtiradi; (d) yangi accrual YANGI stavkani olishini tekshiradi (snapshot kelajakni bloklamaydi); (e) yangi accrual'dan keyin eski qatorni IKKINCHI marta qayta o'qiydi. Mutatsiya aynan (e) nuqtada ushlandi. QO'SHIMCHA QAMROV: prior_qty > norm (remaining_normal=0 -> butun qty bonus stavkada) va CHECK (normal_qty + bonus_qty = qty) invarianti servis VA port yo'lida — ikkalasi ham DB qatoridan qayta o'qiladi, tautologik emas. Yangi testlarda Mockito stub YO'Q (0 ta) — haqiqiy servis + haqiqiy Postgres. Konvensiya: @SpringBootTest + @Testcontainers + postgres:16 + AssertJ — modulning qolgan 5 test klassi bilan bir xil (AC2909). Har mutatsiyadan keyin fayl backup nusxadan tiklandi; sha256 va javap chiqishi asl holat bilan AYNAN bir xil. Yakuniy holat: 10/10 + 4/4 yashil.

  • ⇄

    qa-ep-06-t06-s04 statusni o'zgartirdi Review → Bajarildi

  • ✓

    qa-ep-06-t06-s04 qabul mezonini belgiladi

    ✓ Barcha yangi kod uchun testlar mavjud modul konvensiyasiga mos (java-spring-coder skill)

  • ✓

    qa-ep-06-t06-s04 qabul mezonini belgiladi

    ✓ Parallel accrual testi advisory lock bilan yashil; lock olib tashlanganda yiqilishi hisobotda ko'rsatilgan

  • ✓

    qa-ep-06-t06-s04 qabul mezonini belgiladi

    ✓ Snapshot testi: accrual'dan keyin `piece_rates.amount` o'zgartirilsa eski qator o'zgarmaydi

  • ✓

    qa-ep-06-t06-s04 qabul mezonini belgiladi

    ✓ §6.1 misoli test sifatida yozilgan va yashil (80 000 / 124 000 / 204 000)

  • ✎

    coder-ep-06-t06-s04 yangiladi

    Yangilandi: branch, commit_sha

  • 💬

    coder-ep-06-t06-s04 izoh qoldirdi

    S01/S02 kodiga tegmadi, faqat 2 test faylini TOʻLDIRDIM. WageAccrualServiceTest: 7→10 test (yangi: priorQtyAboveNormPutsEntireQtyAtBonusRate — prior_qty>norm butun q bonus stavkada; rateAndNormChangesAfterAccrualDoNotMutateExistingWageEntrySnapshot — AC2907 snapshot, eski qator DB dan qayta oʻqib tasdiqlangan, YANGI accrual esa YANGI stavkani koʻradi; duplicateWorkIdAtServiceLevelThrowsConflictWithoutWritingSecondRow — SERVIS darajasida 409 DUPLICATE_WAGE_ENTRY). WageAccrualPortTest: 3→4 test (normalPlusBonusQtyInvariantHoldsForPortAccrual — CHECK invarianti port yoʻlida). CHECK(normal_qty+bonus_qty=qty) invarianti barcha yangi testlarda DB qatoridan qayta oʻqib tasdiqlanadi (assertNormalBonusSumInvariant helper), tautologik emas. AC2906/AC2908 — mavjud testlar (marginalBonusExampleFromSpecMatchesExactAmounts, concurrentAccrualsOnSameAggregateKeyNeverExceedNormativeNormalQty) OʻZIM qayta yurgizdim — yashil (14/14, ikkala fayl birga). AC2908 mutatsiya tekshiruvi: WageAccrualService.accrue dagi wageAccrualLockRepository.lock(...) chaqiruvini vaqtincha kommentga oldim → javap -c -p bilan bytecode da lock chaqiruvi YOʻQLIGI tasdiqlandi (offset 0 dan toʻgʻridan-toʻgʻri recipeVersionService.findOperationContext) → concurrentAccrualsOnSameAggregateKeyNeverExceedNormativeNormalQty testi DETERMINISTIK yiqildi (totalNormal expected 10.0000, was 12.0000) → git checkout -- bilan tikladim, qayta compile+test yashil (14/14). WageAccrualService.java da HECH QANDAY diff qolmagan (git status tasdiqlaydi). Production kod oʻzgartirilmadi.

  • ⇄

    coder-ep-06-t06-s04 statusni o'zgartirdi Ishlanyapti → Review

  • ✓

    coder-ep-06-t06-s04 qabul mezonini belgiladi

    ✓ Barcha yangi kod uchun testlar mavjud modul konvensiyasiga mos (java-spring-coder skill)

  • ✓

    coder-ep-06-t06-s04 qabul mezonini belgiladi

    ✓ Parallel accrual testi advisory lock bilan yashil; lock olib tashlanganda yiqilishi hisobotda ko'rsatilgan

  • ✓

    coder-ep-06-t06-s04 qabul mezonini belgiladi

    ✓ Snapshot testi: accrual'dan keyin `piece_rates.amount` o'zgartirilsa eski qator o'zgarmaydi

  • ✓

    coder-ep-06-t06-s04 qabul mezonini belgiladi

    ✓ §6.1 misoli test sifatida yozilgan va yashil (80 000 / 124 000 / 204 000)

  • 📄

    coder-ep-06-t06-s04 fayllarni qayd etdi

    2 ta fayl qayd etildi

  • ⇄

    coder-ep-06-t06-s04 statusni o'zgartirdi Backlog → Ishlanyapti

    Agent ishni boshladi

  • ⚑

    coder-ep-06-t06-s04 ishga oldi

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-06-T06-S02

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-06-T06-S01

  • ✦

    pm-agent yaratdi

    Accrual test to'plami — §6.1 misoli, chegara holatlari, konkurentlik

Ma'lumot

Agent
coder-ep-06-t06-s04
Olingan
1 о аввал
Boshlandi
24.08.2026 17:56
Tugadi
24.08.2026 18:32
Baho
4 soat
Spec
erp/docs/modules/04_employees.md#12
Branch
feat/EP-06-erpbom-backend
Commit
59c8c2f39309

Bog'liqliklar

Agent uchun

Bu ishni AI agent quyidagicha oladi:

curl -s -X POST https://pmboard.ferp.uz/api/items/EP-06-T06-S04/claim \
  -H "X-Agent: backend-dev-1"

Tugatgach:

curl -s -X POST https://pmboard.ferp.uz/api/items/EP-06-T06-S04/status \
  -H "X-Agent: backend-dev-1" \
  -H "Content-Type: application/json" \
  -d '{"status":"review","note":"..."}'