fix(engine): hide NPC-only promises from PlayerView
This commit is contained in:
@@ -74,7 +74,11 @@ pub fn project_player_view(
|
||||
let promises = state
|
||||
.promises
|
||||
.iter()
|
||||
.filter(|promise| is_visible_promise_status(promise.status))
|
||||
.filter(|promise| {
|
||||
is_visible_promise_status(promise.status)
|
||||
&& (promise.promiser == context.player_id
|
||||
|| promise.promisee == context.player_id)
|
||||
})
|
||||
.map(|promise| PlayerPromiseView {
|
||||
id: promise.id.clone(),
|
||||
content: promise.content.clone(),
|
||||
@@ -406,7 +410,8 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn promises_hide_proposals_and_include_accepted_and_terminal_states() {
|
||||
fn promises_only_show_player_involved_accepted_and_terminal_states() {
|
||||
const NPC_PROMISE_CANARY: &str = "NPC_ONLY_ACCEPTED_PROMISE_CANARY";
|
||||
let statuses = [
|
||||
PromiseStatus::Proposed,
|
||||
PromiseStatus::Accepted,
|
||||
@@ -421,11 +426,23 @@ mod tests {
|
||||
.enumerate()
|
||||
.map(|(index, status)| promise(&format!("promise_{index}"), status))
|
||||
.collect();
|
||||
original.promises.push(Promise {
|
||||
id: "npc_only".to_owned(),
|
||||
promiser: "nana".to_owned(),
|
||||
promisee: "sister".to_owned(),
|
||||
content: NPC_PROMISE_CANARY.to_owned(),
|
||||
status: PromiseStatus::Accepted,
|
||||
weight: PromiseWeight::Major,
|
||||
created_at: "node_001".to_owned(),
|
||||
accepted_at: Some("node_002".to_owned()),
|
||||
resolved_at: None,
|
||||
});
|
||||
|
||||
let view =
|
||||
project_player_view(&original, &context(&[], &[], &[], &[]));
|
||||
|
||||
assert_eq!(view.promises.len(), 5);
|
||||
assert!(!format!("{view:?}").contains(NPC_PROMISE_CANARY));
|
||||
assert!(
|
||||
view.promises
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user