diff options
author | Ivan Kohler <ivan@freeside.biz> | 2012-04-24 11:35:56 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2012-04-24 11:35:56 -0700 |
commit | 6587f6ba7d047ddc1686c080090afe7d53365bd4 (patch) | |
tree | ec77342668e8865aca669c9b4736e84e3077b523 /rt/t/articles/interface.t | |
parent | 47153aae5c2fc00316654e7277fccd45f72ff611 (diff) |
first pass RT4 merge, RT#13852
Diffstat (limited to 'rt/t/articles/interface.t')
-rw-r--r-- | rt/t/articles/interface.t | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/rt/t/articles/interface.t b/rt/t/articles/interface.t new file mode 100644 index 000000000..d04be8b88 --- /dev/null +++ b/rt/t/articles/interface.t @@ -0,0 +1,221 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use RT::Test tests => 53; + +use RT::CustomField; +use RT::EmailParser; +use RT::Queue; +use RT::Ticket; +use_ok 'RT::Class'; +use_ok 'RT::Topic'; +use_ok 'RT::Article'; + +my ($url, $m) = RT::Test->started_ok; + +# Variables to test return values +my ($ret, $msg); + +# Create a test class +my $class = RT::Class->new($RT::SystemUser); +($ret, $msg) = $class->Create('Name' => 'tlaTestClass-'.$$, + 'Description' => 'A general-purpose test class'); +ok($ret, "Test class created"); +my $class2 = RT::Class->new($RT::SystemUser); +($ret, $msg) = $class2->Create('Name' => 'tlaTestClass2-'.$$, + 'Description' => 'Another general-purpose test class'); +ok($ret, "Test class 2 created"); + + +# Create a hierarchy of test topics +my $topic1 = RT::Topic->new($RT::SystemUser); +my $topic11 = RT::Topic->new($RT::SystemUser); +my $topic12 = RT::Topic->new($RT::SystemUser); +my $topic2 = RT::Topic->new($RT::SystemUser); +my $topic_class2= RT::Topic->new($RT::SystemUser); +my $gtopic = RT::Topic->new($RT::SystemUser); +($ret, $msg) = $topic1->Create('Parent' => 0, + 'Name' => 'tlaTestTopic1-'.$$, + 'ObjectType' => 'RT::Class', + 'ObjectId' => $class->Id); +ok($ret, "Topic 1 created"); +($ret, $msg) = $topic11->Create('Parent' => $topic1->Id, + 'Name' => 'tlaTestTopic1.1-'.$$, + 'ObjectType' => 'RT::Class', + 'ObjectId' => $class->Id); +ok($ret, "Topic 1.1 created"); +($ret, $msg) = $topic12->Create('Parent' => $topic1->Id, + 'Name' => 'tlaTestTopic1.2-'.$$, + 'ObjectType' => 'RT::Class', + 'ObjectId' => $class->Id); +ok($ret, "Topic 1.2 created"); +($ret, $msg) = $topic2->Create('Parent' => 0, + 'Name' => 'tlaTestTopic2-'.$$, + 'ObjectType' => 'RT::Class', + 'ObjectId' => $class->Id); +ok($ret, "Topic 2 created"); +($ret, $msg) = $topic_class2->Create('Parent' => 0, + 'Name' => 'tlaTestTopicClass2-'.$$, + 'ObjectType' => 'RT::Class', + 'ObjectId' => $class2->Id); +ok($ret, "Topic Class2 created"); +($ret, $msg) = $gtopic->Create('Parent' => 0, + 'Name' => 'tlaTestTopicGlobal-'.$$, + 'ObjectType' => 'RT::System', + 'ObjectId' => $RT::System->Id ); +ok($ret, "Global Topic created"); + +# Create some article custom fields + +my $questionCF = RT::CustomField->new($RT::SystemUser); +my $answerCF = RT::CustomField->new($RT::SystemUser); +($ret, $msg) = $questionCF->Create('Name' => 'Question-'.$$, + 'Type' => 'Text', + 'MaxValues' => 1, + 'LookupType' => 'RT::Class-RT::Article', + 'Description' => 'The question to be answered', + 'Disabled' => 0); +ok($ret, "Question CF created: $msg"); +($ret, $msg) = $answerCF->Create('Name' => 'Answer-'.$$, + 'Type' => 'Text', + 'MaxValues' => 1, + 'LookupType' => 'RT::Class-RT::Article', + 'Description' => 'The answer to the question', + 'Disabled' => 0); +ok($ret, "Answer CF created: $msg"); + +# Attach the custom fields to our class +($ret, $msg) = $questionCF->AddToObject($class); +ok($ret, "Question CF added to class: $msg"); +($ret, $msg) = $answerCF->AddToObject($class); +ok($ret, "Answer CF added to class: $msg"); +my ($qid, $aid) = ($questionCF->Id, $answerCF->Id); + +my %cvals = ('article1q' => 'Some question about swallows', + 'article1a' => 'Some answer about Europe and Africa', + 'article2q' => 'Another question about Monty Python', + 'article2a' => 'Romani ite domum', + 'article3q' => 'Why should I eat my supper?', + 'article3a' => 'There are starving children in Africa', + 'article4q' => 'What did Brian originally write?', + 'article4a' => 'Romanes eunt domus'); + +# Create an article or two with our custom field values. + +my $article1 = RT::Article->new($RT::SystemUser); +my $article2 = RT::Article->new($RT::SystemUser); +my $article3 = RT::Article->new($RT::SystemUser); +my $article4 = RT::Article->new($RT::SystemUser); +($ret, $msg) = $article1->Create(Name => 'First article '.$$, + Summary => 'blah blah 1', + Class => $class->Id, + Topics => [$topic1->Id], + "CustomField-$qid" => $cvals{'article1q'}, + "CustomField-$aid" => $cvals{'article1a'}, + ); +ok($ret, "article 1 created"); +($ret, $msg) = $article2->Create(Name => 'Second article '.$$, + Summary => 'foo bar 2', + Class => $class->Id, + Topics => [$topic11->Id], + "CustomField-$qid" => $cvals{'article2q'}, + "CustomField-$aid" => $cvals{'article2a'}, + ); +ok($ret, "article 2 created"); +($ret, $msg) = $article3->Create(Name => 'Third article '.$$, + Summary => 'ping pong 3', + Class => $class->Id, + Topics => [$topic12->Id], + "CustomField-$qid" => $cvals{'article3q'}, + "CustomField-$aid" => $cvals{'article3a'}, + ); +ok($ret, "article 3 created"); +($ret, $msg) = $article4->Create(Name => 'Fourth article '.$$, + Summary => 'hoi polloi 4', + Class => $class->Id, + Topics => [$topic2->Id], + "CustomField-$qid" => $cvals{'article4q'}, + "CustomField-$aid" => $cvals{'article4a'}, + ); +ok($ret, "article 4 created"); + +# Create a ticket. +my $parser = RT::EmailParser->new(); +$parser->ParseMIMEEntityFromScalar('From: root@localhost +To: rt@example.com +Subject: test ticket for articles + +This is some form of new request. +May as well say something about Africa.'); + +my $ticket = RT::Ticket->new($RT::SystemUser); +my $obj; +($ret, $obj, $msg) = $ticket->Create(Queue => 'General', + Subject => 'test ticket for articles '.$$, + MIMEObj => $parser->Entity); +ok($ret, "Test ticket for articles created: $msg"); + + +#### Right. That's our data. Now begin the real testing. + +isa_ok($m, 'Test::WWW::Mechanize'); +ok($m->login, 'logged in'); +$m->follow_link_ok( { text => 'Articles', url_regex => qr!^/Articles/! }, + 'UI -> Articles' ); + +$m->content_contains($article3->Name); +$m->follow_link_ok( {text => $article3->Name}, 'Articles -> '. $article3->Name ); +$m->title_is("Article #" . $article3->Id . ": " . $article3->Name); +$m->follow_link_ok( { text => 'Modify'}, 'Article -> Modify' ); + +{ +$m->content_like(qr/Refers to/, "found links edit box"); +my $ticket_id = $ticket->Id; +my $turi = "t:$ticket_id"; +my $a1uri = 'a:'.$article1->Id; +$m->submit_form(form_name => 'EditArticle', + fields => { $article3->Id.'-RefersTo' => $turi, + 'RefersTo-'.$article3->Id => $a1uri } + ); + +$m->content_like(qr/Ticket.*$ticket_id/, "Ticket linkto was created"); +$m->content_like(qr/URI.*$a1uri/, "Article linkfrom was created"); +} + +# Now try to extract an article from a link. +$m->get_ok($url."/Ticket/Display.html?id=".$ticket->Id, + "Loaded ticket display"); +$m->content_like(qr/Extract Article/, "Article extraction link shows up"); +$m->follow_link_ok( { text => 'Extract Article' }, '-> Extract Article' ); +$m->content_contains($class->Name); +$m->follow_link_ok( { text => $class->Name }, 'Extract Article -> '. $class->Name ); +$m->content_like(qr/Select topics for this article/i, 'selecting topic'); +$m->form_number(3); +$m->set_visible([option => $topic1->Name]); +$m->submit; +$m->form_number(3); +$m->set_visible([option => $answerCF->Name]); +$m->click(); +$m->title_like(qr/Create a new article/, "got edit page from extraction"); +$m->submit_form(form_name => 'EditArticle'); +$m->title_like(qr/Modify article/); +$m->follow_link_ok( { text => 'Display' }, '-> Display' ); +$m->content_like(qr/Africa/, "Article content exist"); +$m->content_contains($ticket->Subject, + "Article references originating ticket"); + +diag("Test creating a ticket in Class2 and make sure we don't see Class1 Topics") if $ENV{TEST_VERBOSE}; +{ +$m->follow_link_ok( { text => 'Articles', url_regex => qr!^/Articles/! }, + 'UI -> Articles' ); +$m->follow_link_ok( {text => 'New Article' }, 'Articles -> New Article' ); +$m->follow_link_ok( {text => 'in class '.$class2->Name }, 'New Article -> in class '.$class2->Name ); +$m->content_lacks( $topic1->Name, "Topic1 from Class1 isn't shown" ); +$m->content_lacks( $topic11->Name, "Topic11 from Class1 isn't shown" ); +$m->content_lacks( $topic12->Name, "Topic12 from Class1 isn't shown" ); +$m->content_lacks( $topic2->Name, "Topic2 from Class1 isn't shown" ); +$m->content_contains( $gtopic->Name, "Global Topic is shown" ); +$m->content_contains( $topic_class2->Name, "Class2 topic is shown" ); +} |