Esempio n. 1
0
        private static void Execute(object sender, EventArgs e)
        {
            var logger = LogManager.GetTraceLogger("WEBJOB");
            logger.Trace(new TraceLogMessage(new {Command = "Execution Start"}, "Elasticsearch"));
            var sw = Stopwatch.StartNew();

            var indexedItemCount = 0;
            try
            {
                var itemDbCommand = new ItemDbCommand(ConnectionString);
                var notIndexedItems = itemDbCommand.GetNotIndexedItemsAsync().Result;
                indexedItemCount = notIndexedItems.Count();

                var searchSearvice = new SearchService(ConnectionString);
                searchSearvice.BulkItemsAsync(notIndexedItems).Wait();
            }
            catch (Exception exception)
            {
                logger.Error(exception);
            }

            sw.Stop();
            logger.Trace(
                new TraceLogMessage(
                    new { itemDbCommand = "Execution End", IndexedItemCount = indexedItemCount },
                    "Elasticsearch",
                    sw.ElapsedMilliseconds));
        }
        public async Task 異常系_共同編集者以外が記事を更新()
        {
            var draft = Draft.NewDraft(_author, ItemType.Article);

            draft.Title = "共同編集テスト_共同編集者以外が記事を更新";
            draft.Body  = "共同編集テスト_共同編集者以外が記事を更新";

            var item = draft.ToItem(true);
            await ItemDbCommand.SaveAsync(item);

            var collaborator1 = new Collaborator(_collaborator1)
            {
                Role = RoleType.Owner
            };
            var collaborator2 = new Collaborator(_collaborator2)
            {
                Role = RoleType.Member
            };
            var collaborator3 = new Collaborator(_collaborator3)
            {
                Role = RoleType.Member
            };
            var collaborators = new[] { collaborator1, collaborator2 };
            await ItemDbCommand.SaveCollaboratorsAsync(item, collaborators);

            try
            {
                var newDraft = item.ToDraft(collaborator3);
            }
            catch (Exception exception)
            {
                Assert.AreEqual(exception.GetType(), typeof(NotEntitledToEditItemException));
            }
        }
        public async Task 正常系_共同編集者のロールを変更()
        {
            var draft = Draft.NewDraft(_author, ItemType.Article);

            draft.Title = "共同編集テスト_共同編集者のロールを変更";
            draft.Body  = "共同編集テスト_共同編集者のロールを変更";

            var item = draft.ToItem(true);
            await ItemDbCommand.SaveAsync(item);

            var collaborator1 = new Collaborator(_collaborator1)
            {
                Role = RoleType.Member
            };
            var collaborator2 = new Collaborator(_collaborator2)
            {
                Role = RoleType.Member
            };
            var collaborator3 = new Collaborator(_collaborator3)
            {
                Role = RoleType.Member
            };
            var collaborators = new[] { collaborator1, collaborator2, collaborator3 };
            await ItemDbCommand.SaveCollaboratorsAsync(item, collaborators);

            collaborator1.Role = RoleType.Owner;
            await ItemDbCommand.SaveCollaboratorsAsync(item);

            var savedItem = await ItemDbCommand.FindAsync(item.Id);

            item.IsStructuralEqual(savedItem);

            savedItem.Collaborators.ToArray().IsStructuralEqual(new[] { collaborator1, collaborator2, collaborator3 });
        }
Esempio n. 4
0
        public async Task 正常系_作成とIDでの抽出_公開記事()
        {
            var draft = Draft.NewDraft(LogonUser, ItemType.Article);

            draft.Title = "title 正常系_作成とIDでの抽出_公開記事";
            draft.Body  = "body 正常系_作成とIDでの抽出_公開記事";
            draft.Tags.Add(new Tag("tag1", "1.0.0"));
            draft.Tags.Add(new Tag("tag2", null));

            var item = draft.ToItem(true);

            await ItemDbCommand.SaveAsync(item);

            var created = await ItemDbCommand.FindAsync(item.Id);

            created.IsStructuralEqual(item);
            Assert.AreEqual(draft.Id, created.Id);
            Assert.AreEqual(draft.Title, created.Title);
            Assert.AreEqual(draft.Body, created.Body);
            created.Author.IsStructuralEqual(draft.Author);
        }
        public async Task 正常系_共同編集者が記事を更新()
        {
            var draft = Draft.NewDraft(_author, ItemType.Article);

            draft.Title = "共同編集テスト_共同編集者が記事を更新";
            draft.Body  = "共同編集テスト_共同編集者が記事を更新";

            var item = draft.ToItem(true);
            await ItemDbCommand.SaveAsync(item);

            var collaborator1 = new Collaborator(_collaborator1)
            {
                Role = RoleType.Owner
            };
            var collaborator2 = new Collaborator(_collaborator2)
            {
                Role = RoleType.Member
            };
            var collaborators = new[] { collaborator1, collaborator2 };
            await ItemDbCommand.SaveCollaboratorsAsync(item, collaborators);

            var newDraft = item.ToDraft(_collaborator1);

            newDraft.Title = "共同編集テスト_共同編集者が記事を更新した";
            newDraft.Body  = "共同編集テスト_共同編集者が記事を更新した";

            var newItem = newDraft.ToItem(true);

            await ItemDbCommand.SaveAsync(newItem);

            newItem.Author.Is(_author);
            newItem.Editor.Is(_collaborator1);

            var savedItem = await ItemDbCommand.FindAsync(newItem.Id);

            savedItem.IsStructuralEqual(newItem);
        }
Esempio n. 6
0
        public async Task 正常系_公開記事_作成と修正()
        {
            var draft = Draft.NewDraft(LogonUser, ItemType.Article);

            draft.Title = "title 正常系_作成と修正";
            draft.Body  = "body 正常系_作成と修正";
            draft.Tags.Add(new Tag("tag1", "1.0.0"));
            draft.Tags.Add(new Tag("tag2", null));

            await DraftDbCommand.SaveAsync(draft);

            var savedDraft = await DraftDbCommand.FindAsync(draft.Id);

            savedDraft.CurrentRevisionNo.Is(-1);

            savedDraft.Title = "title 正常系_作成と修正 公開";
            savedDraft.Body  = "body 正常系_作成と修正 公開";

            var item = savedDraft.ToItem(true);

            item.RevisionNo.Is(0);

            await ItemDbCommand.SaveAsync(item);

            var savedItem = await ItemDbCommand.FindAsync(item.Id);

            savedItem.IsStructuralEqual(item);
            Assert.AreEqual(savedDraft.Id, savedItem.Id);
            Assert.AreEqual(savedDraft.Title, savedItem.Title);
            Assert.AreEqual(savedDraft.Body, savedItem.Body);
            savedItem.Author.IsStructuralEqual(savedDraft.Author);
            savedItem.RevisionNo.Is(0);
            savedItem.RevisionCount.Is(1);

            var updateDraft = item.ToDraft();

            updateDraft.CurrentRevisionNo.Is(0);

            updateDraft.Title   = "title 正常系_作成と修正 公開 修正";
            updateDraft.Body    = "body 正常系_作成と修正 公開 修正";
            updateDraft.Comment = "変更";

            await DraftDbCommand.SaveAsync(updateDraft);

            var updatedDraft = await DraftDbCommand.FindAsync(updateDraft.Id);

            updatedDraft.IsStructuralEqual(updateDraft);
            updatedDraft.CurrentRevisionNo.Is(0);
            updatedDraft.Title.Is(updateDraft.Title);
            updatedDraft.Tags.IsStructuralEqual(updateDraft.Tags);
            updatedDraft.Body.Is(updateDraft.Body);
            updatedDraft.Comment.Is(updateDraft.Comment);
            updatedDraft.Author.IsStructuralEqual(updateDraft.Author);

            var updateItem = updatedDraft.ToItem();

            updateItem.RevisionNo.Is(1);

            await ItemDbCommand.SaveAsync(updateItem);

            var updatedItem = await ItemDbCommand.FindAsync(updateItem.Id);

            updatedItem.IsStructuralEqual(updateItem);
            Assert.AreEqual(updatedDraft.Id, updatedItem.Id);
            Assert.AreEqual(updatedDraft.Title, updatedItem.Title);
            Assert.AreEqual(updatedDraft.Body, updatedItem.Body);
            updatedItem.Author.IsStructuralEqual(updatedDraft.Author);
            updatedItem.RevisionNo.Is(1);
            updatedItem.RevisionCount.Is(2);
        }
Esempio n. 7
0
        public async Task RecreateEsIndexAsync(CancellationToken cancellationToken)
        {
            #region IndexParameters
            var indexparameters = new
            {
                index = new
                {
                    analysis = new
                    {
                        filter = new
                        {
                            kuromoji_rf = new
                            {
                                type = "kuromoji_readingform",
                                use_romaji = true
                            },
                            kuromoji_pos = new
                            {
                                type = "kuromoji_part_of_speech",
                                enable_position_increment = false,
                                stoptags = new[] {"# verb-main:", "動詞-自立", "助詞-格助詞-一般", "助詞-終助詞"}
                            },
                            kuromoji_ks = new
                            {
                                type = "kuromoji_stemmer",
                                minimum_length = 5
                            },
                            greek_lowercase_filter = new
                            {
                                type = "lowercase",
                                language = "greek"
                            }
                        }
                    },
                    tokenizer = new
                    {
                        kuromoji = new
                        {
                            type = "kuromoji_tokenizer"
                        }
                    },
                    analyzer = new
                    {
                        kuromoji_analyzer = new
                        {
                            type = "custom",
                            tokenizer = "kuromoji_tokenizer",
                            filter =
                                new[]
                                {
                                    "kuromoji_baseform", "kuromoji_ks", "kuromoji_pos", "greek_lowercase_filter",
                                    "cjk_width"
                                }
                        }
                    }
                }
            };
            #endregion

            var node = new Uri(_config.ElasticsearchNode);
            var createContentJson = JsonConvert.SerializeObject(indexparameters);

            using (var createContent = new StringContent(createContentJson))
            using (var client = new HttpClient {BaseAddress = node})
            {
                await client.DeleteAsync(_config.ElasticsearchIndex, cancellationToken).ConfigureAwait(false);

                using (
                    var res =
                        await
                            client.PutAsync(_config.ElasticsearchIndex, createContent, cancellationToken)
                                .ConfigureAwait(false))
                {
                    res.EnsureSuccessStatusCode();
                }
            }

            var itemDbCommand = new ItemDbCommand(_connectionString);
            var items = await itemDbCommand.GetAllAsync(cancellationToken).ConfigureAwait(false);

            await BulkItemsAsync(items, cancellationToken).ConfigureAwait(false);
        }
        public async Task 正常系_他の人が編集中の下書きを別の人が呼び出して記事を更新()
        {
            var draft = Draft.NewDraft(_author, ItemType.Article);

            draft.Title = "共同編集テスト_他の人が編集中の下書きを別の人が呼び出して記事を更新";
            draft.Body  = "共同編集テスト_他の人が編集中の下書きを別の人が呼び出して記事を更新";

            var item = draft.ToItem(true);
            await ItemDbCommand.SaveAsync(item);

            var collaborator1 = new Collaborator(_collaborator1)
            {
                Role = RoleType.Owner
            };
            var collaborator2 = new Collaborator(_collaborator2)
            {
                Role = RoleType.Member
            };
            var collaborator3 = new Collaborator(_collaborator3)
            {
                Role = RoleType.Member
            };
            var collaborators = new[] { collaborator1, collaborator2, collaborator3 };
            await ItemDbCommand.SaveCollaboratorsAsync(item, collaborators);

            var collaborator1Draft = item.ToDraft(_collaborator1);

            collaborator1Draft.Title = "共同編集テスト_共同編集者①が記事を編集中";
            collaborator1Draft.Body  = "共同編集テスト_共同編集者①が記事を編集中";

            await DraftDbCommand.SaveAsync(collaborator1Draft);

            // 共同編集者②が下書きを呼び出して下書きを更新
            var collaborator2Draft = await DraftDbCommand.FindAsync(item.Id, _collaborator2);

            collaborator2Draft.IsNull();
            collaborator2Draft       = item.ToDraft(_collaborator2);
            collaborator2Draft.Title = "共同編集テスト_共同編集者②が記事を編集中";
            collaborator2Draft.Body  = "共同編集テスト_共同編集者②が記事を編集中";

            await DraftDbCommand.SaveAsync(collaborator2Draft);

            var savedCollaborator2Draft = await DraftDbCommand.FindAsync(item.Id, _collaborator2);

            savedCollaborator2Draft.IsStructuralEqual(collaborator2Draft);

            // 共同編集者③が下書きを呼び出して下書きを更新
            var collaborator3Draft = await DraftDbCommand.FindAsync(item.Id, _collaborator3);

            collaborator3Draft.IsNull();

            collaborator3Draft       = item.ToDraft(_collaborator3);
            collaborator3Draft.Title = "共同編集テスト_共同編集者③が記事を編集";
            collaborator3Draft.Body  = "共同編集テスト_共同編集者③が記事を編集";

            var collaborator3Item = collaborator3Draft.ToItem();

            await ItemDbCommand.SaveAsync(collaborator3Item);

            var savedCollaborator3Item = await ItemDbCommand.FindAsync(item.Id);

            savedCollaborator3Item.Author.Is(_author);
            savedCollaborator3Item.Editor.Is(_collaborator3);
            savedCollaborator3Item.IsStructuralEqual(collaborator3Item);
        }