2012-08-25 07:07:00 +07:00
using System ;
using System.Collections ;
using System.Collections.Generic ;
using System.Linq ;
using System.Web ;
2013-09-17 00:14:15 +10:00
using Moq ;
2012-08-25 07:07:00 +07:00
using NUnit.Framework ;
using Umbraco.Core ;
2013-09-17 00:14:15 +10:00
using Umbraco.Core.Configuration.UmbracoSettings ;
2012-09-13 13:38:51 +07:00
using Umbraco.Core.Dynamics ;
2013-09-05 17:47:13 +02:00
using Umbraco.Core.Models.PublishedContent ;
using Umbraco.Core.PropertyEditors ;
2012-08-25 07:07:00 +07:00
using Umbraco.Tests.TestHelpers ;
2012-11-15 02:04:46 +05:00
namespace Umbraco.Tests.PublishedContent
2012-08-25 07:07:00 +07:00
{
[TestFixture]
2013-02-21 21:01:00 +06:00
public abstract class DynamicDocumentTestsBase < TDocument , TDocumentList > : PublishedContentTestBase
2012-08-25 07:07:00 +07:00
{
2013-03-15 11:28:05 +06:00
protected override DatabaseBehavior DatabaseTestBehavior
{
get { return DatabaseBehavior . NoDatabasePerFixture ; }
}
2012-09-11 04:43:30 +07:00
2013-09-05 17:47:13 +02:00
public override void Initialize ( )
{
// required so we can access property.Value
//PropertyValueConvertersResolver.Current = new PropertyValueConvertersResolver();
base . Initialize ( ) ;
2013-09-24 09:12:58 +02:00
var scriptingMock = Mock . Get ( UmbracoSettings . Scripting ) ;
scriptingMock . Setup ( x = > x . DataTypeModelStaticMappings ) . Returns ( new List < IRazorStaticMapping > ( ) ) ;
2013-09-05 17:47:13 +02:00
// need to specify a custom callback for unit tests
// AutoPublishedContentTypes generates properties automatically
// when they are requested, but we must declare those that we
// explicitely want to be here...
var propertyTypes = new [ ]
{
// AutoPublishedContentType will auto-generate other properties
2013-09-24 09:12:58 +02:00
new PublishedPropertyType ( "umbracoNaviHide" , 0 , "?" ) ,
new PublishedPropertyType ( "selectedNodes" , 0 , "?" ) ,
new PublishedPropertyType ( "umbracoUrlAlias" , 0 , "?" ) ,
new PublishedPropertyType ( "content" , 0 , Constants . PropertyEditors . TinyMCEv3Alias ) ,
new PublishedPropertyType ( "testRecursive" , 0 , "?" ) ,
new PublishedPropertyType ( "siteTitle" , 0 , "?" ) ,
new PublishedPropertyType ( "creatorName" , 0 , "?" ) ,
new PublishedPropertyType ( "blah" , 0 , "?" ) , // ugly error when that one is missing...
2013-09-05 17:47:13 +02:00
} ;
var type = new AutoPublishedContentType ( 0 , "anything" , propertyTypes ) ;
PublishedContentType . GetPublishedContentTypeCallback = ( alias ) = > type ;
}
protected override string GetXmlContent ( int templateId )
2012-10-04 03:26:56 +05:00
{
return @"<?xml version=""1.0"" encoding=""utf-8" "?>
< ! DOCTYPE root [
< ! ELEMENT Home ANY >
< ! ATTLIST Home id ID # REQUIRED >
< ! ELEMENT CustomDocument ANY >
< ! ATTLIST CustomDocument id ID # REQUIRED >
] >
< root id = "" - 1 "" >
< Home id = "" 1046 "" parentID = "" - 1 "" level = "" 1 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1044 "" template = "" " + templateId + @" "" sortOrder = "" 1 "" createDate = "" 2012 - 06 - 12 T14 : 13 : 17 "" updateDate = "" 2012 - 07 - 20 T18 : 50 : 43 "" nodeName = "" Home "" urlName = "" home "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 "" isDoc = "" "" >
< content > < ! [ CDATA [ ] ] > < / content >
< umbracoUrlAlias > < ! [ CDATA [ this / is / my / alias , anotheralias ] ] > < / umbracoUrlAlias >
< umbracoNaviHide > 1 < / umbracoNaviHide >
2013-03-05 21:00:16 +06:00
< siteTitle > < ! [ CDATA [ This is my site ] ] > < / siteTitle >
2012-10-04 03:26:56 +05:00
< Home id = "" 1173 "" parentID = "" 1046 "" level = "" 2 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1044 "" template = "" " + templateId + @" "" sortOrder = "" 2 "" createDate = "" 2012 - 07 - 20 T18 : 06 : 45 "" updateDate = "" 2012 - 07 - 20 T19 : 07 : 31 "" nodeName = "" Sub1 "" urlName = "" sub1 "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 , 1173 "" isDoc = "" "" >
< content > < ! [ CDATA [ < div > This is some content < / div > ] ] > < / content >
< umbracoUrlAlias > < ! [ CDATA [ page2 / alias , 2 ndpagealias ] ] > < / umbracoUrlAlias >
2013-03-02 01:02:38 +06:00
< Home id = "" 1174 "" parentID = "" 1173 "" level = "" 3 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1044 "" template = "" " + templateId + @" "" sortOrder = "" 1 "" createDate = "" 2012 - 07 - 20 T18 : 07 : 54 "" updateDate = "" 2012 - 07 - 20 T19 : 10 : 27 "" nodeName = "" Sub2 "" urlName = "" sub2 "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 , 1173 , 1174 "" isDoc = "" "" >
2012-10-04 03:26:56 +05:00
< content > < ! [ CDATA [ ] ] > < / content >
< umbracoUrlAlias > < ! [ CDATA [ only / one / alias ] ] > < / umbracoUrlAlias >
< creatorName > < ! [ CDATA [ Custom data with same property name as the member name ] ] > < / creatorName >
2013-03-02 01:02:38 +06:00
< / Home >
< CustomDocument id = "" 1177 "" parentID = "" 1173 "" level = "" 3 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1234 "" template = "" " + templateId + @" "" sortOrder = "" 2 "" createDate = "" 2012 - 07 - 16 T15 : 26 : 59 "" updateDate = "" 2012 - 07 - 18 T14 : 23 : 35 "" nodeName = "" custom sub 1 "" urlName = "" custom - sub - 1 "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 , 1173 , 1177 "" isDoc = "" "" / >
< CustomDocument id = "" 1178 "" parentID = "" 1173 "" level = "" 3 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1234 "" template = "" " + templateId + @" "" sortOrder = "" 3 "" createDate = "" 2012 - 07 - 16 T15 : 26 : 59 "" updateDate = "" 2012 - 07 - 16 T14 : 23 : 35 "" nodeName = "" custom sub 2 "" urlName = "" custom - sub - 2 "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 , 1173 , 1178 "" isDoc = "" "" / >
< Home id = "" 1176 "" parentID = "" 1173 "" level = "" 3 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1044 "" template = "" " + templateId + @" "" sortOrder = "" 4 "" createDate = "" 2012 - 07 - 20 T18 : 08 : 08 "" updateDate = "" 2012 - 07 - 20 T19 : 10 : 52 "" nodeName = "" Sub 3 "" urlName = "" sub - 3 "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 , 1173 , 1176 "" isDoc = "" "" >
2012-10-06 23:41:42 +05:00
< content > < ! [ CDATA [ some content ] ] > < / content >
< blah > < ! [ CDATA [ some content ] ] > < / blah >
2013-03-02 01:02:38 +06:00
< umbracoNaviHide > 1 < / umbracoNaviHide >
2012-10-04 03:26:56 +05:00
< / Home >
< / Home >
< Home id = "" 1175 "" parentID = "" 1046 "" level = "" 2 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1044 "" template = "" " + templateId + @" "" sortOrder = "" 3 "" createDate = "" 2012 - 07 - 20 T18 : 08 : 01 "" updateDate = "" 2012 - 07 - 20 T18 : 49 : 32 "" nodeName = "" Sub 2 "" urlName = "" sub - 2 "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 , 1175 "" isDoc = "" "" > < content > < ! [ CDATA [ ] ] > < / content >
< / Home >
2012-10-06 23:41:42 +05:00
< CustomDocument id = "" 4444 "" parentID = "" 1046 "" level = "" 2 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1234 "" template = "" " + templateId + @" "" sortOrder = "" 4 "" createDate = "" 2012 - 07 - 16 T15 : 26 : 59 "" updateDate = "" 2012 - 07 - 18 T14 : 23 : 35 "" nodeName = "" Test "" urlName = "" test - page "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 , 4444 "" isDoc = "" "" >
< selectedNodes > < ! [ CDATA [ 1172 , 1176 , 1173 ] ] > < / selectedNodes >
< CustomDocument id = "" 5555 "" parentID = "" 1046 "" level = "" 3 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1234 "" template = "" " + templateId + @" "" sortOrder = "" 0 "" createDate = "" 2012 - 07 - 16 T15 : 26 : 59 "" updateDate = "" 2012 - 07 - 18 T14 : 23 : 35 "" nodeName = "" Test "" urlName = "" test - page "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1046 , 4444 , 5555 "" isDoc = "" "" >
< / CustomDocument >
< / CustomDocument >
2012-10-04 03:26:56 +05:00
< / Home >
< CustomDocument id = "" 1172 "" parentID = "" - 1 "" level = "" 1 "" writerID = "" 0 "" creatorID = "" 0 "" nodeType = "" 1234 "" template = "" " + templateId + @" "" sortOrder = "" 2 "" createDate = "" 2012 - 07 - 16 T15 : 26 : 59 "" updateDate = "" 2012 - 07 - 18 T14 : 23 : 35 "" nodeName = "" Test "" urlName = "" test - page "" writerName = "" admin "" creatorName = "" admin "" path = "" - 1 , 1172 "" isDoc = "" "" / >
< / root > ";
}
2012-09-13 13:38:51 +07:00
2012-08-25 07:07:00 +07:00
/// <summary>
/// Returns the dynamic node/document to run tests against
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
protected abstract dynamic GetDynamicNode ( int id ) ;
2012-08-28 09:20:30 +07:00
2013-03-05 21:00:16 +06:00
[Test]
public void Recursive_Property ( )
{
var doc = GetDynamicNode ( 1174 ) ;
var prop = doc . GetProperty ( "siteTitle" , true ) ;
Assert . IsNotNull ( prop ) ;
Assert . AreEqual ( "This is my site" , prop . Value ) ;
prop = doc . GetProperty ( "_siteTitle" ) ; //test with underscore prefix
Assert . IsNotNull ( prop ) ;
Assert . AreEqual ( "This is my site" , prop . Value ) ;
Assert . AreEqual ( "This is my site" , doc . _siteTitle ) ;
}
/// <summary>
/// Tests the internal instance level caching of returning properties
/// </summary>
/// <remarks>
/// http://issues.umbraco.org/issue/U4-1824
/// http://issues.umbraco.org/issue/U4-1825
/// </remarks>
[Test]
public void Can_Return_Property_And_Value ( )
{
var doc = GetDynamicNode ( 1173 ) ;
2013-03-18 17:55:02 +00:00
Assert . IsTrue ( doc . HasProperty ( Constants . Conventions . Content . UrlAlias ) ) ;
var prop = doc . GetProperty ( Constants . Conventions . Content . UrlAlias ) ;
2013-03-05 21:00:16 +06:00
Assert . IsNotNull ( prop ) ;
Assert . AreEqual ( "page2/alias, 2ndpagealias" , prop . Value ) ;
Assert . AreEqual ( "page2/alias, 2ndpagealias" , doc . umbracoUrlAlias ) ;
}
2013-03-02 01:02:38 +06:00
/// <summary>
/// Tests the IsLast method with the result set from a Where statement
/// </summary>
[Test]
public void Is_Last_From_Where_Filter ( )
{
var doc = GetDynamicNode ( 1173 ) ;
foreach ( var d in doc . Children . Where ( "Visible" ) )
{
if ( d . Id ! = 1178 )
{
Assert . IsFalse ( d . IsLast ( ) ) ;
}
else
{
Assert . IsTrue ( d . IsLast ( ) ) ;
}
}
}
2012-10-06 23:41:42 +05:00
[Test]
public void Single ( )
{
var doc = GetDynamicNode ( 4444 ) ;
var result = doc . Children ( ) . Single ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( 5555 , result . Id ) ;
}
[Test]
public void Single_With_Query ( )
{
var doc = GetDynamicNode ( 1046 ) ;
var result = doc . Children ( ) . Single ( "id==1175" ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( 1175 , result . Id ) ;
}
[Test]
public void First ( )
{
var doc = GetDynamicNode ( 1173 ) ;
var result = doc . Children ( ) . First ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( 1174 , result . Id ) ;
}
[Test]
public void First_With_Query ( )
{
var doc = GetDynamicNode ( 1173 ) ;
2012-10-07 00:07:51 +05:00
var result = doc . Children ( ) . First ( "blah==\"some content\"" ) ;
2012-10-06 23:41:42 +05:00
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( 1176 , result . Id ) ;
}
[Test]
public void Where_User_Property_Value ( )
{
var doc = GetDynamicNode ( 1173 ) ;
var result = ( IEnumerable < dynamic > ) doc . Children ( ) . Where ( "blah==\"some content\"" ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( 1 , result . Count ( ) ) ;
2012-10-07 00:07:51 +05:00
Assert . AreEqual ( 1176 , result . Single ( ) . Id ) ;
2012-10-06 23:41:42 +05:00
}
2012-10-08 00:09:44 +05:00
[Test]
public void String_ContainsValue_Extension_Method ( )
{
var doc = GetDynamicNode ( 1046 ) ;
var paramVals = new Dictionary < string , object > { { "searchId" , 1173 } } ; //this is an integer value
var result = doc . Children ( )
. Where ( "selectedNodes.ContainsValue(searchId)" , paramVals ) //call an extension method
. FirstOrDefault ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( 4444 , result . Id ) ;
//don't find!
paramVals = new Dictionary < string , object > { { "searchId" , 1111777 } } ;
result = doc . Children ( )
. Where ( "selectedNodes.ContainsValue(searchId)" , paramVals )
. FirstOrDefault ( ) ;
Assert . IsNotNull ( result ) ;
Assert . IsTrue ( result . GetType ( ) = = typeof ( DynamicNull ) | | result . GetType ( ) = = typeof ( umbraco . MacroEngines . DynamicNull ) ) ;
//Assert.AreEqual(typeof(DynamicNull), result.GetType());
}
[Test]
public void String_Contains_Method ( )
{
var doc = GetDynamicNode ( 1046 ) ;
var paramVals = new Dictionary < string , object > { { "searchId" , "1173" } } ;
var result = doc . Children ( )
. Where ( "selectedNodes.Contains(searchId)" , paramVals )
. FirstOrDefault ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( 4444 , result . Id ) ;
//don't find!
paramVals = new Dictionary < string , object > { { "searchId" , "1aaa173" } } ;
result = doc . Children ( )
. Where ( "selectedNodes.Contains(searchId)" , paramVals )
. FirstOrDefault ( ) ;
Assert . IsNotNull ( result ) ;
Assert . IsTrue ( result . GetType ( ) = = typeof ( DynamicNull ) | | result . GetType ( ) = = typeof ( umbraco . MacroEngines . DynamicNull ) ) ;
//Assert.AreEqual(typeof (DynamicNull), result.GetType());
}
[Test]
public void String_Split_Method ( )
{
var doc = GetDynamicNode ( 1046 ) ;
var paramVals = new Dictionary < string , object >
{
{ "splitTerm" , new char [ ] { ',' } } ,
{ "splitOptions" , StringSplitOptions . RemoveEmptyEntries }
} ;
var result = doc . Children ( )
. Where ( "selectedNodes.Split(splitTerm, splitOptions).Length == 3" , paramVals )
. FirstOrDefault ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( 4444 , result . Id ) ;
}
2013-02-21 05:13:08 +06:00
[Ignore("We are ignoring this test because currently our ExpressionParser class cannot deal with this... it needs some serious TLC but it is very complex.")]
2012-10-06 23:41:42 +05:00
[Test]
public void Complex_Linq ( )
{
var doc = GetDynamicNode ( 1173 ) ;
2012-10-08 00:09:44 +05:00
var paramVals = new Dictionary < string , object > { { "splitTerm" , new char [ ] { ',' } } , { "searchId" , "1173" } } ;
2012-10-06 23:41:42 +05:00
var result = doc . Ancestors ( ) . OrderBy ( "level" )
. Single ( )
. Descendants ( )
2012-10-08 00:09:44 +05:00
. Where ( "selectedNodes != null && selectedNodes != String.Empty && selectedNodes.Split(splitTerm).Contains(searchId)" , paramVals )
2012-10-06 23:41:42 +05:00
. FirstOrDefault ( ) ;
Assert . IsNotNull ( result ) ;
2012-10-08 00:09:44 +05:00
Assert . AreEqual ( 4444 , result . Id ) ;
2012-10-06 23:41:42 +05:00
}
2012-10-04 06:00:47 +05:00
[Test]
public void Index ( )
{
var doc = GetDynamicNode ( 1173 ) ;
Assert . AreEqual ( 0 , doc . Index ( ) ) ;
doc = GetDynamicNode ( 1176 ) ;
2013-03-02 01:02:38 +06:00
Assert . AreEqual ( 3 , doc . Index ( ) ) ;
2012-10-04 06:00:47 +05:00
doc = GetDynamicNode ( 1177 ) ;
2013-03-02 01:02:38 +06:00
Assert . AreEqual ( 1 , doc . Index ( ) ) ;
2012-10-04 06:00:47 +05:00
doc = GetDynamicNode ( 1178 ) ;
2013-03-02 01:02:38 +06:00
Assert . AreEqual ( 2 , doc . Index ( ) ) ;
2012-10-04 06:00:47 +05:00
}
[Test]
2013-02-21 05:13:08 +06:00
public virtual void Is_First_Root_Nodes ( )
2012-10-04 06:00:47 +05:00
{
var doc = GetDynamicNode ( 1046 ) ; //test root nodes
Assert . IsTrue ( doc . IsFirst ( ) ) ;
doc = GetDynamicNode ( 1172 ) ;
2013-02-21 05:13:08 +06:00
Assert . IsFalse ( doc . IsFirst ( ) ) ;
}
[Test]
public void Is_First ( )
{
var doc = GetDynamicNode ( 1173 ) ; //test normal nodes
Assert . IsTrue ( doc . IsFirst ( ) ) ;
doc = GetDynamicNode ( 1175 ) ;
Assert . IsFalse ( doc . IsFirst ( ) ) ;
}
[Test]
public virtual void Is_Not_First_Root_Nodes ( )
{
var doc = GetDynamicNode ( 1046 ) ; //test root nodes
Assert . IsFalse ( doc . IsNotFirst ( ) ) ;
doc = GetDynamicNode ( 1172 ) ;
Assert . IsTrue ( doc . IsNotFirst ( ) ) ;
}
2012-10-04 06:00:47 +05:00
[Test]
public void Is_Not_First ( )
2013-02-21 05:13:08 +06:00
{
var doc = GetDynamicNode ( 1173 ) ; //test normal nodes
2012-10-04 06:00:47 +05:00
Assert . IsFalse ( doc . IsNotFirst ( ) ) ;
doc = GetDynamicNode ( 1175 ) ;
Assert . IsTrue ( doc . IsNotFirst ( ) ) ;
}
2013-02-21 05:13:08 +06:00
[Test]
public virtual void Is_Position_Root_Nodes ( )
{
var doc = GetDynamicNode ( 1046 ) ; //test root nodes
Assert . IsTrue ( doc . IsPosition ( 0 ) ) ;
doc = GetDynamicNode ( 1172 ) ;
Assert . IsTrue ( doc . IsPosition ( 1 ) ) ;
}
2012-10-04 06:00:47 +05:00
[Test]
public void Is_Position ( )
{
2013-02-21 05:13:08 +06:00
var doc = GetDynamicNode ( 1173 ) ; //test normal nodes
2012-10-04 06:00:47 +05:00
Assert . IsTrue ( doc . IsPosition ( 0 ) ) ;
doc = GetDynamicNode ( 1175 ) ;
Assert . IsTrue ( doc . IsPosition ( 1 ) ) ;
}
2012-10-04 03:26:56 +05:00
[Test]
public void Children_GroupBy_DocumentTypeAlias ( )
{
var doc = GetDynamicNode ( 1046 ) ;
var found1 = doc . Children . GroupBy ( "DocumentTypeAlias" ) ;
2012-10-06 23:41:42 +05:00
var casted = ( IEnumerable < IGrouping < object , dynamic > > ) ( found1 ) ;
2012-10-04 03:26:56 +05:00
Assert . AreEqual ( 2 , casted . Count ( ) ) ;
Assert . AreEqual ( 2 , casted . Single ( x = > x . Key . ToString ( ) = = "Home" ) . Count ( ) ) ;
Assert . AreEqual ( 1 , casted . Single ( x = > x . Key . ToString ( ) = = "CustomDocument" ) . Count ( ) ) ;
}
[Test]
public void Children_Where_DocumentTypeAlias ( )
{
var doc = GetDynamicNode ( 1046 ) ;
var found1 = doc . Children . Where ( "DocumentTypeAlias == \"CustomDocument\"" ) ;
var found2 = doc . Children . Where ( "DocumentTypeAlias == \"Home\"" ) ;
Assert . AreEqual ( 1 , found1 . Count ( ) ) ;
Assert . AreEqual ( 2 , found2 . Count ( ) ) ;
}
2012-10-06 23:41:42 +05:00
[Test]
public void Children_Where_NodeTypeAlias ( )
{
var doc = GetDynamicNode ( 1046 ) ;
var found1 = doc . Children . Where ( "NodeTypeAlias == \"CustomDocument\"" ) ;
var found2 = doc . Children . Where ( "NodeTypeAlias == \"Home\"" ) ;
Assert . AreEqual ( 1 , found1 . Count ( ) ) ;
Assert . AreEqual ( 2 , found2 . Count ( ) ) ;
}
2012-08-28 09:20:30 +07:00
[Test]
public void Children_Order_By_Update_Date ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var ordered = asDynamic . Children . OrderBy ( "UpdateDate" ) ;
var casted = ( IEnumerable < TDocument > ) ordered ;
var correctOrder = new [ ] { 1178 , 1177 , 1174 , 1176 } ;
for ( var i = 0 ; i < correctOrder . Length ; i + + )
{
Assert . AreEqual ( correctOrder [ i ] , ( ( dynamic ) casted . ElementAt ( i ) ) . Id ) ;
}
}
2012-10-06 23:41:42 +05:00
[Test]
public void Children_Order_By_Update_Date_Descending ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var ordered = asDynamic . Children . OrderBy ( "UpdateDate desc" ) ;
var casted = ( IEnumerable < TDocument > ) ordered ;
var correctOrder = new [ ] { 1176 , 1174 , 1177 , 1178 } ;
for ( var i = 0 ; i < correctOrder . Length ; i + + )
{
Assert . AreEqual ( correctOrder [ i ] , ( ( dynamic ) casted . ElementAt ( i ) ) . Id ) ;
}
}
2012-08-28 09:20:30 +07:00
[Test]
2012-08-28 09:33:34 +07:00
public void HasProperty ( )
2012-08-28 09:20:30 +07:00
{
var asDynamic = GetDynamicNode ( 1173 ) ;
2013-03-18 17:55:02 +00:00
var hasProp = asDynamic . HasProperty ( Constants . Conventions . Content . UrlAlias ) ;
2012-08-28 09:33:34 +07:00
Assert . AreEqual ( true , ( bool ) hasProp ) ;
}
[Test]
public void Skip ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var skip = asDynamic . Children . Skip ( 2 ) ;
var casted = ( IEnumerable < TDocument > ) skip ;
2012-08-28 09:20:30 +07:00
Assert . AreEqual ( 2 , casted . Count ( ) ) ;
2013-03-02 01:02:38 +06:00
Assert . IsTrue ( casted . Select ( x = > ( ( dynamic ) x ) . Id ) . ContainsAll ( new dynamic [ ] { 1178 , 1176 } ) ) ;
2012-08-28 09:20:30 +07:00
}
2012-08-29 07:47:16 +07:00
[Test]
public void HasValue ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
2013-03-18 17:55:02 +00:00
var hasValue = asDynamic . HasValue ( Constants . Conventions . Content . UrlAlias ) ;
2012-08-29 07:47:16 +07:00
var noValue = asDynamic . HasValue ( "blahblahblah" ) ;
Assert . IsTrue ( hasValue ) ;
Assert . IsFalse ( noValue ) ;
}
2012-08-28 09:33:34 +07:00
[Test]
public void Take ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var take = asDynamic . Children . Take ( 2 ) ;
var casted = ( IEnumerable < TDocument > ) take ;
Assert . AreEqual ( 2 , casted . Count ( ) ) ;
2013-03-02 01:02:38 +06:00
Assert . IsTrue ( casted . Select ( x = > ( ( dynamic ) x ) . Id ) . ContainsAll ( new dynamic [ ] { 1174 , 1177 } ) ) ;
2012-08-28 09:33:34 +07:00
}
2012-08-28 09:20:30 +07:00
[Test]
public void Ancestors_Where_Visible ( )
{
var asDynamic = GetDynamicNode ( 1174 ) ;
var whereVisible = asDynamic . Ancestors ( ) . Where ( "Visible" ) ;
var casted = ( IEnumerable < TDocument > ) whereVisible ;
Assert . AreEqual ( 1 , casted . Count ( ) ) ;
}
[Test]
public void Visible ( )
{
var asDynamicHidden = GetDynamicNode ( 1046 ) ;
var asDynamicVisible = GetDynamicNode ( 1173 ) ;
Assert . IsFalse ( asDynamicHidden . Visible ) ;
Assert . IsTrue ( asDynamicVisible . Visible ) ;
}
2012-08-25 07:07:00 +07:00
[Test]
public void Ensure_TinyMCE_Converted_Type_User_Property ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
Assert . IsTrue ( TypeHelper . IsTypeAssignableFrom < IHtmlString > ( asDynamic . Content . GetType ( ) ) ) ;
Assert . AreEqual ( "<div>This is some content</div>" , asDynamic . Content . ToString ( ) ) ;
}
[Test]
public void Get_Children_With_Pluralized_Alias ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
Action < object > doAssert = d = >
{
Assert . IsTrue ( TypeHelper . IsTypeAssignableFrom < IEnumerable > ( d ) ) ;
var casted = ( IEnumerable < TDocument > ) d ;
Assert . AreEqual ( 2 , casted . Count ( ) ) ;
} ;
doAssert ( asDynamic . Homes ) ; //pluralized alias
doAssert ( asDynamic . homes ) ; //pluralized alias
doAssert ( asDynamic . CustomDocuments ) ; //pluralized alias
doAssert ( asDynamic . customDocuments ) ; //pluralized alias
}
[Test]
public void GetPropertyValue_Non_Reflected ( )
{
var asDynamic = GetDynamicNode ( 1174 ) ;
Assert . AreEqual ( "Custom data with same property name as the member name" , asDynamic . GetPropertyValue ( "creatorName" ) ) ;
Assert . AreEqual ( "Custom data with same property name as the member name" , asDynamic . GetPropertyValue ( "CreatorName" ) ) ;
}
[Test]
public void GetPropertyValue_Reflected ( )
{
var asDynamic = GetDynamicNode ( 1174 ) ;
Assert . AreEqual ( "admin" , asDynamic . GetPropertyValue ( "@creatorName" ) ) ;
Assert . AreEqual ( "admin" , asDynamic . GetPropertyValue ( "@CreatorName" ) ) ;
}
[Test]
public void Get_User_Property_With_Same_Name_As_Member_Property ( )
{
var asDynamic = GetDynamicNode ( 1174 ) ;
Assert . AreEqual ( "Custom data with same property name as the member name" , asDynamic . creatorName ) ;
//because CreatorName is defined on DynamicNode, it will not return the user defined property
Assert . AreEqual ( "admin" , asDynamic . CreatorName ) ;
}
[Test]
public void Get_Member_Property ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
Assert . AreEqual ( ( int ) 2 , ( int ) asDynamic . Level ) ;
Assert . AreEqual ( ( int ) 2 , ( int ) asDynamic . level ) ;
Assert . AreEqual ( ( int ) 1046 , ( int ) asDynamic . ParentId ) ;
Assert . AreEqual ( ( int ) 1046 , ( int ) asDynamic . parentId ) ;
}
[Test]
public void Get_Children ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var children = asDynamic . Children ;
Assert . IsTrue ( TypeHelper . IsTypeAssignableFrom < IEnumerable > ( children ) ) ;
var childrenAsList = asDynamic . ChildrenAsList ; //test ChildrenAsList too
Assert . IsTrue ( TypeHelper . IsTypeAssignableFrom < IEnumerable > ( childrenAsList ) ) ;
var castChildren = ( IEnumerable < TDocument > ) children ;
Assert . AreEqual ( 4 , castChildren . Count ( ) ) ;
var castChildrenAsList = ( IEnumerable < TDocument > ) childrenAsList ;
Assert . AreEqual ( 4 , castChildrenAsList . Count ( ) ) ;
}
[Test]
public void Ancestor_Or_Self ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var result = asDynamic . AncestorOrSelf ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( ( int ) 1046 , ( int ) result . Id ) ;
}
[Test]
public void Ancestors_Or_Self ( )
{
var asDynamic = GetDynamicNode ( 1174 ) ;
var result = asDynamic . AncestorsOrSelf ( ) ;
Assert . IsNotNull ( result ) ;
var list = ( IEnumerable < TDocument > ) result ;
Assert . AreEqual ( 3 , list . Count ( ) ) ;
Assert . IsTrue ( list . Select ( x = > ( ( dynamic ) x ) . Id ) . ContainsAll ( new dynamic [ ] { 1174 , 1173 , 1046 } ) ) ;
}
[Test]
public void Ancestors ( )
{
var asDynamic = GetDynamicNode ( 1174 ) ;
var result = asDynamic . Ancestors ( ) ;
Assert . IsNotNull ( result ) ;
var list = ( IEnumerable < TDocument > ) result ;
Assert . AreEqual ( 2 , list . Count ( ) ) ;
Assert . IsTrue ( list . Select ( x = > ( ( dynamic ) x ) . Id ) . ContainsAll ( new dynamic [ ] { 1173 , 1046 } ) ) ;
}
[Test]
public void Descendants_Or_Self ( )
{
var asDynamic = GetDynamicNode ( 1046 ) ;
var result = asDynamic . DescendantsOrSelf ( ) ;
Assert . IsNotNull ( result ) ;
var list = ( IEnumerable < TDocument > ) result ;
2012-10-07 00:07:51 +05:00
Assert . AreEqual ( 9 , list . Count ( ) ) ;
2012-10-04 03:26:56 +05:00
Assert . IsTrue ( list . Select ( x = > ( ( dynamic ) x ) . Id ) . ContainsAll ( new dynamic [ ] { 1046 , 1173 , 1174 , 1176 , 1175 , 4444 } ) ) ;
2012-08-25 07:07:00 +07:00
}
[Test]
public void Descendants ( )
{
var asDynamic = GetDynamicNode ( 1046 ) ;
var result = asDynamic . Descendants ( ) ;
Assert . IsNotNull ( result ) ;
var list = ( IEnumerable < TDocument > ) result ;
2012-10-07 00:07:51 +05:00
Assert . AreEqual ( 8 , list . Count ( ) ) ;
2012-10-04 03:26:56 +05:00
Assert . IsTrue ( list . Select ( x = > ( ( dynamic ) x ) . Id ) . ContainsAll ( new dynamic [ ] { 1173 , 1174 , 1176 , 1175 , 4444 } ) ) ;
2012-08-25 07:07:00 +07:00
}
[Test]
public void Up ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var result = asDynamic . Up ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( ( int ) 1046 , ( int ) result . Id ) ;
}
[Test]
public void Down ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var result = asDynamic . Down ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( ( int ) 1174 , ( int ) result . Id ) ;
}
[Test]
public void Next ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
var result = asDynamic . Next ( ) ;
Assert . IsNotNull ( result ) ;
Assert . AreEqual ( ( int ) 1175 , ( int ) result . Id ) ;
}
[Test]
public void Next_Without_Sibling ( )
{
2013-03-02 01:02:38 +06:00
var asDynamic = GetDynamicNode ( 1176 ) ;
2012-08-25 07:07:00 +07:00
Assert . IsNull ( asDynamic . Next ( ) ) ;
}
[Test]
public void Previous_Without_Sibling ( )
{
var asDynamic = GetDynamicNode ( 1173 ) ;
Assert . IsNull ( asDynamic . Previous ( ) ) ;
}
[Test]
public void Previous ( )
{
var asDynamic = GetDynamicNode ( 1176 ) ;
var result = asDynamic . Previous ( ) ;
Assert . IsNotNull ( result ) ;
2013-03-02 01:02:38 +06:00
Assert . AreEqual ( ( int ) 1178 , ( int ) result . Id ) ;
2012-08-25 07:07:00 +07:00
}
2012-10-08 00:09:44 +05:00
}
2012-08-25 07:07:00 +07:00
2012-10-08 00:09:44 +05:00
/// <summary>
/// Extension methods used in tests
/// </summary>
public static class TestExtensionMethods
{
public static bool ContainsValue ( this string s , int val )
{
return s . Contains ( val . ToString ( ) ) ;
}
2012-08-25 07:07:00 +07:00
}
}