Skip to content

Commit d37d491

Browse files
committed
Added share possibility
1 parent 83f0f07 commit d37d491

File tree

4 files changed

+63
-9
lines changed

4 files changed

+63
-9
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Linq;
2+
using AngleSharp.Html.Dom;
3+
using Blazored.Toast.Services;
4+
using Bunit;
5+
using Bunit.TestDoubles;
6+
using FluentAssertions;
7+
using LinkDotNet.Blog.Web.Shared;
8+
using Microsoft.Extensions.DependencyInjection;
9+
using Moq;
10+
using Xunit;
11+
12+
namespace LinkDotNet.Blog.UnitTests.Web.Shared;
13+
14+
public class ShareBlogPostTests : TestContext
15+
{
16+
[Fact]
17+
public void ShouldCopyLinkToClipboard()
18+
{
19+
JSInterop.Mode = JSRuntimeMode.Loose;
20+
Services.AddScoped(_ => new Mock<IToastService>().Object);
21+
Services.GetRequiredService<FakeNavigationManager>().NavigateTo("blogPost/1");
22+
var cut = RenderComponent<ShareBlogPost>();
23+
24+
cut.FindAll("a")[1].Click();
25+
26+
var copyToClipboardInvocation = JSInterop.Invocations.SingleOrDefault(i => i.Identifier == "navigator.clipboard.writeText");
27+
copyToClipboardInvocation.Arguments[0].Should().Be("http://localhost/blogPost/1");
28+
}
29+
30+
[Fact]
31+
public void ShouldShareToLinkedIn()
32+
{
33+
Services.AddScoped(_ => new Mock<IToastService>().Object);
34+
Services.GetRequiredService<FakeNavigationManager>().NavigateTo("blogPost/1");
35+
36+
var cut = RenderComponent<ShareBlogPost>();
37+
38+
var linkedInShare = (IHtmlAnchorElement)cut.FindAll("a")[0];
39+
linkedInShare.Href.Should()
40+
.Be("https://www.linkedin.com/shareArticle?mini=true&url=http://localhost/blogPost/1");
41+
}
42+
}

LinkDotNet.Blog.Web/Pages/BlogPostPage.razor

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ else
3737
@(RenderMarkupString(BlogPost.Content))
3838
</div>
3939
</div>
40-
<Like BlogPost="@BlogPost" OnBlogPostLiked="@UpdateLikes"></Like>
40+
<div class="d-flex justify-content-between py-2">
41+
<Like BlogPost="@BlogPost" OnBlogPostLiked="@UpdateLikes"></Like>
42+
<ShareBlogPost></ShareBlogPost>
43+
</div>
4144
<Giscus></Giscus>
4245
</div>
4346
</div>

LinkDotNet.Blog.Web/Shared/Like.razor.css

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
@inject NavigationManager navigationManager
2+
@inject IJSRuntime jsRuntime
3+
@inject IToastService toastService
4+
5+
<div class="flex-row">
6+
<a href="@LinkedInShare" target="_blank"><i class="fab fa-linkedin"></i></a>
7+
<a href="javascript:void(0)" @onclick="CopyToClipboard"><i class="fas fa-link"></i></a>
8+
</div>
9+
@code {
10+
private string LinkedInShare => $"https://www.linkedin.com/shareArticle?mini=true&url={navigationManager.Uri}";
11+
12+
private async Task CopyToClipboard()
13+
{
14+
await jsRuntime.InvokeVoidAsync("navigator.clipboard.writeText", navigationManager.Uri);
15+
toastService.ShowSuccess("Copied link to clipboard");
16+
}
17+
}

0 commit comments

Comments
 (0)