feat(gui): fanen Måned — marker i gang med fremdrift, næste trin og om høst-/såvinduet lukker ved månedsskiftet; dom 'du kan sove' + marker der kan sås nu (v1.35.0.0)

This commit is contained in:
2026-09-27 09:12:49 +02:00
parent 5274925f2a
commit 5df4fdc7c3
8 changed files with 394 additions and 4 deletions
+82
View File
@@ -0,0 +1,82 @@
-- Kør: luajit tests/test_adMonthView.lua (fra repo-roden)
dofile("FS25_ADSmartPickup/adFieldModel.lua")
dofile("FS25_ADSmartPickup/adMonthView.lua")
local V, M = ADMonthView, ADFieldModel
local failures = 0
local function check(name, actual, expected)
if actual == expected then print("OK " .. name) else
failures = failures + 1
print(string.format("FAIL %s: forventede %s, fik %s", name, tostring(expected), tostring(actual)))
end
end
-- MV1: perioder
check("MV1 næste periode", V.nextPeriod(5), 6)
check("MV1 vinter -> forår", V.nextPeriod(12), 1)
-- MV2: såvindue (hvede sås i periode 6-7)
local function plantableIn(name, period) return name == "WHEAT" and (period == 6 or period == 7) end
check("MV2 lukker", V.sowWindow(plantableIn, "WHEAT", 7), "closes")
check("MV2 åbent", V.sowWindow(plantableIn, "WHEAT", 6), "open")
check("MV2 lukket", V.sowWindow(plantableIn, "WHEAT", 8), "closed")
-- MV3: visning (Dakota-kartofler: harvestReady 6 -> dead 7 i EARLY_AUTUMN = periode 7)
local potato = {witheredState = 7, growthDataSeasonal = {periods = {[7] = {updates = {{startState = 6, endState = 7}}}}}}
check("MV3 visner næste måned", V.withersIn(potato, 7, 6), true)
check("MV3 ikke måneden før", V.withersIn(potato, 6, 6), false)
check("MV3 ukendte data", V.withersIn({witheredState = 7}, 7, 6), false)
-- MV4: fremdrift
local harvest = M.with(M.newField(15), {stage = "harvesting", kind = "harvest"})
check("MV4 CP vinder", V.progress(harvest, {readyRatio = 0.9}, 0.5), 0.5)
check("MV4 høst ud fra afgrøde", V.progress(harvest, {readyRatio = 0.25}, nil), 0.75)
check("MV4 kultivering ukendt", V.progress(M.with(harvest, {stage = "cultivating"}), {readyRatio = 0}, nil), nil)
check("MV4 tekst", V.percentText(0.504), "50 %")
check("MV4 tekst ukendt", V.percentText(nil), "–")
-- MV5: hel fane
local fields = {
[15] = M.with(harvest, {plan = {sow = true, sowFruit = "WHEAT", soil = "cultivate", straw = "chop"}}),
[16] = M.with(M.newField(16), {stage = "harvesting", kind = "harvest"}),
[18] = M.with(M.newField(18), {stage = "sowing", kind = "harvest", plan = {sow = true, sowFruit = "WHEAT"}}),
[20] = M.with(M.newField(20), {stage = "fertilizing"}),
[21] = M.newField(21),
[22] = M.with(M.newField(22), {plan = {targetFruit = "WHEAT"}}),
[23] = M.with(M.newField(23), {stage = "ready"}),
}
local infos = {
{id = 15, kind = "harvest", readyRatio = 0.5, cropTitle = "Hvede", needs = {}},
{id = 16, kind = "harvest", readyRatio = 1, cropTitle = "Kartofler", growthState = 6},
{id = 18, kind = "bare", readyRatio = 0},
{id = 20, kind = "harvest", readyRatio = 0},
{id = 21, kind = "bare"},
{id = 22, kind = "bare"},
{id = 23, kind = "harvest", readyRatio = 1},
}
local ctx = {period = 7, plantableIn = plantableIn,
withers = function(info, nextPeriod) return info.id == 16 and nextPeriod == 8 end,
cpProgress = function(id) return id == 18 and 0.1 or nil end}
local view = V.build(infos, fields, ctx)
check("MV5 aktive marker (21 venter, 22 kommer, 23 passiv klar)", #view.rows, 4)
check("MV5 kritiske", view.critical, 3)
check("MV5 høst før sidste såmåned først (id)", view.rows[1].id, 15)
check("MV5 høst -> såning senere lukker", view.rows[1].window, "lastSowMonth")
check("MV5 høst næste trin", view.rows[1].nextStage, "cultivating")
check("MV5 høst der visner", view.rows[2].id, 16)
check("MV5 vindue høst", view.rows[2].window, "harvestCloses")
check("MV5 sidste såmåned", view.rows[3].id, 18)
check("MV5 vindue såning", view.rows[3].window, "lastSowMonth")
check("MV5 såafgrøde", view.rows[3].sowFruit, "WHEAT")
check("MV5 CP-fremdrift", view.rows[3].progress, 0.1)
check("MV5 pleje sidst", view.rows[4].id, 20)
check("MV5 pleje intet næste", view.rows[4].nextStage, nil)
check("MV5 kommer: F22 hvede", view.upcoming[1] and view.upcoming[1].id, 22)
check("MV5 kommer: lukker", view.upcoming[1] and view.upcoming[1].closes, true)
-- MV6: klargøring før såning med lukkende vindue er kritisk
local cultivating = M.with(M.newField(30), {stage = "cultivating", plan = {sow = true, sowFruit = "WHEAT"}})
check("MV6 kultivering før sidste såmåned", V.window(cultivating, {kind = "bare"}, ctx), "lastSowMonth")
check("MV6 aktiv klar (auto)", V.isActive(M.with(M.newField(31), {stage = "ready", plan = {mode = "auto"}})), true)
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
os.exit(failures == 0 and 0 or 1)