diff --git a/.gitignore b/.gitignore index 3a868930..7cbf09f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,23 @@ -bin/ -obj/ -/packages/ -riderModule.iml -/_ReSharper.Caches/ -.fake -.vscode +# Visual Studio +.vs/ +*.suo +*.user +*.userosscache +*.sln.docstates + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ + +# NuGet Packages +*.nupkg +**/packages/* +!**/packages/build/ diff --git a/.vs/MyFirstBlog/DesignTimeBuild/.dtbcache.v2 b/.vs/MyFirstBlog/DesignTimeBuild/.dtbcache.v2 index e3a42a61..fffbed3d 100644 Binary files a/.vs/MyFirstBlog/DesignTimeBuild/.dtbcache.v2 and b/.vs/MyFirstBlog/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/MyFirstBlog/FileContentIndex/1451f00c-8a3c-4b67-9988-24ae06d88ff9.vsidx b/.vs/MyFirstBlog/FileContentIndex/1451f00c-8a3c-4b67-9988-24ae06d88ff9.vsidx deleted file mode 100644 index ae1b509b..00000000 Binary files a/.vs/MyFirstBlog/FileContentIndex/1451f00c-8a3c-4b67-9988-24ae06d88ff9.vsidx and /dev/null differ diff --git a/.vs/MyFirstBlog/FileContentIndex/3671b2ea-91c1-4fa3-8590-3e73598d97ea.vsidx b/.vs/MyFirstBlog/FileContentIndex/3671b2ea-91c1-4fa3-8590-3e73598d97ea.vsidx deleted file mode 100644 index 78b55c80..00000000 Binary files a/.vs/MyFirstBlog/FileContentIndex/3671b2ea-91c1-4fa3-8590-3e73598d97ea.vsidx and /dev/null differ diff --git a/.vs/MyFirstBlog/v17/.futdcache.v2 b/.vs/MyFirstBlog/v17/.futdcache.v2 index 128982d8..84d5c321 100644 Binary files a/.vs/MyFirstBlog/v17/.futdcache.v2 and b/.vs/MyFirstBlog/v17/.futdcache.v2 differ diff --git a/.vs/MyFirstBlog/v17/.suo b/.vs/MyFirstBlog/v17/.suo index 74e1a08b..42587e36 100644 Binary files a/.vs/MyFirstBlog/v17/.suo and b/.vs/MyFirstBlog/v17/.suo differ diff --git a/.vs/MyFirstBlog/v17/DocumentLayout.json b/.vs/MyFirstBlog/v17/DocumentLayout.json index 653eb6b4..9fa333b4 100644 --- a/.vs/MyFirstBlog/v17/DocumentLayout.json +++ b/.vs/MyFirstBlog/v17/DocumentLayout.json @@ -1,38 +1,42 @@ { "Version": 1, - "WorkspaceRootPath": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\", + "WorkspaceRootPath": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\00code\\fullstack\\myfirstblogbackend\\myfirstblog\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", - "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" + "AbsoluteMoniker": "D:0:0:{84D99732-A7E9-4E69-B5C7-7DFAFE9815B7}|MyFirstBlogTests\\MyFirstBlogTests.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblogtests\\controllers\\postscontrollertests.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{84D99732-A7E9-4E69-B5C7-7DFAFE9815B7}|MyFirstBlogTests\\MyFirstBlogTests.csproj|solutionrelative:myfirstblogtests\\controllers\\postscontrollertests.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblog\\controllers\\postscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\controllers\\postscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblog\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", + "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" }, { - "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\00code\\fullstack\\myfirstblogbackend\\myfirstblog\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblog\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\00code\\fullstack\\myfirstblogbackend\\myfirstblog\\entities\\post.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\entities\\post.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblog\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", + "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" }, { - "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\00code\\fullstack\\myfirstblogbackend\\myfirstblog\\services\\postservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\services\\postservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblog\\entities\\post.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\entities\\post.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\00code\\fullstack\\myfirstblogbackend\\myfirstblog\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", - "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" + "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblog\\services\\postservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\services\\postservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\00code\\fullstack\\myfirstblogbackend\\myfirstblog\\extensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblog\\extensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\extensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\00code\\fullstack\\myfirstblogbackend\\myfirstblog\\dtos\\postdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\users\\leidi\\source\\repos\\myfirstblogbackend\\myfirstblog\\dtos\\postdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\dtos\\postdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|c:\\00code\\fullstack\\myfirstblogbackend\\myfirstblog\\controllers\\postscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{BB64A02C-C5D9-4D64-A357-7322C54B1419}|MyFirstBlog\\MyFirstBlog.csproj|solutionrelative:myfirstblog\\controllers\\postscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -42,104 +46,144 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 6, + "SelectedChildIndex": 2, "Children": [ { - "$type": "Document", - "DocumentIndex": 1, - "Title": "Program.cs", - "DocumentMoniker": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Program.cs", - "RelativeDocumentMoniker": "MyFirstBlog\\Program.cs", - "ToolTip": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Program.cs", - "RelativeToolTip": "MyFirstBlog\\Program.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAAjAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-15T14:44:39.864Z" + "$type": "Bookmark", + "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}" }, { - "$type": "Document", - "DocumentIndex": 2, - "Title": "Post.cs", - "DocumentMoniker": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Entities\\Post.cs", - "RelativeDocumentMoniker": "MyFirstBlog\\Entities\\Post.cs", - "ToolTip": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Entities\\Post.cs", - "RelativeToolTip": "MyFirstBlog\\Entities\\Post.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAEAAAAAAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-15T14:43:03.248Z" + "$type": "Bookmark", + "Name": "ST:128:0:{75188d03-9892-4ae2-abf1-207126247ce5}" }, { "$type": "Document", - "DocumentIndex": 6, - "Title": "PostDto.cs", - "DocumentMoniker": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Dtos\\PostDto.cs", - "RelativeDocumentMoniker": "MyFirstBlog\\Dtos\\PostDto.cs", - "ToolTip": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Dtos\\PostDto.cs", - "RelativeToolTip": "MyFirstBlog\\Dtos\\PostDto.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAABAAAA", + "DocumentIndex": 0, + "Title": "PostsControllerTests.cs", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlogTests\\Controllers\\PostsControllerTests.cs", + "RelativeDocumentMoniker": "MyFirstBlogTests\\Controllers\\PostsControllerTests.cs", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlogTests\\Controllers\\PostsControllerTests.cs", + "RelativeToolTip": "MyFirstBlogTests\\Controllers\\PostsControllerTests.cs", + "ViewState": "AgIAACgAAAAAAAAAAAAQwDYAAAAJAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-15T14:42:47.081Z" + "WhenOpened": "2025-08-21T18:09:53.457Z", + "EditorCaption": "" + }, + { + "$type": "Bookmark", + "Name": "ST:129:0:{75188d03-9892-4ae2-abf1-207126247ce5}" + }, + { + "$type": "Bookmark", + "Name": "ST:130:0:{75188d03-9892-4ae2-abf1-207126247ce5}" + }, + { + "$type": "Bookmark", + "Name": "ST:131:0:{75188d03-9892-4ae2-abf1-207126247ce5}" }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 2, "Title": "appsettings.json", - "DocumentMoniker": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\appsettings.json", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\appsettings.json", "RelativeDocumentMoniker": "MyFirstBlog\\appsettings.json", - "ToolTip": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\appsettings.json", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\appsettings.json", "RelativeToolTip": "MyFirstBlog\\appsettings.json", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAEAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", - "WhenOpened": "2024-05-15T14:49:58.169Z" - }, - { - "$type": "Document", - "DocumentIndex": 3, - "Title": "PostService.cs", - "DocumentMoniker": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Services\\PostService.cs", - "RelativeDocumentMoniker": "MyFirstBlog\\Services\\PostService.cs", - "ToolTip": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Services\\PostService.cs", - "RelativeToolTip": "MyFirstBlog\\Services\\PostService.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAAkAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-15T14:45:00.15Z" + "WhenOpened": "2024-05-15T14:49:58.169Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 7, "Title": "Extensions.cs", - "DocumentMoniker": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Extensions.cs", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Extensions.cs", "RelativeDocumentMoniker": "MyFirstBlog\\Extensions.cs", - "ToolTip": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Extensions.cs", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Extensions.cs", "RelativeToolTip": "MyFirstBlog\\Extensions.cs", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAAuAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-15T14:44:53.417Z" + "WhenOpened": "2024-05-15T14:44:53.417Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 0, + "DocumentIndex": 4, "Title": "launchSettings.json", - "DocumentMoniker": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Properties\\launchSettings.json", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Properties\\launchSettings.json", "RelativeDocumentMoniker": "MyFirstBlog\\Properties\\launchSettings.json", - "ToolTip": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Properties\\launchSettings.json", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Properties\\launchSettings.json", "RelativeToolTip": "MyFirstBlog\\Properties\\launchSettings.json", - "ViewState": "AQIAAA8AAAAAAAAAAAAAABkAAAAfAAAA", + "ViewState": "AgIAAA8AAAAAAAAAAAAAABkAAAAfAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", "WhenOpened": "2024-05-15T14:50:05.724Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 1, "Title": "PostsController.cs", - "DocumentMoniker": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Controllers\\PostsController.cs", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Controllers\\PostsController.cs", "RelativeDocumentMoniker": "MyFirstBlog\\Controllers\\PostsController.cs", - "ToolTip": "C:\\00code\\FullStack\\MyFirstBlogBackEnd\\MyFirstBlog\\Controllers\\PostsController.cs", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Controllers\\PostsController.cs", "RelativeToolTip": "MyFirstBlog\\Controllers\\PostsController.cs", - "ViewState": "AQIAAAYAAAAAAAAAAAAAAAsAAAAAAAAA", + "ViewState": "AgIAAAsAAAAAAAAAAAAAwAsAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-05-15T14:42:54.111Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "PostService.cs", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Services\\PostService.cs", + "RelativeDocumentMoniker": "MyFirstBlog\\Services\\PostService.cs", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Services\\PostService.cs", + "RelativeToolTip": "MyFirstBlog\\Services\\PostService.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAAkAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-05-15T14:45:00.15Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "PostDto.cs", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Dtos\\PostDto.cs", + "RelativeDocumentMoniker": "MyFirstBlog\\Dtos\\PostDto.cs", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Dtos\\PostDto.cs", + "RelativeToolTip": "MyFirstBlog\\Dtos\\PostDto.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAABAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-15T14:42:54.111Z" + "WhenOpened": "2024-05-15T14:42:47.081Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "Program.cs", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Program.cs", + "RelativeDocumentMoniker": "MyFirstBlog\\Program.cs", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Program.cs", + "RelativeToolTip": "MyFirstBlog\\Program.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-05-15T14:44:39.864Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "Post.cs", + "DocumentMoniker": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Entities\\Post.cs", + "RelativeDocumentMoniker": "MyFirstBlog\\Entities\\Post.cs", + "ToolTip": "C:\\Users\\LeiDi\\source\\repos\\MyFirstBlogBackEnd\\MyFirstBlog\\Entities\\Post.cs", + "RelativeToolTip": "MyFirstBlog\\Entities\\Post.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAEAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-05-15T14:43:03.248Z", + "EditorCaption": "" } ] } diff --git a/.vs/ProjectEvaluation/myfirstblog.metadata.v7.bin b/.vs/ProjectEvaluation/myfirstblog.metadata.v7.bin deleted file mode 100644 index a3a97897..00000000 Binary files a/.vs/ProjectEvaluation/myfirstblog.metadata.v7.bin and /dev/null differ diff --git a/.vs/ProjectEvaluation/myfirstblog.projects.v7.bin b/.vs/ProjectEvaluation/myfirstblog.projects.v7.bin deleted file mode 100644 index cfc3e6a4..00000000 Binary files a/.vs/ProjectEvaluation/myfirstblog.projects.v7.bin and /dev/null differ diff --git a/MyFirstBlog/Program.cs b/MyFirstBlog/Program.cs index 4042b610..d6930ec9 100644 --- a/MyFirstBlog/Program.cs +++ b/MyFirstBlog/Program.cs @@ -19,6 +19,7 @@ }); }); + services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle services.AddEndpointsApiExplorer(); diff --git a/MyFirstBlog/appsettings.json b/MyFirstBlog/appsettings.json index 10f68b8c..a0c08e89 100644 --- a/MyFirstBlog/appsettings.json +++ b/MyFirstBlog/appsettings.json @@ -5,5 +5,7 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + + //"AllowedHosts": "*" } diff --git a/MyFirstBlogTests/Controllers/PostsControllerTests.cs b/MyFirstBlogTests/Controllers/PostsControllerTests.cs new file mode 100644 index 00000000..c245a0ff --- /dev/null +++ b/MyFirstBlogTests/Controllers/PostsControllerTests.cs @@ -0,0 +1,57 @@ +using Microsoft.AspNetCore.Mvc; +using Moq; +using MyFirstBlog.Controllers; +using MyFirstBlog.Dtos; +using MyFirstBlog.Services; +using System; +using Xunit; + +namespace MyFirstBlogTests.Controllers +{ + public class PostsControllerTests + { + [Fact] + public void GetPost_ReturnsPost_WhenSlugExists() + { + // Step 1: Create a fake post service + var fakePostService = new Mock(); + + // Step 2: Create a fake post to return + var fakePost = new PostDto + { + Title = "My Blog Post Test", + Slug = "my-blog-post-test" + }; + + // Step 3: Tell the fake service what to return when called + fakePostService.Setup(service => service.GetPost("my-blog-post")) + .Returns(fakePost); + + // Step 4: Create the controller with our fake service + var controller = new PostsController(fakePostService.Object); + + // Step 5: Call the method we want to test + var result = controller.GetPost("my-blog-post"); + + // Step 6: Check if we got the right answer + Assert.Equal("My Blog Post", result.Value.Title); + } + + [Fact] + public void GetPost_ReturnsNotFound_WhenSlugDoesNotExist() + { + // Create a fake service that returns nothing + var mockPostService = new Mock(); + mockPostService.Setup(service => service.GetPost("fake-slug")) + .Returns((PostDto)null); + + // Create controller + var controller = new PostsController(mockPostService.Object); + + // Call the method + var result = controller.GetPost("fake-slug"); + + Assert.IsType(result.Result); + } + } +} \ No newline at end of file diff --git a/MyFirstBlogTests/MyFirstBlogTests.csproj b/MyFirstBlogTests/MyFirstBlogTests.csproj index 79ed3371..5d2d950a 100644 --- a/MyFirstBlogTests/MyFirstBlogTests.csproj +++ b/MyFirstBlogTests/MyFirstBlogTests.csproj @@ -1,16 +1,21 @@ - net5.0 - + net7.0 false + enable - - - - + + + + + + + + + diff --git a/MyFirstBlogTests/UnitTest1.cs b/MyFirstBlogTests/UnitTest1.cs index 921a6668..191eff74 100644 --- a/MyFirstBlogTests/UnitTest1.cs +++ b/MyFirstBlogTests/UnitTest1.cs @@ -1,18 +1,58 @@ +using Microsoft.AspNetCore.Mvc; +using Moq; +using MyFirstBlog.Controllers; +using MyFirstBlog.Dtos; +using MyFirstBlog.Services; +using System; using NUnit.Framework; -namespace MyFirstBlogTests +namespace MyFirstBlogTests.Controllers { - public class Tests + public class PostsControllerTests { - [SetUp] - public void Setup() + [Test] + public void IfSlugExists() { + // Step 1: Create a fake post service + var fakePostService = new Mock(); + + // Step 2: Create a fake post to return + var fakePost = new PostDto + { + Title = "Testing My Blog Post ", + Slug = "my-blog-post" + }; + + // Step 3: Tell the fake service what to return when called + fakePostService.Setup(service => service.GetPost("my-blog-post")) + .Returns(fakePost); + + // Step 4: Create the controller with our fake service + var controller = new PostsController(fakePostService.Object); + + // Step 5: Call the method we want to test + var result = controller.GetPost("my-blog-post"); + + // Step 6: Check if we got the right answer + Assert.Equals("Testing My Blog Post ", result.Value.Title); } [Test] - public void Test1() + public void IfSlugDoesNotExist() { - Assert.Pass(); + // Create a fake service that returns nothing + var mockPostService = new Mock(); + mockPostService.Setup(service => service.GetPost("fake-slug")) + .Returns((PostDto)null); + + // Create controller + var controller = new PostsController(mockPostService.Object); + + // Call the method + var result = controller.GetPost("fake-slug"); + + // Check that we got "Not Found" + Assert.That(result.Result, Is.InstanceOf()); } } }