test: compare general rank data state
This commit is contained in:
@@ -4,6 +4,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace sammo;
|
||||
|
||||
use sammo\Enums\RankColumn;
|
||||
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
http_response_code(404);
|
||||
exit;
|
||||
@@ -358,6 +360,30 @@ function comparisonApplyTurnFixtureSetup(mixed $setup): void
|
||||
$db->update('general', $patch, 'no = %i', $row['id']);
|
||||
}
|
||||
}
|
||||
foreach ($setup['rankData'] ?? [] as $row) {
|
||||
if (
|
||||
!is_array($row)
|
||||
|| !is_int($row['generalId'] ?? null)
|
||||
|| !is_string($row['type'] ?? null)
|
||||
|| RankColumn::tryFrom($row['type']) === null
|
||||
|| !is_int($row['value'] ?? null)
|
||||
) {
|
||||
throw new \InvalidArgumentException('invalid setup.rankData row');
|
||||
}
|
||||
$nationId = (int)($db->queryFirstField(
|
||||
'SELECT nation FROM general WHERE no = %i',
|
||||
$row['generalId'],
|
||||
) ?? 0);
|
||||
$db->insertUpdate('rank_data', [
|
||||
'general_id' => $row['generalId'],
|
||||
'nation_id' => $nationId,
|
||||
'type' => $row['type'],
|
||||
'value' => $row['value'],
|
||||
], [
|
||||
'nation_id' => $nationId,
|
||||
'value' => $row['value'],
|
||||
]);
|
||||
}
|
||||
if (($setup['isolateWorld'] ?? false) === true && ($setup['generals'] ?? []) !== []) {
|
||||
$maxGeneralId = max(array_map(
|
||||
static fn(array $row): int => (int)$row['id'],
|
||||
|
||||
@@ -4,6 +4,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace sammo;
|
||||
|
||||
use sammo\Enums\RankColumn;
|
||||
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
http_response_code(404);
|
||||
exit;
|
||||
@@ -229,6 +231,19 @@ function comparisonTurnStateSnapshot(array $request): array
|
||||
},
|
||||
comparisonRowsById('general', 'no', $generalIds),
|
||||
);
|
||||
$rankTypes = array_map(
|
||||
static fn(RankColumn $column): string => $column->value,
|
||||
RankColumn::cases(),
|
||||
);
|
||||
$rankData = $generalIds === []
|
||||
? []
|
||||
: iterator_to_array($db->query(
|
||||
'SELECT general_id AS generalId, nation_id AS nationId, `type`, `value`'
|
||||
. ' FROM rank_data WHERE general_id IN %li AND `type` IN %ls'
|
||||
. ' ORDER BY general_id, `type`',
|
||||
$generalIds,
|
||||
$rankTypes,
|
||||
));
|
||||
|
||||
$cities = array_map(
|
||||
static fn(array $row): array => comparisonPickRow(
|
||||
@@ -412,6 +427,7 @@ function comparisonTurnStateSnapshot(array $request): array
|
||||
'generalCooldowns' => $generalCooldowns,
|
||||
],
|
||||
'generals' => $generals,
|
||||
'rankData' => $rankData,
|
||||
'cities' => $cities,
|
||||
'nations' => $nations,
|
||||
'diplomacy' => $diplomacy,
|
||||
|
||||
Reference in New Issue
Block a user