use super::*;
use crate::core::config::ResolvedCrateConfig;
use crate::e2e::config::{CallConfig, E2eConfig};
use crate::e2e::fixture::Fixture;
#[test]
fn an_optional_leaf_field_iterated_directly_gets_the_null_forgiving_operator() {
let fixture: Fixture = serde_json::from_value(serde_json::json!({
"id": "config_keywords", "description": "Show detected keywords", "input": null,
"docs": {"topic": "guides", "presentation": {"operations": [
{"op": "iterate", "path": "keywords", "item": "keyword", "fields": []}
]}}
}))
.expect("fixture");
let e2e = E2eConfig {
call: CallConfig {
function: "detect_keywords".into(),
result_var: "result".into(),
..CallConfig::default()
},
result_fields: ["keywords".to_string()].into_iter().collect(),
fields_optional: ["keywords".to_string()].into_iter().collect(),
..E2eConfig::default()
};
let config = ResolvedCrateConfig {
name: "sample_core".into(),
..ResolvedCrateConfig::default()
};
let body = render_snippet_body(&fixture, &e2e, &config, &[], &[]).expect("snippet renders");
assert!(
body.contains("foreach (var keyword in result.Keywords!)"),
"a nullable leaf collection iterated directly must carry the null-forgiving `!` \
(CS8602 otherwise):\n{body}"
);
}