feat: controller — bygninger -> markører (resolveMarkers), migration af markør-runs, noMarker-validering, flow-rækker
This commit is contained in:
@@ -584,5 +584,73 @@ check("Cout6 last uden mål -> cargoNoTarget", ADRunsController.validateVehicle(
|
||||
bulkTractor.loadType = nil
|
||||
ADUnloadWait = nil; ADOutbound = nil; ADSources = nil
|
||||
|
||||
-- C-flow: bygninger -> markører (resolveMarkers), migration af gamle markør-runs, noMarker, flow-rækker
|
||||
local buildings = {
|
||||
{id = "barn1", name = "Kostald 1", kind = "husbandry", loadMarker = {id = 10, name = "cow 1 milk", distance = 5}, unloadMarker = {id = 94, name = "Cow 1 Food", distance = 8}, canBeSource = true, canBeTarget = true, canSell = false},
|
||||
{id = "shed", name = "Palleskur", kind = "objectStorage", loadMarker = nil, unloadMarker = nil, canBeSource = true, canBeTarget = false, canSell = false},
|
||||
{id = "mill", name = "Sukkerfabrik", kind = "factory", loadMarker = {id = 12694, name = "Suger Load", distance = 3}, unloadMarker = {id = 77, name = "sugar offload", distance = 4}, canBeSource = true, canBeTarget = true, canSell = false},
|
||||
}
|
||||
ADBuildings = {
|
||||
list = function() return buildings end,
|
||||
find = function(_, _, id) for _, b in ipairs(buildings) do if b.id == id then return b end end end,
|
||||
byMarker = function(_, _, wayPointId, role) for _, b in ipairs(buildings) do local m = role == "unload" and b.unloadMarker or b.loadMarker if m ~= nil and m.id == wayPointId then return b end end end,
|
||||
}
|
||||
ADSources = {identify = function(_, id) return (id == 10 or id == 12694 or id == 555) and {kind = "x", wayPointId = id, name = "k"} or nil end, getProducts = function() return {} end, getSellMarkers = function() return {} end, stationAccepts = function() return false end, getSourcePlaceables = function() return {} end}
|
||||
ADOutbound = {isOutboundVehicle = function() return false end, getRunStatus = function() return {reasons = {"SUGAR 78 % af top"}} end, getHoldFor = function() return nil end, getTripFor = function() return nil end, releaseInactive = function() end}
|
||||
buildWorld()
|
||||
addMarker(10, "cow 1 milk", "Milk", 100, 0); loadAt[10] = {}
|
||||
addMarker(555, "raa markoer", "Pickup", 200, 0); loadAt[555] = {}
|
||||
addMarker(77, "sugar offload", "production", 950, 0); unloadAt[77] = {accepts = {[TMR] = 360000}}
|
||||
-- CF1: udkørsel: bygninger + rå markør -> sourceWayPointIds; manglende markør rapporteres
|
||||
local flowOut = ADRunsController.createRun("Milk", "outbound")
|
||||
ADRunsController.updateRun(flowOut.id, {sourceBuildingIds = {"barn1", "shed"}, sourceWayPointIds = {555}})
|
||||
local resolved = ADRunsController.resolveMarkers(adEnv, ADRuns.getRun(ADRunsController.store, flowOut.id))
|
||||
check("CF1 kildemarkører = bygningens + rå", table.concat(ADRuns.getRun(ADRunsController.store, flowOut.id).sourceWayPointIds, ","), "10,555")
|
||||
check("CF1 manglende markør", resolved.missing[1], "Palleskur")
|
||||
-- en markør der HØRER til en bygning som ikke længere er valgt, fjernes (den er ikke rå)
|
||||
ADRunsController.updateRun(flowOut.id, {sourceWayPointIds = {12694, 555}})
|
||||
ADRunsController.resolveMarkers(adEnv, ADRuns.getRun(ADRunsController.store, flowOut.id))
|
||||
check("CF1 fravalgt bygnings markør fjernes", table.concat(ADRuns.getRun(ADRunsController.store, flowOut.id).sourceWayPointIds, ","), "10,555")
|
||||
-- CF2: forsyning: mål-bygninger -> targetWayPointIds + targetWayPointId
|
||||
local flowIn = ADRunsController.createRun("Foder", "supply")
|
||||
ADRunsController.updateRun(flowIn.id, {targetBuildingIds = {"barn1", "mill"}})
|
||||
ADRunsController.resolveMarkers(adEnv, ADRuns.getRun(ADRunsController.store, flowIn.id))
|
||||
check("CF2 målmarkører", table.concat(ADRunsController.getRunTargets(ADRuns.getRun(ADRunsController.store, flowIn.id)), ","), "94,77")
|
||||
check("CF2 primært mål", ADRuns.getRun(ADRunsController.store, flowIn.id).targetWayPointId, 94)
|
||||
-- CF3: migration: gamle markør-runs får bygninger
|
||||
local oldOut = ADRunsController.createRun("Gammel ud", "outbound")
|
||||
ADRunsController.updateRun(oldOut.id, {sourceWayPointIds = {12694, 555}})
|
||||
local oldIn = ADRunsController.createRun("Gammel ind", "supply")
|
||||
ADRunsController.updateRun(oldIn.id, {targetWayPointIds = {94}})
|
||||
ADRunsController.migrateBuildings(adEnv)
|
||||
check("CF3 ud: markør -> bygning", ADRuns.getRun(ADRunsController.store, oldOut.id).sourceBuildingIds[1], "mill")
|
||||
check("CF3 ud: rå markør uden bygning beholdes", table.concat(ADRuns.getRun(ADRunsController.store, oldOut.id).sourceWayPointIds, ","), "12694,555")
|
||||
check("CF3 ind: markør -> bygning", ADRuns.getRun(ADRunsController.store, oldIn.id).targetBuildingIds[1], "barn1")
|
||||
ADRunsController.migrateBuildings(adEnv)
|
||||
check("CF3 migration er idempotent", #ADRuns.getRun(ADRunsController.store, oldOut.id).sourceBuildingIds, 1)
|
||||
-- CF4: validering: valgt bygning uden markør -> noMarker
|
||||
local cfVehicle = makeVehicle("vehicleCF", "CF", {STRAW, TMR}, 20000, 100, 0)
|
||||
ADRunsController.updateRun(flowOut.id, {sourceBuildingIds = {"shed"}, sourceWayPointIds = {}})
|
||||
local cfValidation = ADRunsController.validateVehicle(adEnv, ADRuns.getRun(ADRunsController.store, flowOut.id), cfVehicle)
|
||||
check("CF4 noMarker", cfValidation.reason, "noMarker")
|
||||
check("CF4 hvilken bygning", cfValidation.missingBuilding, "Palleskur")
|
||||
-- CF5: flow-række til tavlen
|
||||
ADRunsController.updateRun(flowOut.id, {sourceBuildingIds = {"barn1"}, products = {{fillType = "SUGAR", policy = "sell"}, {fillType = "FORAGE", policy = "store"}}, collectRound = true})
|
||||
ADRunsController.assignVehicle(flowOut.id, cfVehicle)
|
||||
local row = ADRunsController.getFlowRow(adEnv, ADRuns.getRun(ADRunsController.store, flowOut.id))
|
||||
check("CF5 vare-navne", table.concat(row.productNames, ","), "SUGAR,FORAGE")
|
||||
check("CF5 fra", row.fromNames[1], "Kostald 1")
|
||||
check("CF5 politikker", table.concat(row.policies, ","), "sell,store")
|
||||
check("CF5 traktor", row.vehicleNames[1], "CF")
|
||||
check("CF5 begrundelse", row.reason, "SUGAR 78 % af top")
|
||||
check("CF5 runde", row.collectRound, true)
|
||||
ADRunsController.updateRun(flowOut.id, {sourceBuildingIds = {"barn1", "shed"}})
|
||||
check("CF5 manglende bygning markeres", ADRunsController.getFlowRow(adEnv, ADRuns.getRun(ADRunsController.store, flowOut.id)).missing[1], "Palleskur")
|
||||
local rowIn = ADRunsController.getFlowRow(adEnv, ADRuns.getRun(ADRunsController.store, flowIn.id))
|
||||
check("CF5 forsyning fra = alle siloer", rowIn.fromAllSilos, true)
|
||||
check("CF5 forsyning til", table.concat(rowIn.toNames, ","), "Kostald 1,Sukkerfabrik")
|
||||
check("CF5 forsyning auto-varer", rowIn.productAuto, true)
|
||||
ADBuildings = nil; ADSources = nil; ADOutbound = nil
|
||||
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user