public ActionResult AdminReply(Reply reply)
        {
            ReplyRepository repoRep = new ReplyRepository();

            reply.User_ID = 1;
            repoRep.Insert(reply);
            return(Redirect("~/Home/Details" + reply.Article_ID));
        }
Beispiel #2
0
        public async Task Delete_ReplyNotFound_DoesNotAttemptToDeleteReply()
        {
            A.CallTo(() => ReplyRepository.Read(1)).Returns(null as Reply);

            await ReplyService.Delete(1);

            A.CallTo(() => ReplyRepository.Delete(A <Reply> .Ignored))
            .MustNotHaveHappened();
        }
Beispiel #3
0
        public async Task Read_EverythingOk_ReturnsReply()
        {
            var reply = new Reply();

            A.CallTo(() => ReplyRepository.Read(1)).Returns(reply);

            var response = await ReplyService.Read(1);

            Assert.Equal(reply, response);
        }
        public IHttpActionResult Delete(int id)
        {
            ReplyRepository r       = new ReplyRepository();
            var             replist = con.Replies.Where(x => x.ComID == id).ToList();

            foreach (var x in replist)
            {
                r.Delete(x.ReplyId);
            }
            cr.Delete(id);
            return(StatusCode(HttpStatusCode.NoContent));
        }
Beispiel #5
0
        public async Task Delete_Unauthorized_DoesNotAttemptToDeleteReply()
        {
            var reply = new Reply();

            A.CallTo(() => ReplyRepository.Read(1)).Returns(reply);
            A.CallTo(() => User.Is(reply.UserId)).Returns(false);

            await ReplyService.Delete(1);

            A.CallTo(() => ReplyRepository.Delete(A <Reply> .Ignored))
            .MustNotHaveHappened();
        }
Beispiel #6
0
        public async Task Delete_EverythingOk_DeletesReply()
        {
            var reply = new Reply();

            A.CallTo(() => ReplyRepository.Read(1)).Returns(reply);
            A.CallTo(() => User.Is(reply.UserId)).Returns(true);

            await ReplyService.Delete(1);

            A.CallTo(() => ReplyRepository.Delete(reply))
            .MustHaveHappenedOnceExactly();
        }
Beispiel #7
0
        public async Task List_ReturnsAll()
        {
            var replies = new List <Reply>
            {
                new Reply {
                    Id = 1
                },
                new Reply {
                    Id = 2
                }
            };

            A.CallTo(() => ReplyRepository.List(1)).Returns(replies);

            var response = await ReplyService.List(1);

            Assert.Equal(2, response.Count);
        }
Beispiel #8
0
        public async Task Create_PostDoesNotExist_DoesNotCreateReply()
        {
            var create = new CreateReply();
            var reply  = new Reply {
                Content = "Content"
            };
            const string userId = "User id";

            A.CallTo(() => Mapper.Map <Reply>(create)).Returns(reply);
            A.CallTo(() => User.Exists()).Returns(true);
            A.CallTo(() => PostService.Read(1)).Returns(null as Post);
            A.CallTo(() => User.Id()).Returns(userId);

            var response = await ReplyService.Create(1, create);

            Assert.Null(response);
            A.CallTo(() => ReplyRepository.Create(A <Reply> .Ignored))
            .MustNotHaveHappened();
        }
Beispiel #9
0
        public async Task Create_Unauthenticated_DoesNotCreateReply()
        {
            var create = new CreateReply();
            var reply  = new Reply {
                Content = "Content"
            };
            var post = new Post {
                Id = 1
            };

            A.CallTo(() => Mapper.Map <Reply>(create)).Returns(reply);
            A.CallTo(() => User.Exists()).Returns(false);
            A.CallTo(() => PostService.Read(1)).Returns(post);

            var response = await ReplyService.Create(1, create);

            Assert.Null(response);
            A.CallTo(() => ReplyRepository.Create(A <Reply> .Ignored))
            .MustNotHaveHappened();
        }
Beispiel #10
0
        public async Task Update_UserDoesNotOwnReply_DoesNotAttemptUpdate()
        {
            var oldReply = new Reply {
                Id = 1
            };
            var update = new UpdateReply();
            var reply  = new Reply
            {
                Id      = 1,
                Content = "hello"
            };

            A.CallTo(() => ReplyRepository.Read(1)).Returns(oldReply);
            A.CallTo(() => Mapper.Map(update, oldReply)).Returns(reply);
            A.CallTo(() => User.Is(oldReply.UserId)).Returns(false);

            await ReplyService.Update(oldReply.Id, update);

            A.CallTo(() => ReplyRepository.Update(A <Reply> .Ignored))
            .MustNotHaveHappened();
        }
Beispiel #11
0
        public async Task Update_EverythingOk_UpdatesReply()
        {
            var oldReply = new Reply {
                Id = 1
            };
            var update = new UpdateReply();
            var reply  = new Reply
            {
                Id      = 1,
                Content = "hello"
            };

            A.CallTo(() => ReplyRepository.Read(1)).Returns(oldReply);
            A.CallTo(() => Mapper.Map(update, oldReply)).Returns(reply);
            A.CallTo(() => User.Is(oldReply.UserId)).Returns(true);

            await ReplyService.Update(oldReply.Id, update);

            A.CallTo(() => ReplyRepository.Update(A <Reply> .That.Matches(r =>
                                                                          r.Id == reply.Id &&
                                                                          r.Content == reply.Content
                                                                          ))).MustHaveHappenedOnceExactly();
        }
Beispiel #12
0
        public async Task Create_EverythingOk_CreatesReply()
        {
            const string userId = "User id";
            var          create = new CreateReply();
            var          reply  = new Reply {
                Content = "Content"
            };
            var post = new Post {
                Id = 1
            };

            A.CallTo(() => User.Exists()).Returns(true);
            A.CallTo(() => Mapper.Map <Reply>(create)).Returns(reply);
            A.CallTo(() => User.Id()).Returns(userId);
            A.CallTo(() => PostService.Read(1)).Returns(post);

            await ReplyService.Create(1, create);

            A.CallTo(() => ReplyRepository.Create(A <Reply> .That.Matches(r =>
                                                                          r.Content == reply.Content &&
                                                                          r.UserId == userId &&
                                                                          r.Post.Id == post.Id
                                                                          ))).MustHaveHappenedOnceExactly();
        }
Beispiel #13
0
 public ReplyController(ReplyRepository replyRepository, NotificationsIOSRepository _notifications)
 {
     this._replyRepository = replyRepository;
     this._notifications   = _notifications;
 }
Beispiel #14
0
        private string GetResponseForText(Account currentAccount, Dictionary<string, string> dicParams)
        {
            if (!dicParams.ContainsKey("ToUserName")) throw new Exception("没有获取到ToUserName");
            if (!dicParams.ContainsKey("FromUserName")) throw new Exception("没有获取到FromUserName");
            if (!dicParams.ContainsKey("Content")) throw new Exception("没有获取到Content");

            var replyRepository = new ReplyRepository();
            Reply reply = replyRepository.GetReply(currentAccount.ID, dicParams["Content"], EnumKeyType.Keyword);

            BaseReply returnReply;
            switch (reply.Message.Type)
            {
                case (int)EnumReplyType.TextReply:
                    returnReply = new TextReply { Content = reply.Message.Content };
                    break;
                case (int)EnumReplyType.ArticleReply:
                    returnReply = new ArticleReply
                    {
                        Articles = JsonConvert.DeserializeObject<List<ArticleReplyItem>>(reply.Message.Content)
                    };
                    break;
                default:
                    return null;
            }

            returnReply.FromUserName = dicParams["ToUserName"];
            returnReply.ToUserName = dicParams["FromUserName"];

            return returnReply.GetXmlString();
        }
Beispiel #15
0
 public QuestionsController(QuestionRepository questionRepository, ReplyRepository replyRepository)
 {
     _questionRepository = questionRepository;
     _replyRepository    = replyRepository;
 }
Beispiel #16
0
        public async Task ReplyRepositoryAllMethodTest()
        {
            #region [0] DbContextOptions<T> Object Creation and ILoggerFactory Object Creation
            //[0] DbContextOptions<T> Object Creation and ILoggerFactory Object Creation
            var options = new DbContextOptionsBuilder <ReplyAppDbContext>()
                          .UseInMemoryDatabase(databaseName: $"ReplyApp{Guid.NewGuid()}").Options;
            //.UseSqlServer("server=(localdb)\\mssqllocaldb;database=ReplyApp;integrated security=true;").Options;

            var serviceProvider = new ServiceCollection().AddLogging().BuildServiceProvider();
            var factory         = serviceProvider.GetService <ILoggerFactory>();
            #endregion

            #region [1] AddAsync() Method Test
            //[1] AddAsync() Method Test
            //[1][1] Repository 클래스를 사용하여 저장
            using (var context = new ReplyAppDbContext(options))
            {
                context.Database.EnsureCreated(); // 데이터베이스가 만들어져 있는지 확인

                //[A] Arrange: 1번 데이터를 아래 항목으로 저장합니다.
                var repository = new ReplyRepository(context, factory);
                var model      = new Reply {
                    Name = "[1] 관리자", Title = "Q&A입니다.", Content = "내용입니다.", ParentId = 1, ParentKey = "1"
                };

                //[B] Act: AddAsync() 메서드 테스트
                await repository.AddAsync(model); // Id: 1
            }
            //[1][2] DbContext 클래스를 통해서 개수 및 레코드 확인
            using (var context = new ReplyAppDbContext(options))
            {
                //[C] Assert: 현재 총 데이터 개수가 1개인 것과, 1번 데이터의 이름이 "[1] 관리자"인지 확인합니다.
                Assert.AreEqual(1, await context.Replys.CountAsync());

                var model = await context.Replys.Where(n => n.Id == 1).SingleOrDefaultAsync();

                Assert.AreEqual("[1] 관리자", model.Name);
            }
            #endregion

            #region [2] GetAllAsync() Method Test
            //[2] GetAllAsync() Method Test
            using (var context = new ReplyAppDbContext(options))
            {
                // 트랜잭션 관련 코드는 InMemoryDatabase 공급자에서는 지원 X
                // using (var transaction = context.Database.BeginTransaction()) { transaction.Commit(); }

                //[A] Arrange
                var repository = new ReplyRepository(context, factory);
                var model      = new Reply {
                    Name = "[2] 홍길동", Title = "Q&A입니다.", Content = "내용입니다."
                };

                //[B] Act
                await repository.AddAsync(model);                                                                            // Id: 2

                await repository.AddAsync(new Reply { Name = "[3] 백두산", Title = "Q&A입니다.", ParentId = 3, ParentKey = "1" }); // Id: 3
            }
            using (var context = new ReplyAppDbContext(options))
            {
                //[C] Assert
                var repository = new ReplyRepository(context, factory);
                var models     = await repository.GetAllAsync();

                Assert.AreEqual(3, models.Count()); // TotalRecords: 3
            }
            #endregion

            #region [3] GetByIdAsync() Method Test
            //[3] GetByIdAsync() Method Test
            using (var context = new ReplyAppDbContext(options))
            {
                // Empty
            }
            using (var context = new ReplyAppDbContext(options))
            {
                var repository = new ReplyRepository(context, factory);
                var model      = await repository.GetByIdAsync(2);

                Assert.IsTrue(model.Name.Contains("길동"));
                Assert.AreEqual("[2] 홍길동", model.Name);
            }
            #endregion

            #region [4] EditAsync() Method Test
            //[4] EditAsync() Method Test
            using (var context = new ReplyAppDbContext(options))
            {
                // Empty
            }
            using (var context = new ReplyAppDbContext(options))
            {
                var repository = new ReplyRepository(context, factory);
                var model      = await repository.GetByIdAsync(2);

                model.Name = "[2] 임꺽정"; // Modified
                await repository.EditAsync(model);

                var updateModel = await repository.GetByIdAsync(2);

                Assert.IsTrue(updateModel.Name.Contains("꺽정"));
                Assert.AreEqual("[2] 임꺽정", updateModel.Name);
                Assert.AreEqual("[2] 임꺽정",
                                (await context.Replys.Where(m => m.Id == 2).SingleOrDefaultAsync())?.Name);
            }
            #endregion

            #region [5] DeleteAsync() Method Test
            //[5] DeleteAsync() Method Test
            using (var context = new ReplyAppDbContext(options))
            {
                // Empty
            }
            using (var context = new ReplyAppDbContext(options))
            {
                var repository = new ReplyRepository(context, factory);
                await repository.DeleteAsync(2);

                Assert.AreEqual(2, (await context.Replys.CountAsync()));
                Assert.IsNull(await repository.GetByIdAsync(2));
            }
            #endregion

            #region [6] GetAllAsync(PagingAsync)() Method Test
            //[6] GetAllAsync(PagingAsync)() Method Test
            using (var context = new ReplyAppDbContext(options))
            {
                // Empty
            }
            using (var context = new ReplyAppDbContext(options))
            {
                int pageIndex = 0;
                int pageSize  = 1;

                var repository = new ReplyRepository(context, factory);
                var noticesSet = await repository.GetAllAsync(pageIndex, pageSize);

                var firstName   = noticesSet.Records.FirstOrDefault()?.Name;
                var recordCount = noticesSet.TotalRecords;

                Assert.AreEqual("[3] 백두산", firstName);
                Assert.AreEqual(2, recordCount);
            }
            #endregion

            #region [7] GetStatus() Method Test
            //[7] GetStatus() Method Test
            using (var context = new ReplyAppDbContext(options))
            {
                int parentId = 1;

                var no1 = await context.Replys.Where(m => m.Id == 1).SingleOrDefaultAsync();

                no1.ParentId = parentId;
                no1.IsPinned = true; // Pinned

                context.Entry(no1).State = EntityState.Modified;
                context.SaveChanges();

                var repository = new ReplyRepository(context, factory);
                var r          = await repository.GetStatus(parentId);

                Assert.AreEqual(1, r.Item1); // Pinned Count == 1
            }
            #endregion

            #region [8] GetArticles() Method Test
            //[8] GetArticles() Method Test
            using (var context = new ReplyAppDbContext(options))
            {
                var repository = new ReplyRepository(context, factory);
                //var articleSet = await repository.GetArticles<int>(0, 10, "", "", "", 0); // [3] 백두산, [1] 관리자
                //var articleSet = await repository.GetArticles<int>(0, 10, "", "두", "", 0); // [3] 백두산
                //var articleSet = await repository.GetArticles<int>(0, 10, "", "", "Name", 0); // [1] 관리자, [3] 백두산
                //var articleSet = await repository.GetArticles<int>(0, 10, "", "", "TitleDesc", 0); // Q&A, Q&A
                //var articleSet = await repository.GetArticles<int>(0, 10, "", "", "Title", 0); // Q&A, Q&A
                //var articleSet = await repository.GetArticles<int>(0, 10, "", "", "TitleDesc", 1); // Q&A
                var articleSet = await repository.GetArticlesAsync <string>(0, 10, "", "", "TitleDesc", "1"); // 자, 공

                foreach (var item in articleSet.Items)
                {
                    Console.WriteLine($"{item.Name} - {item.Title}");
                }
            }
            #endregion

            //#region [9] AddRange() Method Test
            ////[9] AddRange() Method Test
            //using (var context = new ReplyAppDbContext(options))
            //{
            //    var repository = new ReplyRepository(context, factory);
            //    var reply1 = new Reply { Name = "답변 1", };
            //    var reply2 = new Reply { Name = "답변 2", };
            //    var reply3 = new Reply { Name = "답변 3", };
            //    var reply4 = new Reply { Name = "답변 4", };

            //    context.Replys.AddRange(reply1, reply2, reply3, reply4);
            //    context.SaveChanges();

            //    var replys = await repository.GetArticles<int>(0, 10, "Name", "답변 ", "", 0);
            //    Assert.AreEqual(4, replys.Items.Count());
            //}
            //#endregion
        }