RT 4.0.22
[freeside.git] / rt / t / api / cfsearch.t
1 use strict;
2 use warnings;
3
4 use RT::Test tests => 18;
5
6 my $suffix = '-'. $$;
7
8 use_ok 'RT::Users';
9 use_ok 'RT::CustomField';
10
11 my $u1 = RT::User->new( RT->SystemUser );
12 isa_ok( $u1, 'RT::User' );
13 ok( $u1->Load('root'), "Loaded user 'root'" );
14
15 # create cf
16 my $cfname = 'TestUserCF'. $suffix;
17 my $cf = RT::CustomField->new( RT->SystemUser );
18 isa_ok( $cf, 'RT::CustomField' );
19
20 {
21     my ($id, $msg) = $cf->Create(
22        Name => $cfname,
23        LookupType => 'RT::User',
24        Type => 'Freeform',
25        Description => 'Freeform CF for tests',
26     );
27     ok( $id, "Created cf '$cfname' - " . $msg );
28 }
29
30 {
31   my ($status, $msg) = $cf->AddToObject( $u1 );
32   ok( $status, "Added CF to user object - " . $msg);
33 }
34
35 my $cfvalue1 = 'Foo';
36
37 {
38   my ($id, $msg) = $u1->AddCustomFieldValue(
39                           Field => $cfname,
40                           Value => $cfvalue1,
41                           RecordTransaction => 0 );
42   ok( $id, "Adding CF value '$cfvalue1' - " . $msg );
43 }
44
45 # Confirm value is returned.
46 {
47   my $cf_value_ref = QueryCFValue( $cfvalue1, $cf->id );
48   is( scalar(@$cf_value_ref), 1, 'Got one value.' );
49   is( $cf_value_ref->[0], 'Foo', 'Got Foo back for value.' );
50 }
51
52 {
53   my ($id, $msg) = $u1->DeleteCustomFieldValue(
54                             Field => $cfname,
55                             Value => $cfvalue1,
56                             RecordTransaction => 0 );
57   ok( $id, "Deleting CF value - " . $msg );
58 }
59
60 my $cfvalue2 = 'Bar';
61 {
62   my ($id, $msg) = $u1->AddCustomFieldValue(
63                           Field => $cfname,
64                           Value => $cfvalue2,
65                           RecordTransaction => 0 );
66   ok( $id, "Adding second CF value '$cfvalue2' - " . $msg );
67 }
68
69 # Confirm no value is returned for Foo.
70 {
71   # Calling with $cfvalue1 on purpose to confirm
72   # it has been disabled by the delete above.
73
74   my $cf_value_ref = QueryCFValue( $cfvalue1, $cf->id );
75   is( scalar(@$cf_value_ref), 0, 'No values returned for Foo.' );
76 }
77
78 # Confirm value is returned for Bar.
79 {
80   my $cf_value_ref = QueryCFValue( $cfvalue2, $cf->id );
81   is( scalar(@$cf_value_ref), 1, 'Got one value.' );
82   is( $cf_value_ref->[0], 'Bar', 'Got Bar back for value.' );
83 }
84
85
86 sub QueryCFValue{
87   my $cf_value = shift;
88   my $cf_id = shift;
89   my @cf_value_strs;
90
91   my $users = RT::Users->new(RT->SystemUser);
92   isa_ok( $users, 'RT::Users' );
93
94   $users->LimitCustomField(
95           CUSTOMFIELD => $cf_id,
96           OPERATOR => "=",
97           VALUE => $cf_value );
98
99   while ( my $filtered_user = $users->Next() ){
100     my $cf_values = $filtered_user->CustomFieldValues($cf->id);
101     while (my $cf_value = $cf_values->Next() ){
102       push @cf_value_strs, $cf_value->Content;
103     }
104   }
105   return \@cf_value_strs;
106 }