OSDN Git Service

Model::Tags: add get_topics(), rename selet() to select_tagnames, and create test
authorhylom <hylom@users.sourceforge.jp>
Mon, 24 Apr 2017 10:37:05 +0000 (19:37 +0900)
committerhylom <hylom@users.sourceforge.jp>
Mon, 24 Apr 2017 10:37:05 +0000 (19:37 +0900)
src/newslash_web/lib/Newslash/Model/Tags.pm
src/newslash_web/t/models/tags.t [new file with mode: 0644]

index 07360e5..2d5480d 100644 (file)
@@ -3,6 +3,23 @@ package Newslash::Model::Tags;
 use base Newslash::Model::LegacyDB;
 
 
+sub get_topics {
+    my ($self, ) = @_;
+    my $sql = <<"EOSQL";
+SELECT * FROM topics;
+EOSQL
+    my $dbh = $self->connect_db;
+    my $sth = $dbh->prepare($sql);
+    $sth->execute;
+    my $rs = $sth->fetchall_arrayref({});
+    if (!$rs) {
+        $self->disconnect_db;
+        return;
+    }
+    $self->disconnect_db;
+    return $rs;
+}
+
 sub set_tag {
     my $self = shift;
     return if $self->check_readonly;
@@ -21,7 +38,7 @@ sub set_tag {
     }
 
     if ($name) {
-        my $tagname = $self->select(tagname => $name);
+        my $tagname = $self->select_tagnames(tagname => $name);
         if ($tagname) {
             $tagname_id = $tagname->{tagnameid};
         }
@@ -75,6 +92,11 @@ sub create {
 
 sub select {
     my $self = shift;
+    return $self->base_select('tags', [qw(tagid)], [qw(tagnameid globjid uid private is_active)], @_);
+}
+
+sub select_tagnames {
+    my $self = shift;
     my $params = {@_};
 
     if ($params->{tagname}) {
diff --git a/src/newslash_web/t/models/tags.t b/src/newslash_web/t/models/tags.t
new file mode 100644 (file)
index 0000000..da22729
--- /dev/null
@@ -0,0 +1,70 @@
+# -*-Perl-*-
+# Newslash::Model:Tags related tests
+use Mojo::Base -strict;
+
+use Test::More;
+use Test::Mojo;
+use Data::Dumper;
+use Newslash::Util::Test qw(create_user delete_user
+                            create_story delete_story
+                            create_comments
+                            create_users create_admin_user
+                            get_anonymous_user
+                          );
+use List::Util qw(any);
+
+my $t = Test::Mojo->new('Newslash::Web');
+my ($user, $admin, $story, $globjid);
+
+my $tags = $t->app->model('tags');
+ok($tags, "get Tags instance");
+
+# prepare for test
+if ($t->app->mode eq 'test') {
+    # at first, create test users.
+    $user = create_user($t->app, "tagstest");
+    ok($user, "create user");
+    $admin = create_admin_user($t->app, "tagtest_admin");
+    ok($admin, "create admin user");
+
+    # second, create story.
+    $story = create_story($t->app, $admin, "タグテスト", "<p>タグテスト本文</p>");
+    ok($story, "create story for test");
+    $globjid = $t->app->model('globjs')->get_globjid_from_item(story => $story->{stoid});
+    ok($globjid, "get globjid of story");
+}
+
+subtest 'get topics' => sub {
+    my $topics = $tags->get_topics;
+    ok($topics, "get topics");
+};
+
+subtest 'set and get tag' => sub {
+    plan skip_all => "mode is not 'test'" if ($t->app->mode ne 'test');
+
+
+    my $params = {
+                 };
+    my $tagid = $tags->set_tag(globj_id => $globjid,
+                               uid => $admin->{uid},
+                               name => "slash");
+    ok($tagid, "set tag");
+
+    my $tag = $tags->select_tagnames(tagname => "slash");
+    ok($tag, "select from tagnames");
+    is($tag->{tagname}, "slash", "retrive valid tagname");
+
+    my $rs_tags = $tags->select(globjid => $globjid);
+    ok($rs_tags, "select tags");
+    ok(any { $_->{tagid} == $tagid } @$rs_tags, "select by globjid");
+};
+
+
+# cleanup
+if ($t->app->mode eq 'test') {
+    delete_user($t->app, $user->{nickname});
+    delete_user($t->app, $admin->{nickname});
+    delete_story($t->app, $story->{stoid});
+}
+
+done_testing();