#!/usr/bin/perl use strict; use warnings; use Test::More; BEGIN { eval { require DBD::SQLite } or plan skip_all => 'DBD::SQLite is required for this test'; $ENV{TEST_FOORUM} = 1; plan tests => 24; } use FindBin; use File::Spec; use lib File::Spec->catdir( $FindBin::Bin, '..', 'lib' ); use Foorum::SUtils qw/schema/; use Foorum::XUtils qw/cache/; use Foorum::TestUtils qw/rollback_db/; use Foorum::Utils qw/encodeHTML/; my $schema = schema(); my $cache = cache(); my $comment_res = $schema->resultset('Comment'); # test create_comment sub create_comment { my ( $comment_id, $reply_to ) = @_; $comment_res->create( { comment_id => $comment_id, object_type => 'test', object_id => 22, forum_id => 1, upload_id => 0, reply_to => $reply_to, title => encodeHTML("$comment_id - $reply_to "), text => "$comment_id x $reply_to x foorumbbs", formatter => 'plain', author_id => 1, post_ip => '127.0.0.1', } ); } &create_comment( 1, 0 ); my $cache_key = 'comment|object_type=test|object_id=22'; $cache->remove($cache_key); # test get my $comment = $comment_res->get( 1, { with_text => 1 } ); isn't( $comment, undef, 'get OK' ); is( $comment->{object_type}, 'test', 'get object_type OK' ); is( $comment->{title}, '1 - 0 <title>', 'get encodeHTML title OK' ); is( $comment->{text}, '1 x 0 x foorumbbs' ); # test remove_one_item my $ok = $comment_res->remove_one_item($comment); is( $ok, 1, 'remove_one_item return value OK' ); my $count = $comment_res->count( { comment_id => 1 } ); is( $count, 0, 'delete confirmed' ); # test get_all_comments_by_object &create_comment( 1, 0 ); &create_comment( 2, 1 ); &create_comment( 3, 1 ); &create_comment( 4, 2 ); $cache->remove($cache_key); my @comments = $comment_res->get_all_comments_by_object( 'test', 22 ); is( scalar @comments, 4, 'get_all_comments_by_object OK' ); is( $comments[0]->{comment_id}, 1, 'comments[0]->{comment_id} == 1' ); is( $comments[1]->{comment_id}, 2, 'comments[1]->{comment_id} == 2' ); is( $comments[2]->{comment_id}, 3, 'comments[2]->{comment_id} == 3' ); is( $comments[3]->{comment_id}, 4, 'comments[3]->{comment_id} == 4' ); # test get_children_comments my @result_comments; $comment_res->get_children_comments( 1, 1, \@comments, \@result_comments ); is( scalar @result_comments, 3, 'get_children_comments OK' ); is( $result_comments[0]->{comment_id}, 2, 'get_children_comments first node OK' ); is( $result_comments[0]->{level}, 1, 'get_children_comments level 1 OK' ); is( $result_comments[1]->{comment_id}, 4, 'get_children_comments second node OK' ); is( $result_comments[1]->{level}, 2, 'get_children_comments level 2 OK' ); is( $result_comments[2]->{comment_id}, 3, 'get_children_comments third node OK' ); is( $result_comments[2]->{level}, 1, 'get_children_comments level 1 OK' ); # test remove_children my $deleted_count = $comment_res->remove_children( $comments[1] ); is( $deleted_count, 2, 'remove_children OK' ); $count = $comment_res->count( { object_type => 'test', object_id => 22 } ); is( $count, 2, 'after remove_children, count OK' ); =pod # test remove_by_object $deleted_count = $comment_res->remove_by_object('test', 22); is($deleted_count, 2, 'remove_by_object OK'); $count = $comment_res->count( { object_type => 'test', object_id => 22 } ); is($count, 0, 'after remove_by_object, count OK'); =cut # test validate_params my $params = { title => '', text => 'text' }; my $st = $comment_res->validate_params($params); is( $st, 'ERROR_TITLE_LENGTH', 'ERROR_TITLE_LENGTH' ); $params = { title => 'title', text => '' }; $st = $comment_res->validate_params($params); is( $st, 'ERROR_TEXT_REQUIRED', 'ERROR_TEXT_REQUIRED' ); $schema->resultset('FilterWord')->create( { word => 'fuck', type => 'bad_word' } ); $cache->remove('filter_word|type=bad_word'); $params = { title => 'fuck', text => 'text' }; $st = $comment_res->validate_params($params); is( $st, 'BAD_TITLE_fuck', 'BAD_fuck in title' ); $params = { title => 'title', text => 'fuck' }; $st = $comment_res->validate_params($params); is( $st, 'BAD_TEXT_fuck', 'BAD_fuck in text' ); END { # Keep Database the same from original rollback_db(); } 1;