Skip to content

Commit 9f2df54

Browse files
committed
Added DnD for Skills
1 parent 280cf76 commit 9f2df54

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

src/LinkDotNet.Blog.Infrastructure/Persistence/Sql/Repository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,4 @@ public async ValueTask DeleteAsync(string id)
7070
await blogDbContext.SaveChangesAsync();
7171
}
7272
}
73-
}
73+
}

src/LinkDotNet.Blog.Web/Shared/Skills/SkillTable.razor

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@
2525
<td>@skillCapabilityGroup.Key</td>
2626
@foreach (var skillLevel in ProficiencyLevel.All)
2727
{
28-
<td @ondrop="@(() => HandleDrop(skillLevel))">
28+
<td @ondrop="@(() => HandleDrop(skillLevel))" class="proficiency-level">
2929
@foreach (var skill in skillCapabilityGroup.Where(s => s.ProficiencyLevel == skillLevel))
3030
{
3131
@if (IsAuthenticated)
3232
{
33-
<div draggable="true" @ondrag="@(() => currentDragItem = skill)" style="cursor: grab">
34-
<SkillTag Skill="@skill" IsAuthenticated="@true" DeleteSkill="@(() =>
35-
DeleteSkill(skill))"/>
33+
<div draggable="true" @ondrag="@(() => currentDragItem = skill)" style="cursor: grab"
34+
class="skill-tag">
35+
<SkillTag Skill="@skill"
36+
IsAuthenticated="@true"
37+
DeleteSkill="@(() => DeleteSkill(skill))"/>
3638
</div>
3739
}
3840
else

tests/LinkDotNet.Blog.IntegrationTests/Web/Shared/Skills/SkillTableTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,24 @@ public async Task ShouldNotAllowToEditSkillTagsWhenNotAdmin()
7777
cut.WaitForState(() => cut.FindComponents<SkillTag>().Any());
7878
cut.FindComponent<SkillTag>().Instance.IsAuthenticated.Should().BeFalse();
7979
}
80+
81+
[Fact]
82+
public async Task ShouldUpdateProficiencyWhenSkillTagDragged()
83+
{
84+
using var ctx = new TestContext();
85+
var skill = new SkillBuilder().WithProficiencyLevel(ProficiencyLevel.Familiar).Build();
86+
await DbContext.AddAsync(skill);
87+
await DbContext.SaveChangesAsync();
88+
ctx.Services.AddScoped<IRepository<Skill>>(_ => Repository);
89+
ctx.Services.AddScoped(_ => Mock.Of<IToastService>());
90+
var cut = ctx.RenderComponent<SkillTable>(p =>
91+
p.Add(s => s.IsAuthenticated, true));
92+
cut.WaitForElement(".skill-tag");
93+
94+
cut.FindAll(".skill-tag")[0].Drag();
95+
cut.FindAll(".proficiency-level")[1].Drop();
96+
97+
var skillFromDb = await Repository.GetByIdAsync(skill.Id);
98+
skillFromDb.ProficiencyLevel.Should().Be(ProficiencyLevel.Proficient);
99+
}
80100
}

0 commit comments

Comments
 (0)