From 006d799d2fe5f081c188f95a8590c4b75a93caae Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Mon, 28 Oct 2019 23:35:00 +0800 Subject: Add UserDetailController unit tests. --- Timeline/Controllers/UserDetailController.cs | 44 ++++++++++++++++++++++++++++ Timeline/Filters/User.cs | 42 ++++++++++++++++++++++++++ Timeline/Resources/Filters.Designer.cs | 9 ++++++ Timeline/Resources/Filters.resx | 3 ++ Timeline/Resources/Filters.zh.resx | 3 ++ 5 files changed, 101 insertions(+) create mode 100644 Timeline/Controllers/UserDetailController.cs create mode 100644 Timeline/Filters/User.cs (limited to 'Timeline') diff --git a/Timeline/Controllers/UserDetailController.cs b/Timeline/Controllers/UserDetailController.cs new file mode 100644 index 00000000..ef13b462 --- /dev/null +++ b/Timeline/Controllers/UserDetailController.cs @@ -0,0 +1,44 @@ +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Timeline.Filters; +using Timeline.Models.Validation; +using Timeline.Services; +using System.ComponentModel.DataAnnotations; + +namespace Timeline.Controllers +{ + [ApiController] + public class UserDetailController : Controller + { + private readonly IUserDetailService _service; + + public UserDetailController(IUserDetailService service) + { + _service = service; + } + + [HttpGet("users/{username}/nickname")] + [CatchUserNotExistException] + public async Task> GetNickname([FromRoute][Username] string username) + { + return Ok(await _service.GetNickname(username)); + } + + [HttpPut("users/{username}/nickname")] + [CatchUserNotExistException] + public async Task PutNickname([FromRoute][Username] string username, + [FromBody][StringLength(10, MinimumLength = 1)] string body) + { + await _service.SetNickname(username, body); + return Ok(); + } + + [HttpDelete("users/{username}/nickname")] + [CatchUserNotExistException] + public async Task DeleteNickname([FromRoute][Username] string username) + { + await _service.SetNickname(username, null); + return Ok(); + } + } +} diff --git a/Timeline/Filters/User.cs b/Timeline/Filters/User.cs new file mode 100644 index 00000000..22fae938 --- /dev/null +++ b/Timeline/Filters/User.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using System; +using Timeline.Models.Http; + +namespace Timeline +{ + public static partial class ErrorCodes + { + public static partial class Http + { + public static partial class Filter // bxx = 1xx + { + public static class User // bbb = 101 + { + public const int NotExist = 11010001; + } + + } + } + } +} + +namespace Timeline.Filters +{ + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] + public class CatchUserNotExistExceptionAttribute : ExceptionFilterAttribute + { + [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1062:Validate arguments of public methods", Justification = "ASP.Net already checked.")] + public override void OnException(ExceptionContext context) + { + var body = new CommonResponse( + ErrorCodes.Http.Filter.User.NotExist, + Resources.Filters.MessageUserNotExist); + + if (context.HttpContext.Request.Method == "GET") + context.Result = new NotFoundObjectResult(body); + else + context.Result = new BadRequestObjectResult(body); + } + } +} diff --git a/Timeline/Resources/Filters.Designer.cs b/Timeline/Resources/Filters.Designer.cs index ae3565f7..e3c8be41 100644 --- a/Timeline/Resources/Filters.Designer.cs +++ b/Timeline/Resources/Filters.Designer.cs @@ -86,5 +86,14 @@ namespace Timeline.Resources { return ResourceManager.GetString("MessageHeaderContentTypeMissing", resourceCulture); } } + + /// + /// Looks up a localized string similar to The user does not exist.. + /// + internal static string MessageUserNotExist { + get { + return ResourceManager.GetString("MessageUserNotExist", resourceCulture); + } + } } } diff --git a/Timeline/Resources/Filters.resx b/Timeline/Resources/Filters.resx index d2b7e68a..ba1fcee8 100644 --- a/Timeline/Resources/Filters.resx +++ b/Timeline/Resources/Filters.resx @@ -126,4 +126,7 @@ Header Content-Type is required. + + The user does not exist. + \ No newline at end of file diff --git a/Timeline/Resources/Filters.zh.resx b/Timeline/Resources/Filters.zh.resx index 90e97e49..690a3e39 100644 --- a/Timeline/Resources/Filters.zh.resx +++ b/Timeline/Resources/Filters.zh.resx @@ -126,4 +126,7 @@ 缺少必需的请求头Content-Type。 + + 用户不存在。 + \ No newline at end of file -- cgit v1.2.3