Beispiel #1
0
        public void ThrowIfCounterDoesntExist()
        {
            using (var store = GetDocumentStore())
            {
                var testDoc1 = new TestDoc
                {
                    Name = "Aviv"
                };

                using (var session = store.OpenSession())
                {
                    session.Store(testDoc1);
                    session.SaveChanges();
                }

                Assert.Throws <DocumentDoesNotExistException>(() =>
                {
                    store.Operations
                    .Send(new PatchOperation(testDoc1.Id, null, new PatchRequest
                    {
                        Script = @" incrementCounter('stam-id', 'dislikes', 100)"
                    }));
                });

                Assert.Throws <DocumentDoesNotExistException>(() =>
                {
                    store.Operations
                    .Send(new PatchOperation(testDoc1.Id, null, new PatchRequest
                    {
                        Script = @" deleteCounter('stam-id', 'dislikes')"
                    }));
                });
            }
        }
Beispiel #2
0
        public void DocumentWithUnicodeCharacterShouldNotHaveChangesOnLoad()
        {
            // compressed string case does not affect the comparison and should work as well
            var description = new string('\u0003', 4096);

            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    var doc = new TestDoc {
                        Id = "doc/1", Description = description
                    };
                    session.Store(doc);
                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    var doc = session.Load <TestDoc>("doc/1");

                    Assert.False(session.Advanced.HasChanges);
                    Assert.False(session.Advanced.HasChanged(doc));
                    Assert.True(doc.Description.Equals(description));
                }
            }
        }
Beispiel #3
0
        public void CanDeleteCounterFromAnotherDocument()
        {
            using (var store = GetDocumentStore())
            {
                var testDoc1 = new TestDoc
                {
                    Name = "Aviv"
                };

                var testDoc2 = new TestDoc
                {
                    Name = "Grisha"
                };

                using (var session = store.OpenSession())
                {
                    session.Store(testDoc1);
                    session.CountersFor(testDoc1).Increment("likes", 100);
                    session.CountersFor(testDoc1).Increment("dislikes", 200);
                    session.CountersFor(testDoc1).Increment("downloads", 600);
                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    session.Store(testDoc2);
                    session.CountersFor(testDoc2).Increment("likes", 1000);
                    session.CountersFor(testDoc2).Increment("dislikes", 2000);
                    session.CountersFor(testDoc2).Increment("downloads", 6000);
                    session.SaveChanges();
                }

                store.Operations
                .Send(new PatchOperation(testDoc1.Id, null, new PatchRequest
                {
                    Script = @" deleteCounter(args.id, 'dislikes')",
                    Values = new Dictionary <string, object>
                    {
                        { "id", testDoc2.Id }
                    }
                }));

                using (var session = store.OpenSession())
                {
                    var doc        = session.Load <TestDoc>(testDoc1.Id);
                    var mdCounters = session.Advanced.GetCountersFor(doc);

                    Assert.Equal(3, mdCounters.Count);

                    doc        = session.Load <TestDoc>(testDoc2.Id);
                    mdCounters = session.Advanced.GetCountersFor(doc);

                    Assert.Equal(2, mdCounters.Count);
                    var counters = session.CountersFor(doc).GetAll();
                    Assert.Equal(1000, counters["likes"]);
                    Assert.Equal(6000, counters["downloads"]);
                }
            }
        }
Beispiel #4
0
        public void CanModifyDocAndIncrementCounterInSameScript()
        {
            using (var store = GetDocumentStore())
            {
                var testDoc = new TestDoc
                {
                    CountByDay = new Dictionary <string, long>
                    {
                        { "2018-08-01T00:00:00.0000000", 120 },
                        { "2018-08-03T00:00:00.0000000", 40 }
                    }
                };

                using (var session = store.OpenSession())
                {
                    session.Store(testDoc);
                    session.SaveChanges();
                }

                store.Operations
                .Send(new PatchByQueryOperation(new IndexQuery
                {
                    Query = @"from TestDocs as doc
                                  update
                                  {
                                    var countByDay = doc.CountByDay;
                                    for(var i in countByDay) {
                                        incrementCounter(this, i, countByDay[i])
                                    };
                                    this.Name = 'Grisha';
                                  }"
                })).WaitForCompletion();

                using (var session = store.OpenSession())
                {
                    var doc        = session.Load <TestDoc>(testDoc.Id);
                    var mdCounters = session.Advanced.GetCountersFor(doc);

                    Assert.Equal(2, mdCounters.Count);
                    Assert.True(mdCounters.Contains("2018-08-01T00:00:00.0000000"));
                    Assert.True(mdCounters.Contains("2018-08-03T00:00:00.0000000"));

                    var counters = session.CountersFor(doc).GetAll();
                    Assert.Equal(2, counters.Count);
                    Assert.Equal(120, counters["2018-08-01T00:00:00.0000000"]);
                    Assert.Equal(40, counters["2018-08-03T00:00:00.0000000"]);

                    Assert.Equal("Grisha", doc.Name);
                }
            }
        }
Beispiel #5
0
        public void DocumentWithStringWithNullCharacterAtEndShouldNotHaveChangeOnLoad()
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    var doc = new TestDoc {
                        Id = "doc/1", DescriptionChar = 'a', Description = "TestString\0"
                    };
                    session.Store(doc);
                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    var doc = session.Load <TestDoc>("doc/1");
                    var t   = doc.Description;
                    Assert.False(session.Advanced.HasChanges);
                    Assert.False(session.Advanced.HasChanged(doc));
                }
            }
        }
Beispiel #6
0
        public void DocumentWithEmptyCharShouldNotHaveChangeOnLoad()
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    var doc = new TestDoc
                    {
                        Id = "doc/1",
                    };

                    session.Store(doc);
                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    var doc = session.Load <TestDoc>("doc/1");
                    Assert.False(session.Advanced.HasChanges);
                    Assert.False(session.Advanced.HasChanged(doc));
                }
            }
        }
Beispiel #7
0
        public void DocumentWithUnicodeCharacterShouldNotHaveChangesOnLoad(string description)
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    var doc = new TestDoc {
                        Id = "doc/1", Description = description
                    };
                    session.Store(doc);
                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    var doc = session.Load <TestDoc>("doc/1");

                    Assert.False(session.Advanced.HasChanges);
                    Assert.False(session.Advanced.HasChanged(doc));
                    Assert.True(doc.Description.Equals(description));
                }
            }
        }
Beispiel #8
0
        public void CanApplyCounterToAnotherDocument()
        {
            using (var store = GetDocumentStore())
            {
                var testDoc = new TestDoc
                {
                    CountByDay = new Dictionary <string, long>
                    {
                        { "2018-08-01T00:00:00.0000000", 120 },
                        { "2018-08-02T00:00:00.0000000", 120 },
                        { "2018-08-03T00:00:00.0000000", 40 },
                        { "2018-08-04T00:00:00.0000000", 65 },
                        { "2018-08-06T00:00:00.0000000", 35 },
                        { "2018-08-07T00:00:00.0000000", 120 },
                        { "2018-08-08T00:00:00.0000000", 120 },
                        { "2018-08-09T00:00:00.0000000", 120 },
                        { "2018-08-10T00:00:00.0000000", 120 },
                        { "2018-08-11T00:00:00.0000000", 120 },
                        { "2018-08-12T00:00:00.0000000", 120 },
                        { "2018-08-13T00:00:00.0000000", 117 },
                        { "2018-08-14T00:00:00.0000000", 120 },
                        { "2018-08-15T00:00:00.0000000", 120 },
                        { "2018-08-16T00:00:00.0000000", 120 },
                        { "2018-08-17T00:00:00.0000000", 120 },
                        { "2018-08-18T00:00:00.0000000", 120 },
                        { "2018-08-19T00:00:00.0000000", 120 },
                        { "2018-08-20T00:00:00.0000000", 120 },
                        { "2018-08-21T00:00:00.0000000", 120 },
                        { "2018-08-22T00:00:00.0000000", 120 },
                        { "2018-08-23T00:00:00.0000000", 120 },
                        { "2018-08-24T00:00:00.0000000", 121 },
                        { "2018-08-25T00:00:00.0000000", 120 },
                        { "2018-08-26T00:00:00.0000000", 120 },
                        { "2018-08-27T00:00:00.0000000", 80 }
                    }
                };

                using (var session = store.OpenSession())
                {
                    session.Store(testDoc);
                    session.SaveChanges();
                }

                store.Operations
                .Send(new PatchByQueryOperation(new IndexQuery
                {
                    Query = @"from TestDocs as doc
                                  update
                                  {
                                    var newDocId = 'newDocId';
                                    put(newDocId, doc);
                                    var countByDay = doc.CountByDay;
                                    for(var i in countByDay) {
                                        incrementCounter(newDocId, i, countByDay[i])
                                    }
                                  }"
                })).WaitForCompletion(TimeSpan.FromMinutes(5));

                using (var session = store.OpenSession())
                {
                    var doc        = session.Load <TestDoc>(testDoc.Id);
                    var mdCounters = session.Advanced.GetCountersFor(doc);
                    Assert.Null(mdCounters);

                    doc        = session.Load <TestDoc>("newDocId");
                    mdCounters = session.Advanced.GetCountersFor(doc);
                    Assert.Equal(testDoc.CountByDay.Count, mdCounters.Count);
                    foreach (var c in testDoc.CountByDay.Keys)
                    {
                        Assert.True(mdCounters.Contains(c));
                    }
                }
            }
        }
Beispiel #9
0
        public void AfterIncrementingMultipleCountersByScriptMetadataShouldHaveAllCountersNames()
        {
            using (var store = GetDocumentStore())
            {
                var testDoc = new TestDoc
                {
                    CountByDay = new Dictionary <string, long>
                    {
                        { "2018-08-01T00:00:00.0000000", 120 },
                        { "2018-08-02T00:00:00.0000000", 120 },
                        { "2018-08-03T00:00:00.0000000", 40 },
                        { "2018-08-04T00:00:00.0000000", 65 },
                        { "2018-08-06T00:00:00.0000000", 35 },
                        { "2018-08-07T00:00:00.0000000", 120 },
                        { "2018-08-08T00:00:00.0000000", 120 },
                        { "2018-08-09T00:00:00.0000000", 120 },
                        { "2018-08-10T00:00:00.0000000", 120 },
                        { "2018-08-11T00:00:00.0000000", 120 },
                        { "2018-08-12T00:00:00.0000000", 120 },
                        { "2018-08-13T00:00:00.0000000", 117 },
                        { "2018-08-14T00:00:00.0000000", 120 },
                        { "2018-08-15T00:00:00.0000000", 120 },
                        { "2018-08-16T00:00:00.0000000", 120 },
                        { "2018-08-17T00:00:00.0000000", 120 },
                        { "2018-08-18T00:00:00.0000000", 120 },
                        { "2018-08-19T00:00:00.0000000", 120 },
                        { "2018-08-20T00:00:00.0000000", 120 },
                        { "2018-08-21T00:00:00.0000000", 120 },
                        { "2018-08-22T00:00:00.0000000", 120 },
                        { "2018-08-23T00:00:00.0000000", 120 },
                        { "2018-08-24T00:00:00.0000000", 121 },
                        { "2018-08-25T00:00:00.0000000", 120 },
                        { "2018-08-26T00:00:00.0000000", 120 },
                        { "2018-08-27T00:00:00.0000000", 80 }
                    }
                };

                using (var session = store.OpenSession())
                {
                    session.Store(testDoc);
                    session.SaveChanges();
                }

                store.Operations
                .Send(new PatchByQueryOperation(new IndexQuery
                {
                    Query = @"from TestDocs as doc
                                  update
                                  {
                                    var countByDay = doc.CountByDay;
                                    for(var i in countByDay) {
                                        incrementCounter(this, i, countByDay[i])
                                    }
                                  }"
                })).WaitForCompletion();

                using (var session = store.OpenSession())
                {
                    var doc        = session.Load <TestDoc>(testDoc.Id);
                    var mdCounters = session.Advanced.GetCountersFor(doc);

                    Assert.Equal(testDoc.CountByDay.Count, mdCounters.Count);
                    foreach (var c in testDoc.CountByDay.Keys)
                    {
                        Assert.True(mdCounters.Contains(c));
                    }
                }
            }
        }
Beispiel #10
0
        public void DeletingCountersViaScriptShouldRemoveDeletedCountersNamesFromMetadata()
        {
            using (var store = GetDocumentStore())
            {
                var testDoc = new TestDoc
                {
                    Name = "Grisha"
                };


                using (var session = store.OpenSession())
                {
                    session.Store(testDoc);
                    session.CountersFor(testDoc).Increment("likes", 100);
                    session.CountersFor(testDoc).Increment("dislikes", 200);
                    session.CountersFor(testDoc).Increment("downloads", 600);
                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    var doc        = session.Load <TestDoc>(testDoc.Id);
                    var mdCounters = session.Advanced.GetCountersFor(doc);

                    Assert.Equal(3, mdCounters.Count);
                }

                store.Operations
                .Send(new PatchByQueryOperation(new IndexQuery
                {
                    Query = @"from TestDocs as doc
                                  update
                                  {
                                    deleteCounter(this, 'likes');
                                    deleteCounter(this, 'downloads');
                                  }"
                })).WaitForCompletion();

                using (var session = store.OpenSession())
                {
                    var doc        = session.Load <TestDoc>(testDoc.Id);
                    var mdCounters = session.Advanced.GetCountersFor(doc);

                    Assert.Equal(1, mdCounters.Count);
                    Assert.True(mdCounters.Contains("dislikes"));

                    var md = session.Advanced.GetMetadataFor(doc);
                    Assert.True(md.ContainsKey(Constants.Documents.Metadata.Counters));
                }

                store.Operations
                .Send(new PatchByQueryOperation(new IndexQuery
                {
                    Query = @"from TestDocs as doc
                                  update
                                  {
                                    deleteCounter(this, 'dislikes');
                                  }"
                })).WaitForCompletion();


                using (var session = store.OpenSession())
                {
                    var doc        = session.Load <TestDoc>(testDoc.Id);
                    var mdCounters = session.Advanced.GetCountersFor(doc);

                    Assert.Null(mdCounters);

                    var md = session.Advanced.GetMetadataFor(doc);
                    Assert.False(md.ContainsKey(Constants.Documents.Metadata.Counters));
                }
            }
        }