feat(utas-host): real Fifa17IdentityResolver (catalog + store + policy), drop placeholders
This commit is contained in:
@@ -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()),
|
||||
|
||||
Reference in New Issue
Block a user