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;
}
if ($name) {
- my $tagname = $self->select(tagname => $name);
+ my $tagname = $self->select_tagnames(tagname => $name);
if ($tagname) {
$tagname_id = $tagname->{tagnameid};
}
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}) {
--- /dev/null
+# -*-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();