Skip to content

Commit 99bebe3

Browse files
committed
Added tests for marker
1 parent 9061954 commit 99bebe3

File tree

7 files changed

+59
-13
lines changed

7 files changed

+59
-13
lines changed

src/LinkDotNet.Blog.Web/Shared/Services/MarkerService.cs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace LinkDotNet.Blog.Web.Shared.Services;
55

6-
public class MarkerService : IMarkerService
6+
public partial class MarkerService : IMarkerService
77
{
88
private readonly IJSRuntime jsRuntime;
99

@@ -17,19 +17,12 @@ public async Task<string> GetNewMarkdownForElementAsync(string elementId, string
1717
var selectionRange = await jsRuntime.InvokeAsync<SelectionRange>("getSelectionFromElement", elementId);
1818
if (selectionRange.Start == selectionRange.End)
1919
{
20-
return string.Empty;
20+
return content;
2121
}
2222

2323
var beforeMarker = selectionRange.Start > 0 ? content[..selectionRange.Start] : string.Empty;
24-
var marker = content.Substring(selectionRange.Start, selectionRange.End - selectionRange.Start);
25-
var afterMarker = content.Substring(selectionRange.End, content.Length - selectionRange.End - 1);
24+
var marker = content[selectionRange.Start..selectionRange.End];
25+
var afterMarker = content[selectionRange.End..];
2626
return beforeMarker + fenceBegin + marker + fenceEnd + afterMarker;
2727
}
28-
29-
private sealed class SelectionRange
30-
{
31-
public int Start { get; set; }
32-
33-
public int End { get; set; }
34-
}
3528
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace LinkDotNet.Blog.Web.Shared.Services;
2+
3+
public sealed class SelectionRange
4+
{
5+
public int Start { get; set; }
6+
7+
public int End { get; set; }
8+
}

src/LinkDotNet.Blog.Web/wwwroot/components/selection.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@ window.getSelectionFromElement = function (id) {
22
const elem = document.getElementById(id)
33
const start = elem.selectionStart
44
const end = elem.selectionEnd
5-
elem.selectionStart = elem.selectionEnd = 0
65
return { start, end }
76
}

tests/LinkDotNet.Blog.IntegrationTests/Web/Pages/Admin/CreateNewBlogPostPageTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public async Task ShouldSaveBlogPostOnSave()
2828
ctx.Services.AddScoped(_ => toastService.Object);
2929
ctx.ComponentFactories.AddStub<UploadFile>();
3030
ctx.Services.AddScoped(_ => Mock.Of<IFileProcessor>());
31+
ctx.Services.AddScoped(_ => Mock.Of<IMarkerService>());
3132
using var cut = ctx.RenderComponent<CreateNewBlogPostPage>();
3233
var newBlogPost = cut.FindComponent<CreateNewBlogPost>();
3334

tests/LinkDotNet.Blog.IntegrationTests/Web/Pages/Admin/UpdateBlogPostPageTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using LinkDotNet.Blog.Web.Pages.Admin;
1111
using LinkDotNet.Blog.Web.Shared;
1212
using LinkDotNet.Blog.Web.Shared.Admin;
13+
using LinkDotNet.Blog.Web.Shared.Services;
1314
using Microsoft.EntityFrameworkCore;
1415
using Microsoft.Extensions.DependencyInjection;
1516
using Moq;
@@ -30,6 +31,7 @@ public async Task ShouldSaveBlogPostOnSave()
3031
ctx.Services.AddScoped<IRepository<BlogPost>>(_ => Repository);
3132
ctx.Services.AddScoped(_ => toastService.Object);
3233
ctx.ComponentFactories.AddStub<UploadFile>();
34+
ctx.Services.AddScoped(_ => Mock.Of<IMarkerService>());
3335
using var cut = ctx.RenderComponent<UpdateBlogPostPage>(
3436
p => p.Add(s => s.BlogPostId, blogPost.Id));
3537
var newBlogPost = cut.FindComponent<CreateNewBlogPost>();

tests/LinkDotNet.Blog.UnitTests/Web/Shared/Admin/CreateNewBlogPostTests.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
using LinkDotNet.Blog.TestUtilities;
77
using LinkDotNet.Blog.Web.Shared;
88
using LinkDotNet.Blog.Web.Shared.Admin;
9+
using LinkDotNet.Blog.Web.Shared.Services;
10+
using Microsoft.Extensions.DependencyInjection;
11+
using Moq;
912
using Xunit;
1013

1114
namespace LinkDotNet.Blog.UnitTests.Web.Shared.Admin;
@@ -14,12 +17,13 @@ public class CreateNewBlogPostTests : TestContext
1417
{
1518
public CreateNewBlogPostTests()
1619
{
17-
ComponentFactories.Add<UploadFile, UploadFile>():
20+
ComponentFactories.AddStub<UploadFile>();
1821
}
1922

2023
[Fact]
2124
public void ShouldCreateNewBlogPostWhenValidDataGiven()
2225
{
26+
Services.AddScoped(_ => Mock.Of<IMarkerService>());
2327
BlogPost blogPost = null;
2428
var cut = RenderComponent<CreateNewBlogPost>(
2529
p => p.Add(c => c.OnBlogPostCreated, bp => blogPost = bp));
@@ -53,6 +57,7 @@ public void ShouldFillGivenBlogPost()
5357
.WithTags("tag1", "tag2")
5458
.Build();
5559
BlogPost blogPostFromComponent = null;
60+
Services.AddScoped(_ => Mock.Of<IMarkerService>());
5661
var cut = RenderComponent<CreateNewBlogPost>(
5762
p =>
5863
p.Add(c => c.OnBlogPostCreated, bp => blogPostFromComponent = bp)
@@ -74,6 +79,7 @@ public void ShouldFillGivenBlogPost()
7479
public void ShouldNotDeleteModelWhenSet()
7580
{
7681
BlogPost blogPost = null;
82+
Services.AddScoped(_ => Mock.Of<IMarkerService>());
7783
var cut = RenderComponent<CreateNewBlogPost>(
7884
p => p.Add(c => c.ClearAfterCreated, true)
7985
.Add(c => c.OnBlogPostCreated, post => blogPost = post));
@@ -94,6 +100,7 @@ public void ShouldNotDeleteModelWhenSet()
94100
public void ShouldNotDeleteModelWhenNotSet()
95101
{
96102
BlogPost blogPost = null;
103+
Services.AddScoped(_ => Mock.Of<IMarkerService>());
97104
var cut = RenderComponent<CreateNewBlogPost>(
98105
p => p.Add(c => c.ClearAfterCreated, false)
99106
.Add(c => c.OnBlogPostCreated, post => blogPost = post));
@@ -113,6 +120,7 @@ public void ShouldNotDeleteModelWhenNotSet()
113120
[Fact]
114121
public void ShouldNotUpdateUpdatedDateWhenCheckboxSet()
115122
{
123+
Services.AddScoped(_ => Mock.Of<IMarkerService>());
116124
var somewhen = new DateTime(1991, 5, 17);
117125
var originalBlogPost = new BlogPostBuilder().WithUpdatedDate(somewhen).Build();
118126
BlogPost blogPostFromComponent = null;
@@ -135,6 +143,7 @@ public void ShouldNotUpdateUpdatedDateWhenCheckboxSet()
135143
[Fact]
136144
public void ShouldNotSetOptionToNotUpdateUpdatedDateOnInitialCreate()
137145
{
146+
Services.AddScoped(_ => Mock.Of<IMarkerService>());
138147
var cut = RenderComponent<CreateNewBlogPost>();
139148

140149
var found = cut.FindAll("#updatedate");
@@ -145,6 +154,7 @@ public void ShouldNotSetOptionToNotUpdateUpdatedDateOnInitialCreate()
145154
[Fact]
146155
public void ShouldAcceptInputWithoutLosingFocusOrEnter()
147156
{
157+
Services.AddScoped(_ => Mock.Of<IMarkerService>());
148158
BlogPost blogPost = null;
149159
var cut = RenderComponent<CreateNewBlogPost>(
150160
p => p.Add(c => c.OnBlogPostCreated, bp => blogPost = bp));
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Threading.Tasks;
2+
using Bunit;
3+
using FluentAssertions;
4+
using LinkDotNet.Blog.Web.Shared.Services;
5+
using Xunit;
6+
7+
namespace LinkDotNet.Blog.UnitTests.Web.Shared.Services;
8+
9+
public class MarkerServiceTests : TestContext
10+
{
11+
private readonly MarkerService cut;
12+
13+
public MarkerServiceTests()
14+
{
15+
cut = new MarkerService(JSInterop.JSRuntime);
16+
}
17+
18+
[Theory]
19+
[InlineData("Test", 0, 2, "**", "**Te**st")]
20+
[InlineData("Test", 0, 4, "**", "**Test**")]
21+
[InlineData("Test", 0, 0, "**", "Test")]
22+
[InlineData("That is a test", 8, 9, "**", "That is **a** test")]
23+
public async Task ShouldMarkString(string source, int startSelect, int endSelect, string fence, string expected)
24+
{
25+
const string element = "id";
26+
JSInterop.Setup<SelectionRange>("getSelectionFromElement", element)
27+
.SetResult(new SelectionRange { Start = startSelect, End = endSelect });
28+
29+
var actual = await cut.GetNewMarkdownForElementAsync(element, source, fence, fence);
30+
31+
actual.Should().Be(expected);
32+
}
33+
}

0 commit comments

Comments
 (0)