11===============================================================================
22PROJECT EXPORT
3- Generated: Fri Jan 16 09:50:06 PM EST 2026
3+ Generated: Fri Jan 16 09:58:58 PM EST 2026
44Project Path: /home/kushal/src/dotnet/MyBlog
55===============================================================================
66
@@ -4103,8 +4103,8 @@ MODIFIED: 2026-01-01 22:21:17
41034103
41044104================================================================================
41054105FILE: src/Directory.Packages.props
4106- SIZE: 1.45 KB
4107- MODIFIED: 2026-01-16 20:29 :40
4106+ SIZE: 1.52 KB
4107+ MODIFIED: 2026-01-16 21:56 :40
41084108================================================================================
41094109
41104110<Project>
@@ -4120,6 +4120,7 @@ MODIFIED: 2026-01-16 20:29:40
41204120 <PackageVersion Include="Microsoft.AspNetCore.Identity" Version="2.3.9" />
41214121 <PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.1" />
41224122 <!-- OpenTelemetry (official packages only) -->
4123+ <PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.2" />
41234124 <PackageVersion Include="OpenTelemetry" Version="1.14.0" />
41244125 <PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.14.0" />
41254126 <PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.14.0" />
@@ -10896,8 +10897,8 @@ public static class DatabasePathResolver
1089610897
1089710898================================================================================
1089810899FILE: src/MyBlog.Infrastructure/MyBlog.Infrastructure.csproj
10899- SIZE: .44 KB
10900- MODIFIED: 2025-12-28 08:44:06
10900+ SIZE: .50 KB
10901+ MODIFIED: 2026-01-16 21:56:40
1090110902================================================================================
1090210903
1090310904<Project Sdk="Microsoft.NET.Sdk">
@@ -10908,6 +10909,7 @@ MODIFIED: 2025-12-28 08:44:06
1090810909 <ItemGroup>
1090910910 <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
1091010911 <PackageReference Include="Microsoft.AspNetCore.Identity" />
10912+ <PackageReference Include="Microsoft.Extensions.Http" />
1091110913 <PackageReference Include="OpenTelemetry" />
1091210914 </ItemGroup>
1091310915
@@ -11273,7 +11275,7 @@ public sealed class UserRepository : IUserRepository
1127311275================================================================================
1127411276FILE: src/MyBlog.Infrastructure/ServiceCollectionExtensions.cs
1127511277SIZE: 2.05 KB
11276- MODIFIED: 2026-01-16 21:47:25
11278+ MODIFIED: 2026-01-16 21:54:07
1127711279================================================================================
1127811280
1127911281using Microsoft.EntityFrameworkCore;
@@ -13436,128 +13438,153 @@ public sealed class LoginRateLimitMiddlewareTests : IDisposable
1343613438
1343713439================================================================================
1343813440FILE: src/MyBlog.Tests/Unit/MarkdownServiceTests.cs
13439- SIZE: 3.30 KB
13440- MODIFIED: 2025-12-28 08:44:06
13441+ SIZE: 4.52 KB
13442+ MODIFIED: 2026-01-16 21:57:26
1344113443================================================================================
1344213444
13445+ using MyBlog.Core.Interfaces;
1344313446using MyBlog.Core.Services;
13447+ using System.Threading;
13448+ using System.Threading.Tasks;
1344413449using Xunit;
1344513450
1344613451namespace MyBlog.Tests.Unit;
1344713452
13453+ // Mock implementation for testing
13454+ class MockImageDimensionService : IImageDimensionService
13455+ {
13456+ public Task<(int Width, int Height)?> GetDimensionsAsync(string url, CancellationToken cancellationToken = default)
13457+ {
13458+ if (url.Contains("image.png"))
13459+ {
13460+ return Task.FromResult<(int, int)?>( (100, 200) );
13461+ }
13462+
13463+ return Task.FromResult<(int, int)?>(null);
13464+ }
13465+ }
13466+
1344813467public class MarkdownServiceTests
1344913468{
13450- private readonly MarkdownService _sut = new();
13469+ private readonly MarkdownService _sut = new(new MockImageDimensionService() );
1345113470
1345213471 [Fact]
13453- public void ToHtml_WithHeading1_ReturnsH1Tag()
13472+ public async Task ToHtml_WithHeading1_ReturnsH1Tag()
1345413473 {
13455- var result = _sut.ToHtml ("# Hello");
13474+ var result = await _sut.ToHtmlAsync ("# Hello");
1345613475 Assert.Contains("<h1>Hello</h1>", result);
1345713476 }
1345813477
1345913478 [Fact]
13460- public void ToHtml_WithHeading2_ReturnsH2Tag()
13479+ public async Task ToHtml_WithHeading2_ReturnsH2Tag()
1346113480 {
13462- var result = _sut.ToHtml ("## Hello");
13481+ var result = await _sut.ToHtmlAsync ("## Hello");
1346313482 Assert.Contains("<h2>Hello</h2>", result);
1346413483 }
1346513484
1346613485 [Fact]
13467- public void ToHtml_WithHeading6_ReturnsH6Tag()
13486+ public async Task ToHtml_WithHeading6_ReturnsH6Tag()
1346813487 {
13469- var result = _sut.ToHtml ("###### Hello");
13488+ var result = await _sut.ToHtmlAsync ("###### Hello");
1347013489 Assert.Contains("<h6>Hello</h6>", result);
1347113490 }
1347213491
1347313492 [Fact]
13474- public void ToHtml_WithBoldText_ReturnsStrongTag()
13493+ public async Task ToHtml_WithBoldText_ReturnsStrongTag()
1347513494 {
13476- var result = _sut.ToHtml ("This is **bold** text");
13495+ var result = await _sut.ToHtmlAsync ("This is **bold** text");
1347713496 Assert.Contains("<strong>bold</strong>", result);
1347813497 }
1347913498
1348013499 [Fact]
13481- public void ToHtml_WithItalicText_ReturnsEmTag()
13500+ public async Task ToHtml_WithItalicText_ReturnsEmTag()
1348213501 {
13483- var result = _sut.ToHtml ("This is *italic* text");
13502+ var result = await _sut.ToHtmlAsync ("This is *italic* text");
1348413503 Assert.Contains("<em>italic</em>", result);
1348513504 }
1348613505
1348713506 [Fact]
13488- public void ToHtml_WithLink_ReturnsAnchorTag()
13507+ public async Task ToHtml_WithLink_ReturnsAnchorTag()
1348913508 {
13490- var result = _sut.ToHtml ("Check [this link](https://example.com)");
13491- Assert.Contains("<a href=\"https://example.com\">this link</a>", result);
13509+ var result = await _sut.ToHtmlAsync ("Check [this link](https://example.com)");
13510+ Assert.Contains("<a href=\"[ https://example.com](https://example.com) \">this link</a>", result);
1349213511 }
1349313512
1349413513 [Fact]
13495- public void ToHtml_WithImage_ReturnsImgTag ()
13514+ public async Task ToHtml_WithImage_InjectsDimensions_IfResolvable ()
1349613515 {
13497- var result = _sut.ToHtml("");
13498- Assert.Contains("<img src=\"https://example.com/image.png\" alt=\"alt text\" />", result);
13516+ // Mock returns 100x200 for 'image.png'
13517+ var result = await _sut.ToHtmlAsync("");
13518+ Assert.Contains("<img src=\"[https://example.com/image.png](https://example.com/image.png)\" alt=\"alt text\" width=\"100\" height=\"200\" />", result);
1349913519 }
1350013520
1350113521 [Fact]
13502- public void ToHtml_WithInlineCode_ReturnsCodeTag ()
13522+ public async Task ToHtml_WithImage_NoDimensions_IfUnresolvable ()
1350313523 {
13504- var result = _sut.ToHtml("Use `code` here");
13524+ var result = await _sut.ToHtmlAsync("");
13525+ Assert.Contains("<img src=\"[https://example.com/unknown.jpg](https://example.com/unknown.jpg)\" alt=\"alt text\" />", result);
13526+ }
13527+
13528+ [Fact]
13529+ public async Task ToHtml_WithInlineCode_ReturnsCodeTag()
13530+ {
13531+ var result = await _sut.ToHtmlAsync("Use `code` here");
1350513532 Assert.Contains("<code>code</code>", result);
1350613533 }
1350713534
1350813535 [Fact]
13509- public void ToHtml_WithCodeBlock_ReturnsPreCodeTags()
13536+ public async Task ToHtml_WithCodeBlock_ReturnsPreCodeTags()
1351013537 {
1351113538 var markdown = "```\nvar x = 1;\n```";
13512- var result = _sut.ToHtml (markdown);
13539+ var result = await _sut.ToHtmlAsync (markdown);
1351313540 Assert.Contains("<pre><code>", result);
1351413541 Assert.Contains("var x = 1;", result);
1351513542 Assert.Contains("</code></pre>", result);
1351613543 }
1351713544
1351813545 [Fact]
13519- public void ToHtml_WithBlockquote_ReturnsBlockquoteTag()
13546+ public async Task ToHtml_WithBlockquote_ReturnsBlockquoteTag()
1352013547 {
13521- var result = _sut.ToHtml ("> This is a quote");
13548+ var result = await _sut.ToHtmlAsync ("> This is a quote");
1352213549 Assert.Contains("<blockquote><p>This is a quote</p></blockquote>", result);
1352313550 }
1352413551
1352513552 [Fact]
13526- public void ToHtml_WithUnorderedList_ReturnsUlLiTags()
13553+ public async Task ToHtml_WithUnorderedList_ReturnsUlLiTags()
1352713554 {
1352813555 var markdown = "- Item 1\n- Item 2";
13529- var result = _sut.ToHtml (markdown);
13556+ var result = await _sut.ToHtmlAsync (markdown);
1353013557 Assert.Contains("<ul>", result);
1353113558 Assert.Contains("<li>Item 1</li>", result);
1353213559 Assert.Contains("<li>Item 2</li>", result);
1353313560 Assert.Contains("</ul>", result);
1353413561 }
1353513562
1353613563 [Fact]
13537- public void ToHtml_WithHorizontalRule_ReturnsHrTag()
13564+ public async Task ToHtml_WithHorizontalRule_ReturnsHrTag()
1353813565 {
13539- var result = _sut.ToHtml ("---");
13566+ var result = await _sut.ToHtmlAsync ("---");
1354013567 Assert.Contains("<hr />", result);
1354113568 }
1354213569
1354313570 [Fact]
13544- public void ToHtml_WithEmptyString_ReturnsEmptyString()
13571+ public async Task ToHtml_WithEmptyString_ReturnsEmptyString()
1354513572 {
13546- var result = _sut.ToHtml ("");
13573+ var result = await _sut.ToHtmlAsync ("");
1354713574 Assert.Equal(string.Empty, result);
1354813575 }
1354913576
1355013577 [Fact]
13551- public void ToHtml_WithPlainText_ReturnsParagraph()
13578+ public async Task ToHtml_WithPlainText_ReturnsParagraph()
1355213579 {
13553- var result = _sut.ToHtml ("Hello world");
13580+ var result = await _sut.ToHtmlAsync ("Hello world");
1355413581 Assert.Contains("<p>Hello world</p>", result);
1355513582 }
1355613583
1355713584 [Fact]
13558- public void ToHtml_WithHtmlCharacters_EscapesThem()
13585+ public async Task ToHtml_WithHtmlCharacters_EscapesThem()
1355913586 {
13560- var result = _sut.ToHtml ("Use <script> tags");
13587+ var result = await _sut.ToHtmlAsync ("Use <script> tags");
1356113588 Assert.Contains("<script>", result);
1356213589 Assert.DoesNotContain("<script>", result);
1356313590 }
@@ -16807,7 +16834,7 @@ echo "=============================================="
1680716834
1680816835
1680916836===============================================================================
16810- EXPORT COMPLETED: Fri Jan 16 09:50:07 PM EST 2026
16837+ EXPORT COMPLETED: Fri Jan 16 09:58:59 PM EST 2026
1681116838Total Files Found: 90
1681216839Files Exported: 90
1681316840Files Skipped: 0 (binary or large files)
0 commit comments