Exemplo n.º 1
0
        public void CanDoScriptedPatching()
        {
            using (var store = GetDocumentStore())
            {
                store.DatabaseCommands.Put(
                    "posts/1",
                    null,
                    RavenJObject.FromObject(new Post
                    {
                        Title = "Post 1",
                        Comments = new Post[] { }
                    }),
                    new RavenJObject());

                var comment = new Post
                {
                    Title = "comment 1"
                };

                store.DatabaseCommands.Patch(
                    "posts/1",
                    new ScriptedPatchRequest()
                    {
                        Script = @"this.Comments.push(comment1)",
                        Values = { { "comment1", comment } }
                    });
                var result = store.DatabaseCommands.Get("posts/1");
                var comments = result.DataAsJson.Value<RavenJArray>("Comments");
                Assert.Equal(1, comments.Length);
                Assert.Equal("comment 1", comments[0].Value<string>("Title"));


                store.DatabaseCommands.Put(
                    "posts/2",
                    null,
                    RavenJObject.FromObject(new Post
                    {
                        Title = "Post 2",
                        AttachmentIds = new string[] { "id1", "id2" }
                    }),
                    new RavenJObject());

                store.DatabaseCommands.Patch(
                    "posts/2",
                    new ScriptedPatchRequest()
                    {
                        Script = @"this.AttachmentIds.Remove(tagToRemove)",
                        Values = { { "tagToRemove", "id2" } }
                    });
                result = store.DatabaseCommands.Get("posts/2");
                Assert.Equal(1, result.DataAsJson.Value<RavenJArray>("AttachmentIds").Length);
                Assert.Equal("id1", result.DataAsJson.Value<RavenJArray>("AttachmentIds")[0]);


                store.DatabaseCommands.Patch(
                    "posts/1",
                    new ScriptedPatchRequest()
                    {
                        Script = @"
                            this.Comments.RemoveWhere(function(comment) {
                                return comment.Title === 'comment 1';
                            });",
                    });
                result = store.DatabaseCommands.Get("posts/1");
                comments = result.DataAsJson.Value<RavenJArray>("Comments");
                Assert.Equal(0, comments.Length);


                var comment1 = new Post
                {
                    Title = "Comment 1",
                    Desc = "Some post without searched phrase inside."
                };
                var comment2 = new Post
                {
                    Title = "Comment 2",
                    Desc = "Some post with Raven phrase inside."
                };

                store.DatabaseCommands.Put(
                    "posts/3",
                    null,
                    RavenJObject.FromObject(new Post
                    {
                        Title = "Post 3",
                        Comments = new Post[] { comment1, comment2 }
                    }),
                    new RavenJObject());
                store.DatabaseCommands.Patch(
                    "posts/3",
                    new ScriptedPatchRequest()
                    {
                        Script = @"
                            this.Comments.Map(function(comment) {  
                                if(comment.Desc.indexOf(""Raven"") != -1)
                                {
                                    comment.Title = ""[Raven] "" + comment.Title;
                                }
                                return comment;
                            });
                        "
                    });
                result = store.DatabaseCommands.Get("posts/3");
                comments = result.DataAsJson.Value<RavenJArray>("Comments");
                Assert.Equal(2, comments.Length);
                Assert.Equal("Comment 1", comments[0].Value<string>("Title"));
                Assert.Equal("[Raven] Comment 2", comments[1].Value<string>("Title"));


                store.DatabaseCommands.Put(
                    "posts/4",
                    null,
                    RavenJObject.FromObject(new Post
                    {
                        Title = "Post 4",
                        AttachmentIds = new string[] { "posts/5" }
                    }),
                    new RavenJObject());
                store.DatabaseCommands.Put(
                    "posts/5",
                    null,
                    RavenJObject.FromObject(new Post
                    {
                        Title = "Post 5"
                    }),
                    new RavenJObject());
                store.DatabaseCommands.Patch(
                    "posts/4",
                    new ScriptedPatchRequest()
                    {
                        Script = @"
                            var loaded = LoadDocument(this.AttachmentIds[0]);
                            this.Title = loaded.Title;
                        "
                    });
                result = store.DatabaseCommands.Get("posts/4");
                Assert.Equal("Post 5", result.DataAsJson.Value<string>("Title"));


                var output = store.DatabaseCommands.Patch(
                    "posts/4",
                    new ScriptedPatchRequest()
                    {
                        Script = @"
                            var loaded = LoadDocument(this.AttachmentIds[0]);
                            this.Title = loaded.Title;
                            output(this.Title); 
                        "
                    });
                var debugInfo = output.Value<RavenJArray>("Debug");
                Assert.Equal("Post 5", debugInfo[0]);

                store.DatabaseCommands.Patch(
                    "posts/4",
                    new ScriptedPatchRequest()
                    {
                        Script = @"
                            PutDocument('posts/4',
                                { 'Title' : 'new title' }
                            );"
                    });
                var post = store.DatabaseCommands.Get("posts/4");
                Assert.NotNull(post);
                Assert.Equal("new title", post.DataAsJson.Value<string>("Title"));
            }
        }
Exemplo n.º 2
0
        public void CreateAndQuerySimpleIndexWithRecurse()
        {
            using (var store = GetDocumentStore())
            {
                new Posts_Recurse().Execute(store);

                using (var session = store.OpenSession())
                {
                    var post1 = new Post { Title = "Post1", Desc = "Post1 desc" };
                    var post2 = new Post { Title = "Post2", Desc = "Post2 desc", Comments = new Post[] {post1} };
                    var post3 = new Post { Title = "Post3", Desc = "Post3 desc", Comments = new Post[] {post2} };
                    var post4 = new Post { Title = "Post4", Desc = "Post4 desc", Comments = new Post[] {post3} };
                    session.Store(post4);
                    session.SaveChanges();
                    WaitForIndexing(store);

                    var posts = session.Query<Post, Posts_Recurse>()
                        .ToArray();
                    Assert.Equal(1, posts.Length);
                    Assert.Equal("Post4", posts[0].Title);
                    Assert.Equal("Post3", posts[0].Comments[0].Title);
                    Assert.Equal("Post2", posts[0].Comments[0].Comments[0].Title);
                    Assert.Equal("Post1", posts[0].Comments[0].Comments[0].Comments[0].Title);
                }
            }
        }