fix has_tags([$names]) and add has_tag($name)/has_tag($tag_object)
[bse.git] / t / 050-local / 030-tags.t
index 4d76b23..2a0bd8f 100644 (file)
@@ -1,7 +1,7 @@
 #!perl -w
 use strict;
 use BSE::Test ();
-use Test::More tests => 36;
+use Test::More tests => 51;
 use File::Spec;
 use Carp qw(confess);
 
@@ -71,6 +71,24 @@ for my $title ("A" .. "Z") {
   ok($all_set, "all kid tags set");
 }
 
+{
+  my @tags = $kids[0]->tag_objects;
+  my @ids = sort map $_->id, @tags;
+  is_deeply([ sort $kids[0]->tag_ids ], \@ids, "check tag_ids works");
+}
+
+{
+  my $tag_info = BSE::TB::Products->collection_with_tags
+    (
+     "all_visible_products",
+     [ "iPod: Nano" ],
+     { args => [ $parent->id ] },
+    );
+  my @expect = map $_->id, sort { $a->id <=> $b->id } @kids{"I", "J"};
+  my @found = map $_->id, sort { $a->id <=> $b->id } @{$tag_info->{objects}};
+  is_deeply(\@found, \@expect, "collection with tags on all_visible_products");
+}
+
 is_deeply([ map $_->title, $parent->children ],
          [ reverse("A" .. "Z") ],
          "check the childrent are in place");
@@ -208,6 +226,29 @@ is_deeply([ map $_->title, $parent->children ],
   }
 }
 
+{
+  my $error;
+  ok($parent->set_tags([ "SomeTag" ], \$error), "add SomeTag to parent");
+  ok($parent->has_tags([ "SomeTag" ]), "check true has_tags() by name");
+  my ($tag) = $parent->tag_objects;
+  is($tag->name, "SomeTag", "check tag_objects tag");
+  ok($parent->has_tags([ $tag ]), "check true has_tags() by object");
+  ok(!$parent->has_tags([ "Platform: iPad" ]), "check false has_tags() by name");
+  my $unknown = "Unknown: " . time();
+  ok(!$parent->has_tags([ $unknown ]),
+     "check false has_tags() by name (unknown tag)");
+  is_deeply([ $parent->tags ], [ "SomeTag" ], "tags() method");
+  my ($tag_id) = $parent->tag_ids;
+  is($tag_id, $tag->id, "check tag_ids");
+  my $by_name = $parent->tag_by_name("SomeTag");
+  is($by_name->id, $tag->id, "check tag_by_name()");
+  ok($parent->has_tag("SomeTag"), "check true has_tag() by name");
+  ok($parent->has_tag($tag), "check true has_tag() by object");
+  ok(!$parent->has_tag("Platform: iPad"), "check false has_tag() by name");
+  ok(!$parent->has_tag($unknown),
+     "check false has_tag() by name (unknown tag)");
+}
+
 END {
   for my $kid (@kids) {
     $kid->remove($cfg);