use strict;
use warnings;
use Test::Most;
use ACME::AutoRedact;
sub test_redact {
my ($o,$redacted,$revealed) = @_;
cmp_deeply(
$o,
str($revealed),
'should stringify to the original value',
);
{
ACME::AutoRedact->redact;
cmp_deeply(
$o,
str($redacted),
'inside a ->redact, it should stringify to asterisks',
);
}
cmp_deeply(
$o,
str($revealed),
'outside the ->redact, it should stringify to the value again',
);
}
sub test_reveal {
my ($o,$redacted,$revealed) = @_;
cmp_deeply(
$o,
str($redacted),
'should stringify to asterisks',
);
{
ACME::AutoRedact->reveal;
cmp_deeply(
$o,
str($revealed),
'inside a ->reveal, it should stringify to the original value',
);
}
cmp_deeply(
$o,
str($redacted),
'outside the ->revealed, it should stringify to asterisks again',
);
}
sub simulate_redact { return '*' x length($_[0]) }
subtest 'just the object' => sub {
my $value = 'a password';
my $o = ACME::AutoRedact->new({
value => $value,
});
test_redact($o,simulate_redact($value),$value);
};
subtest 'redact by default' => sub {
my $value = 'another password';
my $o = ACME::AutoRedact->new({
value => $value,
default_behaviour => 'redact',
});
test_reveal($o,simulate_redact($value),$value);
};
subtest 'concatenation' => sub {
my $value = 'some secret';
my $o = ACME::AutoRedact->new($value);
my $prefix = 'embedding ';
my $suffix = ' in a bigger string';
my $string = "$prefix$o$suffix";
test_redact(
$string,
$prefix.simulate_redact($value).$suffix,
"$prefix$value$suffix",
);
};
subtest 'sprintf' => sub {
my $value = 'some secret';
my $o = ACME::AutoRedact->new($value);
my $pattern = 'embedding %s in a bigger string';
my $string = sprintf $pattern,$o;
local $TODO = q{I don't think we can make printf work};
test_redact(
$string,
sprintf($pattern,simulate_redact($value)),
sprintf($pattern,$value),
);
};
done_testing;