private async void btnTogglePinned_Click() { _article.IsPinned = !_article.IsPinned; // Toggle await ArticleRepository.EditArticleAsync(_article); PagingResult <Article> pagingData = await ArticleRepository.GetAllAsync(pager.PageIndex, pager.PageSize); pager.RecordCount = pagingData.TotalRecords; // 총 레코드 수 articles = pagingData.Records.ToList(); // 페이징 처리된 레코드 isShow = false; // Modal Close StateHasChanged(); // Refresh }
public async Task ArticleRepositoryAllMethodTest() { var options = new DbContextOptionsBuilder <ArticleAppDbContext>() // .UseInMemoryDatabase(databaseName: "ArticlaApp").Options; .UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=ArticleApp;Trusted_Connection=True;").Options; //AddAsync() Method Test using (var context = new ArticleAppDbContext(options)) { //Repository Object Creation var repository = new ArticleRepository(context); var model = new Article { Title = "[1] 게시판 시작", Created = DateTime.Now }; await repository.AddArticleAsync(model); await context.SaveChangesAsync(); } using (var context = new ArticleAppDbContext(options)) { Assert.AreEqual(1, await context.Articles.CountAsync()); var model = await context.Articles.Where(m => m.Id == 1).SingleOrDefaultAsync(); Assert.AreEqual("[1] 게시판 시작", model?.Title); } //GetAllAsync() Method Test using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var model = new Article { Title = "[2] 게시판 가동", Created = DateTime.Now }; await context.SaveChangesAsync(); context.Articles.Add(model); context.Articles.Add(new Article { Title = "[3] 게시판 중지", Created = DateTime.Now }); await context.SaveChangesAsync(); } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var models = await repository.GetArticlesAsync(); Assert.AreEqual(3, models.Count); } //GetByIdAsync() Method Test using (var context = new ArticleAppDbContext(options)) { } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var models = await repository.GetArticleByIdAsync(2); Assert.IsTrue(models.Title.Contains("가동")); Assert.AreEqual("[2] 게시판 가동", models.Title); } //GetEditAsync() Method Test using (var context = new ArticleAppDbContext(options)) { } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var models = await repository.GetArticleByIdAsync(2); models.Title = "[2] 게시판 바쁨"; await repository.EditArticleAsync(models); await context.SaveChangesAsync(); Assert.AreEqual("[2] 게시판 바쁨", (await context.Articles.Where(m => m.Id == 2).SingleOrDefaultAsync()).Title); } //GetDeleteAsync() Method Test using (var context = new ArticleAppDbContext(options)) { } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); await repository.DeleteArticleAsync(2); await context.SaveChangesAsync(); Assert.AreEqual(2, await context.Articles.CountAsync()); Assert.IsNull(await repository.GetArticleByIdAsync(2)); } //pagingAsync() Method Test using (var context = new ArticleAppDbContext(options)) { } using (var context = new ArticleAppDbContext(options)) { int pageIndex = 0; int pageSize = 1; var repository = new ArticleRepository(context); var models = await repository.GetAllAsync(pageIndex, pageSize); await context.SaveChangesAsync(); Assert.AreEqual("[3] 게시판 중지", models.Records.FirstOrDefault().Title); Assert.AreEqual(2, models.TotalRecords); } }
public async Task ArticleRepositoryAllMethodTest() { //[0] DbContextOptions<T> Object Creation var options = new DbContextOptionsBuilder <ArticleAppDbContext>() .UseInMemoryDatabase(databaseName: $"ArticleApp{Guid.NewGuid()}").Options; //.UseSqlServer("server=(localdb)\\mssqllocaldb;database=ArticleApp;integrated security=true;").Options; //[1] AddAsync() Method Test //[1][1] Repository 클래스를 사용하여 저장 using (var context = new ArticleAppDbContext(options)) { // Repository Object Creation //[!] Arrange var repository = new ArticleRepository(context); var model = new Article { Title = "[1] 게시판 시작", Created = DateTime.Now }; //[!] Act: AddAsync() 메서드 테스트 await repository.AddArticleAsync(model); await context.SaveChangesAsync(); // 이 코드는 생략 가능 } //[1][2] DbContext 클래스를 통해서 개수 및 레코드 확인 using (var context = new ArticleAppDbContext(options)) { //[!] Assert Assert.AreEqual(1, await context.Articles.CountAsync()); var model = await context.Articles.Where(m => m.Id == 1).SingleOrDefaultAsync(); Assert.AreEqual("[1] 게시판 시작", model?.Title); } //[2] GetAllAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // 트랜잭션 관련 코드는 InMemoryDatabase 공급자에서는 지원 X // using (var transaction = context.Database.BeginTransaction()) { transaction.Commit(); } var repository = new ArticleRepository(context); var model = new Article { Title = "[2] 게시판 가동", Created = DateTime.Now }; await context.Articles.AddAsync(model); await context.SaveChangesAsync(); //[1] await context.Articles.AddAsync(new Article { Title = "[3] 게시판 중지", Created = DateTime.Now }); await context.SaveChangesAsync(); //[2] } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var models = await repository.GetArticlesAsync(); Assert.AreEqual(3, models.Count); } //[3] GetByIdAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Empty } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var model = await repository.GetArticleByIdAsync(2); Assert.IsTrue(model.Title.Contains("가동")); Assert.AreEqual("[2] 게시판 가동", model.Title); } //[4] GetEditAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Empty } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var model = await repository.GetArticleByIdAsync(2); model.Title = "[2] 게시판 바쁨"; await repository.EditArticleAsync(model); await context.SaveChangesAsync(); // 생략가능 - 저장 시점을 코드로 표현하기 위함 Assert.AreEqual("[2] 게시판 바쁨", (await context.Articles.Where(m => m.Id == 2).SingleOrDefaultAsync()).Title); } //[5] GetDeleteAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Empty } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); await repository.DeleteArticleAsync(2); await context.SaveChangesAsync(); Assert.AreEqual(2, await context.Articles.CountAsync()); Assert.IsNull(await repository.GetArticleByIdAsync(2)); } //[6] PagingAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Empty } using (var context = new ArticleAppDbContext(options)) { int pageIndex = 0; int pageSize = 1; var repository = new ArticleRepository(context); var models = await repository.GetAllAsync(pageIndex, pageSize); Assert.AreEqual("[3] 게시판 중지", models.Records.FirstOrDefault().Title); Assert.AreEqual(2, models.TotalRecords); } }
public async Task ArticleRepositoryAllMethodTest() { // DbContextOption<T> Object Creation var options = new DbContextOptionsBuilder <ArticleAppDbContext>() .UseInMemoryDatabase(databaseName: "ArticleApp").Options; //트렌젝션은 InMemory에서 작동되지 않음 //.UseSqlServer("server=(localdb)\\mssqllocaldb;database=ArticleApp;integrated security=true").Options; //실제 sql서버에 올라가는거라 재실행시 에러뜸, 값이 들어있기때문 // AddAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Repository Object Creation var repository = new ArticleRepository(context); var model = new Article { Title = "[1] 게시판 시작", Created = DateTime.Now }; await repository.AddArticleAsync(model); await context.SaveChangesAsync(); } using (var context = new ArticleAppDbContext(options)) { //InMemory는 휘발성이기에 여러번 태스트해도 매번 처음실행하는것처럼 됨 Assert.AreEqual(1, await context.Articles.CountAsync()); var model = await context.Articles.Where(m => m.Id == 1).SingleOrDefaultAsync(); Assert.AreEqual("[1] 게시판 시작", model?.Title); } // GetAllAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // InMemory 테스트용 // Repository Object Creation var repository = new ArticleRepository(context); var model = new Article { Title = "[2] 게시판 가동", Created = DateTime.Now }; // await repository.AddArticleAsync(model); AddArticleAsync 테스트는 위에서 했으니 다른방법으로, 이거 써도 되긴함 context.Articles.Add(model); await context.SaveChangesAsync(); //[1] context.Articles.Add(new Article { Title = "[3] 게시판 중지", Created = DateTime.Now }); await context.SaveChangesAsync(); //[2] // 현제까지 총 3개의 게시글 /* 트랜젝션 * using (var transaction = context.Database.BeginTransaction()) //트렌젝션은 InMemory에서 작동되지 않음 * { * try * { * // Repository Object Creation * var repository = new ArticleRepository(context); * var model = new Article { Title = "[2] 게시판 가동", Created = DateTime.Now }; * // await repository.AddArticleAsync(model); AddArticleAsync 테스트는 위에서 했으니 다른방법으로, 이거 써도 되긴함 * context.Articles.Add(model); * await context.SaveChangesAsync(); //[1] * context.Articles.Add(new Article { Title = "[3] 게시판 중지", Created = DateTime.Now }); * await context.SaveChangesAsync(); //[2] * // 현제까지 총 3개의 게시글 * * transaction.Commit(); * } * catch (Exception) * { * //empty * } * } */ } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var models = await repository.GetArticlesAsync(); // 전체레코드 읽어오기, 3개여야함 Assert.AreEqual(3, models.Count); } // GetByIdAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Empty } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var model = await repository.GetArticleByIdAsync(2); Assert.IsTrue(model.Title.Contains("가동")); //Assert.IsTrue(model.Title.Contains("중지")); 에러뜨는거 확인 Assert.AreEqual("[2] 게시판 가동", model.Title); } // GetEditAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Empty } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); var model = await repository.GetArticleByIdAsync(2); model.Title = "[2] 게시판 바쁨"; await repository.EditArticleAsync(model); await context.SaveChangesAsync(); Assert.AreEqual("[2] 게시판 바쁨", (await context.Articles.Where(m => m.Id == 2).SingleOrDefaultAsync()).Title); } // GetDeleteAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Empty } using (var context = new ArticleAppDbContext(options)) { var repository = new ArticleRepository(context); await repository.DeleteArticleAsync(2); await context.SaveChangesAsync(); Assert.AreEqual(2, await context.Articles.CountAsync()); // 3->2, 2개 있어야함 Assert.IsNull(await repository.GetArticleByIdAsync(2)); // 2번 게시글 삭제됬으니 널값이 와야함 } // PagingAsync() Method Test using (var context = new ArticleAppDbContext(options)) { // Empty } using (var context = new ArticleAppDbContext(options)) { int pageIndex = 0; int pageSize = 1; var repository = new ArticleRepository(context); var models = await repository.GetAllAsync(pageIndex, pageSize); Assert.AreEqual("[3] 게시판 중지", models.Records.FirstOrDefault().Title); Assert.AreEqual(2, models.TotalRecords); } }