Cybersecurity-Projects/PROJECTS/intermediate/credential-rotation-enforcer/spec/unit/tui/renderer_spec.cr

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