Skip to content

Release/2.0.0 #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 120 commits into from
Mar 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
c38bc9a
Update to .NET Standard 2.1
JeremyCaney Feb 11, 2021
1136f1d
Updated to OnTopic 5.0.0 release candidate
JeremyCaney Feb 11, 2021
6fa8f55
Updated calls to `Topic.Relationships` to use `GetValues()`, `SetValu…
JeremyCaney Feb 11, 2021
d06399e
Updated order of parameters for `TopicFactory.Create()`
JeremyCaney Feb 11, 2021
a01a216
Updated reference to `AttributeValue` to new `AttributeRecord`
JeremyCaney Feb 11, 2021
55e952b
Updated references to `DerivedTopic` to new `BaseTopic`
JeremyCaney Feb 11, 2021
462671b
Accommodate new `KeyValuesItem` syntax
JeremyCaney Feb 11, 2021
ca7ce26
Accommodate new `Topic.Relationships.Clear()` requirements
JeremyCaney Feb 11, 2021
2bb413a
Prefer `Collection` over `List` for publicly exposed types
JeremyCaney Feb 11, 2021
4b29cb9
Fixed date comparison in unit test
JeremyCaney Feb 11, 2021
92ad86c
Fixed attribute check for `TopicID` in unit tests
JeremyCaney Feb 11, 2021
2f75a73
Merge branch 'maintenance/OnTopic-5.0.0-integration' into develop
JeremyCaney Feb 11, 2021
22b9866
Renamed `DerivedTopicKey` to `BaseTopicKey`
JeremyCaney Feb 11, 2021
808d80a
Ensured `BaseTopicKey` is properly tested for deserialization
JeremyCaney Feb 11, 2021
8367510
Introduced a test for evaluating the legacy `DerivedTopicKey`
JeremyCaney Feb 11, 2021
4bbeedc
Allow `BaseTopicKey` to be defined based on `DerivedTopicKey`
JeremyCaney Feb 11, 2021
fa83c86
Ignore nulls in unit tests
JeremyCaney Feb 11, 2021
4705b29
Merge branch 'feature/BaseTopicKey' into develop
JeremyCaney Feb 11, 2021
aac6394
Introduced `References` collection on `TopicData`
JeremyCaney Feb 12, 2021
bc45dc8
Update unit tests to expect a serialized `References` collection
JeremyCaney Feb 12, 2021
79f64c1
Introduce a new `DeleteUnmatchedReferences` option
JeremyCaney Feb 12, 2021
f156c25
Handle topic references on `Export()`
JeremyCaney Feb 12, 2021
6d5938b
Handle topic references on `Import()`
JeremyCaney Feb 12, 2021
6d22172
Generalized handling of unresolved associations
JeremyCaney Feb 12, 2021
dc196e3
Ensure `BaseTopic` can be imported via `TopicData.References`
JeremyCaney Feb 12, 2021
be111d2
Fixed alignment of `BaseTopicKey` in unit tests
JeremyCaney Feb 12, 2021
e2ba199
Removed special handling of `DerivedTopic` in `unresolvedAssociations`
JeremyCaney Feb 12, 2021
7c20dd0
Rely on `TopicData.References` to handle `BaseTopic`
JeremyCaney Feb 12, 2021
1db08fb
Unify `BaseTopicKey` handling with `TopicData.References`
JeremyCaney Feb 12, 2021
18483b8
Update unit test to evaluate legacy `DerivedTopicKey` deserialization
JeremyCaney Feb 12, 2021
f1ddafe
Update unit test to evaluate `Import()` of legacy `DerivedTopicKey`
JeremyCaney Feb 12, 2021
e420da6
Update `Import()` tests for `BaseTopic` to use `TopicData.References`
JeremyCaney Feb 12, 2021
471b135
Update Remove `BaseTopicKey` from deserialization tests
JeremyCaney Feb 12, 2021
76a506d
Update TopicExtensions.cs
JeremyCaney Feb 12, 2021
d9d6f7f
Remove unnecessary `BaseTopicKey`
JeremyCaney Feb 12, 2021
6da847f
Updated outdated references to "derived topic" nomenclature
JeremyCaney Feb 12, 2021
2cfbc52
Merge commit 'feature/TopicReferences' into develop
JeremyCaney Feb 12, 2021
52eb48b
Merge branch 'develop' into feature/BaseTopic-Reference
JeremyCaney Feb 12, 2021
86528eb
Merge branch 'feature/BaseTopic-Reference' into develop
JeremyCaney Feb 12, 2021
a1c3cc4
Extend documentation on legacy helper functions
JeremyCaney Feb 12, 2021
02cc7e0
Clarified purpose of the legacy `TranslateTopicPointers` option
JeremyCaney Feb 12, 2021
b67e87f
Renamed `TranslateTopicPointers` to `TranslateLegacyTopicReferences`
JeremyCaney Feb 12, 2021
37915a5
Updated unit tests with new "legacy topic references" nomenclature
JeremyCaney Feb 12, 2021
a471a7e
Renamed `IncludeExternalReferences` to `IncludeExternalAssocations`
JeremyCaney Feb 12, 2021
6d060d0
Import legacy topic references as topic references
JeremyCaney Feb 12, 2021
93750a8
Fixed bug in finding matched references
JeremyCaney Feb 12, 2021
36e73e0
Removed unnecessary `useCustomMergeRules()` check
JeremyCaney Feb 12, 2021
0e51687
Simplified the logic for handling the `LastModifiedStrategy`
JeremyCaney Feb 12, 2021
487768e
Update unit tests to look for legacy topic references in `References`
JeremyCaney Feb 12, 2021
6c33fb8
Merge branch 'feature/LegacyTopicReferences' into develop
JeremyCaney Feb 12, 2021
9b2a1e2
Incorporate `References` into deserialize topic graph unit test
JeremyCaney Feb 12, 2021
2cc8798
Ensure that external topic references are excluded by default
JeremyCaney Feb 12, 2021
5cdaeb0
Ensure that `Import()` with `Merge` skips newer `Topic.References`
JeremyCaney Feb 12, 2021
c1764ad
Incorporate `References` into seralize topic graph unit test
JeremyCaney Feb 12, 2021
aad4081
Ensure basic support for `References` on `Export()`
JeremyCaney Feb 12, 2021
8287d45
Ensure basic support for `References` on `Import()`
JeremyCaney Feb 12, 2021
d0cb983
Ensure merge support for `References` on `Import()`
JeremyCaney Feb 12, 2021
1c6244d
Correct outdated nomenclature from `References` to `Associations`
JeremyCaney Feb 12, 2021
1fca90a
Merge branch 'feature/TopicReferences-tests' into develop
JeremyCaney Feb 12, 2021
e321358
Rename `AttributeData` to `RecordData`
JeremyCaney Feb 13, 2021
85c234a
Renamed `AttributeDataCollection` to `RecordDataCollection`
JeremyCaney Feb 13, 2021
a5df9b1
Merge branch 'feature/RecordDataCollection' into develop
JeremyCaney Feb 13, 2021
17a94f3
Updated documentation to reflect recent changes
JeremyCaney Feb 13, 2021
fc9c60a
Merge branch 'maintenance/Documentation' into develop
JeremyCaney Feb 13, 2021
5693b5e
Fixed references to next version of OnTopic Data Transfer Library
JeremyCaney Feb 13, 2021
1556bf0
Updated copyright data for package metadata
JeremyCaney Feb 13, 2021
b11c4b1
Merge branch 'maintenance/Version' into develop
JeremyCaney Feb 13, 2021
c66edce
Introduced new `UnresolvedAssociation` type
JeremyCaney Feb 16, 2021
7021c55
Replace the `Tuple` with the new `UnresolvedAssociation`
JeremyCaney Feb 16, 2021
402349c
Introduced `IsInternal` polyfill
JeremyCaney Feb 16, 2021
4a75ff6
Merge branch 'feature/UnresolvedAssociation' into develop
JeremyCaney Feb 16, 2021
e75615f
Multi-target .NET Standard 2.1 and .NET 5
JeremyCaney Feb 16, 2021
682b1a8
Avoid setters on collection-valued properties
JeremyCaney Feb 16, 2021
68a09ce
Updated test to allow multi-targeting
JeremyCaney Feb 16, 2021
960f1bd
Conditionally expose setter for deprecated `DerivedTopicKey`
JeremyCaney Feb 16, 2021
156f9d0
Test conditional writing of `DerivedTopicKey` in .NET 5
JeremyCaney Feb 16, 2021
2f8ca6b
Merge branch 'feature/multi-target' into develop
JeremyCaney Feb 16, 2021
f83ecbc
Establish `RelationshipDataConverter` to refine (de)serialization
JeremyCaney Feb 16, 2021
b013eca
Renamed `Relationships` property to `Values`
JeremyCaney Feb 16, 2021
cc8412c
Renamed `RelationshipDataCollection` to `MultiMap`
JeremyCaney Feb 16, 2021
b0670d8
Renamed `RelationshipData` specific tests to use `KeyValuesPair`
JeremyCaney Feb 16, 2021
a40dc64
Introduced unit test for verifying backward compatibility
JeremyCaney Feb 16, 2021
bc15631
Merge branch 'feature/MultiMap' into develop
JeremyCaney Feb 16, 2021
eb21063
Hard-coded date time values to avoid false negatives in unit tests
JeremyCaney Feb 17, 2021
a5524ab
Merge branch 'bugfix/ToString-resolution' into develop
JeremyCaney Feb 17, 2021
2d28cb0
Upgraded to the latest prerelease of OnTopic 5.0.0
JeremyCaney Feb 18, 2021
439b41c
Updated to `System.Json.Text` 5.0.0
JeremyCaney Feb 18, 2021
cffc2d9
Remove multi-targeting of .NET 5
JeremyCaney Feb 18, 2021
115ab4c
Updated documentation based on previous `MultiMap` migration
JeremyCaney Feb 18, 2021
d5fec1d
Merge branch 'feature/multi-target-revert' into develop
JeremyCaney Feb 18, 2021
d1b8f6b
Configure `release` branches to auto-increment
JeremyCaney Feb 18, 2021
0f071ff
Merge branch 'maintenance/release-versioning' into develop
JeremyCaney Feb 18, 2021
e51a2e5
Merge branch 'maintenance/release-versioning'
JeremyCaney Feb 20, 2021
8ffa441
Migrate from `GitVersionTask` to `GitVersion.MsBuild`
JeremyCaney Feb 20, 2021
9fd60c6
Introduce Microsoft SourceLink for GitHub
JeremyCaney Feb 20, 2021
42449fb
Ensure a symbols package is generated
JeremyCaney Feb 20, 2021
026910e
Ensure any untracked resources are embedded
JeremyCaney Feb 20, 2021
e03fec5
Flag if this is a continuous integration build
JeremyCaney Feb 20, 2021
e960130
Set neutral/default language for assemblies to English
JeremyCaney Feb 20, 2021
8e1a5cc
Merge branch 'feature/SourceLink' into develop
JeremyCaney Feb 20, 2021
d65a81a
Introduced icon for the NuGet packages
JeremyCaney Feb 23, 2021
6492aab
Automatically determine the `RepositoryUrl`
JeremyCaney Feb 23, 2021
cbc66d4
Configure solution to auto-generate XML documentation
JeremyCaney Feb 23, 2021
89e4d03
Separated out common properties into `Directory.Build.props`
JeremyCaney Feb 23, 2021
632943b
Merge branch 'improvement/package-metadata' into develop
JeremyCaney Feb 23, 2021
1cefc07
Ensured all XML Doc type and member references are resolved
JeremyCaney Feb 23, 2021
7f2e76d
Resolved poorly formed XML in documentation
JeremyCaney Feb 23, 2021
f4d368b
Ensured all types, parameters are correctly documented
JeremyCaney Feb 23, 2021
13fdc04
Merge branch 'improvement/documentation' into develop
JeremyCaney Feb 23, 2021
92d953c
Resolved potential dereferencing of null references
JeremyCaney Feb 23, 2021
d052257
Addressed possible null reference arguments where unexpected
JeremyCaney Feb 23, 2021
7fa983c
Merge branch 'maintenance/code-analysis' into develop
JeremyCaney Feb 23, 2021
8103167
Updated to Microsoft Test SDK
JeremyCaney Feb 23, 2021
6ab6bad
Removed Coverlet
JeremyCaney Feb 23, 2021
f1590bc
Updated to OnTopic 5.0.0 Beta 4
JeremyCaney Feb 23, 2021
ae3b191
Merge branch 'maintenance/update-dependencies' into develop
JeremyCaney Feb 23, 2021
fa66335
Updated to latest version of Microsoft Test Framework
JeremyCaney Mar 2, 2021
eaee47c
Merge branch 'maintenance/update-dependencies' into develop
JeremyCaney Mar 2, 2021
1afe071
Updated to OnTopic 5.0.0 RTM
JeremyCaney Mar 3, 2021
2ca4d96
Merge branch 'maintenance/OnTopic-5.0.0-release' into develop
JeremyCaney Mar 3, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<Project>

<PropertyGroup>
<LangVersion>9.0</LangVersion>
<Nullable>enable</Nullable>
<AnalysisLevel>latest</AnalysisLevel>
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
</PropertyGroup>

<PropertyGroup>
<Company>Ignia</Company>
<Product>OnTopic</Product>
<Copyright>�2021 Ignia, LLC</Copyright>
<Authors>Ignia</Authors>
<PackageProjectUrl>https://github.com/Ignia/Topics-Library</PackageProjectUrl>
<UseFullSemVerForNuGet>true</UseFullSemVerForNuGet>
<NeutralLanguage>en</NeutralLanguage>
<IncludeSymbols>true</IncludeSymbols>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageIcon>Icon.png</PackageIcon>
</PropertyGroup>

<ItemGroup>
<None Include="../Icon.png" Pack="true" PackagePath=""/>
</ItemGroup>

<PropertyGroup Condition="'$(TF_BUILD)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>

</Project>
Binary file added Icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
189 changes: 137 additions & 52 deletions OnTopic.Data.Transfer.Tests/DeserializationTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using System.Linq;
using System.Text.Json;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OnTopic.Data.Transfer.Converters;

namespace OnTopic.Data.Transfer.Tests {

Expand Down Expand Up @@ -38,77 +39,146 @@ public void Deserialize_TopicData_ReturnsExpectedResults() {
$"\"Key\":\"{sourceData.Key}\"," +
$"\"UniqueKey\":\"{sourceData.UniqueKey}\"," +
$"\"ContentType\":\"{sourceData.ContentType}\"," +
$"\"DerivedTopicKey\":null," +
$"\"Attributes\":[]," +
$"\"Relationships\":[]," +
$"\"Children\":[]" +
$"}}";

var topicData = JsonSerializer.Deserialize<TopicData>(json);

Assert.AreEqual<string>(sourceData.Key, topicData.Key);
Assert.AreEqual<string>(sourceData.UniqueKey, topicData.UniqueKey);
Assert.AreEqual<string>(sourceData.ContentType, topicData.ContentType);
Assert.AreEqual<string>(sourceData.DerivedTopicKey, topicData.DerivedTopicKey);
Assert.AreEqual<int>(0, topicData.Relationships.Count);
Assert.AreEqual<int>(0, topicData.Attributes.Count);
Assert.AreEqual<int>(0, topicData.Children.Count);
Assert.AreEqual<string?>(sourceData.Key, topicData?.Key);
Assert.AreEqual<string?>(sourceData.UniqueKey, topicData?.UniqueKey);
Assert.AreEqual<string?>(sourceData.ContentType, topicData?.ContentType);
Assert.AreEqual<int?>(0, topicData?.Relationships.Count);
Assert.AreEqual<int?>(0, topicData?.Attributes.Count);
Assert.AreEqual<int?>(0, topicData?.Children.Count);

}

/*==========================================================================================================================
| TEST: DESERIALIZE: DERIVED TOPIC KEY: RETURNS EXPECTED RESULTS
\-------------------------------------------------------------------------------------------------------------------------*/
/// <summary>
/// Creates a json string with a legacy <c>DerivedTopicKey</c> and attempts to deserialize it as a <see cref="TopicData"/>
/// class.
/// </summary>
[TestMethod]
#pragma warning disable CS0618 // Type or member is obsolete
public void Deserialize_DerivedTopicKey_ReturnsExpectedResults() {

var sourceData = new TopicData() {
Key = "Test",
UniqueKey = "Root:Test",
ContentType = "Container",
DerivedTopicKey = "Root:Meta:Test"
};

var json = $"{{" +
$"\"Key\":\"{sourceData.Key}\"," +
$"\"UniqueKey\":\"{sourceData.UniqueKey}\"," +
$"\"ContentType\":\"{sourceData.ContentType}\"," +
$"\"DerivedTopicKey\":\"{sourceData.DerivedTopicKey}\"," +
$"\"Attributes\":[]," +
$"\"Relationships\":[]," +
$"\"Children\":[]" +
$"}}";

var topicData = JsonSerializer.Deserialize<TopicData>(json);

Assert.AreEqual<string?>(sourceData.Key, topicData?.Key);
Assert.AreEqual<string?>(sourceData.UniqueKey, topicData?.UniqueKey);
Assert.AreEqual<string?>(sourceData.ContentType, topicData?.ContentType);
Assert.AreEqual<string?>(sourceData.DerivedTopicKey, topicData?.DerivedTopicKey);
Assert.AreEqual<int?>(0, topicData?.Relationships.Count);
Assert.AreEqual<int?>(0, topicData?.Attributes.Count);
Assert.AreEqual<int?>(0, topicData?.Children.Count);

}
#pragma warning restore CS0618 // Type or member is obsolete

/*==========================================================================================================================
| TEST: DESERIALIZE: KEY/VALUES PAIR: RETURNS EXPECTED RESULTS
\-------------------------------------------------------------------------------------------------------------------------*/
/// <summary>
/// Creates a JSON string and attempts to deserialize it as a <see cref="KeyValuesPair"/> class.
/// </summary>
[TestMethod]
public void Deserialize_KeyValuesPair_ReturnsExpectedResults() {

var sourceData = new KeyValuesPair() {
Key = "Test"
};
sourceData.Values.Add("Root:Web");

var json = $"{{" +
$"\"Key\":\"{sourceData.Key}\"," +
$"\"Values\":[\"Root:Web\"]" +
$"}}";

var keyValuesPair = JsonSerializer.Deserialize<KeyValuesPair>(json);

Assert.AreEqual<string?>(sourceData.Key, keyValuesPair?.Key);
Assert.AreEqual<int?>(sourceData.Values.Count, keyValuesPair?.Values.Count);
Assert.AreEqual<string?>(sourceData.Values.FirstOrDefault(), keyValuesPair?.Values.FirstOrDefault());

}

/*==========================================================================================================================
| TEST: DESERIALIZE: RELATIONSHIP DATA: RETURNS EXPECTED RESULTS
\-------------------------------------------------------------------------------------------------------------------------*/
/// <summary>
/// Creates a json string and attempts to deserialize it as a <see cref="RelationshipData"/> class.
/// Creates a JSON string representing the legacy <c>RelationshipData</c> class (which used a <c>Relationships</c> array),
/// and attempts to deserialize it as a <see cref="KeyValuesPair"/> class, ensuring that the <see cref="
/// KeyValuesPairConverter"/> properly translates the <c>Relationships</c> array to the <see cref="KeyValuesPair.Values"/>
/// collection.
/// </summary>
[TestMethod]
public void Deserialize_RelationshipData_ReturnsExpectedResults() {

var sourceData = new RelationshipData() {
var sourceData = new KeyValuesPair() {
Key = "Test"
};
sourceData.Relationships.Add("Root:Web");
sourceData.Values.Add("Root:Web");

var json = $"{{" +
$"\"Key\":\"{sourceData.Key}\"," +
$"\"Relationships\":[\"Root:Web\"]" +
$"}}";

var relationshipData = JsonSerializer.Deserialize<RelationshipData>(json);
var keyValuesPair = JsonSerializer.Deserialize<KeyValuesPair>(json);

Assert.AreEqual<string>(sourceData.Key, relationshipData.Key);
Assert.AreEqual<int>(sourceData.Relationships.Count, relationshipData.Relationships.Count);
Assert.AreEqual<string>(sourceData.Relationships.FirstOrDefault(), relationshipData.Relationships.FirstOrDefault());
Assert.AreEqual<string?>(sourceData.Key, keyValuesPair?.Key);
Assert.AreEqual<int?>(sourceData.Values.Count, keyValuesPair?.Values.Count);
Assert.AreEqual<string?>(sourceData.Values.FirstOrDefault(), keyValuesPair?.Values.FirstOrDefault());

}

/*==========================================================================================================================
| TEST: DESERIALIZE: ATTRIBUTE DATA: RETURNS EXPECTED RESULTS
| TEST: DESERIALIZE: RECORD DATA: RETURNS EXPECTED RESULTS
\-------------------------------------------------------------------------------------------------------------------------*/
/// <summary>
/// Creates a json string and attempts to deserialize it as a <see cref="AttributeData"/> class.
/// Creates a json string and attempts to deserialize it as a <see cref="RecordData"/> class.
/// </summary>
[TestMethod]
public void Deserialize_AttributeData_ReturnsExpectedResults() {
public void Deserialize_RecordData_ReturnsExpectedResults() {

var sourceData = new AttributeData() {
var sourceData = new RecordData() {
Key = "Test",
LastModified = DateTime.Now
LastModified = new DateTime(2021, 02, 16, 16, 06, 25)
};

var json = $"{{" +
$"\"Key\":\"{sourceData.Key}\"," +
$"\"Value\":null," +
$"\"LastModified\":\"{sourceData.LastModified:o}\"" +
$"\"LastModified\":\"{sourceData.LastModified:s}\"" +
$"}}";


var attributeData = JsonSerializer.Deserialize<AttributeData>(json);
var recordData = JsonSerializer.Deserialize<RecordData>(json);

Assert.AreEqual<string>(sourceData.Key, attributeData.Key);
Assert.AreEqual<string>(sourceData.Value, attributeData.Value);
Assert.AreEqual<DateTime>(sourceData.LastModified, attributeData.LastModified);
Assert.AreEqual<string?>(sourceData.Key, recordData?.Key);
Assert.AreEqual<string?>(sourceData.Value, recordData?.Value);
Assert.AreEqual<DateTime?>(sourceData.LastModified, recordData?.LastModified);

}

Expand All @@ -121,25 +191,32 @@ public void Deserialize_AttributeData_ReturnsExpectedResults() {
[TestMethod]
public void Deserialize_TopicGraph_ReturnsExpectedResults() {

var lastModified = new DateTime(2021, 02, 16, 16, 06, 25);

var sourceTopicData = new TopicData() {
Key = "Test",
UniqueKey = "Root:Test",
ContentType = "Container"
};
var sourceRelationshipData= new RelationshipData() {
var sourceRelationshipData= new KeyValuesPair() {
Key = "Test"
};
var sourceAttributeData = new AttributeData() {
var sourceAttributeData = new RecordData() {
Key = "Test",
LastModified = lastModified
};
var sourceReferenceData = new RecordData() {
Key = "Test",
LastModified = DateTime.Now
Value = "Root:Reference",
LastModified = lastModified
};
var sourceChildTopicData = new TopicData() {
Key = "Child",
UniqueKey = "Root:Test:Child",
ContentType = "Container"
};

sourceRelationshipData.Relationships.Add("Root:Web");
sourceRelationshipData.Values.Add("Root:Web");
sourceTopicData.Relationships.Add(sourceRelationshipData);
sourceTopicData.Attributes.Add(sourceAttributeData);
sourceTopicData.Children.Add(sourceChildTopicData);
Expand All @@ -148,26 +225,31 @@ public void Deserialize_TopicGraph_ReturnsExpectedResults() {
$"\"Key\":\"{sourceTopicData.Key}\"," +
$"\"UniqueKey\":\"{sourceTopicData.UniqueKey}\"," +
$"\"ContentType\":\"{sourceTopicData.ContentType}\"," +
$"\"DerivedTopicKey\":null," +
$"\"Attributes\":[" +
$"{{" +
$"\"Key\":\"{sourceAttributeData.Key}\"," +
$"\"Value\":null," +
$"\"LastModified\":\"{sourceAttributeData.LastModified:o}\"" +
$"\"LastModified\":\"{sourceAttributeData.LastModified:s}\"" +
$"}}"+
$"]," +
$"\"Relationships\":[" +
$"{{" +
$"\"Key\":\"{sourceRelationshipData.Key}\"," +
$"\"Relationships\":[\"Root:Web\"]" +
$"\"Values\":[\"Root:Web\"]" +
$"}}" +
$"]," +
$"\"References\":[" +
$"{{" +
$"\"Key\":\"{sourceReferenceData.Key}\"," +
$"\"Value\":\"{sourceReferenceData.Value}\"," +
$"\"LastModified\":\"{sourceReferenceData.LastModified:s}\"" +
$"}}"+
$"]," +
$"\"Children\":[" +
$"{{" +
$"\"Key\":\"{sourceChildTopicData.Key}\"," +
$"\"UniqueKey\":\"{sourceChildTopicData.UniqueKey}\"," +
$"\"ContentType\":\"{sourceChildTopicData.ContentType}\"," +
$"\"DerivedTopicKey\":null," +
$"\"Attributes\":[]," +
$"\"Relationships\":[]," +
$"\"Children\":[]" +
Expand All @@ -176,31 +258,34 @@ public void Deserialize_TopicGraph_ReturnsExpectedResults() {
$"}}";


var topicData = JsonSerializer.Deserialize<TopicData>(json);
var relationshipData = topicData.Relationships.FirstOrDefault();
var attributeData = topicData.Attributes.FirstOrDefault();
var childTopicData = topicData.Children.FirstOrDefault();

Assert.AreEqual<string>(sourceTopicData.Key, topicData.Key);
Assert.AreEqual<string>(sourceTopicData.UniqueKey, topicData.UniqueKey);
Assert.AreEqual<string>(sourceTopicData.ContentType, topicData.ContentType);
Assert.AreEqual<string>(sourceTopicData.DerivedTopicKey, topicData.DerivedTopicKey);
var topicData = JsonSerializer.Deserialize<TopicData>(json);
var relationshipData = topicData?.Relationships.FirstOrDefault();
var referenceData = topicData?.References.FirstOrDefault();
var attributeData = topicData?.Attributes.FirstOrDefault();
var childTopicData = topicData?.Children.FirstOrDefault();

Assert.AreEqual<string?>(sourceTopicData.Key, topicData?.Key);
Assert.AreEqual<string?>(sourceTopicData.UniqueKey, topicData?.UniqueKey);
Assert.AreEqual<string?>(sourceTopicData.ContentType, topicData?.ContentType);
Assert.AreEqual<int>(1, sourceTopicData.Relationships.Count);
Assert.AreEqual<int>(1, sourceTopicData.Attributes.Count);
Assert.AreEqual<int>(1, sourceTopicData.Children.Count);

Assert.AreEqual<string>(sourceRelationshipData.Key, relationshipData.Key);
Assert.AreEqual<int?>(sourceRelationshipData.Relationships.Count, relationshipData.Relationships.Count);
Assert.AreEqual<string>(sourceRelationshipData.Relationships.FirstOrDefault(), relationshipData.Relationships.FirstOrDefault());
Assert.AreEqual<string?>(sourceRelationshipData.Key, relationshipData?.Key);
Assert.AreEqual<int?>(sourceRelationshipData.Values.Count, relationshipData?.Values.Count);
Assert.AreEqual<string?>(sourceRelationshipData.Values.FirstOrDefault(), relationshipData?.Values.FirstOrDefault());

Assert.AreEqual<string?>(sourceReferenceData.Key, referenceData?.Key);
Assert.AreEqual<string?>(sourceReferenceData.Value, referenceData?.Value);
Assert.AreEqual<DateTime?>(sourceReferenceData.LastModified, referenceData?.LastModified);

Assert.AreEqual<string>(sourceAttributeData.Key, attributeData.Key);
Assert.AreEqual<string>(sourceAttributeData.Value, attributeData.Value);
Assert.AreEqual<DateTime>(sourceAttributeData.LastModified, attributeData.LastModified);
Assert.AreEqual<string?>(sourceAttributeData.Key, attributeData?.Key);
Assert.AreEqual<string?>(sourceAttributeData.Value, attributeData?.Value);
Assert.AreEqual<DateTime?>(sourceAttributeData.LastModified, attributeData?.LastModified);

Assert.AreEqual<string>(sourceChildTopicData.Key, childTopicData.Key);
Assert.AreEqual<string>(sourceChildTopicData.UniqueKey, childTopicData.UniqueKey);
Assert.AreEqual<string>(sourceChildTopicData.ContentType, childTopicData.ContentType);
Assert.AreEqual<string>(sourceChildTopicData.DerivedTopicKey, childTopicData.DerivedTopicKey);
Assert.AreEqual<string?>(sourceChildTopicData.Key, childTopicData?.Key);
Assert.AreEqual<string?>(sourceChildTopicData.UniqueKey, childTopicData?.UniqueKey);
Assert.AreEqual<string?>(sourceChildTopicData.ContentType, childTopicData?.ContentType);
Assert.AreEqual<int>(0, sourceChildTopicData.Relationships.Count);
Assert.AreEqual<int>(0, sourceChildTopicData.Children.Count);
}
Expand Down
Loading