51 lines
1.5 KiB
Crystal
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
|