PageRenderTime 54ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/Raven.Tests.MailingList/PeterBalzli.cs

http://github.com/ravendb/ravendb
C# | 121 lines | 98 code | 18 blank | 5 comment | 1 complexity | 376487b6b94b88686348b9856b746fb8 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, Apache-2.0, BSD-3-Clause
  1. // -----------------------------------------------------------------------
  2. // <copyright file="PeterBalzli.cs" company="Hibernating Rhinos LTD">
  3. // Copyright (c) Hibernating Rhinos LTD. All rights reserved.
  4. // </copyright>
  5. // -----------------------------------------------------------------------
  6. using System;
  7. using System.Linq;
  8. using FluentAssertions;
  9. using Raven.Abstractions.Indexing;
  10. using Raven.Client;
  11. using Raven.Client.Embedded;
  12. using Raven.Client.Indexes;
  13. using Raven.Imports.Newtonsoft.Json;
  14. using Raven.Tests.Common;
  15. using Xunit;
  16. namespace Raven.Tests.MailingList
  17. {
  18. public class PeterBalzli : RavenTest
  19. {
  20. private EmbeddableDocumentStore _documentStore { get; set; }
  21. public void Setup()
  22. {
  23. _documentStore = new EmbeddableDocumentStore
  24. {
  25. RunInMemory = true,
  26. UseEmbeddedHttpServer = true
  27. };
  28. _documentStore.Conventions.CustomizeJsonSerializer = serializers => serializers.Converters.Add(new CustomerNumberJsonConverter());
  29. _documentStore.Configuration.Storage.Voron.AllowOn32Bits = true;
  30. _documentStore.Initialize();
  31. _documentStore.ExecuteIndex(new Index());
  32. }
  33. [Fact]
  34. public void Test()
  35. {
  36. Setup();
  37. using (var session = _documentStore.OpenSession())
  38. {
  39. session.Store(new Item() { Id = "1" });
  40. session.SaveChanges();
  41. }
  42. using (var session = _documentStore.OpenSession())
  43. {
  44. var items = session
  45. .Query<Index.Result, Index>()
  46. .Customize(c => c.WaitForNonStaleResults())
  47. .ProjectFromIndexFieldsInto<Index.Result>()
  48. .ToList();
  49. Assert.Equal(1, items.Count);
  50. }
  51. }
  52. }
  53. public class Item
  54. {
  55. public string Id { get; set; }
  56. public CustomerNumber Number { get; set; }
  57. }
  58. public class Customer1
  59. {
  60. public string Id { get; set; }
  61. public string Name { get; set; }
  62. }
  63. public class CustomerNumber
  64. {
  65. public string Number { get; set; }
  66. }
  67. public class Index : AbstractIndexCreationTask<Item, Index.Result>
  68. {
  69. public class Result
  70. {
  71. public string Id { get; set; }
  72. public string Customer { get; set; }
  73. }
  74. public Index()
  75. {
  76. Map = items => from item in items
  77. let customer = LoadDocument<Customer1>(item.Number.ToString())
  78. select new Result
  79. {
  80. Id = item.Id,
  81. Customer = customer.Name
  82. };
  83. StoreAllFields(FieldStorage.Yes);
  84. }
  85. }
  86. public class CustomerNumberJsonConverter : JsonConverter
  87. {
  88. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  89. {
  90. var obj = (CustomerNumber)value;
  91. writer.WriteValue(obj.Number);
  92. }
  93. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  94. {
  95. var number = (string)reader.Value;
  96. return new CustomerNumber { Number = number };
  97. }
  98. public override bool CanConvert(Type objectType)
  99. {
  100. return typeof(CustomerNumber) == objectType;
  101. }
  102. }
  103. }