nekokak/p5-Teng — Issue #30: Teng::Row#update()発行後のinflateについて
Author: kentaro
Created: 2011-11-02 18:19:03+00:00
State: open

以下のテストはfailします。これが仕様なのかどうかわかりませんが、個人的には不自然に感じました。

1. inflateに、`Str -> Object`が指定されているので、`$row->name()`は期待通り`Mock::Inflate::Name`のインスタンスを返す
2. deflateに`(Object|Str) -> Str`が指定されているので、文字列をわたして`update()`する
3. その後、再度`$row->name()`を呼ぶと、2でわたした値がそのまま返ってくる。

この3で返ってくる値はinflateされたもの、つまり、1と同じ型のものが返ってくるのが自然なように思うのですが、いかがでしょうか。

use t::Utils;
use Test::More;
use Mock::Inflate;

my $dbh = t::Utils->setup_dbh;
my $db = Mock::Inflate->new({ dbh => $dbh });
$db->setup_test_db;
$db->insert('mock_inflate', {
id => 1,
name => 'perl',
});

subtest "update() doesn't break inflation after called" => sub {
my $row = $db->single(mock_inflate => { id => 1 });
isa_ok $row->name, 'Mock::Inflate::Name';

$row->update({ name => 'python' });
isa_ok $row->name, 'Mock::Inflate::Name';
};

done_testing;