feat(utas-host): real Fifa17IdentityResolver (catalog + store + policy), drop placeholders

This commit is contained in:
funman300
2026-08-11 22:33:40 +00:00
parent 36fe1caa3f
commit 3ef3bc32ec
7 changed files with 253 additions and 99 deletions
+28 -9
View File
@@ -8,11 +8,13 @@ use std::net::{TcpListener, TcpStream};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use openfut_adapter_fifa17::fut::club_response::CoreOwnedItem;
use openfut_adapter_fifa17::fut::catalog::Fifa17CardCatalog;
use openfut_adapter_fifa17::fut::club_response::{CoreOwnedItem, ItemIdentityResolver};
use openfut_adapter_fifa17::fut::entities::Fifa17Entities;
use openfut_identity::JsonIdentityStore;
use openfut_utas_host::{
classify, read_request, CoreAccess, CoreError, CorePage, EmptyAssetResolver, MapAssetResolver,
PassClient, Route, Server,
classify, read_request, CoreAccess, CoreError, CorePage, Fifa17IdentityResolver, PassClient,
Route, Server,
};
use parking_lot::Mutex;
use serde_json::Value;
@@ -149,17 +151,34 @@ fn spawn_mock_python() -> (String, Recorded) {
(format!("http://{addr}"), rec)
}
/// A unique temp path for a per-server identity store (integration tests run in
/// the same process; each server gets its own store file).
fn unique_store_path() -> std::path::PathBuf {
static N: AtomicUsize = AtomicUsize::new(0);
let n = N.fetch_add(1, Ordering::SeqCst);
std::env::temp_dir().join(format!("ofut-host-it-{}-{n}.json", std::process::id()))
}
fn build_server(
core: Arc<FakeCore>,
upstream: &str,
assets_map: Option<HashMap<String, u32>>,
) -> Server {
let assets: Arc<
dyn openfut_adapter_fifa17::fut::club_response::ItemIdentityResolver + Send + Sync,
> = match assets_map {
Some(m) => Arc::new(MapAssetResolver::from_map(m)),
None => Arc::new(EmptyAssetResolver),
};
// The map (card id → asset id) becomes a real identity catalog; an absent
// map is an empty catalog (every item dropped — the honest no-mapping case).
let cards = assets_map.unwrap_or_default();
let entries: Vec<String> = cards
.iter()
.map(|(id, asset)| format!("\"{id}\":{{\"asset_id\":{asset}}}"))
.collect();
let doc = format!(
"{{\"schema_version\":1,\"game\":\"fifa17\",\"cards\":{{{}}}}}",
entries.join(",")
);
let catalog = Fifa17CardCatalog::from_json_str(&doc).unwrap();
let store = JsonIdentityStore::open(unique_store_path()).unwrap();
let assets: Arc<dyn ItemIdentityResolver + Send + Sync> =
Arc::new(Fifa17IdentityResolver::new(catalog, Arc::new(store)));
Server::new(
core,
Arc::new(entities()),