Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.42 KB | None | 0 0
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using System;
  4. using System.Collections.Generic;
  5. using Xunit;
  6. using static dataapi.tests.Hierarchy;
  7.  
  8. namespace dataapi.tests
  9. {
  10. public class JsonTreeParsingTesting
  11. {
  12. private const string Root = "1472459628771017730";
  13. private const string HierarchyOne = "{\"Id\": \"1472538848721372202\",\"Key\": \"website\",\"Root\": {\"$id\": \"1\",\"Id\": \"1472459628771017730\",\"Type\": \"cras\",\"Content\": {\"Name\": \"lorem\",\"Body\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": null,\"Children\": [{\"$id\": \"2\",\"Id\": \"1472459628812960771\",\"Type\": \"morbi\",\"Content\": {\"Name\": \"ipsum dolor\",\"Body\": \"Suspendisse a arcu a tortor scelerisque auctor vitae et nisl.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"1\"},\"Children\": [{\"$id\": \"3\",\"Id\": \"1472459628812960772\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"sit amet\",\"Body\": \"Praesent eget turpis at dolor efficitur dapibus nec at augue.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"2\"},\"Children\": [{\"$id\": \"4\",\"Id\": \"1472459628812960773\",\"Type\": \"maecenas\",\"Content\": {\"Name\": \"consectetur\",\"Body\": \"Duis in lorem aliquet, mattis nisi at, finibus urna.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"3\"},\"Children\": [{\"$id\": \"5\",\"Id\": \"1472459628812960774\",\"Type\": \"proin\",\"Content\": {\"Name\": \"adipiscing\",\"Body\": \"Curabitur id diam id elit malesuada sollicitudin quis nec velit.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"4\"},\"Children\": [{\"$id\": \"6\",\"Id\": \"1472459628829738023\",\"Type\": \"proin\",\"Content\": {\"Name\": \"consectetur\",\"Body\": \"Proin ut nisl a diam pharetra auctor.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"5\"},\"Children\": [{\"$id\": \"7\",\"Id\": \"1472459628829738024\",\"Type\": \"maecenas\",\"Content\": {\"Name\": \"malesuada\",\"Body\": \"Vestibulum id lacus ac mi pharetra congue.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"6\"},\"Children\": [{\"$id\": \"8\",\"Id\": \"1472459628829738025\",\"Type\": \"cras\",\"Content\": {\"Name\": \"aliquet\",\"Body\": \"Ut facilisis dui a aliquet auctor.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"7\"},\"Children\": []}]}]}]},{\"$id\": \"9\",\"Id\": \"1472459628812960775\",\"Type\": \"proin\",\"Content\": {\"Name\": \"elit.a\",\"Body\": \"Mauris ultrices ex et velit condimentum vestibulum vel ac diam.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"4\"},\"Children\": []},{\"$id\": \"10\",\"Id\": \"1472459628812960776\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"Integer sagittis\",\"Body\": \"Ut et nisi vestibulum, lobortis orci sed, iaculis odio.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"4\"},\"Children\": []}]}]},{\"$id\": \"11\",\"Id\": \"1472459628812960777\",\"Type\": \"cras\",\"Content\": {\"Name\": \"condimentum\",\"Body\": \"Sed fermentum augue at erat dignissim tempor.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"2\"},\"Children\": []}]},{\"$id\": \"12\",\"Id\": \"1472459628812960778\",\"Type\": \"proin\",\"Content\": {\"Name\": \"sodales\",\"Body\": \"Aenean varius neque sit amet diam elementum placerat.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"1\"},\"Children\": [{\"$id\": \"13\",\"Id\": \"1472459628812960779\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"Pellentesque\",\"Body\": \"Nam vel felis eu mi faucibus consequat vel non justo.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"12\"},\"Children\": [{\"$id\": \"14\",\"Id\": \"1472459628812960780\",\"Type\": \"proin\",\"Content\": {\"Name\": \"tempor\",\"Body\": \"Nam eget massa sed leo suscipit volutpat.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"13\"},\"Children\": []},{\"$id\": \"15\",\"Id\": \"1472459628812960781\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"id\",\"Body\": \"Ut consectetur ipsum nec venenatis bibendum.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"13\"},\"Children\": []},{\"$id\": \"16\",\"Id\": \"1472459628812960782\",\"Type\": \"morbi\",\"Content\": {\"Name\": \"velit\",\"Body\": \"Donec id felis pharetra sapien efficitur vulputate vel et mauris.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"13\"},\"Children\": []},{\"$id\": \"17\",\"Id\": \"1472459628812960783\",\"Type\": \"maecenas\",\"Content\": {\"Name\": \"eget ullamcorper\",\"Body\": \"Sed nec erat in nisi porttitor lacinia non et metus.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"13\"},\"Children\": []},{\"$id\": \"18\",\"Id\": \"1472459628821349392\",\"Type\": \"morbi\",\"Content\": {\"Name\": \"Vestibulum\",\"Body\": \"Etiam semper massa non purus bibendum lacinia.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"13\"},\"Children\": []},{\"$id\": \"19\",\"Id\": \"1472459628821349393\",\"Type\": \"maecenas\",\"Content\": {\"Name\": \"tempus\",\"Body\": \"Pellentesque posuere nunc ut iaculis pulvinar.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"13\"},\"Children\": []}]}]},{\"$id\": \"20\",\"Id\": \"1472459628821349394\",\"Type\": \"morbi\",\"Content\": {\"Name\": \"dignissim\",\"Body\": \"Nulla vel orci quis lorem rutrum egestas.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"1\"},\"Children\": [{\"$id\": \"21\",\"Id\": \"1472459628821349395\",\"Type\": \"proin\",\"Content\": {\"Name\": \"lacus\",\"Body\": \"Donec cursus eros a vestibulum fringilla.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"20\"},\"Children\": [{\"$id\": \"22\",\"Id\": \"1472459628821349396\",\"Type\": \"cras\",\"Content\": {\"Name\": \"eget\",\"Body\": \"Aliquam gravida purus suscipit, tristique odio sit amet, mattis diam.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"21\"},\"Children\": [{\"$id\": \"23\",\"Id\": \"1472459628821349397\",\"Type\": \"maecenas\",\"Content\": {\"Name\": \"dictum\",\"Body\": \"Pellentesque quis orci ornare, pellentesque sapien eu, varius nibh.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"22\"},\"Children\": []},{\"$id\": \"24\",\"Id\": \"1472459628821349398\",\"Type\": \"cras\",\"Content\": {\"Name\": \"metus\",\"Body\": \"Vestibulum laoreet elit ac magna finibus dictum.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"22\"},\"Children\": []},{\"$id\": \"25\",\"Id\": \"1472459628821349399\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"finibus\",\"Body\": \"Ut at erat sed erat venenatis consequat quis eget nulla.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"22\"},\"Children\": []},{\"$id\": \"26\",\"Id\": \"1472459628821349400\",\"Type\": \"cras\",\"Content\": {\"Name\": \"euismod\",\"Body\": \"Vestibulum ut dolor tincidunt, laoreet nunc bibendum, volutpat ex.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"22\"},\"Children\": []},{\"$id\": \"27\",\"Id\": \"1472459628821349401\",\"Type\": \"morbi\",\"Content\": {\"Name\": \"Maecenas\",\"Body\": \"Morbi quis neque ac mauris sollicitudin tincidunt et ac mauris.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"22\"},\"Children\": []},{\"$id\": \"28\",\"Id\": \"1472459628821349402\",\"Type\": \"maecenas\",\"Content\": {\"Name\": \"convallis\",\"Body\": \"Nunc bibendum ex sed massa laoreet, non maximus ex venenatis.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"22\"},\"Children\": []}]}]}]},{\"$id\": \"29\",\"Id\": \"1472459628821349499\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"massa accumsan\",\"Body\": \"Praesent sit amet mattis justo, in molestie arcu.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"1\"},\"Children\": [{\"$id\": \"30\",\"Id\": \"1472459628821349403\",\"Type\": \"morbi\",\"Content\": {\"Name\": \"tortor\",\"Body\": \"Morbi blandit odio ut tellus laoreet, vel imperdiet tortor tristique.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"31\",\"Id\": \"1472459628821349404\",\"Type\": \"morbi\",\"Content\": {\"Name\": \"at\",\"Body\": \"Integer vestibulum mi vel auctor ullamcorper.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"32\",\"Id\": \"1472459628821349405\",\"Type\": \"cras\",\"Content\": {\"Name\": \"dapibus\",\"Body\": \"Vivamus sed urna sit amet elit facilisis feugiat.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"33\",\"Id\": \"1472459628821349406\",\"Type\": \"cras\",\"Content\": {\"Name\": \"viverra\",\"Body\": \"Aliquam sed felis efficitur, auctor erat sed, porta arcu.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"34\",\"Id\": \"1472459628829738015\",\"Type\": \"maecenas\",\"Content\": {\"Name\": \"Mauris\",\"Body\": \"Duis a lorem nec eros euismod eleifend.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"35\",\"Id\": \"1472459628829738016\",\"Type\": \"maecenas\",\"Content\": {\"Name\": \"gravida sem\",\"Body\": \"Curabitur iaculis velit gravida, tempor tellus ullamcorper, ultrices felis.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"36\",\"Id\": \"1472459628829738017\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"vel\",\"Body\": \"Duis non nisi in turpis interdum accumsan.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"37\",\"Id\": \"1472459628829738018\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"tellus\",\"Body\": \"Sed ut purus sit amet mi lacinia bibendum sit amet sit amet augue.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"38\",\"Id\": \"1472459628829738019\",\"Type\": \"proin\",\"Content\": {\"Name\": \"pharetra\",\"Body\": \"Curabitur a sapien vitae dui rutrum accumsan.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"39\",\"Id\": \"1472459628829738020\",\"Type\": \"aliquam\",\"Content\": {\"Name\": \"suscipi\",\"Body\": \"Integer tempus ipsum mattis auctor hendrerit.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"40\",\"Id\": \"1472459628829738021\",\"Type\": \"proin\",\"Content\": {\"Name\": \"Suspendisse\",\"Body\": \"Nunc sollicitudin dolor sed nisi luctus, sed tincidunt est scelerisque.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []},{\"$id\": \"41\",\"Id\": \"1472459628829738022\",\"Type\": \"morbi\",\"Content\": {\"Name\": \"bibendum\",\"Body\": \"Proin ultrices ligula eget lacus tempor tincidunt.\"},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Parent\": {\"$ref\": \"29\"},\"Children\": []}]}]},\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}";
  14. private const string HierarchyTwo = "{\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Root\": {\"Parent\": null,\"$id\": \"1\",\"Children\": [{\"Parent\": {\"$ref\": \"1\"},\"$id\": \"2\",\"Children\": [{\"Parent\": {\"$ref\": \"2\"},\"$id\": \"3\",\"Children\": [{\"Parent\": {\"$ref\": \"3\"},\"$id\": \"4\",\"Children\": [{\"Parent\": {\"$ref\": \"4\"},\"$id\": \"5\",\"Children\": [{\"Parent\": {\"$ref\": \"5\"},\"$id\": \"6\",\"Children\": [{\"Parent\": {\"$ref\": \"6\"},\"$id\": \"7\",\"Children\": [{\"Parent\": {\"$ref\": \"7\"},\"$id\": \"8\",\"Children\": [],\"Content\": {\"Body\": \"Ut facilisis dui a aliquet auctor.\",\"Name\": \"aliquet\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"cras\",\"Id\": \"1472459628829738025\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Vestibulum id lacus ac mi pharetra congue.\",\"Name\": \"malesuada\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"maecenas\",\"Id\": \"1472459628829738024\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Proin ut nisl a diam pharetra auctor.\",\"Name\": \"consectetur\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"proin\",\"Id\": \"1472459628829738023\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Curabitur id diam id elit malesuada sollicitudin quis nec velit.\",\"Name\": \"adipiscing\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"proin\",\"Id\": \"1472459628812960774\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"4\"},\"$id\": \"9\",\"Children\": [],\"Content\": {\"Body\": \"Mauris ultrices ex et velit condimentum vestibulum vel ac diam.\",\"Name\": \"elit.a\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"proin\",\"Id\": \"1472459628812960775\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"4\"},\"$id\": \"10\",\"Children\": [],\"Content\": {\"Body\": \"Ut et nisi vestibulum, lobortis orci sed, iaculis odio.\",\"Name\": \"Integer sagittis\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628812960776\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Duis in lorem aliquet, mattis nisi at, finibus urna.\",\"Name\": \"consectetur\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"maecenas\",\"Id\": \"1472459628812960773\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Praesent eget turpis at dolor efficitur dapibus nec at augue.\",\"Name\": \"sit amet\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628812960772\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"2\"},\"$id\": \"11\",\"Children\": [],\"Content\": {\"Body\": \"Sed fermentum augue at erat dignissim tempor.\",\"Name\": \"condimentum\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"cras\",\"Id\": \"1472459628812960777\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Suspendisse a arcu a tortor scelerisque auctor vitae et nisl.\",\"Name\": \"ipsum dolor\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"morbi\",\"Id\": \"1472459628812960771\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"1\"},\"$id\": \"12\",\"Children\": [{\"Parent\": {\"$ref\": \"12\"},\"$id\": \"13\",\"Children\": [{\"Parent\": {\"$ref\": \"13\"},\"$id\": \"14\",\"Children\": [],\"Content\": {\"Body\": \"Nam eget massa sed leo suscipit volutpat.\",\"Name\": \"tempor\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"proin\",\"Id\": \"1472459628812960780\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"13\"},\"$id\": \"15\",\"Children\": [],\"Content\": {\"Body\": \"Ut consectetur ipsum nec venenatis bibendum.\",\"Name\": \"id\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628812960781\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"13\"},\"$id\": \"16\",\"Children\": [],\"Content\": {\"Body\": \"Donec id felis pharetra sapien efficitur vulputate vel et mauris.\",\"Name\": \"velit\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"morbi\",\"Id\": \"1472459628812960782\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"13\"},\"$id\": \"17\",\"Children\": [],\"Content\": {\"Body\": \"Sed nec erat in nisi porttitor lacinia non et metus.\",\"Name\": \"eget ullamcorper\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"maecenas\",\"Id\": \"1472459628812960783\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"13\"},\"$id\": \"18\",\"Children\": [],\"Content\": {\"Body\": \"Etiam semper massa non purus bibendum lacinia.\",\"Name\": \"Vestibulum\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"morbi\",\"Id\": \"1472459628821349392\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"13\"},\"$id\": \"19\",\"Children\": [],\"Content\": {\"Body\": \"Pellentesque posuere nunc ut iaculis pulvinar.\",\"Name\": \"tempus\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"maecenas\",\"Id\": \"1472459628821349393\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Nam vel felis eu mi faucibus consequat vel non justo.\",\"Name\": \"Pellentesque\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628812960779\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Aenean varius neque sit amet diam elementum placerat.\",\"Name\": \"sodales\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"proin\",\"Id\": \"1472459628812960778\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"1\"},\"$id\": \"20\",\"Children\": [{\"Parent\": {\"$ref\": \"20\"},\"$id\": \"21\",\"Children\": [{\"Parent\": {\"$ref\": \"21\"},\"$id\": \"22\",\"Children\": [{\"Parent\": {\"$ref\": \"22\"},\"$id\": \"23\",\"Children\": [],\"Content\": {\"Body\": \"Pellentesque quis orci ornare, pellentesque sapien eu, varius nibh.\",\"Name\": \"dictum\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"maecenas\",\"Id\": \"1472459628821349397\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"22\"},\"$id\": \"24\",\"Children\": [],\"Content\": {\"Body\": \"Vestibulum laoreet elit ac magna finibus dictum.\",\"Name\": \"metus\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"cras\",\"Id\": \"1472459628821349398\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"22\"},\"$id\": \"25\",\"Children\": [],\"Content\": {\"Body\": \"Ut at erat sed erat venenatis consequat quis eget nulla.\",\"Name\": \"finibus\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628821349399\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"22\"},\"$id\": \"26\",\"Children\": [],\"Content\": {\"Body\": \"Vestibulum ut dolor tincidunt, laoreet nunc bibendum, volutpat ex.\",\"Name\": \"euismod\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"cras\",\"Id\": \"1472459628821349400\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"22\"},\"$id\": \"27\",\"Children\": [],\"Content\": {\"Body\": \"Morbi quis neque ac mauris sollicitudin tincidunt et ac mauris.\",\"Name\": \"Maecenas\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"morbi\",\"Id\": \"1472459628821349401\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"22\"},\"$id\": \"28\",\"Children\": [],\"Content\": {\"Body\": \"Nunc bibendum ex sed massa laoreet, non maximus ex venenatis.\",\"Name\": \"convallis\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"maecenas\",\"Id\": \"1472459628821349402\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Aliquam gravida purus suscipit, tristique odio sit amet, mattis diam.\",\"Name\": \"eget\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"cras\",\"Id\": \"1472459628821349396\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Donec cursus eros a vestibulum fringilla.\",\"Name\": \"lacus\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"proin\",\"Id\": \"1472459628821349395\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Nulla vel orci quis lorem rutrum egestas.\",\"Name\": \"dignissim\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"morbi\",\"Id\": \"1472459628821349394\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"1\"},\"$id\": \"29\",\"Children\": [{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"30\",\"Children\": [],\"Content\": {\"Body\": \"Morbi blandit odio ut tellus laoreet, vel imperdiet tortor tristique.\",\"Name\": \"tortor\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"morbi\",\"Id\": \"1472459628821349403\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"31\",\"Children\": [],\"Content\": {\"Body\": \"Integer vestibulum mi vel auctor ullamcorper.\",\"Name\": \"at\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"morbi\",\"Id\": \"1472459628821349404\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"32\",\"Children\": [],\"Content\": {\"Body\": \"Vivamus sed urna sit amet elit facilisis feugiat.\",\"Name\": \"dapibus\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"cras\",\"Id\": \"1472459628821349405\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"33\",\"Children\": [],\"Content\": {\"Body\": \"Aliquam sed felis efficitur, auctor erat sed, porta arcu.\",\"Name\": \"viverra\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"cras\",\"Id\": \"1472459628821349406\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"34\",\"Children\": [],\"Content\": {\"Body\": \"Duis a lorem nec eros euismod eleifend.\",\"Name\": \"Mauris\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"maecenas\",\"Id\": \"1472459628829738015\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"35\",\"Children\": [],\"Content\": {\"Body\": \"Curabitur iaculis velit gravida, tempor tellus ullamcorper, ultrices felis.\",\"Name\": \"gravida sem\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"maecenas\",\"Id\": \"1472459628829738016\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"36\",\"Children\": [],\"Content\": {\"Body\": \"Duis non nisi in turpis interdum accumsan.\",\"Name\": \"vel\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628829738017\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"37\",\"Children\": [],\"Content\": {\"Body\": \"Sed ut purus sit amet mi lacinia bibendum sit amet sit amet augue.\",\"Name\": \"tellus\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628829738018\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"38\",\"Children\": [],\"Content\": {\"Body\": \"Curabitur a sapien vitae dui rutrum accumsan.\",\"Name\": \"pharetra\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"proin\",\"Id\": \"1472459628829738019\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"39\",\"Children\": [],\"Content\": {\"Body\": \"Integer tempus ipsum mattis auctor hendrerit.\",\"Name\": \"suscipi\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628829738020\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"40\",\"Children\": [],\"Content\": {\"Body\": \"Nunc sollicitudin dolor sed nisi luctus, sed tincidunt est scelerisque.\",\"Name\": \"Suspendisse\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"proin\",\"Id\": \"1472459628829738021\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},{\"Parent\": {\"$ref\": \"29\"},\"$id\": \"41\",\"Children\": [],\"Content\": {\"Body\": \"Proin ultrices ligula eget lacus tempor tincidunt.\",\"Name\": \"bibendum\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"morbi\",\"Id\": \"1472459628829738022\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Praesent sit amet mattis justo, in molestie arcu.\",\"Name\": \"massa accumsan\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"aliquam\",\"Id\": \"1472459628821349499\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}],\"Content\": {\"Body\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\",\"Name\": \"lorem\"},\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\",\"Type\": \"cras\",\"Id\": \"1472459628771017730\",\"CreatedAt\": \"2017-03-24T22:41:36.184876+00:00\"},\"Id\": \"1472538848721372202\",\"Key\": \"website\",\"UpdatedAt\": \"2017-03-24T22:41:36.184876+00:00\"}";
  15.  
  16. [Fact]
  17. public void GivenTwoSemamticallyEqualJsonDocumentsWhenDeserialisedThenTheyShouldHaveThereReferencesCorrectlySet()
  18. {
  19. var hierarchyOne = JsonConvert.DeserializeObject<Hierarchy>(HierarchyOne);
  20. var hierarchyTwo = JsonConvert.DeserializeObject<Hierarchy>(HierarchyTwo);
  21.  
  22. var hierarchyOneJObject = (JObject)JsonConvert.DeserializeObject(HierarchyOne);
  23. var hierarchyTwoJObject = (JObject)JsonConvert.DeserializeObject(HierarchyTwo);
  24.  
  25. Assert.True(JToken.DeepEquals(hierarchyOneJObject, hierarchyTwoJObject));
  26.  
  27. Traverse(hierarchyOne.Root, hierarchyTwo.Root, (hierarchyOneNode, hierarchyTwoNode) =>
  28. {
  29. if (hierarchyOneNode.Id == Root && hierarchyTwoNode.Id == Root)
  30. {
  31. Assert.True(hierarchyOneNode.Parent == null && hierarchyTwoNode.Parent == null);
  32. }
  33. else
  34. {
  35. Assert.True(hierarchyOneNode.Parent != null && hierarchyTwoNode.Parent != null);
  36. }
  37. });
  38. }
  39.  
  40. private void Traverse(Node fromHierarchyOne, Node fromHierarchyTwo, Action<Node, Node> callback)
  41. {
  42. for (int index = 0; index < fromHierarchyOne.Children.Count; index++)
  43. {
  44. Traverse(fromHierarchyOne.Children[index], fromHierarchyTwo.Children[index], callback);
  45. }
  46.  
  47. callback(fromHierarchyOne, fromHierarchyTwo);
  48. }
  49. }
  50.  
  51. [JsonObject(IsReference = false)]
  52. public class Hierarchy
  53. {
  54. [JsonObject(IsReference = true)]
  55. public class Node
  56. {
  57. public Node()
  58. {
  59. Content = new Content();
  60. Children = new List<Node>();
  61. }
  62.  
  63. public string Id { get; set; }
  64. public string Type { get; set; }
  65. public Content Content { get; set; }
  66. public DateTime CreatedAt { get; set; }
  67. public DateTime UpdatedAt { get; set; }
  68. public Node Parent { get; set; }
  69. public List<Node> Children { get; set; }
  70. }
  71.  
  72. public string Id { get; set; }
  73. public string Key { get; set; }
  74. public Node Root { get; set; }
  75. public DateTime CreatedAt { get; set; }
  76. public DateTime UpdatedAt { get; set; }
  77. }
  78.  
  79. [JsonObject(IsReference = false)]
  80. public class Content
  81. {
  82. public string Name { get; set; }
  83. public string Body { get; set; }
  84. }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement