Skip to content

Instantly share code, notes, and snippets.

@ZNS
Created August 24, 2012 21:14
Show Gist options
  • Save ZNS/3455691 to your computer and use it in GitHub Desktop.
Save ZNS/3455691 to your computer and use it in GitHub Desktop.
Failing date test update
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Raven.Client.Document;
using Raven.Client.Embedded;
using Raven.Client.Linq;
using System.Diagnostics;
using Raven.Abstractions.Indexing;
namespace TestProject1
{
public class TestItem
{
public string Id { get; set; }
public string Name { get; set; }
public int Area { get; set; }
public EventDate[] Dates { get; set; }
public override int GetHashCode()
{
return this.Id.GetHashCode();
}
public override bool Equals(object obj)
{
if (obj != null && obj is TestItem)
return ((TestItem)obj).Id == this.Id;
return false;
}
}
public class EventDate
{
public DateTime Date { get; set; }
public string Time { get; set; }
}
[TestClass]
public class MyTests
{
[TestMethod]
public void Can_SortAndPageMultipleDates()
{
using (var store = new EmbeddableDocumentStore { RunInMemory = true })
{
//Create an index
store.Initialize();
store.DatabaseCommands.PutIndex("TestItemsIndex", new Raven.Abstractions.Indexing.IndexDefinition
{
Name = "TestItemsIndex",
Map = @"from item in docs.TestItems
from d in item.Dates.Select((Func<dynamic,dynamic>)(x => x.Date)).Distinct().DefaultIfEmpty()
select new {Id = item.Id, Name = item.Name, EventDate = d, Area = item.Area};",
Stores = { { "EventDate", FieldStorage.No } }
}, true);
//Insert some events at random dates
using (var session = store.OpenSession())
{
for (int i = 0; i < 50; i++)
{
var r = new System.Random();
session.Store(new TestItem()
{
Id = "testitems/" + 1000 + i,
Name = "Event Number " + (1000 + i),
Area = r.Next(1, 3),
Dates = null
});
}
}
using (var session = store.OpenSession())
{
for (int i = 1; i <= 50; i++)
{
var r = new System.Random(Guid.NewGuid().ToString().GetHashCode());
var dates = new List<DateTime>();
for (var j = 0; j < 5; j++)
{
dates.Add(new DateTime(2012, r.Next(1, 12), r.Next(1, 28)));
}
session.Store(new TestItem()
{
Id = "testitems/" + i,
Name = "Event Number " + i,
Area = r.Next(1, 3),
Dates = dates.Select(x => new EventDate() { Date = x }).ToArray()
});
}
session.SaveChanges();
}
//Get all results
RavenQueryStatistics stats;
List<TestItem> result = null;
using (var session = store.OpenSession())
{
result = session.Advanced.LuceneQuery<TestItem>("TestItemsIndex")
.Statistics(out stats)
.WaitForNonStaleResults()
.WhereBetweenOrEqual("EventDate", DateTime.Parse("2012-02-01"), DateTime.Parse("2012-09-01"))
.AndAlso()
.WhereEquals("Area", 2)
.OrderBy("EventDate")
.Take(1000)
.ToList();
}
//Get all results, paged
List<TestItem> paged = new List<TestItem>();
RavenQueryStatistics stats2;
int sum = result.Count;
int skip = 0;
var take = 10;
for (int i = 0; i < sum; i += take)
{
using (var session = store.OpenSession())
{
var r = session.Advanced.LuceneQuery<TestItem>("TestItemsIndex")
.Statistics(out stats2)
.WhereBetweenOrEqual("EventDate", DateTime.Parse("2012-02-01"), DateTime.Parse("2012-09-01"))
.AndAlso()
.WhereEquals("Area", 2)
.OrderBy("EventDate")
.Skip(paged.Count)
.Take(take)
.ToList();
skip += stats2.SkippedResults;
paged.AddRange(r);
}
}
Debug.WriteLine(String.Join(", ", result.Select(x => x.Id).ToArray()));
Debug.WriteLine("p3" + String.Join(", ", paged.Select(x => x.Id).ToArray()));
var e1 = result.GetEnumerator();
var e2 = paged.GetEnumerator();
while (e1.MoveNext() && e2.MoveNext())
{
Assert.AreEqual(e1.Current, e2.Current);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment