diff options
Diffstat (limited to 'rt/t/articles/cfsearch.t')
-rw-r--r-- | rt/t/articles/cfsearch.t | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/rt/t/articles/cfsearch.t b/rt/t/articles/cfsearch.t new file mode 100644 index 000000000..49420e581 --- /dev/null +++ b/rt/t/articles/cfsearch.t @@ -0,0 +1,94 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use RT::Test tests => 11; + +my $suffix = '-'. $$; + +use_ok 'RT::Class'; +use_ok 'RT::Article'; +use_ok 'RT::CustomField'; + +my $classname = 'TestClass'; +my $class = RT::Class->new( $RT::SystemUser ); +{ + $class->Load( $classname ); + unless ( $class->Id ) { + my ($id, $msg) = $class->Create( + Name => $classname, + Description => 'class for cf tests', + ); + ok $id, "created class '$classname' #$id" + or diag "error: $msg"; + } else { + ok 1, "class '$classname' exists"; + } +} + +# create cf +my $cfname = 'TestCF'. $suffix; +my $cf = RT::CustomField->new( $RT::SystemUser ); +{ + my ($id, $msg) = $cf->Create( + Name => $cfname, + LookupType => 'RT::Class-RT::Article', + Type => 'Select', MaxValues => 1, + Description => 'singleselect cf for tests', + ); + ok $id, "created cf '$cfname' #$id" + or diag "error: $msg"; +} + +# attach cf to class +{ + my ($status, $msg) = $cf->AddToObject( $class ); + ok $status, "attached the cf to the class" + or diag "error: $msg"; +} + +# create two cf-values +{ + my ($status, $msg) = $cf->AddValue( Name => 'Value1' ); + ok $status, "added a value to the cf" or diag "error: $msg"; + + ($status, $msg) = $cf->AddValue( Name => 'Value2' ); + ok $status, "added a value to the cf" or diag "error: $msg"; +} + +my $article1name = 'TestArticle1'.$suffix; +my $article1 = RT::Article->new($RT::SystemUser); +$article1->Create( Name => $article1name, Summary => 'Test', Class => $class->Id); +$article1->AddCustomFieldValue(Field => $cf->Id, Value => 'Value1'); + +my $article2name = 'TestArticle2'.$suffix; +my $article2 = RT::Article->new($RT::SystemUser); +$article2->Create( Name => $article2name, Summary => 'Test', Class => $class->Id); +$article2->AddCustomFieldValue(Field => $cf->Id, Value => 'Value2'); + +# search for articles containing 1st value +{ + my $articles = RT::Articles->new( $RT::SystemUser ); + $articles->UnLimit; + $articles->Limit( FIELD => "Class", SUBCLAUSE => 'ClassMatch', VALUE => $class->Id); + $articles->LimitCustomField( FIELD => $cf->Id, VALUE => 'Value1' ); + is $articles->Count, 1, 'found correct number of articles'; +} + +{ + my $articles = RT::Articles->new($RT::SystemUser); + $articles->UnLimit; + $articles->Limit( FIELD => "Class", SUBCLAUSE => 'ClassMatch', VALUE => $class->Id); + $articles->LimitCustomField( FIELD => $cf, VALUE => 'Value1' ); + is $articles->Count, 1, 'found correct number of articles'; +} + +{ + my $articles = RT::Articles->new($RT::SystemUser); + $articles->UnLimit( ); + $articles->Limit( FIELD => "Class", SUBCLAUSE => 'ClassMatch', VALUE => $class->Id); + $articles->LimitCustomField( FIELD => $cf->Name, VALUE => 'Value1' ); + is $articles->Count, 1, 'found correct number of articles'; +} + |