forked from ravendb/ravendb
/
DocumentToJsonAndBackTest.cs
117 lines (101 loc) · 3.42 KB
/
DocumentToJsonAndBackTest.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//-----------------------------------------------------------------------
// <copyright file="DocumentToJsonAndBackTest.cs" company="Hibernating Rhinos LTD">
// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Raven.Abstractions.Linq;
using Raven.Json.Linq;
using Raven.Client.Document;
using Raven.Client.Indexes;
using Raven.Database.Linq;
using Xunit;
namespace Raven.Tests.Bugs
{
public class DocumentToJsonAndBackTest
{
private readonly Page page;
public DocumentToJsonAndBackTest()
{
page = new Page();
page.CoAuthors.Add(new User {UserId = 1});
page.CoAuthors.Add(new User {UserId = 2});
}
[Fact]
public void ListOnDynamicJsonObjectFromJsonWillFailToBeAJsonList()
{
var conventions = new DocumentConvention();
var jObject = RavenJObject.FromObject(page, conventions.CreateSerializer());
dynamic dynamicObject = new DynamicJsonObject(jObject);
Assert.NotNull(dynamicObject.CoAuthors as IEnumerable);
Assert.NotNull(dynamicObject.CoAuthors.Length);
Assert.Equal(2, dynamicObject.CoAuthors.Length);
}
[Fact]
public void ListOnDynamicJsonObjectFromJsonIsAnArray()
{
var conventions = new DocumentConvention();
var jObject = RavenJObject.FromObject(page, conventions.CreateSerializer());
dynamic dynamicObject = new DynamicJsonObject(jObject);
Assert.NotNull(dynamicObject.CoAuthors as IEnumerable);
Assert.NotNull(dynamicObject.CoAuthors.Length);
Assert.Equal(2, dynamicObject.CoAuthors.Length);
}
[Fact]
public void LinqQueryWithStaticCallOnEnumerableIsTranslatedToExtensionMethod()
{
var indexDefinition = new IndexDefinitionBuilder<Page>
{
Map = pages => from p in pages
from coAuthor in p.CoAuthors.DefaultIfEmpty()
select new
{
p.Id,
CoAuthorUserID = coAuthor != null ? coAuthor.UserId : -1
}
}.ToIndexDefinition(new DocumentConvention());
Assert.Contains("p.CoAuthors.DefaultIfEmpty()", indexDefinition.Map);
}
[Fact]
public void LinqQueryWithStaticCallOnEnumerableIsCanBeCompiledAndRun()
{
var indexDefinition = new IndexDefinitionBuilder<Page>
{
Map = pages => from p in pages
from coAuthor in p.CoAuthors.DefaultIfEmpty()
select new
{
p.Id,
CoAuthorUserID = coAuthor != null ? coAuthor.UserId : -1
}
}.ToIndexDefinition(new DocumentConvention());
var mapInstance = new DynamicViewCompiler("testView",
indexDefinition, ".").
GenerateInstance();
var conventions = new DocumentConvention();
var o = RavenJObject.FromObject(page,conventions.CreateSerializer());
o["@metadata"] = new RavenJObject {{"Raven-Entity-Name", "Pages"}};
dynamic dynamicObject = new DynamicJsonObject(o);
var result = mapInstance.MapDefinitions[0](new[] { dynamicObject }).ToList<object>();
Assert.Equal("{ Id = 0, CoAuthorUserID = 1, __document_id = }", result[0].ToString());
Assert.Equal("{ Id = 0, CoAuthorUserID = 2, __document_id = }", result[1].ToString());
}
private class Page
{
public readonly IList<User> CoAuthors;
#pragma warning disable 0649
public int Id;
#pragma warning restore 0649
public Page()
{
CoAuthors = new List<User>();
}
}
private class User
{
public int UserId;
}
}
}