fix(defter): haftalar ayın günlerine göre (1–8, 9–15, 16–22, 23–son), defter bugünün haftasıyla açılır
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+13
-19
@@ -139,7 +139,7 @@ async fn monthly_budget_is_split_into_weeks_by_days() {
|
||||
// Başta hepsi 0
|
||||
let (_, b) = app.get(&url, &s).await;
|
||||
assert_eq!(b.as_array().unwrap().len(), 4);
|
||||
assert_eq!(week_amounts(group(&b, "needs")), vec![0; 5]);
|
||||
assert_eq!(week_amounts(group(&b, "needs")), vec![0; 4]);
|
||||
|
||||
let (st, b) = app
|
||||
.put(
|
||||
@@ -151,12 +151,9 @@ async fn monthly_budget_is_split_into_weeks_by_days() {
|
||||
assert_eq!(st, StatusCode::OK, "{b}");
|
||||
let needs = group(&b, "needs");
|
||||
assert_eq!(needs["monthly"], 100_000);
|
||||
// Aralık: 6,7,7,7,4 gün → toplam tam 100.000
|
||||
assert_eq!(
|
||||
week_amounts(needs),
|
||||
vec![19_355, 22_581, 22_581, 22_580, 12_903]
|
||||
);
|
||||
assert_eq!(week_amounts(group(&b, "culture")), vec![6, 7, 7, 7, 4]);
|
||||
// Aralık: 1–8, 9–15, 16–22, 23–31 → 8,7,7,9 gün; toplam tam 100.000
|
||||
assert_eq!(week_amounts(needs), vec![25_806, 22_581, 22_581, 29_032]);
|
||||
assert_eq!(week_amounts(group(&b, "culture")), vec![8, 7, 7, 9]);
|
||||
for g in b.as_array().unwrap() {
|
||||
assert_eq!(
|
||||
week_amounts(g).iter().sum::<i64>(),
|
||||
@@ -207,20 +204,17 @@ async fn manual_week_override_redistributes_the_rest() {
|
||||
.await;
|
||||
let weeks_url = format!("/periods/{pid}/budget/weeks");
|
||||
|
||||
// 2. hafta (7–13 Ara) elle 50.000 → kalan 50.000 diğer haftalara (6+7+7+4 = 24 gün)
|
||||
// 2. hafta (9–15 Ara) elle 50.000 → kalan 50.000 diğer haftalara (8+7+9 = 24 gün)
|
||||
let (st, b) = app
|
||||
.put(
|
||||
&weeks_url,
|
||||
&s,
|
||||
json!({ "group": "needs", "week_start": "2026-12-07", "amount": 50_000 }),
|
||||
json!({ "group": "needs", "week_start": "2026-12-09", "amount": 50_000 }),
|
||||
)
|
||||
.await;
|
||||
assert_eq!(st, StatusCode::OK, "{b}");
|
||||
let needs = group(&b, "needs");
|
||||
assert_eq!(
|
||||
week_amounts(needs),
|
||||
vec![12_500, 50_000, 14_584, 14_583, 8_333]
|
||||
);
|
||||
assert_eq!(week_amounts(needs), vec![16_667, 50_000, 14_583, 18_750]);
|
||||
assert_eq!(week_amounts(needs).iter().sum::<i64>(), 100_000);
|
||||
let manual: Vec<bool> = needs["weeks"]
|
||||
.as_array()
|
||||
@@ -228,7 +222,7 @@ async fn manual_week_override_redistributes_the_rest() {
|
||||
.iter()
|
||||
.map(|w| w["is_manual"].as_bool().unwrap())
|
||||
.collect();
|
||||
assert_eq!(manual, vec![false, true, false, false, false]);
|
||||
assert_eq!(manual, vec![false, true, false, false]);
|
||||
assert_eq!(needs["weekly_over"], false);
|
||||
|
||||
// Aylık tutar değişince elle girilen hafta korunur
|
||||
@@ -247,25 +241,25 @@ async fn manual_week_override_redistributes_the_rest() {
|
||||
.put(
|
||||
&weeks_url,
|
||||
&s,
|
||||
json!({ "group": "needs", "week_start": "2026-12-14", "amount": 30_000 }),
|
||||
json!({ "group": "needs", "week_start": "2026-12-16", "amount": 30_000 }),
|
||||
)
|
||||
.await;
|
||||
let needs = group(&b, "needs");
|
||||
assert_eq!(needs["weekly_over"], true);
|
||||
assert_eq!(week_amounts(needs), vec![0, 50_000, 30_000, 0, 0]);
|
||||
assert_eq!(week_amounts(needs), vec![0, 50_000, 30_000, 0]);
|
||||
|
||||
// null → otomatiğe dön
|
||||
app.put(
|
||||
&weeks_url,
|
||||
&s,
|
||||
json!({ "group": "needs", "week_start": "2026-12-14", "amount": null }),
|
||||
json!({ "group": "needs", "week_start": "2026-12-16", "amount": null }),
|
||||
)
|
||||
.await;
|
||||
let (_, b) = app
|
||||
.put(
|
||||
&weeks_url,
|
||||
&s,
|
||||
json!({ "group": "needs", "week_start": "2026-12-07", "amount": null }),
|
||||
json!({ "group": "needs", "week_start": "2026-12-09", "amount": null }),
|
||||
)
|
||||
.await;
|
||||
assert_eq!(week_amounts(group(&b, "needs")).iter().sum::<i64>(), 74_000);
|
||||
@@ -372,7 +366,7 @@ async fn budget_closed_period_and_isolation() {
|
||||
app.put(
|
||||
&format!("/periods/{pid}/budget/weeks"),
|
||||
&b,
|
||||
json!({ "group": "needs", "week_start": "2026-12-07", "amount": 1 }),
|
||||
json!({ "group": "needs", "week_start": "2026-12-09", "amount": 1 }),
|
||||
)
|
||||
.await
|
||||
.0,
|
||||
|
||||
@@ -495,11 +495,11 @@ async fn actual_spending_in_summary_and_budget() {
|
||||
)
|
||||
.await;
|
||||
|
||||
// Aralık 2026 haftaları: 1–6 · 7–13 · 14–20 · 21–27 · 28–31
|
||||
// Aralık 2026 haftaları: 1–8 · 9–15 · 16–22 · 23–31
|
||||
for (date, amount, cat) in [
|
||||
("2026-12-01", 1_000, &needs),
|
||||
("2026-12-06", 2_000, &needs), // 1. haftanın son günü
|
||||
("2026-12-07", 500, &needs), // 2. haftanın ilk günü
|
||||
("2026-12-08", 2_000, &needs), // 1. haftanın son günü
|
||||
("2026-12-09", 500, &needs), // 2. haftanın ilk günü
|
||||
("2026-12-31", 300, &wants), // dönemin son günü
|
||||
] {
|
||||
let (st, b) = add(
|
||||
@@ -516,7 +516,7 @@ async fn actual_spending_in_summary_and_budget() {
|
||||
&app,
|
||||
&s,
|
||||
&pid,
|
||||
json!({ "date": "2026-12-08", "amount": 400, "category_id": needs }),
|
||||
json!({ "date": "2026-12-10", "amount": 400, "category_id": needs }),
|
||||
)
|
||||
.await;
|
||||
app.patch(
|
||||
@@ -530,7 +530,7 @@ async fn actual_spending_in_summary_and_budget() {
|
||||
&app,
|
||||
&s,
|
||||
&pid,
|
||||
json!({ "date": "2026-12-15", "amount": 700, "category_id": culture }),
|
||||
json!({ "date": "2026-12-16", "amount": 700, "category_id": culture }),
|
||||
)
|
||||
.await;
|
||||
let gone_id = gone["id"].as_str().unwrap();
|
||||
@@ -546,18 +546,15 @@ async fn actual_spending_in_summary_and_budget() {
|
||||
|
||||
let (st, b) = app.get(&format!("/periods/{pid}/budget"), &s).await;
|
||||
assert_eq!(st, StatusCode::OK);
|
||||
assert_eq!(
|
||||
spent_by_week(&b, "needs"),
|
||||
(3_500, vec![3_000, 500, 0, 0, 0])
|
||||
);
|
||||
assert_eq!(spent_by_week(&b, "wants"), (700, vec![0, 400, 0, 0, 300]));
|
||||
assert_eq!(spent_by_week(&b, "culture"), (0, vec![0; 5]));
|
||||
assert_eq!(spent_by_week(&b, "needs"), (3_500, vec![3_000, 500, 0, 0]));
|
||||
assert_eq!(spent_by_week(&b, "wants"), (700, vec![0, 400, 0, 300]));
|
||||
assert_eq!(spent_by_week(&b, "culture"), (0, vec![0; 4]));
|
||||
|
||||
// Geri al → yeniden sayılır
|
||||
app.post(&format!("/entries/{gone_id}/restore"), &s, json!({}))
|
||||
.await;
|
||||
let (_, b) = app.get(&format!("/periods/{pid}/budget"), &s).await;
|
||||
assert_eq!(spent_by_week(&b, "culture"), (700, vec![0, 0, 700, 0, 0]));
|
||||
assert_eq!(spent_by_week(&b, "culture"), (700, vec![0, 0, 700, 0]));
|
||||
|
||||
// Harcanabilir aşılırsa kalan negatif
|
||||
add(
|
||||
|
||||
@@ -40,11 +40,7 @@ async fn open_period_returns_weeks_and_default_name() {
|
||||
.iter()
|
||||
.map(|w| w["days"].as_i64().unwrap())
|
||||
.collect();
|
||||
assert_eq!(
|
||||
days,
|
||||
vec![6, 7, 7, 7, 4],
|
||||
"Pazartesi başlangıçlı, kısmi haftalar ayrı"
|
||||
);
|
||||
assert_eq!(days, vec![8, 7, 7, 9], "1–8, 9–15, 16–22, 23–31");
|
||||
|
||||
let (_, cur) = app.get("/periods/current", &s).await;
|
||||
assert_eq!(cur["id"], p["id"]);
|
||||
|
||||
@@ -95,11 +95,11 @@ async fn four_questions_and_breakdowns() {
|
||||
let culture = category(&app, &s, "culture", 0).await;
|
||||
// Aralık 2026 haftaları: 1–6 · 7–13 · 14–20 · 21–27 · 28–31
|
||||
spend(&app, &s, &pid, "2026-12-01", 100_000, &market).await;
|
||||
spend(&app, &s, &pid, "2026-12-08", 50_000, &market).await;
|
||||
spend(&app, &s, &pid, "2026-12-08", 300_000, &rent).await;
|
||||
spend(&app, &s, &pid, "2026-12-15", 40_000, &wants).await;
|
||||
spend(&app, &s, &pid, "2026-12-09", 50_000, &market).await;
|
||||
spend(&app, &s, &pid, "2026-12-09", 300_000, &rent).await;
|
||||
spend(&app, &s, &pid, "2026-12-16", 40_000, &wants).await;
|
||||
spend(&app, &s, &pid, "2026-12-31", 10_000, &culture).await;
|
||||
let gone = spend(&app, &s, &pid, "2026-12-15", 99_999, &wants).await;
|
||||
let gone = spend(&app, &s, &pid, "2026-12-16", 99_999, &wants).await;
|
||||
app.delete(&format!("/entries/{}", gone["id"].as_str().unwrap()), &s)
|
||||
.await;
|
||||
|
||||
@@ -145,13 +145,13 @@ async fn four_questions_and_breakdowns() {
|
||||
// Haftalar: 4 grubun toplamı; planlananların toplamı aylık bütçelerin toplamı
|
||||
assert_eq!(
|
||||
column(&r["weeks"], "spent"),
|
||||
vec![100_000, 350_000, 40_000, 0, 10_000]
|
||||
vec![100_000, 350_000, 40_000, 10_000]
|
||||
);
|
||||
assert_eq!(
|
||||
column(&r["weeks"], "planned").iter().sum::<i64>(),
|
||||
1_800_000
|
||||
);
|
||||
assert_eq!(r["weeks"][4]["last_date"], "2026-12-31");
|
||||
assert_eq!(r["weeks"][3]["last_date"], "2026-12-31");
|
||||
|
||||
app.cleanup().await;
|
||||
}
|
||||
@@ -176,7 +176,7 @@ async fn overspending_gives_negative_savings() {
|
||||
);
|
||||
// Hiç bütçe yoksa: gruplar 0 planlı, haftalar yine dönem takviminden
|
||||
assert_eq!(column(&r["groups"], "planned"), vec![0; 4]);
|
||||
assert_eq!(r["weeks"].as_array().unwrap().len(), 5);
|
||||
assert_eq!(r["weeks"].as_array().unwrap().len(), 4);
|
||||
|
||||
app.cleanup().await;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user