Skip to content

Commit ec94cbd

Browse files
unhappychoiceclaude
andcommitted
refactor: move cache directory path from view to provider
Move cache directory path resolution from CacheInfoView to RepoListScreenDataProvider. This allows tests to mock the cache directory path instead of displaying the actual home directory path. Changes: - Add cache_dir field to RepoListScreenData - Update RepoListScreenDataProvider to resolve cache directory path - Update RepoListScreen to store and pass cache_dir to CacheInfoView - Update CacheInfoView::render to accept cache_dir parameter - Update test mock to provide fixed cache directory path - Update snapshot test to use fixed path "/home/user/.gittype/repos" Benefits: - Views no longer depend on environment-specific paths - Test snapshots are deterministic and portable - Better separation between data fetching and presentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 2645acf commit ec94cbd

File tree

4 files changed

+17
-10
lines changed

4 files changed

+17
-10
lines changed

src/presentation/tui/screens/repo_list_screen.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,20 @@ use ratatui::{
1717

1818
pub struct RepoListScreenData {
1919
pub repositories: Vec<(StoredRepositoryWithLanguages, bool)>,
20+
pub cache_dir: String,
2021
}
2122

2223
pub struct RepoListScreen {
2324
repositories: Vec<(StoredRepositoryWithLanguages, bool)>,
25+
cache_dir: String,
2426
event_bus: EventBus,
2527
}
2628

2729
impl RepoListScreen {
2830
pub fn new(event_bus: EventBus) -> Self {
2931
Self {
3032
repositories: Vec::new(),
33+
cache_dir: String::new(),
3134
event_bus,
3235
}
3336
}
@@ -50,8 +53,13 @@ impl ScreenDataProvider for RepoListScreenDataProvider {
5053
})
5154
.collect();
5255

56+
// Get cache directory path
57+
let home_dir = dirs::home_dir().unwrap_or_else(|| std::path::PathBuf::from("."));
58+
let cache_dir = home_dir.join(".gittype").join("repos");
59+
5360
Ok(Box::new(RepoListScreenData {
5461
repositories: repositories_with_cache,
62+
cache_dir: cache_dir.to_string_lossy().to_string(),
5563
}))
5664
}
5765
}
@@ -71,6 +79,7 @@ impl Screen for RepoListScreen {
7179
fn init_with_data(&mut self, data: Box<dyn std::any::Any>) -> Result<()> {
7280
if let Ok(screen_data) = data.downcast::<RepoListScreenData>() {
7381
self.repositories = screen_data.repositories;
82+
self.cache_dir = screen_data.cache_dir;
7483
}
7584
Ok(())
7685
}
@@ -112,7 +121,7 @@ impl Screen for RepoListScreen {
112121
.split(frame.area());
113122

114123
HeaderView::render(frame, chunks[0]);
115-
CacheInfoView::render(frame, chunks[2]);
124+
CacheInfoView::render(frame, chunks[2], &self.cache_dir);
116125
RepositoryListView::render(frame, chunks[4], &self.repositories);
117126
LegendView::render(frame, chunks[5]);
118127
ControlsView::render(frame, chunks[6]);

src/presentation/tui/views/repo_list/cache_info_view.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,13 @@ use ratatui::{
1010
pub struct CacheInfoView;
1111

1212
impl CacheInfoView {
13-
pub fn render(frame: &mut Frame, area: Rect) {
14-
let home_dir = dirs::home_dir().unwrap_or_else(|| std::path::PathBuf::from("."));
15-
let cache_dir = home_dir.join(".gittype").join("repos");
13+
pub fn render(frame: &mut Frame, area: Rect, cache_dir: &str) {
1614
let cache_line = Line::from(vec![
1715
Span::styled(
1816
"Cache Directory: ",
1917
Style::default().fg(Colors::text_secondary()),
2018
),
21-
Span::styled(
22-
cache_dir.to_string_lossy().to_string(),
23-
Style::default().fg(Colors::text()),
24-
),
19+
Span::styled(cache_dir, Style::default().fg(Colors::text())),
2520
]);
2621
let cache_info = Paragraph::new(cache_line).block(
2722
Block::default()

tests/integration/screens/mocks/repo_list_screen_mock.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ impl ScreenDataProvider for MockRepoListDataProvider {
4444
),
4545
];
4646

47-
Ok(Box::new(RepoListScreenData { repositories }))
47+
Ok(Box::new(RepoListScreenData {
48+
repositories,
49+
cache_dir: "/home/user/.gittype/repos".to_string(),
50+
}))
4851
}
4952
}

tests/integration/screens/snapshots/r#mod__integration__screens__repo_list_screen_test__repo_list_screen_snapshot.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ expression: output
77
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
88

99
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
10-
Cache Directory: /home/owner/.gittype/repos
10+
Cache Directory: /home/user/.gittype/repos
1111
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
1212

1313
Repository List───────────────────────────────────────────────────────────────────────────────────────────────────────┐

0 commit comments

Comments
 (0)