use super::super::BackendFactory;
use crate::KanbanContext;
use kanban_core::AppConfig;
use kanban_domain::{CreateCardOptions, KanbanOperations};
use tempfile::TempDir;
pub async fn test_card_sprint_logs_roundtrip(factory: &BackendFactory) {
let dir = TempDir::new().unwrap();
let path = dir.path().join("test.store");
let mut ctx = KanbanContext::open(factory(&path), AppConfig::default())
.await
.unwrap();
let board = ctx.create_board("Board".into(), Some("B".into())).unwrap();
let col = ctx.create_column(board.id, "Col".into(), None).unwrap();
let sprint1 = ctx.create_sprint(board.id, None, None).unwrap();
ctx.activate_sprint(sprint1.id, Some(14)).unwrap();
let card = ctx
.create_card(
board.id,
col.id,
"Card".into(),
CreateCardOptions::default(),
)
.unwrap();
ctx.assign_card_to_sprint(card.id, sprint1.id).unwrap();
ctx.complete_sprint(sprint1.id).unwrap();
let sprint2 = ctx.create_sprint(board.id, None, None).unwrap();
ctx.carry_over_sprint_cards(sprint1.id, sprint2.id).unwrap();
ctx.save().await.unwrap();
let ctx = KanbanContext::open_deferred(factory(&path), AppConfig::default());
let c = ctx.get_card(card.id).unwrap().unwrap();
assert_eq!(c.sprint_id, Some(sprint2.id));
assert!(
c.sprint_logs.len() >= 2,
"expected at least 2 sprint log entries, got {}",
c.sprint_logs.len()
);
let log1 = &c.sprint_logs[0];
assert_eq!(log1.sprint_id, sprint1.id);
assert!(log1.ended_at.is_some());
let log2 = &c.sprint_logs[1];
assert_eq!(log2.sprint_id, sprint2.id);
}
pub async fn test_sprint_log_with_name_roundtrip(factory: &BackendFactory) {
let dir = TempDir::new().unwrap();
let path = dir.path().join("test.store");
let mut ctx = KanbanContext::open(factory(&path), AppConfig::default())
.await
.unwrap();
let board = ctx.create_board("Board".into(), Some("B".into())).unwrap();
let col = ctx.create_column(board.id, "Col".into(), None).unwrap();
{
let mut b = ctx.data_store().get_board(board.id).unwrap().unwrap();
b.sprint_names = vec!["Alpha".into(), "Beta".into()];
ctx.data_store().upsert_board(b).unwrap();
}
let sprint = ctx
.create_sprint(board.id, None, Some("Alpha".into()))
.unwrap();
ctx.activate_sprint(sprint.id, Some(14)).unwrap();
let card = ctx
.create_card(
board.id,
col.id,
"Card".into(),
CreateCardOptions::default(),
)
.unwrap();
ctx.assign_card_to_sprint(card.id, sprint.id).unwrap();
ctx.save().await.unwrap();
let ctx = KanbanContext::open_deferred(factory(&path), AppConfig::default());
let c = ctx.get_card(card.id).unwrap().unwrap();
assert!(!c.sprint_logs.is_empty());
let log = &c.sprint_logs[0];
assert_eq!(log.sprint_id, sprint.id);
assert!(log.sprint_name.is_some());
}