代码优化

master
xiaochanghai 4 months ago
parent c356dd7a31
commit 9c3b0c5d98
  1. 267
      Tiobon.Core.Api/Controllers/BlogController.cs
  2. 4
      Tiobon.Core.Api/Controllers/CommonController.cs
  3. 6
      Tiobon.Core.Api/Controllers/FileController.cs
  4. 5
      Tiobon.Core.Api/Filter/UseServiceDIAttribute.cs
  5. 82
      Tiobon.Core.Api/Tiobon.Core.xml
  6. 5
      Tiobon.Core.Extensions/EventHandling/BlogQueryIntegrationEventHandler.cs
  7. 9
      Tiobon.Core.Extensions/HostedService/Job1TimedService.cs
  8. 24
      Tiobon.Core.Extensions/Redis/RedisSubscribe.cs
  9. 12
      Tiobon.Core.IServices/IBlogArticleServices.cs
  10. 63
      Tiobon.Core.Services/BlogArticleServices.cs
  11. 179
      Tiobon.Core.Tests/Controller_Test/BlogController_Should.cs
  12. 74
      Tiobon.Core.Tests/Service_Test/BlogArticleService_Should.cs
  13. 4
      Tiobon.Core.Tests/Tiobon.Core.Tests.csproj

@ -1,267 +0,0 @@
using Serilog;
using StackExchange.Profiling;
using static Tiobon.Core.Extensions.CustomApiVersion;
namespace Tiobon.Core.Controllers;
/// <summary>
/// 博客管理
/// </summary>
[Produces("application/json")]
[Route("api/Tiobon"), ApiExplorerSettings(GroupName = Grouping.GroupName_Other)]
public class TiobonController : BaseApiController
{
public ITiobonArticleServices _TiobonArticleServices { get; set; }
private readonly ILogger<TiobonController> _logger;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="logger"></param>
///
public TiobonController(ILogger<TiobonController> logger)
{
_logger = logger;
}
/// <summary>
/// 获取博客列表【无权限】
/// </summary>
/// <param name="id"></param>
/// <param name="page"></param>
/// <param name="bcategory"></param>
/// <param name="key"></param>
/// <returns></returns>
[HttpGet]
public async Task<ServiceResult<PageModel<TiobonArticle>>> Get(int id, int page = 1, string bcategory = "技术博文", string key = "")
{
int intPageSize = 6;
if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
{
key = "";
}
Expression<Func<TiobonArticle, bool>> whereExpression = a => (a.bcategory == bcategory && a.IsDeleted == false) && ((a.btitle != null && a.btitle.Contains(key)) || (a.bcontent != null && a.bcontent.Contains(key)));
var pageModelTiobon = await _TiobonArticleServices.QueryPage(whereExpression, page, intPageSize, " bID desc ");
using (MiniProfiler.Current.Step("获取成功后,开始处理最终数据"))
{
foreach (var item in pageModelTiobon.data)
{
if (!string.IsNullOrEmpty(item.bcontent))
{
item.bRemark = (HtmlHelper.ReplaceHtmlTag(item.bcontent)).Length >= 200 ? (HtmlHelper.ReplaceHtmlTag(item.bcontent)).Substring(0, 200) : (HtmlHelper.ReplaceHtmlTag(item.bcontent));
int totalLength = 500;
if (item.bcontent.Length > totalLength)
{
item.bcontent = item.bcontent.Substring(0, totalLength);
}
}
}
}
return SuccessPage(pageModelTiobon);
}
/// <summary>
/// 获取博客详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
//[Authorize(Policy = "Scope_TiobonModule_Policy")]
[Authorize]
public async Task<ServiceResult<TiobonViewModels>> Get(long id)
{
return Success(await _TiobonArticleServices.GetTiobonDetails(id));
}
/// <summary>
/// 获取详情【无权限】
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
[Route("DetailNuxtNoPer")]
public async Task<ServiceResult<TiobonViewModels>> DetailNuxtNoPer(long id)
{
_logger.LogInformation("xxxxxxxxxxxxxxxxxxx");
Log.Information("yyyyyyyyyyyyyyyyy");
return Success(await _TiobonArticleServices.GetTiobonDetails(id));
}
[HttpGet]
[Route("GoUrl")]
public async Task<IActionResult> GoUrl(long id = 0)
{
var response = await _TiobonArticleServices.QueryById(id);
if (response != null && response.bsubmitter.IsNotEmptyOrNull())
{
string Url = @"^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$";
if (Regex.IsMatch(response.bsubmitter, Url))
{
response.btraffic += 1;
await _TiobonArticleServices.Update(response);
return Redirect(response.bsubmitter);
}
}
return Ok();
}
[HttpGet]
[Route("GetTiobonsByTypesForMVP")]
public async Task<ServiceResult<List<TiobonArticle>>> GetTiobonsByTypesForMVP(string types = "", int id = 0)
{
if (types.IsNotEmptyOrNull())
{
var Tiobons = await _TiobonArticleServices.Query(d => d.bcategory != null && types.Contains(d.bcategory) && d.IsDeleted == false, d => d.bID, false);
return Success(Tiobons);
}
return Success(new List<TiobonArticle>() { });
}
[HttpGet]
[Route("GetTiobonByIdForMVP")]
public async Task<ServiceResult<TiobonArticle>> GetTiobonByIdForMVP(long id = 0)
{
if (id > 0)
{
return Success(await _TiobonArticleServices.QueryById(id));
}
return Success(new TiobonArticle());
}
/// <summary>
/// 获取博客测试信息 v2版本
/// </summary>
/// <returns></returns>
[HttpGet]
////MVC自带特性 对 api 进行组管理
//[ApiExplorerSettings(GroupName = "v2")]
////路径 如果以 / 开头,表示绝对路径,反之相对 controller 的想u地路径
//[Route("/api/v2/Tiobon/Tiobontest")]
//和上边的版本控制以及路由地址都是一样的
[CustomRoute(ApiVersions.V2, "Tiobontest")]
public ServiceResult<string> V2_Tiobontest()
{
return Success<string>("我是第二版的博客信息");
}
/// <summary>
/// 添加博客【无权限】
/// </summary>
/// <param name="TiobonArticle"></param>
/// <returns></returns>
[HttpPost]
//[Authorize(Policy = "Scope_TiobonModule_Policy")]
[Authorize]
public async Task<ServiceResult<string>> Post([FromBody] TiobonArticle TiobonArticle)
{
if (TiobonArticle.btitle.Length > 5 && TiobonArticle.bcontent.Length > 50)
{
TiobonArticle.bCreateTime = DateTime.Now;
TiobonArticle.bUpdateTime = DateTime.Now;
TiobonArticle.IsDeleted = false;
TiobonArticle.bcategory = "技术博文";
var id = (await _TiobonArticleServices.Add(TiobonArticle));
return id > 0 ? Success<string>(id.ObjToString()) : Failed("添加失败");
}
else
{
return Failed("文章标题不能少于5个字符,内容不能少于50个字符!");
}
}
/// <summary>
///
/// </summary>
/// <param name="TiobonArticle"></param>
/// <returns></returns>
[HttpPost]
[Route("AddForMVP")]
[Authorize(Permissions.Name)]
public async Task<ServiceResult<string>> AddForMVP([FromBody] TiobonArticle TiobonArticle)
{
TiobonArticle.bCreateTime = DateTime.Now;
TiobonArticle.bUpdateTime = DateTime.Now;
TiobonArticle.IsDeleted = false;
var id = (await _TiobonArticleServices.Add(TiobonArticle));
return id > 0 ? Success<string>(id.ObjToString()) : Failed("添加失败");
}
/// <summary>
/// 更新博客信息
/// </summary>
/// <param name="TiobonArticle"></param>
/// <returns></returns>
// PUT: api/User/5
[HttpPut]
[Route("Update")]
[Authorize(Permissions.Name)]
public async Task<ServiceResult<string>> Put([FromBody] TiobonArticle TiobonArticle)
{
if (TiobonArticle != null && TiobonArticle.bID > 0)
{
var model = await _TiobonArticleServices.QueryById(TiobonArticle.bID);
if (model != null)
{
model.btitle = TiobonArticle.btitle;
model.bcategory = TiobonArticle.bcategory;
model.bsubmitter = TiobonArticle.bsubmitter;
model.bcontent = TiobonArticle.bcontent;
model.btraffic = TiobonArticle.btraffic;
if (await _TiobonArticleServices.Update(model))
{
return Success<string>(TiobonArticle?.bID.ObjToString());
}
}
}
return Failed("更新失败");
}
/// <summary>
/// 删除博客
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete]
[Authorize(Permissions.Name)]
[Route("Delete")]
public async Task<ServiceResult<string>> Delete(long id)
{
if (id > 0)
{
var TiobonArticle = await _TiobonArticleServices.QueryById(id);
if (TiobonArticle == null)
{
return Failed("查询无数据");
}
TiobonArticle.IsDeleted = true;
return await _TiobonArticleServices.Update(TiobonArticle) ? Success(TiobonArticle?.bID.ObjToString(), "删除成功") : Failed("删除失败");
}
return Failed("入参无效");
}
/// <summary>
/// apache jemeter 压力测试
/// 更新接口
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("ApacheTestUpdate")]
public async Task<ServiceResult<bool>> ApacheTestUpdate()
{
return Success(await _TiobonArticleServices.Update(new { bsubmitter = $"laozhang{DateTime.Now.Millisecond}", bID = 1 }), "更新成功");
}
}

@ -14,7 +14,6 @@ namespace Tiobon.Core.Controllers;
[Authorize(Permissions.Name), ApiExplorerSettings(GroupName = Grouping.GroupName_System)] [Authorize(Permissions.Name), ApiExplorerSettings(GroupName = Grouping.GroupName_System)]
public class CommonController : BaseApiController public class CommonController : BaseApiController
{ {
private readonly ILogger<TiobonController> _logger;
private readonly ICommonServices _commonServices; private readonly ICommonServices _commonServices;
private readonly IHttpPollyHelper _httpPollyHelper; private readonly IHttpPollyHelper _httpPollyHelper;
@ -24,13 +23,12 @@ public class CommonController : BaseApiController
/// <param name="logger"></param> /// <param name="logger"></param>
/// <param name="commonServices"></param> /// <param name="commonServices"></param>
/// <param name="httpPollyHelper"></param> /// <param name="httpPollyHelper"></param>
public CommonController(ILogger<TiobonController> logger, public CommonController(
ICommonServices commonServices, ICommonServices commonServices,
IHttpPollyHelper httpPollyHelper) IHttpPollyHelper httpPollyHelper)
{ {
_commonServices = commonServices; _commonServices = commonServices;
_httpPollyHelper = httpPollyHelper; _httpPollyHelper = httpPollyHelper;
_logger = logger;
} }
#region 获取菜单 #region 获取菜单

@ -11,8 +11,6 @@ namespace Tiobon.Core.Controllers;
[Route("api/File"), ApiExplorerSettings(GroupName = Grouping.GroupName_System)] [Route("api/File"), ApiExplorerSettings(GroupName = Grouping.GroupName_System)]
public class FileController : BaseApiController public class FileController : BaseApiController
{ {
public ITiobonArticleServices _TiobonArticleServices { get; set; }
private readonly ILogger<TiobonController> _logger;
/// <summary> /// <summary>
/// 配置信息 /// 配置信息
/// </summary> /// </summary>
@ -23,13 +21,11 @@ public class FileController : BaseApiController
/// <summary> /// <summary>
/// 构造函数 /// 构造函数
/// </summary> /// </summary>
/// <param name="logger"></param>
/// <param name="configuration"></param> /// <param name="configuration"></param>
/// <param name="hostingEnvironment"></param> /// <param name="hostingEnvironment"></param>
/// <param name="ghre_AttachmentServices"></param> /// <param name="ghre_AttachmentServices"></param>
public FileController(ILogger<TiobonController> logger, IConfiguration configuration, IWebHostEnvironment hostingEnvironment, IGhre_AttachmentServices ghre_AttachmentServices) public FileController(IConfiguration configuration, IWebHostEnvironment hostingEnvironment, IGhre_AttachmentServices ghre_AttachmentServices)
{ {
_logger = logger;
_configuration = configuration; _configuration = configuration;
_hostingEnvironment = hostingEnvironment; _hostingEnvironment = hostingEnvironment;
_ghre_AttachmentServices = ghre_AttachmentServices; _ghre_AttachmentServices = ghre_AttachmentServices;

@ -6,20 +6,17 @@ public class UseServiceDIAttribute : ActionFilterAttribute
{ {
protected readonly ILogger<UseServiceDIAttribute> _logger; protected readonly ILogger<UseServiceDIAttribute> _logger;
private readonly ITiobonArticleServices _TiobonArticleServices;
private readonly string _name; private readonly string _name;
public UseServiceDIAttribute(ILogger<UseServiceDIAttribute> logger, ITiobonArticleServices TiobonArticleServices, string Name = "") public UseServiceDIAttribute(ILogger<UseServiceDIAttribute> logger, string Name = "")
{ {
_logger = logger; _logger = logger;
_TiobonArticleServices = TiobonArticleServices;
_name = Name; _name = Name;
} }
public override void OnActionExecuted(ActionExecutedContext context) public override void OnActionExecuted(ActionExecutedContext context)
{ {
var dd = _TiobonArticleServices.Query().Result;
_logger.LogInformation("测试自定义服务特性"); _logger.LogInformation("测试自定义服务特性");
Console.WriteLine(_name); Console.WriteLine(_name);
base.OnActionExecuted(context); base.OnActionExecuted(context);

@ -156,89 +156,12 @@
<param name="ExportFields"></param> <param name="ExportFields"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="T:Tiobon.Core.Controllers.TiobonController">
<summary>
博客管理
</summary>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.#ctor(Microsoft.Extensions.Logging.ILogger{Tiobon.Core.Controllers.TiobonController})">
<summary>
构造函数
</summary>
<param name="logger"></param>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.Get(System.Int32,System.Int32,System.String,System.String)">
<summary>
获取博客列表【无权限】
</summary>
<param name="id"></param>
<param name="page"></param>
<param name="bcategory"></param>
<param name="key"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.Get(System.Int64)">
<summary>
获取博客详情
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.DetailNuxtNoPer(System.Int64)">
<summary>
获取详情【无权限】
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.V2_Tiobontest">
<summary>
获取博客测试信息 v2版本
</summary>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.Post(Tiobon.Core.Model.Models.TiobonArticle)">
<summary>
添加博客【无权限】
</summary>
<param name="TiobonArticle"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.AddForMVP(Tiobon.Core.Model.Models.TiobonArticle)">
<summary>
</summary>
<param name="TiobonArticle"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.Put(Tiobon.Core.Model.Models.TiobonArticle)">
<summary>
更新博客信息
</summary>
<param name="TiobonArticle"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.Delete(System.Int64)">
<summary>
删除博客
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.TiobonController.ApacheTestUpdate">
<summary>
apache jemeter 压力测试
更新接口
</summary>
<returns></returns>
</member>
<member name="T:Tiobon.Core.Controllers.CommonController"> <member name="T:Tiobon.Core.Controllers.CommonController">
<summary> <summary>
公共服务 公共服务
</summary> </summary>
</member> </member>
<member name="M:Tiobon.Core.Controllers.CommonController.#ctor(Microsoft.Extensions.Logging.ILogger{Tiobon.Core.Controllers.TiobonController},Tiobon.Core.IServices.ICommonServices,Tiobon.Core.Common.Https.HttpPolly.IHttpPollyHelper)"> <member name="M:Tiobon.Core.Controllers.CommonController.#ctor(Tiobon.Core.IServices.ICommonServices,Tiobon.Core.Common.Https.HttpPolly.IHttpPollyHelper)">
<summary> <summary>
构造函数 构造函数
</summary> </summary>
@ -457,11 +380,10 @@
配置信息 配置信息
</summary> </summary>
</member> </member>
<member name="M:Tiobon.Core.Controllers.FileController.#ctor(Microsoft.Extensions.Logging.ILogger{Tiobon.Core.Controllers.TiobonController},Microsoft.Extensions.Configuration.IConfiguration,Microsoft.AspNetCore.Hosting.IWebHostEnvironment,Tiobon.Core.IServices.IGhre_AttachmentServices)"> <member name="M:Tiobon.Core.Controllers.FileController.#ctor(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.AspNetCore.Hosting.IWebHostEnvironment,Tiobon.Core.IServices.IGhre_AttachmentServices)">
<summary> <summary>
构造函数 构造函数
</summary> </summary>
<param name="logger"></param>
<param name="configuration"></param> <param name="configuration"></param>
<param name="hostingEnvironment"></param> <param name="hostingEnvironment"></param>
<param name="ghre_AttachmentServices"></param> <param name="ghre_AttachmentServices"></param>

@ -1,20 +1,16 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Tiobon.Core.Common; using Tiobon.Core.Common;
using Tiobon.Core.EventBus.EventHandling; using Tiobon.Core.EventBus.EventHandling;
using Tiobon.Core.IServices;
namespace Tiobon.Core.EventBus; namespace Tiobon.Core.EventBus;
public class TiobonQueryIntegrationEventHandler : IIntegrationEventHandler<TiobonQueryIntegrationEvent> public class TiobonQueryIntegrationEventHandler : IIntegrationEventHandler<TiobonQueryIntegrationEvent>
{ {
private readonly ITiobonArticleServices _TiobonArticleServices;
private readonly ILogger<TiobonQueryIntegrationEventHandler> _logger; private readonly ILogger<TiobonQueryIntegrationEventHandler> _logger;
public TiobonQueryIntegrationEventHandler( public TiobonQueryIntegrationEventHandler(
ITiobonArticleServices TiobonArticleServices,
ILogger<TiobonQueryIntegrationEventHandler> logger) ILogger<TiobonQueryIntegrationEventHandler> logger)
{ {
_TiobonArticleServices = TiobonArticleServices;
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); _logger = logger ?? throw new ArgumentNullException(nameof(logger));
} }
@ -24,7 +20,6 @@ public class TiobonQueryIntegrationEventHandler : IIntegrationEventHandler<Tiobo
ConsoleHelper.WriteSuccessLine($"----- Handling integration event: {@event.Id} at Tiobon.Core - ({@event})"); ConsoleHelper.WriteSuccessLine($"----- Handling integration event: {@event.Id} at Tiobon.Core - ({@event})");
await _TiobonArticleServices.QueryById(@event.TiobonId.ToString());
} }
} }

@ -1,19 +1,12 @@
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Tiobon.Core.Common; using Tiobon.Core.Common;
using Tiobon.Core.IServices;
namespace Tiobon.Core.Extensions; namespace Tiobon.Core.Extensions;
public class Job1TimedService : IHostedService, IDisposable public class Job1TimedService : IHostedService, IDisposable
{ {
private Timer _timer; private Timer _timer;
private readonly ITiobonArticleServices _TiobonArticleServices;
// 这里可以注入
public Job1TimedService(ITiobonArticleServices TiobonArticleServices)
{
_TiobonArticleServices = TiobonArticleServices;
}
public Task StartAsync(CancellationToken cancellationToken) public Task StartAsync(CancellationToken cancellationToken)
{ {
@ -29,8 +22,6 @@ public class Job1TimedService : IHostedService, IDisposable
{ {
try try
{ {
var model = _TiobonArticleServices.GetTiobonDetails(1).Result;
Console.WriteLine($"Job 1 启动成功,获取id=1的博客title为:{model?.btitle}");
} }
catch (Exception ex) catch (Exception ex)
{ {

@ -1,23 +1,21 @@
using InitQ.Abstractions; using InitQ.Abstractions;
using InitQ.Attributes;
using Tiobon.Core.IServices;
namespace Tiobon.Core.Extensions.Redis; namespace Tiobon.Core.Extensions.Redis;
public class RedisSubscribe : IRedisSubscribe public class RedisSubscribe : IRedisSubscribe
{ {
private readonly ITiobonArticleServices _TiobonArticleServices; //private readonly ITiobonArticleServices _TiobonArticleServices;
public RedisSubscribe(ITiobonArticleServices TiobonArticleServices) //public RedisSubscribe(ITiobonArticleServices TiobonArticleServices)
{ //{
_TiobonArticleServices = TiobonArticleServices; // _TiobonArticleServices = TiobonArticleServices;
} //}
[Subscribe(RedisMqKey.Loging)] //[Subscribe(RedisMqKey.Loging)]
private async Task SubRedisLoging(string msg) //private async Task SubRedisLoging(string msg)
{ //{
Console.WriteLine($"订阅者 1 从 队列{RedisMqKey.Loging} 消费到/接受到 消息:{msg}"); // Console.WriteLine($"订阅者 1 从 队列{RedisMqKey.Loging} 消费到/接受到 消息:{msg}");
await Task.CompletedTask; // await Task.CompletedTask;
} //}
} }

@ -1,12 +0,0 @@
using Tiobon.Core.IServices.BASE;
using Tiobon.Core.Model.Models;
using Tiobon.Core.Model.ViewModels;
namespace Tiobon.Core.IServices;
public interface ITiobonArticleServices :IBaseServices<TiobonArticle>
{
Task<List<TiobonArticle>> GetTiobons();
Task<TiobonViewModels> GetTiobonDetails(long id);
}

@ -1,63 +0,0 @@
namespace Tiobon.Core.Services;
public class TiobonArticleServices : BaseServices<TiobonArticle>, ITiobonArticleServices
{
AutoMapper.IMapper _mapper;
public TiobonArticleServices(AutoMapper.IMapper mapper)
{
this._mapper = mapper;
}
/// <summary>
/// 获取视图博客详情信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<TiobonViewModels> GetTiobonDetails(long id)
{
// 此处想获取上一条下一条数据,因此将全部数据list出来,有好的想法请提出
//var Tiobonlist = await base.Query(a => a.IsDeleted==false, a => a.bID);
var TiobonArticle = (await base.Query(a => a.bID == id && a.bcategory == "技术博文")).FirstOrDefault();
TiobonViewModels models = null;
if (TiobonArticle != null)
{
models = _mapper.Map<TiobonViewModels>(TiobonArticle);
//要取下一篇和上一篇,以当前id开始,按id排序后top(2),而不用取出所有记录
//这样在记录很多的时候也不会有多大影响
var nextTiobons = await base.Query(a => a.bID >= id && a.IsDeleted == false && a.bcategory == "技术博文", 2, "bID");
if (nextTiobons.Count == 2)
{
models.next = nextTiobons[1].btitle;
models.nextID = nextTiobons[1].bID;
}
var prevTiobons = await base.Query(a => a.bID <= id && a.IsDeleted == false && a.bcategory == "技术博文", 2, "bID desc");
if (prevTiobons.Count == 2)
{
models.previous = prevTiobons[1].btitle;
models.previousID = prevTiobons[1].bID;
}
TiobonArticle.btraffic += 1;
await base.Update(TiobonArticle, new List<string> { "btraffic" });
}
return models;
}
/// <summary>
/// 获取博客列表
/// </summary>
/// <returns></returns>
[Caching(AbsoluteExpiration = 10)]
public async Task<List<TiobonArticle>> GetTiobons()
{
var Tiobonlist = await base.Query(a => a.bID > 0, a => a.bID);
return Tiobonlist;
}
}

@ -1,179 +0,0 @@
using Autofac;
using Tiobon.Core.Controllers;
using Tiobon.Core.IServices;
using Tiobon.Core.Model;
using Tiobon.Core.Model.Models;
using Tiobon.Core.Model.ViewModels;
using Microsoft.Extensions.Logging;
using Moq;
using System;
using System.Collections.Generic;
using Xunit;
namespace Tiobon.Core.Tests
{
public class TiobonController_Should
{
Mock<ITiobonArticleServices> mockTiobonSev = new Mock<ITiobonArticleServices>();
Mock<ILogger<TiobonController>> mockLogger = new Mock<ILogger<TiobonController>>();
TiobonController TiobonController;
private ITiobonArticleServices TiobonArticleServices;
DI_Test dI_Test = new DI_Test();
public TiobonController_Should()
{
mockTiobonSev.Setup(r => r.Query());
var container = dI_Test.DICollections();
TiobonArticleServices = container.Resolve<ITiobonArticleServices>();
TiobonController = new TiobonController(mockLogger.Object);
TiobonController._TiobonArticleServices = TiobonArticleServices;
}
[Fact]
public void TestEntity()
{
TiobonArticle TiobonArticle = new TiobonArticle();
Assert.True(TiobonArticle.bID >= 0);
}
[Fact]
public async void Get_Tiobon_Page_Test()
{
ServiceResult<PageModel<TiobonArticle>> Tiobons = await TiobonController.Get(1, 1, "技术博文", "");
Assert.NotNull(Tiobons);
Assert.NotNull(Tiobons.Data);
Assert.True(Tiobons.Data.dataCount >= 0);
}
[Fact]
public async void Get_Tiobon_Test()
{
ServiceResult<TiobonViewModels> TiobonVo = await TiobonController.Get(1.ObjToLong());
Assert.NotNull(TiobonVo);
}
[Fact]
public async void Get_Tiobon_For_Nuxt_Test()
{
ServiceResult<TiobonViewModels> TiobonVo = await TiobonController.DetailNuxtNoPer(1);
Assert.NotNull(TiobonVo);
}
[Fact]
public async void Get_Go_Url_Test()
{
object urlAction = await TiobonController.GoUrl(1);
Assert.NotNull(urlAction);
}
[Fact]
public async void Get_Tiobon_By_Type_For_MVP_Test()
{
ServiceResult<List<TiobonArticle>> Tiobons = await TiobonController.GetTiobonsByTypesForMVP("技术博文");
Assert.NotNull(Tiobons);
Assert.True(Tiobons.Success);
Assert.NotNull(Tiobons.Data);
Assert.True(Tiobons.Data.Count >= 0);
}
[Fact]
public async void Get_Tiobon_By_Id_For_MVP_Test()
{
ServiceResult<TiobonArticle> Tiobon = await TiobonController.GetTiobonByIdForMVP(1);
Assert.NotNull(Tiobon);
Assert.True(Tiobon.Success);
Assert.NotNull(Tiobon.Data);
}
[Fact]
public async void PostTest()
{
TiobonArticle TiobonArticle = new TiobonArticle()
{
bCreateTime = DateTime.Now,
bUpdateTime = DateTime.Now,
btitle = "xuint :test controller addEntity",
bcontent = "xuint :test controller addEntity. this is content.this is content."
};
var res = await TiobonController.Post(TiobonArticle);
Assert.True(res.Success);
var data = res.Data;
Assert.NotNull(data);
}
[Fact]
public async void Post_Insert_For_MVP_Test()
{
TiobonArticle TiobonArticle = new TiobonArticle()
{
bCreateTime = DateTime.Now,
bUpdateTime = DateTime.Now,
btitle = "xuint :test controller addEntity",
bcontent = "xuint :test controller addEntity. this is content.this is content."
};
var res = await TiobonController.AddForMVP(TiobonArticle);
Assert.True(res.Success);
var data = res.Data;
Assert.NotNull(data);
}
[Fact]
public async void Put_Test()
{
TiobonArticle TiobonArticle = new TiobonArticle()
{
bID = 1,
bCreateTime = DateTime.Now,
bUpdateTime = DateTime.Now,
btitle = "xuint put :test controller addEntity",
bcontent = "xuint put :test controller addEntity. this is content.this is content."
};
var res = await TiobonController.Put(TiobonArticle);
Assert.True(res.Success);
var data = res.Data;
Assert.NotNull(data);
}
[Fact]
public async void Delete_Test()
{
var res = await TiobonController.Delete(99);
Assert.False(res.Success);
var data = res.Data;
Assert.Null(data);
}
[Fact]
public async void Apache_Update_Test()
{
var res = await TiobonController.ApacheTestUpdate();
Assert.True(res.Success);
}
}
}

@ -1,74 +0,0 @@
using Tiobon.Core.IServices;
using Tiobon.Core.Model.Models;
using Xunit;
using System;
using System.Linq;
using Autofac;
namespace Tiobon.Core.Tests
{
public class TiobonArticleService_Should
{
private ITiobonArticleServices TiobonArticleServices;
DI_Test dI_Test = new DI_Test();
public TiobonArticleService_Should()
{
//mockTiobonRep.Setup(r => r.Query());
var container = dI_Test.DICollections();
TiobonArticleServices = container.Resolve<ITiobonArticleServices>();
}
[Fact]
public void TiobonArticleServices_Test()
{
Assert.NotNull(TiobonArticleServices);
}
[Fact]
public async void Get_Tiobons_Test()
{
var data = await TiobonArticleServices.GetTiobons();
Assert.True(data.Any());
}
[Fact]
public async void Add_Tiobon_Test()
{
TiobonArticle TiobonArticle = new TiobonArticle()
{
bCreateTime = DateTime.Now,
bUpdateTime = DateTime.Now,
btitle = "xuint test title",
bcontent = "xuint test content",
bsubmitter = "xuint test submitter",
};
var BId = await TiobonArticleServices.Add(TiobonArticle);
Assert.True(BId > 0);
}
[Fact]
public async void Delete_Tiobon_Test()
{
Add_Tiobon_Test();
var deleteModel = (await TiobonArticleServices.Query(d => d.btitle == "xuint test title")).FirstOrDefault();
Assert.NotNull(deleteModel);
var IsDel = await TiobonArticleServices.Delete(deleteModel);
Assert.True(IsDel);
}
}
}

@ -46,6 +46,10 @@
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Service_Test\" />
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions> <ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project> </Project>

Loading…
Cancel
Save