82 lines
2.2 KiB
Crystal
82 lines
2.2 KiB
Crystal
# ===================
|
|
# ©AngelaMos | 2026
|
|
# credential_spec.cr
|
|
# ===================
|
|
|
|
require "../../spec_helper"
|
|
require "../../../src/cre/domain/credential"
|
|
|
|
describe CRE::Domain::Credential do
|
|
it "constructs with required fields" do
|
|
c = CRE::Domain::Credential.new(
|
|
id: UUID.random,
|
|
external_id: "arn:aws:secretsmanager:us-east-1:1:secret:db-prod",
|
|
kind: CRE::Domain::CredentialKind::AwsSecretsmgr,
|
|
name: "db-prod",
|
|
tags: {"env" => "prod"} of String => String,
|
|
)
|
|
c.kind.aws_secretsmgr?.should be_true
|
|
c.tag(:env).should eq "prod"
|
|
end
|
|
|
|
it "returns nil for missing tag" do
|
|
c = CRE::Domain::Credential.new(
|
|
id: UUID.random,
|
|
external_id: "x",
|
|
kind: CRE::Domain::CredentialKind::EnvFile,
|
|
name: "n",
|
|
tags: {} of String => String,
|
|
)
|
|
c.tag(:env).should be_nil
|
|
end
|
|
|
|
it "supports kind predicates" do
|
|
c = CRE::Domain::Credential.new(
|
|
id: UUID.random,
|
|
external_id: "x",
|
|
kind: CRE::Domain::CredentialKind::GithubPat,
|
|
name: "n",
|
|
tags: {} of String => String,
|
|
)
|
|
c.kind.github_pat?.should be_true
|
|
c.kind.env_file?.should be_false
|
|
end
|
|
|
|
it "tag() accepts both string and symbol keys" do
|
|
c = CRE::Domain::Credential.new(
|
|
id: UUID.random, external_id: "x",
|
|
kind: CRE::Domain::CredentialKind::EnvFile,
|
|
name: "n", tags: {"foo" => "bar"} of String => String,
|
|
)
|
|
c.tag("foo").should eq "bar"
|
|
c.tag(:foo).should eq "bar"
|
|
end
|
|
|
|
it "rotation_anchor falls back to created_at when never rotated" do
|
|
created = Time.utc - 3.days
|
|
c = CRE::Domain::Credential.new(
|
|
id: UUID.random,
|
|
external_id: "x",
|
|
kind: CRE::Domain::CredentialKind::EnvFile,
|
|
name: "n",
|
|
tags: {} of String => String,
|
|
created_at: created,
|
|
)
|
|
c.rotation_anchor.should eq created
|
|
end
|
|
|
|
it "rotation_anchor uses last_rotated_at once set" do
|
|
rotated = Time.utc - 1.hour
|
|
c = CRE::Domain::Credential.new(
|
|
id: UUID.random,
|
|
external_id: "x",
|
|
kind: CRE::Domain::CredentialKind::EnvFile,
|
|
name: "n",
|
|
tags: {} of String => String,
|
|
created_at: Time.utc - 30.days,
|
|
last_rotated_at: rotated,
|
|
)
|
|
c.rotation_anchor.should eq rotated
|
|
end
|
|
end
|