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
|
let promises = state
|
||||||
.promises
|
.promises
|
||||||
.iter()
|
.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 {
|
.map(|promise| PlayerPromiseView {
|
||||||
id: promise.id.clone(),
|
id: promise.id.clone(),
|
||||||
content: promise.content.clone(),
|
content: promise.content.clone(),
|
||||||
@@ -406,7 +410,8 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[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 = [
|
let statuses = [
|
||||||
PromiseStatus::Proposed,
|
PromiseStatus::Proposed,
|
||||||
PromiseStatus::Accepted,
|
PromiseStatus::Accepted,
|
||||||
@@ -421,11 +426,23 @@ mod tests {
|
|||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(index, status)| promise(&format!("promise_{index}"), status))
|
.map(|(index, status)| promise(&format!("promise_{index}"), status))
|
||||||
.collect();
|
.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 =
|
let view =
|
||||||
project_player_view(&original, &context(&[], &[], &[], &[]));
|
project_player_view(&original, &context(&[], &[], &[], &[]));
|
||||||
|
|
||||||
assert_eq!(view.promises.len(), 5);
|
assert_eq!(view.promises.len(), 5);
|
||||||
|
assert!(!format!("{view:?}").contains(NPC_PROMISE_CANARY));
|
||||||
assert!(
|
assert!(
|
||||||
view.promises
|
view.promises
|
||||||
.iter()
|
.iter()
|
||||||
|
|||||||
Reference in New Issue
Block a user