use dag_types::Group;
use nonblocking::non_blocking_result as r;
use crate::ops::DagAddHeads;
use crate::ops::IdConvert;
use crate::tests::DrawDag;
use crate::tests::TestDag;
use crate::Result;
use crate::VertexOptions;
#[test]
fn test_add_heads_refuse_reassign_group() -> Result<()> {
let mut dag = TestDag::draw("A..C");
assert_eq!(r(dag.vertex_id("C".into()))?.group(), Group::NON_MASTER);
let parents = DrawDag::from("A..E");
let opts = VertexOptions {
desired_group: Group::MASTER,
..Default::default()
};
let err = r(dag.add_heads(&parents, &vec![("C".into(), opts.clone())].into())).unwrap_err();
assert_eq!(
err.to_string(),
"ProgrammingError: add_heads: cannot re-assign C:N2 from Group Non-Master to Group Master (desired), use add_heads_and_flush instead"
);
let err = r(dag.add_heads(&parents, &vec![("E".into(), opts.clone())].into())).unwrap_err();
assert_eq!(
err.to_string(),
"bug: new entry 0 = [65] conflicts with an existing entry N0 = [65]"
);
assert!(!r(dag.contains_vertex_name(&"D".into()))?);
assert!(!r(dag.contains_vertex_name(&"E".into()))?);
Ok(())
}