Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,4 @@ Generated_Code #added for RIA/Silverlight projects
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
/.vs/WebAPI.OutputCache.MongoDb/v15/Server/sqlite3
34 changes: 20 additions & 14 deletions WebAPI.OutputCache.MongoDb.Tests/Methods/AddTests.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System;
using System.Linq;
using MongoDB.Bson;
using MongoDB.Driver;
using NUnit.Framework;
using ServiceStack.Text;
using System;
using System.Linq;

namespace WebAPI.OutputCache.MongoDb.Tests.Methods
{
Expand All @@ -13,46 +15,50 @@ public class AddTests : MongoDbApiOutputCacheTestsBase
[SetUp]
public void SetUp()
{
MongoCollection.RemoveAll();
MongoDatabase.DropCollection(MongoCollection.CollectionNamespace.CollectionName);

_user = new UserFixture { Name = "John", DateOfBirth = new DateTime(1980, 01, 23) };
}

[Test]
public void adds_item_to_cache()
public void Adds_item_to_cache()
{
MongoDbApiOutputCache.Add(_user.Id.ToString(), _user, DateTime.Now.AddSeconds(60));

var item = MongoCollection.FindAllAs<CachedItem>().FirstOrDefault();
var item = MongoCollection.AsQueryable().FirstOrDefault();

Assert.That(item, Is.Not.Null);
}

[Test]
public void added_item_stored_with_supplied_key()
public void Added_item_stored_with_supplied_key()
{
var key = _user.Id.ToString();
MongoDbApiOutputCache.Add(key, _user, DateTime.Now.AddSeconds(60));

var item = MongoCollection.FindAllAs<CachedItem>().FirstOrDefault();
var item = MongoCollection.AsQueryable().FirstOrDefault();

Assert.That(item.Key, Is.EqualTo(key));
}

[Test]
public void added_item_stored_with_expiry()
public void Added_item_stored_with_expiry()
{
var expiration = DateTime.Now.AddSeconds(60);

MongoDbApiOutputCache.Add(_user.Id.ToString(), _user, expiration);

var item = MongoCollection.FindOneAs<CachedItem>();
var itemExpireAt = item.ExpireAt;
//var item = MongoCollection.FindOneAs<CachedItem>();
var item = MongoCollection.AsQueryable().FirstOrDefault();
var itemExpireAt = item.ExpireAt.ToLocalTime();

//todo: would be good to check they are the same value.. without this rubbish!
//something like:
//Assert.That(DateTime.Compare(item.ExpireAt, new DateTime(expiration.Ticks)), Is.EqualTo(0));

//note: will this work?
//Assert.That(itemExpireAt, Is.EqualTo(expiration).Within(1).Milliseconds);

Assert.That(expiration.Day, Is.EqualTo(itemExpireAt.Day));
Assert.That(expiration.Month, Is.EqualTo(itemExpireAt.Month));
Assert.That(expiration.Year, Is.EqualTo(itemExpireAt.Year));
Expand All @@ -63,25 +69,25 @@ public void added_item_stored_with_expiry()
}

[Test]
public void adding_item_with_duplicate_key_updates_original()
public void Adding_item_with_duplicate_key_updates_original()
{
MongoDbApiOutputCache.Add("user", _user, DateTime.Now.AddSeconds(60));

var differentUser = new UserFixture { Name = "Simon" };

MongoDbApiOutputCache.Add("user", differentUser, DateTime.Now.AddSeconds(60));

Assert.That(MongoCollection.Count(), Is.EqualTo(1));
Assert.That(MongoCollection.Count(new BsonDocument()), Is.EqualTo(1));

var item = JsonSerializer.DeserializeFromString<UserFixture>(MongoCollection.FindOneAs<CachedItem>().Value);
var item = JsonSerializer.DeserializeFromString<UserFixture>(MongoCollection.AsQueryable().FirstOrDefault().Value);

Assert.That(item, Is.Not.Null);
Assert.That(item.Id, Is.EqualTo(differentUser.Id));
Assert.That(item.Name, Is.EqualTo(differentUser.Name));
}

[Test]
public void adding_item_with_long_key_throws_exception()
public void Adding_item_with_long_key_throws_exception()
{
var key = "";

Expand Down
14 changes: 7 additions & 7 deletions WebAPI.OutputCache.MongoDb.Tests/Methods/ContainsTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System;
using NUnit.Framework;
using NUnit.Framework;
using System;

namespace WebAPI.OutputCache.MongoDb.Tests.Methods
{
Expand All @@ -15,26 +15,26 @@ public void SetUp()
_user1 = new UserFixture { Name = "John", DateOfBirth = new DateTime(1980, 01, 23) };
_user2 = new UserFixture { Name = "John", DateOfBirth = new DateTime(1980, 01, 23) };

MongoCollection.Insert(new CachedItem(_user1.Id.ToString(), _user1, DateTime.Now.AddHours(1)));
MongoCollection.Insert(new CachedItem(_user2.Id.ToString(), _user2, DateTime.Now.AddHours(1)));
MongoCollection.InsertOne(new CachedItem(_user1.Id.ToString(), _user1, DateTime.Now.AddHours(1)));
MongoCollection.InsertOne(new CachedItem(_user2.Id.ToString(), _user2, DateTime.Now.AddHours(1)));
}

[TearDown]
public void TearDown()
{
MongoCollection.RemoveAll();
MongoDatabase.DropCollection(MongoCollection.CollectionNamespace.CollectionName);
}

[Test]
public void returns_true_if_item_is_in_collection()
public void Returns_true_if_item_is_in_collection()
{
var result = MongoDbApiOutputCache.Contains(_user1.Id.ToString());

Assert.That(result, Is.True);
}

[Test]
public void returns_false_if_item_is_not_in_collection()
public void Returns_false_if_item_is_not_in_collection()
{
var result = MongoDbApiOutputCache.Contains("i know this won't be there");

Expand Down
22 changes: 12 additions & 10 deletions WebAPI.OutputCache.MongoDb.Tests/Methods/GetGenericTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System;
using MongoDB.Bson;
using MongoDB.Driver.Builders;
using MongoDB.Driver;
using NUnit.Framework;

namespace WebAPI.OutputCache.MongoDb.Tests.Methods
Expand All @@ -15,17 +15,17 @@ public void SetUp()
{
_user = new UserFixture { Name = "John", DateOfBirth = new DateTime(1980, 01, 23) };

MongoCollection.Insert(new CachedItem(_user.Id.ToString(), _user, DateTime.Now.AddHours(1)));
MongoCollection.InsertOne(new CachedItem(_user.Id.ToString(), _user, DateTime.Now.AddHours(1)));
}

[TearDown]
public void TearDown()
{
MongoCollection.RemoveAll();
MongoDatabase.DropCollection(MongoCollection.CollectionNamespace.CollectionName);
}

[Test]
public void retrieves_item_from_cache()
public void Retrieves_item_from_cache()
{
var result = MongoDbApiOutputCache.Get<UserFixture>(_user.Id.ToString());

Expand All @@ -38,32 +38,34 @@ public void retrieves_item_from_cache()
}

[Test]
public void returns_null_if_item_not_in_collection()
public void Returns_null_if_item_not_in_collection()
{
var result = MongoDbApiOutputCache.Get<UserFixture>("unknown key");

Assert.That(result, Is.Null);
}

[Test]
public void does_not_return_item_that_has_expired()
public void Does_not_return_item_that_has_expired()
{
//add an item that expires 1 hour ago
MongoCollection.Insert(new CachedItem("expired-item", _user, DateTime.Now.AddHours(-1)));
MongoCollection.InsertOne(new CachedItem("expired-item", _user, DateTime.Now.AddHours(-1)));

var result = MongoDbApiOutputCache.Get<UserFixture>("expired-item");

Assert.That(result, Is.Null);
}

[Test]
public void item_is_deleted_from_database_if_expired()
public void Item_is_deleted_from_database_if_expired()
{
//add an item that expires 1 hour ago
MongoCollection.Insert(new CachedItem("expired-item", _user, DateTime.Now.AddHours(-1)));
MongoCollection.InsertOne(new CachedItem("expired-item", _user, DateTime.Now.AddHours(-1)));

var result = MongoDbApiOutputCache.Get<UserFixture>("expired-item");
var resultFromMongo = MongoCollection.FindOneAs<CachedItem>(Query.EQ("_id", new BsonString("expired-item")));
var resultFromMongo = MongoCollection
.Find(x => x.Key.Equals("expired-item"))
.FirstOrDefault();

Assert.That(result, Is.Null);
Assert.That(resultFromMongo, Is.Null);
Expand Down
10 changes: 5 additions & 5 deletions WebAPI.OutputCache.MongoDb.Tests/Methods/GetTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System;
using NUnit.Framework;
using NUnit.Framework;
using System;

namespace WebAPI.OutputCache.MongoDb.Tests.Methods
{
Expand All @@ -13,17 +13,17 @@ public void SetUp()
{
_user = new UserFixture { Name = "John", DateOfBirth = new DateTime(1980, 01, 23) };

MongoCollection.Insert(new CachedItem(_user.Id.ToString(), _user, DateTime.Now.AddSeconds(60)));
MongoCollection.InsertOne(new CachedItem(_user.Id.ToString(), _user, DateTime.Now.AddSeconds(60)));
}

[TearDown]
public void TearDown()
{
MongoCollection.RemoveAll();
MongoDatabase.DropCollection(MongoCollection.CollectionNamespace.CollectionName);
}

[Test]
public void retrieves_item_from_cache()
public void Retrieves_item_from_cache()
{
var instance = MongoDbApiOutputCache.Get(_user.Id.ToString()) as UserFixture;

Expand Down
22 changes: 12 additions & 10 deletions WebAPI.OutputCache.MongoDb.Tests/Methods/RemoveStartsWithTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using System;
using System.Linq;
using MongoDB.Bson;
using MongoDB.Driver;
using NUnit.Framework;
using System;
using System.Linq;

namespace WebAPI.OutputCache.MongoDb.Tests.Methods
{
Expand All @@ -14,27 +16,27 @@ public void SetUp()
var item2 = new CachedItem("apples-2", "Pink Lady", DateTime.Now.AddHours(1));
var item3 = new CachedItem("dogs-1", "Jack Russell", DateTime.Now.AddHours(1));

MongoCollection.Insert(item1);
MongoCollection.Insert(item2);
MongoCollection.Insert(item3);
MongoCollection.InsertOne(item1);
MongoCollection.InsertOne(item2);
MongoCollection.InsertOne(item3);
}

[TearDown]
public void TearDown()
{
MongoCollection.RemoveAll();
MongoDatabase.DropCollection(MongoCollection.CollectionNamespace.CollectionName);
}

[Test]
public void removes_keys_starting_with_given_string()
public void Removes_keys_starting_with_given_string()
{
Assert.That(MongoCollection.Count(), Is.EqualTo(3));
Assert.That(MongoCollection.Count(new BsonDocument()), Is.EqualTo(3));

MongoDbApiOutputCache.RemoveStartsWith("apples");

Assert.That(MongoCollection.Count(), Is.EqualTo(1));
Assert.That(MongoCollection.Count(new BsonDocument()), Is.EqualTo(1));

var result = MongoCollection.FindAllAs<CachedItem>();
var result = MongoCollection.AsQueryable();

Assert.That(result.Any(x => x.Key.Equals("apples-1")), Is.False);
Assert.That(result.Any(x => x.Key.Equals("apples-2")), Is.False);
Expand Down
22 changes: 12 additions & 10 deletions WebAPI.OutputCache.MongoDb.Tests/Methods/RemoveTests.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System;
using System.Linq;
using MongoDB.Bson;
using MongoDB.Driver;
using NUnit.Framework;
using ServiceStack.Text;
using System;
using System.Linq;

namespace WebAPI.OutputCache.MongoDb.Tests.Methods
{
Expand All @@ -17,29 +19,29 @@ public void SetUp()
_user1 = new UserFixture { Name = "John", DateOfBirth = new DateTime(1980, 01, 23) };
_user2 = new UserFixture { Name = "John", DateOfBirth = new DateTime(1980, 01, 23) };

MongoCollection.Insert(new CachedItem(_user1.Id.ToString(), _user1, DateTime.Now.AddHours(1)));
MongoCollection.Insert(new CachedItem(_user2.Id.ToString(), _user2, DateTime.Now.AddHours(1)));
MongoCollection.InsertOne(new CachedItem(_user1.Id.ToString(), _user1, DateTime.Now.AddHours(1)));
MongoCollection.InsertOne(new CachedItem(_user2.Id.ToString(), _user2, DateTime.Now.AddHours(1)));
}

[TearDown]
public void TearDown()
{
MongoCollection.RemoveAll();
MongoDatabase.DropCollection(MongoCollection.CollectionNamespace.CollectionName);
}

[Test]
public void removes_item_from_cache()
public void Removes_item_from_cache()
{
MongoDbApiOutputCache.Remove(_user1.Id.ToString());

Assert.That(MongoCollection.Count(), Is.EqualTo(1));
Assert.That(MongoCollection.Count(new BsonDocument()), Is.EqualTo(1));

var users = MongoCollection
.FindAllAs<CachedItem>()
.Select(cachedItem => JsonSerializer.DeserializeFromString<UserFixture>(cachedItem.Value))
.AsQueryable()
.Select(cachedItem => cachedItem.Value)
.ToList();

Assert.That(users.First().Id, Is.Not.EqualTo(_user1.Id));
Assert.That(JsonSerializer.DeserializeFromString<UserFixture>(users.First()).Id, Is.Not.EqualTo(_user1.Id));
}
}
}
30 changes: 22 additions & 8 deletions WebAPI.OutputCache.MongoDb.Tests/MongoDbApiOutputCacheTestBase.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
using MongoDB.Driver;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;

namespace WebAPI.OutputCache.MongoDb.Tests
{
public class MongoDbApiOutputCacheTestsBase
{
protected MongoDatabase MongoDatabase;
protected MongoCollection MongoCollection;
protected IMongoDatabase MongoDatabase;
protected IMongoCollection<CachedItem> MongoCollection;

protected MongoDbApiOutputCache MongoDbApiOutputCache;

static MongoDbApiOutputCacheTestsBase()
{
if (!BsonClassMap.IsClassMapRegistered(typeof(CachedItem)))
BsonClassMap.RegisterClassMap<CachedItem>(cm =>
{
cm.MapIdField(x => x.Key);
cm.MapProperty(x => x.Value).SetElementName("value");
cm.MapProperty(x => x.ExpireAt).SetElementName("expireAt");
cm.MapField(x => x.ValueType).SetElementName("valueType");

cm.SetIgnoreExtraElements(true);
});
}

public MongoDbApiOutputCacheTestsBase()
{
var mongoUrl = new MongoUrl("mongodb://localhost/MongoDbApiOutputCache_Test");
var client = new MongoClient(mongoUrl);
var server = client.GetServer();
var mongoUrl = new MongoUrl("mongodb://localhost:27017/MongoDbApiOutputCache_Test");
var mongoClient = new MongoClient(mongoUrl);

MongoDatabase = server.GetDatabase(mongoUrl.DatabaseName);
MongoCollection = MongoDatabase.GetCollection("cache");
MongoDatabase = mongoClient.GetDatabase(mongoUrl.DatabaseName);
MongoCollection = MongoDatabase.GetCollection<CachedItem>("cache");

MongoDbApiOutputCache = new MongoDbApiOutputCache(MongoDatabase);
}
Expand Down
Loading