Cybersecurity-Projects/PROJECTS/intermediate/credential-rotation-enforcer/spec/unit/policy/builder_spec.cr

51 lines
1.5 KiB
Crystal

# ===================
# ©AngelaMos | 2026
# builder_spec.cr
# ===================
require "../../spec_helper"
require "../../../src/cre/policy/builder"
describe CRE::Policy::Builder do
it "builds a complete policy" do
b = CRE::Policy::Builder.new("p1")
b.description("desc")
b.match { |c| c.kind.env_file? }
b.max_age(30.days)
b.warn_at(25.days)
b.enforce(CRE::Policy::Action::RotateImmediately)
b.notify_via(CRE::Policy::Channel::Telegram, CRE::Policy::Channel::StructuredLog)
b.on_rotation_failure(CRE::Policy::Action::Quarantine)
p = b.build
p.name.should eq "p1"
p.description.should eq "desc"
p.max_age.should eq 30.days
p.warn_at.should eq 25.days
p.enforce_action.should eq CRE::Policy::Action::RotateImmediately
p.notify_channels.size.should eq 2
p.trigger_action_for(CRE::Policy::Trigger::OnRotationFailure).should eq CRE::Policy::Action::Quarantine
end
it "raises on missing match" do
b = CRE::Policy::Builder.new("p")
b.max_age(7.days)
b.enforce(CRE::Policy::Action::NotifyOnly)
expect_raises(CRE::Policy::BuilderError, /match/) { b.build }
end
it "raises on missing max_age" do
b = CRE::Policy::Builder.new("p")
b.match { |_c| true }
b.enforce(CRE::Policy::Action::NotifyOnly)
expect_raises(CRE::Policy::BuilderError, /max_age/) { b.build }
end
it "raises on missing enforce" do
b = CRE::Policy::Builder.new("p")
b.match { |_c| true }
b.max_age(7.days)
expect_raises(CRE::Policy::BuilderError, /enforce/) { b.build }
end
end