Esempio n. 1
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);
        }
        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);
        }