The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use t::Helper;

redis_do(
  [hmset => 'user:doe', digest => 'E2G3goEIb8gpw', email => ''],
  [zadd => 'user:doe:conversations', time, 'magnet:00:23convos', time - 1, 'magnet:00batman'],
  [sadd => 'user:doe:connections',   'magnet'],
  [hmset => 'user:doe:connection:magnet', nick => 'doe'],
  [del   => 'user:doe:connection:convos:msg'],
);

my $connection = Convos::Core::Connection->new(name => 'magnet', login => 'doe');

$connection->redis($t->app->redis)->_irc(dummy_irc());

$connection->add_server_message(
  {
    params  => ['doe', 'Welcome to the MAGnet Internet Relay Chat Network jhthorsen'],
    prefix  => 'electret.shadowcat.co.uk',
    command => '001',
  }
);

$connection->irc_mode({params => ['doe', '+i'], prefix => 'electret.shadowcat.co.uk',});

$connection->err_bannedfromchan(
  {params => ['doe', '#mojo', 'Cannot join channel (+b)'], prefix => 'electret.shadowcat.co.uk',});

$connection->irc_error({params => ['some error', 'message'], prefix => 'electret.shadowcat.co.uk',});

$connection->redis->del('just:to:be:sure:data:has:been:stored', sub { Mojo::IOLoop->stop });
Mojo::IOLoop->start;

$t->post_ok('/login', form => {login => 'doe', password => 'barbar'})->status_is(302);
$t->get_ok('/convos')->status_is(200)->element_exists('div.messages ul li:first-child img[src^="/avatar"]')
  ->text_is('div.messages ul li:nth-of-child(1) h3 a', 'magnet')
  ->text_is('div.messages ul li:nth-of-child(1) div.content',
  'Welcome to the MAGnet Internet Relay Chat Network jhthorsen')
  ->text_is('div.messages ul li:nth-of-child(2) div.content', 'You are connected to magnet with mode +i')
  ->text_is('div.messages ul li:nth-of-child(3) div.content', 'Cannot join channel (+b)')
  ->text_is('div.messages ul li:nth-of-child(4) div.content', 'some error message');

done_testing;

sub dummy_irc {
  no warnings;
  *test::dummy_irc::nick = sub {'doe'};
  *test::dummy_irc::user = sub {''};
  bless {}, 'test::dummy_irc';
}