aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sietima/Message.pm20
-rw-r--r--t/tests/sietima/message.t41
2 files changed, 58 insertions, 3 deletions
diff --git a/lib/Sietima/Message.pm b/lib/Sietima/Message.pm
index 7202269..a864c02 100644
--- a/lib/Sietima/Message.pm
+++ b/lib/Sietima/Message.pm
@@ -15,6 +15,7 @@ has mail => (
has from => (
is => 'ro',
isa => Address,
+ coerce => AddressFromStr,
required => 1,
);
@@ -26,13 +27,26 @@ has to => (
required => 1,
);
+sub _clone_address {
+ Email::Address->new(
+ $_[0]->phrase,
+ $_[0]->address,
+ $_[0]->comment,
+ $_[0]->original,
+ );
+}
+
+sub _clone_mail {
+ Email::MIME->new($_[0]->as_string);
+}
+
sub clone {
my ($self,$args) = @_;
return ref($self)->new({
- map {
- $_ => $args->{$_} // $self->$_,
- } qw(mail from to),
+ from => $args->{from} || _clone_address($self->from),
+ to => $args->{to} || [ map { _clone_address($_) } @{$self->to} ],
+ mail => $args->{mail} || _clone_mail($self->mail),
});
}
diff --git a/t/tests/sietima/message.t b/t/tests/sietima/message.t
new file mode 100644
index 0000000..8b42ff8
--- /dev/null
+++ b/t/tests/sietima/message.t
@@ -0,0 +1,41 @@
+#!perl
+use strict;
+use warnings;
+use 5.020;
+use lib 't/lib';
+use Test2::Bundle::Extended;
+use Test2::Tools::MoreCompare qw(bag);
+use Test2::Plugin::DieOnFail;
+use Email::Stuffer;
+use Data::Printer;
+use Sietima::Message;
+
+my $mail = Email::Stuffer
+ ->from('one@example.com')
+ ->to('two@example, three@example.com')
+ ->text_body('test message')->email;
+
+my $message = Sietima::Message->new({
+ mail => $mail,
+ from => 'one@envelope.example.com',
+ to => [
+ 'two@envelope.example.com',
+ 'three@envelope.example.com',
+ ],
+});
+
+is(
+ $message->envelope,
+ {
+ from => 'one@envelope.example.com',
+ to => bag {
+ item 'two@envelope.example.com';
+ item 'three@envelope.example.com';
+ },
+ },
+ 'the envelope should be built from the attributes',
+);
+
+# I'm not sure I'll need 'clone', so I won't test it for the moment
+
+done_testing;