PageRenderTime 46ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/Raven.Tests.MailingList/Rudolph.cs

https://github.com/barryhagan/ravendb
C# | 97 lines | 81 code | 16 blank | 0 comment | 6 complexity | 1deae2baafe9126811935e28d8ee7861 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, BSD-3-Clause, CC-BY-SA-3.0
  1. using System;
  2. using System.Linq;
  3. using Raven.Client.Linq;
  4. using Raven.Tests.Common;
  5. using Xunit;
  6. namespace Raven.Tests.MailingList
  7. {
  8. public class Rudolph : RavenTest
  9. {
  10. public class User
  11. {
  12. public string Name { get; set; }
  13. public string Email { get; set; }
  14. public Login[] Logins { get; set; }
  15. }
  16. public class Login
  17. {
  18. public string OpenIdIdentifier { get; set; }
  19. }
  20. public class Identifier
  21. {
  22. protected bool Equals(Identifier other)
  23. {
  24. return string.Equals(str, other.str);
  25. }
  26. public override bool Equals(object obj)
  27. {
  28. if (ReferenceEquals(null, obj)) return false;
  29. if (ReferenceEquals(this, obj)) return true;
  30. if (obj.GetType() != this.GetType()) return false;
  31. return Equals((Identifier) obj);
  32. }
  33. public override int GetHashCode()
  34. {
  35. return (str != null ? str.GetHashCode() : 0);
  36. }
  37. private string str;
  38. public static implicit operator string(Identifier identifier)
  39. {
  40. return identifier.str;
  41. }
  42. public static implicit operator Identifier(string identifier)
  43. {
  44. return new Identifier {str = identifier};
  45. }
  46. public static bool operator ==(Identifier id1, Identifier id2)
  47. {
  48. return ReferenceEquals(id1, id2);
  49. }
  50. public static bool operator !=(Identifier id1, Identifier id2)
  51. {
  52. return !ReferenceEquals(id2, id1);
  53. }
  54. }
  55. [Fact]
  56. public void CanUseImplicitIdentifier()
  57. {
  58. Identifier identifier = "http://openid";
  59. using(var store = NewDocumentStore())
  60. {
  61. using(var s = store.OpenSession())
  62. {
  63. var user = new User()
  64. {
  65. Name = "Test",
  66. Logins = new Login[] { new Login() { OpenIdIdentifier = identifier } }
  67. };
  68. s.Store(user);
  69. s.SaveChanges();
  70. }
  71. using(var s = store.OpenSession())
  72. {
  73. var query = from u in s.Query<User>().Customize(x=>x.WaitForNonStaleResults())
  74. where u.Logins.Any(x => x.OpenIdIdentifier == identifier)
  75. select u;
  76. Assert.NotNull(query.SingleOrDefault()); // will throw
  77. }
  78. }
  79. }
  80. }
  81. }