-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
BreadcrumbListTest.cs
102 lines (96 loc) · 4.28 KB
/
BreadcrumbListTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
namespace Schema.NET.Test
{
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Xunit;
public class BreadcrumbListTest
{
private readonly BreadcrumbList breadcrumbList = new BreadcrumbList()
{
ItemListElement = new List<IListItem>()
{
new ListItem()
{
Position = 1,
Item = new Book()
{
Id = new Uri("http://example.com/books"),
Name = "Books",
Image = new Uri("http://example.com/images/icon-book.png"),
},
},
new ListItem()
{
Position = 2,
Item = new Person()
{
Id = new Uri("http://example.com/books/authors"),
Name = "Authors",
Image = new Uri("http://example.com/images/icon-author.png"),
},
},
},
};
private readonly string json =
"{" +
"\"@context\":\"https://schema.org\"," +
"\"@type\":\"BreadcrumbList\"," +
"\"itemListElement\":[" +
"{" +
"\"@type\":\"ListItem\"," +
"\"item\":{" + // Required
"\"@type\":\"Book\"," +
"\"@id\":\"http://example.com/books\"," + // Required
"\"name\":\"Books\"," + // Required
"\"image\":\"http://example.com/images/icon-book.png\"" + // Optional
"}," +
"\"position\":1" + // Required
"}," +
"{" +
"\"@type\":\"ListItem\"," +
"\"item\":{" +
"\"@type\":\"Person\"," +
"\"@id\":\"http://example.com/books/authors\"," + // Required
"\"name\":\"Authors\"," +
"\"image\":\"http://example.com/images/icon-author.png\"" +
"}," +
"\"position\":2" +
"}" +
"]" +
"}";
[Fact]
public void ToString_BreadcrumbListGoogleStructuredData_ReturnsExpectedJsonLd() =>
Assert.Equal(this.json, this.breadcrumbList.ToString());
[Fact]
public void Deserializing_BreadcrumbListJsonLd_ReturnsMatchingBreadcrumbList()
{
Assert.Equal(this.breadcrumbList.ToString(), JsonConvert.DeserializeObject<BreadcrumbList>(this.json, TestDefaults.DefaultJsonSerializerSettings).ToString());
Assert.Equal(JsonConvert.SerializeObject(this.breadcrumbList, TestDefaults.DefaultJsonSerializerSettings), JsonConvert.SerializeObject(JsonConvert.DeserializeObject<BreadcrumbList>(this.json, TestDefaults.DefaultJsonSerializerSettings), TestDefaults.DefaultJsonSerializerSettings));
}
[Fact]
public void Deserializing_BreadcrumbListJsonLd_ReturnsBreadcrumbList()
{
var breadcrumbList = JsonConvert.DeserializeObject<BreadcrumbList>(this.json, TestDefaults.DefaultJsonSerializerSettings);
List<IThing> things = breadcrumbList.ItemListElement;
List<IListItem> listItems = breadcrumbList.ItemListElement;
Assert.Equal(2, things.Count);
Assert.Empty(listItems);
var thing1 = things.First();
var thing2 = things.Last();
var listItem1 = (IListItem)thing1;
var listItem2 = (IListItem)thing2;
Assert.Equal(1, (int)listItem1.Position);
Assert.Equal(2, (int)listItem2.Position);
var book = listItem1.Item.OfType<IBook>().FirstOrDefault();
Assert.NotNull(book);
Assert.Equal("Books", book.Name);
Assert.Equal(new Uri("http://example.com/images/icon-book.png"), (Uri)book.Image);
var person = listItem2.Item.OfType<IPerson>().FirstOrDefault();
Assert.NotNull(person);
Assert.Equal("Authors", person.Name);
Assert.Equal(new Uri("http://example.com/images/icon-author.png"), (Uri)person.Image);
}
}
}