Add tests for "orders import"
A couple crashes have resulted from invalid orders JSON files - this should help catch any regressions with error handling. See #1770, #1893, #1894develop
parent
71cfa744f9
commit
5686272c91
@ -0,0 +1,80 @@
|
|||||||
|
TMP_FILE_NAME = 'tmp-test'
|
||||||
|
TMP_FILE_PATH = ('dfhack-config/orders/%s.json'):format(TMP_FILE_NAME)
|
||||||
|
|
||||||
|
function run_orders_import(file_content)
|
||||||
|
local f = io.open(TMP_FILE_PATH, 'w')
|
||||||
|
f:write(file_content)
|
||||||
|
f:close()
|
||||||
|
|
||||||
|
return dfhack.with_finalize(
|
||||||
|
function()
|
||||||
|
os.remove(TMP_FILE_PATH)
|
||||||
|
end,
|
||||||
|
function()
|
||||||
|
return dfhack.run_command_silent{'orders', 'import', TMP_FILE_NAME}
|
||||||
|
end
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function check_import_success(file_content)
|
||||||
|
local output, result = run_orders_import(file_content)
|
||||||
|
expect.eq(result, CR_OK)
|
||||||
|
end
|
||||||
|
|
||||||
|
function check_import_fail(file_content, comment, prefix)
|
||||||
|
comment = comment or ''
|
||||||
|
prefix = prefix or 'error'
|
||||||
|
local output, result = run_orders_import(file_content)
|
||||||
|
expect.eq(result, CR_FAILURE)
|
||||||
|
expect.true_(output:lower():startswith(prefix), ('%s: output missing "%s"'):format(comment, prefix))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test.import_empty()
|
||||||
|
check_import_success('[]')
|
||||||
|
end
|
||||||
|
|
||||||
|
function test.import_non_array()
|
||||||
|
check_import_fail('{}', 'object', 'invalid')
|
||||||
|
check_import_fail('null', 'null', 'invalid')
|
||||||
|
check_import_fail('2', 'number', 'invalid')
|
||||||
|
end
|
||||||
|
|
||||||
|
function test.import_invalid_syntax()
|
||||||
|
-- for https://github.com/DFHack/dfhack/pull/1770
|
||||||
|
check_import_fail('', 'empty')
|
||||||
|
check_import_fail(']', 'missing opening bracket')
|
||||||
|
check_import_fail([[
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"amount_left" : 0,
|
||||||
|
"amount_total" : 0,
|
||||||
|
"frequency" : "OneTime",
|
||||||
|
"id" : 0,
|
||||||
|
"is_active" : false,
|
||||||
|
"is_validated" : true,
|
||||||
|
"job" : "CustomReaction",
|
||||||
|
"reaction" : "BRASS_MAKING"
|
||||||
|
}
|
||||||
|
]], 'missing closing bracket')
|
||||||
|
end
|
||||||
|
|
||||||
|
function test.import_invalid_id()
|
||||||
|
-- for https://github.com/DFHack/dfhack/issues/1893
|
||||||
|
check_import_fail([[
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"amount_left": 0,
|
||||||
|
"amount_total": 0,
|
||||||
|
"frequency": "OneTime",
|
||||||
|
"id": "",
|
||||||
|
"is_active": false,
|
||||||
|
"is_validated": false,
|
||||||
|
"item_category": [
|
||||||
|
"finished_goods"
|
||||||
|
],
|
||||||
|
"job": "EncrustWithGems",
|
||||||
|
"material": "INORGANIC:AMBER OPAL"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]], 'string id instead of int')
|
||||||
|
end
|
Loading…
Reference in New Issue