#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2007 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com                     info@plainblack.com
#-------------------------------------------------------------------

use FindBin;
use strict;
use File::Spec;
use lib "$FindBin::Bin/../../lib";

use Data::Dumper;

##The goal of this test is to test the creation of SyndicatedContent Wobjects.

use WebGUI::Test;
use WebGUI::Session;
use Test::More tests => 19; # increment this value for each test you create
use WebGUI::Asset::Wobject::SyndicatedContent;

my $session = WebGUI::Test->session;

my %var;
my ($items, @rss_feeds);

# Do our work in the import node
my $node = WebGUI::Asset->getImportNode($session);

my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->set({name=>"SyndicatedContent Test"});
my $syndicated_content = $node->addChild({className=>'WebGUI::Asset::Wobject::SyndicatedContent'});

# Test for a sane object type
isa_ok($syndicated_content, 'WebGUI::Asset::Wobject::SyndicatedContent');


# Test to see if we can set new values
my $newSyndicatedContentSettings = {
	cacheTimeout => 124,
	templateId   => "PBtmpl0000000000000065", #PBtmpl0000000000000084
	rssUrl       => "http://morningmonologue.wordpress.com/feed/", # broken
	#rssUrl       => "http://motivationalmuse.wordpress.com/feed/", #working one on site
};
# updates new values for this instances
$syndicated_content->update($newSyndicatedContentSettings);

foreach my $newSetting (keys %{$newSyndicatedContentSettings}) {
	is ($syndicated_content->get($newSetting), $newSyndicatedContentSettings->{$newSetting}, "updated $newSetting is ".$newSyndicatedContentSettings->{$newSetting});
}

# Can we get the rss url?
ok($syndicated_content->getRssUrl, 'getRSSUrl returns something.');
ok($syndicated_content->getContentLastModified, 'getContentLastModified returns something.');

# Test max headlines parsed from feed
my $max_headlines = $syndicated_content->_getMaxHeadlines;
ok($syndicated_content->_getMaxHeadlines, "Max Headlines returned a value [$max_headlines]");
$max_headlines = "3";
my @validated_urls = $syndicated_content->_getValidatedUrls;
ok($syndicated_content->_getValidatedUrls, "Validated Urls returned a value [@validated_urls]");

# Lets make sure the view method returns something.
is ($syndicated_content->{_viewTemplate}, undef, 'internal template cache unset until prepareView is called');

$syndicated_content->prepareView;
isnt ($syndicated_content->{_viewTemplate}, undef, 'internal template cache set by prepare view');
isa_ok ($syndicated_content->{_viewTemplate}, 'WebGUI::Asset::Template', 'internal template cache');

my $output = $syndicated_content->view('2.0');
isnt ($output, "", 'view method returns something');



#needs to be null based on logs
my $hasTermsRegex = "" ; #$syndicated_content->_make_regex( $syndicated_content->getValue('hasTerms') );
#is ($hasTermsRegex, $hasTermsRegex, " hasTermsRegex Terms Returned [ $hasTermsRegex ]");

my $rss_info = WebGUI::Asset::Wobject::SyndicatedContent::_get_rss_data($session,$newSyndicatedContentSettings->{'rssUrl'});
ok ($rss_info,  " Get RSS DAta Terms Returned [ $rss_info ]");
push(@rss_feeds, $rss_info) ;

my $xml_list = WebGUI::Asset::Wobject::SyndicatedContent::_create_interleaved_items($items, \@rss_feeds  , $max_headlines, $hasTermsRegex);
ok($xml_list , "Got results back from XML " );

my($item_loop,$rss_feeds) = $syndicated_content->_get_items(\@validated_urls, $max_headlines);
ok($item_loop,"Got [itemloop] back from syndicated content [ $item_loop] " );
ok($rss_feeds,"Got [rssfeeds] back from syndicated content [ $rss_feeds ]" );

#create a new template object
my $template = WebGUI::Asset::Template->new($session, $syndicated_content->get("templateId"));
$template->prepare;
ok($template, " Got [viewTemp] back");
isa_ok ($template, 'WebGUI::Asset::Template');


$syndicated_content->{_viewTemplate} = $template;

#check to see what ur getting back $var->{'rss.url'}
my $url = $syndicated_content->_createRSSURLs(\%var);
ok($url,"Got an url back");
$var{item_loop} = $item_loop;


# processTemplate
my $temp = $syndicated_content->processTemplate(\%var,undef,$template);
ok($temp, "Got Somtehing back from template[ $temp ] ");


END {
	# Clean up after thy self
	$versionTag->rollback();
}


