示例#1
0
        public void AddRangeToSet_AddToExistingSetData()
        {
            UseConnection(repository =>
            {
                var set1 = new RavenSet
                {
                    Id     = repository.GetId(typeof(RavenSet), "Set1"),
                    Scores = new Dictionary <string, double>
                    {
                        { "value1", 0.0 },
                        { "value2", 0.0 }
                    }
                };

                var set2 = new RavenSet
                {
                    Id     = repository.GetId(typeof(RavenSet), "Set2"),
                    Scores = new Dictionary <string, double>
                    {
                        { "value2", 0.0 }
                    }
                };

                using (var session = repository.OpenSession())
                {
                    session.Store(set1);
                    session.Advanced.AddExpire(set1, DateTime.UtcNow);
                    session.Store(set2);
                    session.Advanced.AddExpire(set2, DateTime.UtcNow);
                    session.SaveChanges();
                }

                var values = new[] { "test1", "test2", "test3" };
                Commit(repository, x => x.AddRangeToSet("Set1", values));

                using (var session = repository.OpenSession())
                {
                    var testSet1 = GetTestSet(session, set1.Id);
                    Assert.NotNull(testSet1);
                    Assert.Equal(5, testSet1.Scores.Count);

                    var testSet2 = GetTestSet(session, set2.Id);
                    Assert.NotNull(testSet2);
                    Assert.Equal(1, testSet2.Scores.Count);
                }
            });
        }
示例#2
0
        public void AddToSet_WithScore_AddsARecordWithScore_WhenBothKeyAndValueAreNotExist()
        {
            UseConnection(repository =>
            {
                Commit(repository, x => x.AddToSet("my-key", "my-value", 3.2));

                using (var session = repository.OpenSession())
                {
                    RavenSet record = session.Query <RavenSet>().Single();

                    var id = repository.GetId(typeof(RavenSet), "my-key");
                    Assert.Equal(id, record.Id);
                    Assert.Equal("my-value", record.Scores.Keys.Single());
                    Assert.Equal(3.2, record.Scores["my-value"], 3);
                }
            });
        }
示例#3
0
        public void AddToSet_AddsARecord_IfThereIsNo_SuchKeyAndValue()
        {
            UseConnection(repository =>
            {
                Commit(repository, x => x.AddToSet("my-key", "my-value"));

                using (var session = repository.OpenSession())
                {
                    RavenSet record = session.Query <RavenSet>().Single();

                    var id = repository.GetId(typeof(RavenSet), "my-key");
                    Assert.Equal(id, record.Id);
                    Assert.Equal("my-value", record.Scores.Keys.Single());
                    Assert.Equal(0.0, record.Scores["my-value"], 2);
                }
            });
        }
示例#4
0
        public void PersistSet_ClearsTheSetExpirationData()
        {
            UseConnection(repository =>
            {
                var set1 = new RavenSet
                {
                    Id     = repository.GetId(typeof(RavenSet), "Set1"),
                    Scores = new Dictionary <string, double>
                    {
                        { "value1", 0.0 }
                    }
                };

                var set2 = new RavenSet
                {
                    Id     = repository.GetId(typeof(RavenSet), "Set2"),
                    Scores = new Dictionary <string, double>
                    {
                        { "value2", 0.0 }
                    }
                };

                using (var session = repository.OpenSession())
                {
                    session.Store(set1);
                    session.Advanced.AddExpire(set1, DateTime.UtcNow);
                    session.Store(set2);
                    session.Advanced.AddExpire(set2, DateTime.UtcNow);
                    session.SaveChanges();
                }

                Commit(repository, x => x.PersistSet("Set1"));

                using (var session = repository.OpenSession())
                {
                    var testSet1 = GetTestSet(session, set1.Id);
                    var expireAt = session.Advanced.GetExpire(testSet1);
                    Assert.Null(expireAt);

                    var testSet2 = GetTestSet(session, set2.Id);
                    expireAt     = session.Advanced.GetExpire(testSet2);
                    Assert.NotNull(expireAt);
                }
            });
        }
示例#5
0
        public void AddToSet_WithScore_UpdatesAScore_WhenBothKeyAndValueAreExist()
        {
            UseConnection(repository =>
            {
                Commit(repository, x =>
                {
                    x.AddToSet("my-key", "my-value");
                    x.AddToSet("my-key", "my-value", 3.2);
                });

                using (var session = repository.OpenSession())
                {
                    RavenSet record = session.Query <RavenSet>().Single();

                    Assert.Equal(3.2, record.Scores["my-value"], 3);
                }
            });
        }
示例#6
0
        public void ExpireSet_SetsSetExpirationData()
        {
            UseConnection(repository =>
            {
                var set1 = new RavenSet
                {
                    Id     = repository.GetId(typeof(RavenSet), "Set1"),
                    Scores = new Dictionary <string, double>
                    {
                        { "value1", 0.0 }
                    }
                };

                var set2 = new RavenSet
                {
                    Id     = repository.GetId(typeof(RavenSet), "Set2"),
                    Scores = new Dictionary <string, double>
                    {
                        { "value2", 0.0 }
                    }
                };

                using (var session = repository.OpenSession())
                {
                    session.Store(set1);
                    session.Store(set2);
                    session.SaveChanges();
                }

                Commit(repository, x => x.ExpireSet("Set1", TimeSpan.FromDays(1)));

                using (var session = repository.OpenSession())
                {
                    var testSet1 = GetTestSet(session, set1.Id);
                    var expireAt = session.Advanced.GetExpire(testSet1);
                    Assert.True(DateTime.UtcNow.AddMinutes(-1) < expireAt && expireAt <= DateTime.UtcNow.AddDays(1));

                    var testSet2 = GetTestSet(session, set2.Id);
                    Assert.NotNull(testSet2);
                    expireAt = session.Advanced.GetExpire(testSet2);
                    Assert.Null(expireAt);
                }
            });
        }
示例#7
0
        public void AddToSet_DoesNotAddARecord_WhenBothKeyAndValueAreExist()
        {
            UseConnection(repository =>
            {
                Commit(repository, x =>
                {
                    x.AddToSet("my-key", "my-value");
                    x.AddToSet("my-key", "my-value");
                });

                using (var session = repository.OpenSession())
                {
                    RavenSet record = session.Query <RavenSet>().Single();
                    var recordCount = record.Scores.Count;

                    Assert.Equal(1, recordCount);
                }
            });
        }
示例#8
0
        public void AddToSet_AddsARecord_WhenKeyIsExists_ButValuesAreDifferent()
        {
            UseConnection(repository =>
            {
                Commit(repository, x =>
                {
                    x.AddToSet("my-key", "my-value");
                    x.AddToSet("my-key", "another-value");
                });

                using (var session = repository.OpenSession())
                {
                    RavenSet record = session.Query <RavenSet>().Single();
                    var recordCount = record.Scores.Count;

                    Assert.Equal(2, recordCount);
                }
            });
        }
        public override void AddToSet(string key, string value, double score)
        {
            using (var repository = new Repository()) {
                var set = repository.Session.Query <RavenSet>().FirstOrDefault(t => t.Key == key && t.Value == value);

                if (set == null)
                {
                    set = new RavenSet
                    {
                        Id    = Guid.NewGuid().ToString(),
                        Key   = key,
                        Value = value
                    };
                }

                set.Score = score;

                repository.Save(set);
            }
        }