From ee5e11945124094c95c9baadc8161f867fe7ecad Mon Sep 17 00:00:00 2001 From: David Morrison Date: Tue, 1 Oct 2024 14:20:18 -0700 Subject: [PATCH] adding snapshot tests for xray --- Cargo.lock | 37 +++++++++ Cargo.toml | 1 + sk-cli/Cargo.toml | 1 + sk-cli/src/xray/tests/mod.rs | 8 ++ ..._view_test__itest_render_event_list@0.snap | 44 ++++++++++ ..._view_test__itest_render_event_list@3.snap | 44 ++++++++++ ...st_render_event_list_event_selected@0.snap | 46 +++++++++++ ...st_render_event_list_event_selected@2.snap | 48 +++++++++++ ...st_render_event_list_event_selected@3.snap | 46 +++++++++++ sk-cli/src/xray/tests/testutils.rs | 9 ++ sk-cli/src/xray/tests/view_test.rs | 82 +++++++++++++++++++ 11 files changed, 366 insertions(+) create mode 100644 sk-cli/src/xray/tests/mod.rs create mode 100644 sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list@0.snap create mode 100644 sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list@3.snap create mode 100644 sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@0.snap create mode 100644 sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@2.snap create mode 100644 sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@3.snap create mode 100644 sk-cli/src/xray/tests/testutils.rs create mode 100644 sk-cli/src/xray/tests/view_test.rs diff --git a/Cargo.lock b/Cargo.lock index 065813e4..7c55ec5e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -676,6 +676,18 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "cookie" version = "0.18.1" @@ -1001,6 +1013,12 @@ dependencies = [ "log", ] +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + [[package]] name = "encoding_rs" version = "0.8.34" @@ -1659,6 +1677,18 @@ version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" +[[package]] +name = "insta" +version = "1.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6593a41c7a73841868772495db7dc1e8ecab43bb5c0b6da2059246c4b506ab60" +dependencies = [ + "console", + "lazy_static", + "linked-hash-map", + "similar", +] + [[package]] name = "instability" version = "0.3.2" @@ -2016,6 +2046,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + [[package]] name = "linux-raw-sys" version = "0.3.8" @@ -3601,6 +3637,7 @@ dependencies = [ "clockabilly", "derive_setters", "dirs", + "insta", "k8s-openapi", "kube", "ratatui", diff --git a/Cargo.toml b/Cargo.toml index 84a50859..d80b02d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,6 +64,7 @@ assertables = "7.0.1" http = "0.2.9" httpmock = "0.6.8" hyper = "0.14.27" +insta = "1.40.0" mockall = "0.11.4" rstest = "0.18.2" tracing-test = "0.2.4" diff --git a/sk-cli/Cargo.toml b/sk-cli/Cargo.toml index 00851a8a..21765bb2 100644 --- a/sk-cli/Cargo.toml +++ b/sk-cli/Cargo.toml @@ -33,4 +33,5 @@ tokio = { workspace = true } [dev-dependencies] assertables = { workspace = true } +insta = { workspace = true } rstest = { workspace = true } diff --git a/sk-cli/src/xray/tests/mod.rs b/sk-cli/src/xray/tests/mod.rs new file mode 100644 index 00000000..440507fa --- /dev/null +++ b/sk-cli/src/xray/tests/mod.rs @@ -0,0 +1,8 @@ +mod testutils; +mod view_test; + +use rstest::*; + +use super::app::*; +use super::*; +use crate::set_snapshot_suffix; diff --git a/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list@0.snap b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list@0.snap new file mode 100644 index 00000000..d88d597c --- /dev/null +++ b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list@0.snap @@ -0,0 +1,44 @@ +--- +source: sk-cli/src/xray/tests/view_test.rs +expression: cf +--- +CompletedFrame { + buffer: Buffer { + area: Rect { x: 0, y: 0, width: 80, height: 20 }, + content: [ + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│>> 00:00:00 (0 applied/0 deleted) │", + "│ 00:00:01 (1 applied/0 deleted) │", + "│ 00:00:02 (2 applied/0 deleted) │", + "│ 00:00:03 (0 applied/1 deleted) │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│Hello SimKube! │", + "│Use arrows to navigate, space to select, 'q' to quit. │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + ], + styles: [ + x: 0, y: 0, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 1, fg: Reset, bg: Reset, underline: Reset, modifier: REVERSED, + x: 79, y: 1, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 0, y: 15, fg: White, bg: Reset, underline: Reset, modifier: NONE, + ] + }, + area: Rect { + x: 0, + y: 0, + width: 80, + height: 20, + }, + count: 0, +} diff --git a/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list@3.snap b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list@3.snap new file mode 100644 index 00000000..f5723bc3 --- /dev/null +++ b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list@3.snap @@ -0,0 +1,44 @@ +--- +source: sk-cli/src/xray/tests/view_test.rs +expression: cf +--- +CompletedFrame { + buffer: Buffer { + area: Rect { x: 0, y: 0, width: 80, height: 20 }, + content: [ + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│ 00:00:00 (0 applied/0 deleted) │", + "│ 00:00:01 (1 applied/0 deleted) │", + "│ 00:00:02 (2 applied/0 deleted) │", + "│>> 00:00:03 (0 applied/1 deleted) │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│Hello SimKube! │", + "│Use arrows to navigate, space to select, 'q' to quit. │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + ], + styles: [ + x: 0, y: 0, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 4, fg: Reset, bg: Reset, underline: Reset, modifier: REVERSED, + x: 79, y: 4, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 0, y: 15, fg: White, bg: Reset, underline: Reset, modifier: NONE, + ] + }, + area: Rect { + x: 0, + y: 0, + width: 80, + height: 20, + }, + count: 0, +} diff --git a/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@0.snap b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@0.snap new file mode 100644 index 00000000..2e95187a --- /dev/null +++ b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@0.snap @@ -0,0 +1,46 @@ +--- +source: sk-cli/src/xray/tests/view_test.rs +expression: cf +--- +CompletedFrame { + buffer: Buffer { + area: Rect { x: 0, y: 0, width: 80, height: 20 }, + content: [ + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│>> 00:00:00 (0 applied/0 deleted) │", + "│++ │", + "│ 00:00:01 (1 applied/0 deleted) │", + "│ 00:00:02 (2 applied/0 deleted) │", + "│ 00:00:03 (0 applied/1 deleted) │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│Hello SimKube! │", + "│Use arrows to navigate, space to select, 'q' to quit. │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + ], + styles: [ + x: 0, y: 0, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 1, fg: Reset, bg: Reset, underline: Reset, modifier: REVERSED, + x: 79, y: 1, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 2, fg: Reset, bg: Blue, underline: Reset, modifier: ITALIC, + x: 79, y: 2, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 0, y: 15, fg: White, bg: Reset, underline: Reset, modifier: NONE, + ] + }, + area: Rect { + x: 0, + y: 0, + width: 80, + height: 20, + }, + count: 0, +} diff --git a/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@2.snap b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@2.snap new file mode 100644 index 00000000..7dc1b6b9 --- /dev/null +++ b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@2.snap @@ -0,0 +1,48 @@ +--- +source: sk-cli/src/xray/tests/view_test.rs +expression: cf +--- +CompletedFrame { + buffer: Buffer { + area: Rect { x: 0, y: 0, width: 80, height: 20 }, + content: [ + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│ 00:00:00 (0 applied/0 deleted) │", + "│ 00:00:01 (1 applied/0 deleted) │", + "│>> 00:00:02 (2 applied/0 deleted) │", + "│++ + test_namespace/test_depl1 │", + "│ + test_namespace/test_depl2 │", + "│ 00:00:03 (0 applied/1 deleted) │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│Hello SimKube! │", + "│Use arrows to navigate, space to select, 'q' to quit. │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + ], + styles: [ + x: 0, y: 0, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 3, fg: Reset, bg: Reset, underline: Reset, modifier: REVERSED, + x: 79, y: 3, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 4, fg: Reset, bg: Blue, underline: Reset, modifier: ITALIC, + x: 79, y: 4, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 5, fg: Reset, bg: Reset, underline: Reset, modifier: ITALIC, + x: 79, y: 5, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 0, y: 15, fg: White, bg: Reset, underline: Reset, modifier: NONE, + ] + }, + area: Rect { + x: 0, + y: 0, + width: 80, + height: 20, + }, + count: 0, +} diff --git a/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@3.snap b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@3.snap new file mode 100644 index 00000000..348da455 --- /dev/null +++ b/sk-cli/src/xray/tests/snapshots/skctl__xray__tests__view_test__itest_render_event_list_event_selected@3.snap @@ -0,0 +1,46 @@ +--- +source: sk-cli/src/xray/tests/view_test.rs +expression: cf +--- +CompletedFrame { + buffer: Buffer { + area: Rect { x: 0, y: 0, width: 80, height: 20 }, + content: [ + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│ 00:00:00 (0 applied/0 deleted) │", + "│ 00:00:01 (1 applied/0 deleted) │", + "│ 00:00:02 (2 applied/0 deleted) │", + "│>> 00:00:03 (0 applied/1 deleted) │", + "│++ - test_namespace/test_depl1 │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + "┌──────────────────────────────────────────────────────────────────────────────┐", + "│Hello SimKube! │", + "│Use arrows to navigate, space to select, 'q' to quit. │", + "│ │", + "└──────────────────────────────────────────────────────────────────────────────┘", + ], + styles: [ + x: 0, y: 0, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 4, fg: Reset, bg: Reset, underline: Reset, modifier: REVERSED, + x: 79, y: 4, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 1, y: 5, fg: Reset, bg: Blue, underline: Reset, modifier: ITALIC, + x: 79, y: 5, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 0, y: 15, fg: White, bg: Reset, underline: Reset, modifier: NONE, + ] + }, + area: Rect { + x: 0, + y: 0, + width: 80, + height: 20, + }, + count: 0, +} diff --git a/sk-cli/src/xray/tests/testutils.rs b/sk-cli/src/xray/tests/testutils.rs new file mode 100644 index 00000000..cfee4722 --- /dev/null +++ b/sk-cli/src/xray/tests/testutils.rs @@ -0,0 +1,9 @@ +#[cfg(test)] +#[macro_export] +macro_rules! set_snapshot_suffix { + ($($expr:expr),*) => { + let mut settings = insta::Settings::clone_current(); + settings.set_snapshot_suffix(format!($($expr,)*)); + let _guard = settings.bind_to_scope(); + } +} diff --git a/sk-cli/src/xray/tests/view_test.rs b/sk-cli/src/xray/tests/view_test.rs new file mode 100644 index 00000000..706adf7c --- /dev/null +++ b/sk-cli/src/xray/tests/view_test.rs @@ -0,0 +1,82 @@ +use insta::assert_debug_snapshot; +use kube::core::{ + ApiResource, + DynamicObject, + GroupVersionKind, +}; +use ratatui::backend::TestBackend; +use ratatui::prelude::*; +use ratatui::widgets::ListState; +use sk_store::TraceEvent; + +use super::*; + +#[fixture] +fn test_app() -> App { + App { + events: vec![ + TraceEvent { ts: 0, ..Default::default() }, + TraceEvent { + ts: 1, + applied_objs: vec![DynamicObject::new( + "test_depl1", + &ApiResource::from_gvk(&GroupVersionKind::gvk("core".into(), "v1".into(), "deployment".into())), + ) + .within("test_namespace")], + deleted_objs: vec![], + }, + TraceEvent { + ts: 2, + applied_objs: vec![ + DynamicObject::new( + "test_depl1", + &ApiResource::from_gvk(&GroupVersionKind::gvk("core".into(), "v1".into(), "deployment".into())), + ) + .within("test_namespace"), + DynamicObject::new( + "test_depl2", + &ApiResource::from_gvk(&GroupVersionKind::gvk("core".into(), "v1".into(), "deployment".into())), + ) + .within("test_namespace"), + ], + deleted_objs: vec![], + }, + TraceEvent { + ts: 3, + applied_objs: vec![], + deleted_objs: vec![DynamicObject::new( + "test_depl1", + &ApiResource::from_gvk(&GroupVersionKind::gvk("core".into(), "v1".into(), "deployment".into())), + ) + .within("test_namespace")], + }, + ], + event_list_state: ListState::default().with_selected(Some(0)), + ..Default::default() + } +} + +#[rstest] +#[case::first(0)] +#[case::last(3)] +fn itest_render_event_list(mut test_app: App, #[case] index: usize) { + set_snapshot_suffix!("{index}"); + test_app.event_list_state.select(Some(index)); + let mut term = Terminal::new(TestBackend::new(80, 20)).unwrap(); + let cf = term.draw(|frame| view(&mut test_app, frame)).unwrap(); + assert_debug_snapshot!(cf); +} + +#[rstest] +#[case::first(0)] +#[case::middle(2)] +#[case::last(3)] +fn itest_render_event_list_event_selected(mut test_app: App, #[case] index: usize) { + set_snapshot_suffix!("{index}"); + test_app.mode = Mode::EventSelected; + test_app.event_list_state.select(Some(index)); + test_app.object_list_state.select(Some(0)); + let mut term = Terminal::new(TestBackend::new(80, 20)).unwrap(); + let cf = term.draw(|frame| view(&mut test_app, frame)).unwrap(); + assert_debug_snapshot!(cf); +}