Skip to content

Commit b9eade1

Browse files
committed
test: add tests for edit config
This commit add tests to the EditConfig functions, increasing patch-hub test coverage. Signed-off-by: JGBSouza <[email protected]>
1 parent ad93a74 commit b9eade1

File tree

1 file changed

+251
-0
lines changed

1 file changed

+251
-0
lines changed

src/app/screens/edit_config.rs

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,254 @@ impl Display for EditableConfig {
262262
}
263263
}
264264
}
265+
#[cfg(test)]
266+
mod tests {
267+
use super::*;
268+
use std::{collections::HashMap};
269+
270+
fn config_buffer_instance() -> HashMap<EditableConfig, String> {
271+
let mut config_buffer = HashMap::new();
272+
config_buffer.insert(EditableConfig::PageSize, "20".into());
273+
config_buffer.insert(
274+
EditableConfig::CacheDir,
275+
std::env::temp_dir().to_string_lossy().into(),
276+
);
277+
config_buffer.insert(
278+
EditableConfig::DataDir,
279+
std::env::temp_dir().to_string_lossy().into(),
280+
);
281+
config_buffer.insert(EditableConfig::GitSendEmailOpt, "--x".into());
282+
config_buffer.insert(EditableConfig::GitAmOpt, "--y".into());
283+
config_buffer.insert(EditableConfig::PatchRenderer, "bat".into());
284+
config_buffer.insert(EditableConfig::CoverRenderer, "bat".into());
285+
config_buffer.insert(EditableConfig::MaxLogAge, "7".into());
286+
config_buffer
287+
}
288+
289+
fn instance_from_config_buffer(config_buffer: HashMap<EditableConfig, String>) -> EditConfig {
290+
EditConfig {
291+
config_buffer,
292+
highlighted: 0,
293+
is_editing: false,
294+
curr_edit: String::new(),
295+
}
296+
}
297+
298+
#[test]
299+
fn test_initial_values_loaded_correctly() {
300+
let config = config_buffer_instance();
301+
let config_len = config.len();
302+
let edit = instance_from_config_buffer(config);
303+
304+
assert_eq!(edit.config_count(), config_len);
305+
306+
let (name, value) = edit
307+
.config(0)
308+
.expect("Deve haver uma configuração no índice 0");
309+
310+
assert_eq!(name, "Page Size");
311+
assert_eq!(value, "20");
312+
}
313+
314+
#[test]
315+
fn test_highlight_next_within_bounds() {
316+
let config = config_buffer_instance();
317+
let mut edit = instance_from_config_buffer(config);
318+
319+
assert_eq!(edit.highlighted(), 0);
320+
321+
edit.highlight_next();
322+
assert_eq!(edit.highlighted(), 1);
323+
324+
edit.highlight_next();
325+
assert_eq!(edit.highlighted(), 2);
326+
}
327+
328+
#[test]
329+
fn test_highlight_next_stops_at_last() {
330+
let config = config_buffer_instance();
331+
let mut edit = instance_from_config_buffer(config);
332+
333+
let last_index = edit.config_count() - 1;
334+
335+
edit.highlighted = last_index;
336+
337+
edit.highlight_next();
338+
339+
assert_eq!(edit.highlighted(), last_index);
340+
}
341+
342+
#[test]
343+
fn test_highlight_prev_within_bounds() {
344+
let config = config_buffer_instance();
345+
let mut edit = instance_from_config_buffer(config);
346+
347+
edit.highlight_next();
348+
edit.highlight_next();
349+
350+
assert_eq!(edit.highlighted(), 2);
351+
352+
edit.highlight_prev();
353+
assert_eq!(edit.highlighted(), 1);
354+
355+
edit.highlight_prev();
356+
assert_eq!(edit.highlighted(), 0);
357+
}
358+
359+
#[test]
360+
fn test_highlight_prev_stops_at_zero() {
361+
let config = config_buffer_instance();
362+
let mut edit = instance_from_config_buffer(config);
363+
364+
edit.highlighted = 0;
365+
366+
assert_eq!(edit.highlighted(), 0);
367+
368+
edit.highlight_prev();
369+
370+
assert_eq!(edit.highlighted(), 0);
371+
}
372+
373+
#[test]
374+
fn test_append_edit() {
375+
let config = config_buffer_instance();
376+
let mut edit = instance_from_config_buffer(config);
377+
378+
edit.is_editing = true;
379+
edit.curr_edit.clear();
380+
381+
edit.append_edit('a');
382+
edit.append_edit('b');
383+
edit.append_edit('c');
384+
assert_eq!(edit.curr_edit, "abc");
385+
edit.append_edit('ç');
386+
assert_eq!(edit.curr_edit, "abcç");
387+
}
388+
389+
#[test]
390+
fn test_backspace_edit() {
391+
let config = config_buffer_instance();
392+
let mut edit = instance_from_config_buffer(config);
393+
394+
edit.is_editing = true;
395+
396+
edit.curr_edit.clear();
397+
398+
edit.curr_edit = "abc".into();
399+
edit.backspace_edit();
400+
assert_eq!(edit.curr_edit, "ab");
401+
edit.backspace_edit();
402+
assert_eq!(edit.curr_edit, "a");
403+
edit.backspace_edit();
404+
assert_eq!(edit.curr_edit, "");
405+
edit.backspace_edit();
406+
assert_eq!(edit.curr_edit, "");
407+
}
408+
409+
#[test]
410+
fn test_clear_edit() {
411+
let mut edit = instance_from_config_buffer(config_buffer_instance());
412+
413+
edit.is_editing = true;
414+
415+
assert!(edit.curr_edit().is_empty());
416+
edit.clear_edit();
417+
assert!(edit.curr_edit().is_empty());
418+
419+
edit.curr_edit = "abc".to_string();
420+
assert_eq!(edit.curr_edit(), "abc");
421+
422+
edit.clear_edit();
423+
assert!(edit.curr_edit().is_empty());
424+
}
425+
426+
#[test]
427+
fn test_toggle_editing_twice() {
428+
let config = config_buffer_instance();
429+
let mut edit = instance_from_config_buffer(config);
430+
431+
assert!(!edit.is_editing);
432+
433+
let (_, initial_val) = edit.config(edit.highlighted()).unwrap();
434+
435+
edit.toggle_editing();
436+
assert!(edit.is_editing);
437+
assert_eq!(*edit.curr_edit(), initial_val);
438+
439+
edit.toggle_editing();
440+
assert!(!edit.is_editing);
441+
assert_eq!(*edit.curr_edit(), initial_val);
442+
}
443+
444+
#[test]
445+
fn test_stage_edit_updates_value() {
446+
let mut edit = instance_from_config_buffer(config_buffer_instance());
447+
448+
edit.is_editing = true;
449+
450+
edit.clear_edit();
451+
edit.append_edit('4');
452+
edit.append_edit('2');
453+
assert_eq!(edit.curr_edit(), "42");
454+
455+
edit.stage_edit();
456+
457+
let (_, value) = edit.config(0).unwrap();
458+
assert_eq!(value, "42");
459+
}
460+
461+
#[test]
462+
fn test_page_size_parsing() {
463+
let mut edit = instance_from_config_buffer(config_buffer_instance());
464+
465+
edit.config_buffer.insert(EditableConfig::PageSize, "50".to_string());
466+
467+
assert_eq!(edit.page_size().unwrap(), 50);
468+
}
469+
470+
#[test]
471+
fn test_page_size_invalid() {
472+
let mut edit = instance_from_config_buffer(config_buffer_instance());
473+
474+
edit.config_buffer.insert(EditableConfig::PageSize, "x".to_string());
475+
476+
assert!(edit.page_size().is_err());
477+
}
478+
479+
#[test]
480+
fn test_cache_dir_valid() {
481+
let mut edit = instance_from_config_buffer(config_buffer_instance());
482+
483+
edit.config_buffer.insert(EditableConfig::CacheDir, "/tmp/cache".into());
484+
485+
assert!(edit.cache_dir().is_ok());
486+
}
487+
488+
#[test]
489+
fn test_data_dir_valid() {
490+
let mut edit = instance_from_config_buffer(config_buffer_instance());
491+
492+
edit.config_buffer.insert(EditableConfig::DataDir, "/tmp/data".into());
493+
494+
assert!(edit.data_dir().is_ok());
495+
}
496+
497+
#[test]
498+
fn test_max_log_age_parsing() {
499+
let mut edit = instance_from_config_buffer(config_buffer_instance());
500+
501+
edit.config_buffer.insert(EditableConfig::MaxLogAge, "99".to_string());
502+
503+
assert_eq!(edit.max_log_age().unwrap(), 99);
504+
}
505+
506+
507+
#[test]
508+
fn test_try_from_valid_index() {
509+
for i in 0..=7 {
510+
assert!(EditableConfig::try_from(i).is_ok());
511+
}
512+
513+
assert!(EditableConfig::try_from(8).is_err());
514+
}
515+
}

0 commit comments

Comments
 (0)