coding_agent_search/ui/components/
breadcrumbs.rs1use crate::ui::data::RankingMode;
8
9#[derive(Clone, Copy, Debug, PartialEq, Eq)]
10pub enum BreadcrumbKind {
11 Agent,
12 Workspace,
13 Date,
14 Ranking,
15 None,
16}
17
18pub fn ranking_label(r: RankingMode) -> &'static str {
19 match r {
20 RankingMode::RecentHeavy => "Recent",
21 RankingMode::Balanced => "Balanced",
22 RankingMode::RelevanceHeavy => "Relevance",
23 RankingMode::MatchQualityHeavy => "Quality",
24 RankingMode::DateNewest => "Newest",
25 RankingMode::DateOldest => "Oldest",
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 #[test]
34 fn test_breadcrumb_kind_equality() {
35 assert_eq!(BreadcrumbKind::Agent, BreadcrumbKind::Agent);
36 assert_eq!(BreadcrumbKind::Workspace, BreadcrumbKind::Workspace);
37 assert_eq!(BreadcrumbKind::Date, BreadcrumbKind::Date);
38 assert_eq!(BreadcrumbKind::Ranking, BreadcrumbKind::Ranking);
39 assert_eq!(BreadcrumbKind::None, BreadcrumbKind::None);
40 }
41
42 #[test]
43 fn test_breadcrumb_kind_inequality() {
44 assert_ne!(BreadcrumbKind::Agent, BreadcrumbKind::Workspace);
45 assert_ne!(BreadcrumbKind::Date, BreadcrumbKind::Ranking);
46 assert_ne!(BreadcrumbKind::None, BreadcrumbKind::Agent);
47 }
48
49 #[test]
50 fn test_breadcrumb_kind_clone() {
51 let kind = BreadcrumbKind::Agent;
52 let cloned = kind;
53 assert_eq!(kind, cloned);
54 }
55
56 #[test]
57 fn test_breadcrumb_kind_copy() {
58 let kind = BreadcrumbKind::Workspace;
59 let copied: BreadcrumbKind = kind;
60 assert_eq!(copied, BreadcrumbKind::Workspace);
61 }
62
63 #[test]
64 fn test_breadcrumb_kind_debug() {
65 let debug_str = format!("{:?}", BreadcrumbKind::Agent);
66 assert!(debug_str.contains("Agent"));
67
68 let debug_str = format!("{:?}", BreadcrumbKind::None);
69 assert!(debug_str.contains("None"));
70 }
71
72 #[test]
73 fn test_ranking_label_recent_heavy() {
74 assert_eq!(ranking_label(RankingMode::RecentHeavy), "Recent");
75 }
76
77 #[test]
78 fn test_ranking_label_balanced() {
79 assert_eq!(ranking_label(RankingMode::Balanced), "Balanced");
80 }
81
82 #[test]
83 fn test_ranking_label_relevance_heavy() {
84 assert_eq!(ranking_label(RankingMode::RelevanceHeavy), "Relevance");
85 }
86
87 #[test]
88 fn test_ranking_label_match_quality_heavy() {
89 assert_eq!(ranking_label(RankingMode::MatchQualityHeavy), "Quality");
90 }
91
92 #[test]
93 fn test_ranking_label_date_newest() {
94 assert_eq!(ranking_label(RankingMode::DateNewest), "Newest");
95 }
96
97 #[test]
98 fn test_ranking_label_date_oldest() {
99 assert_eq!(ranking_label(RankingMode::DateOldest), "Oldest");
100 }
101
102 #[test]
103 fn test_ranking_label_all_modes_non_empty() {
104 let modes = [
105 RankingMode::RecentHeavy,
106 RankingMode::Balanced,
107 RankingMode::RelevanceHeavy,
108 RankingMode::MatchQualityHeavy,
109 RankingMode::DateNewest,
110 RankingMode::DateOldest,
111 ];
112
113 for mode in modes {
114 let label = ranking_label(mode);
115 assert!(
116 !label.is_empty(),
117 "Label for {:?} should not be empty",
118 mode
119 );
120 }
121 }
122}