fix: disable tickets with invalid detail records
This commit is contained in:
parent
b83b9e4e9e
commit
456722c339
|
|
@ -693,7 +693,14 @@ fn build_ticket_rows(
|
||||||
}
|
}
|
||||||
match backend.show_partial(TicketIdOrSlug::Query(summary.id.clone())) {
|
match backend.show_partial(TicketIdOrSlug::Query(summary.id.clone())) {
|
||||||
Ok(ticket) => {
|
Ok(ticket) => {
|
||||||
|
let current_ticket_invalid = ticket
|
||||||
|
.invalid_records
|
||||||
|
.iter()
|
||||||
|
.any(|record| record.label == summary.id);
|
||||||
invalid_records.extend(ticket.invalid_records);
|
invalid_records.extend(ticket.invalid_records);
|
||||||
|
if current_ticket_invalid {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
ticket_rows.push(ticket_row(
|
ticket_rows.push(ticket_row(
|
||||||
summary,
|
summary,
|
||||||
&ticket.ticket.events,
|
&ticket.ticket.events,
|
||||||
|
|
@ -1389,6 +1396,59 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn workspace_panel_disables_current_ticket_when_detail_artifact_is_invalid() {
|
||||||
|
let temp = TempDir::new().unwrap();
|
||||||
|
write_ticket_config(temp.path());
|
||||||
|
let backend = LocalTicketBackend::new(temp.path().join(".yoi/tickets"));
|
||||||
|
let mut corrupt_input = NewTicket::new("Ready With Corrupt Relations");
|
||||||
|
corrupt_input.workflow_state = Some(TicketWorkflowState::Ready);
|
||||||
|
let corrupt = backend.create(corrupt_input).unwrap();
|
||||||
|
let mut other_input = NewTicket::new("Other Ready Still Queueable");
|
||||||
|
other_input.workflow_state = Some(TicketWorkflowState::Ready);
|
||||||
|
let other = backend.create(other_input).unwrap();
|
||||||
|
|
||||||
|
let artifacts = temp
|
||||||
|
.path()
|
||||||
|
.join(".yoi/tickets")
|
||||||
|
.join(&corrupt.id)
|
||||||
|
.join("artifacts");
|
||||||
|
fs::create_dir_all(&artifacts).unwrap();
|
||||||
|
fs::write(artifacts.join("relations.json"), "{").unwrap();
|
||||||
|
|
||||||
|
let model = build_workspace_panel(temp.path(), &empty_pods());
|
||||||
|
|
||||||
|
let corrupt_placeholders = model
|
||||||
|
.rows
|
||||||
|
.iter()
|
||||||
|
.filter(|row| row.key == PanelRowKey::InvalidTicket(corrupt.id.clone()))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
assert_eq!(corrupt_placeholders.len(), 1);
|
||||||
|
let corrupt_placeholder = corrupt_placeholders[0];
|
||||||
|
assert_eq!(corrupt_placeholder.kind, PanelRowKind::InvalidTicket);
|
||||||
|
assert_eq!(corrupt_placeholder.next_action, None);
|
||||||
|
assert!(corrupt_placeholder.ticket.is_none());
|
||||||
|
assert!(!corrupt_placeholder.is_ticket_action());
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
!model
|
||||||
|
.rows
|
||||||
|
.iter()
|
||||||
|
.any(|row| row.key == PanelRowKey::Ticket(corrupt.id.clone()))
|
||||||
|
);
|
||||||
|
|
||||||
|
let other_row = model
|
||||||
|
.rows
|
||||||
|
.iter()
|
||||||
|
.find(|row| row.key == PanelRowKey::Ticket(other.id.clone()))
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(other_row.next_action, Some(NextUserAction::Queue));
|
||||||
|
assert!(other_row.is_ticket_action());
|
||||||
|
|
||||||
|
let diagnostics = model.header.diagnostics.join("\n");
|
||||||
|
assert!(diagnostics.contains("Ticket records partially loaded: 1 invalid record"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn workspace_panel_keeps_backend_config_unusable_as_whole_ticket_degradation() {
|
fn workspace_panel_keeps_backend_config_unusable_as_whole_ticket_degradation() {
|
||||||
let temp = TempDir::new().unwrap();
|
let temp = TempDir::new().unwrap();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user