53 lines
1.7 KiB
Crystal
53 lines
1.7 KiB
Crystal
# ===================
|
|
# ©AngelaMos | 2026
|
|
# renderer_spec.cr
|
|
# ===================
|
|
|
|
require "../../spec_helper"
|
|
require "../../../src/cre/tui/renderer"
|
|
require "../../../src/cre/events/credential_events"
|
|
|
|
describe CRE::Tui::Renderer do
|
|
it "renders the layout with header + panels" do
|
|
state = CRE::Tui::State.new(kek_version: 3)
|
|
io = IO::Memory.new
|
|
CRE::Tui::Renderer.new(state, io, use_color: false).render
|
|
|
|
out = CRE::Tui::Ansi.strip(io.to_s)
|
|
out.should contain "Credential Rotation Enforcer"
|
|
out.should contain "STATUS"
|
|
out.should contain "Active Rotations"
|
|
out.should contain "Recent Events"
|
|
out.should contain "(no active rotations)"
|
|
out.should contain "(no events yet)"
|
|
out.should contain "v3"
|
|
end
|
|
|
|
it "renders active rotations" do
|
|
state = CRE::Tui::State.new
|
|
cred_id = UUID.random
|
|
state.apply(CRE::Events::RotationStarted.new(cred_id, UUID.random, "aws_secretsmgr"))
|
|
state.apply(CRE::Events::RotationStepCompleted.new(cred_id, UUID.random, :generate))
|
|
state.apply(CRE::Events::RotationStepCompleted.new(cred_id, UUID.random, :apply))
|
|
|
|
io = IO::Memory.new
|
|
CRE::Tui::Renderer.new(state, io, use_color: false).render
|
|
out = CRE::Tui::Ansi.strip(io.to_s)
|
|
out.should contain "aws_secretsmgr"
|
|
out.should contain "step 2/4"
|
|
end
|
|
|
|
it "renders recent events with timestamps" do
|
|
state = CRE::Tui::State.new
|
|
cred_id = UUID.random
|
|
state.apply(CRE::Events::RotationCompleted.new(cred_id, UUID.random))
|
|
state.apply(CRE::Events::PolicyViolation.new(cred_id, "p1", "stale"))
|
|
|
|
io = IO::Memory.new
|
|
CRE::Tui::Renderer.new(state, io, use_color: false).render
|
|
out = CRE::Tui::Ansi.strip(io.to_s)
|
|
out.should contain "rotation completed"
|
|
out.should contain "p1"
|
|
end
|
|
end
|