Compare commits
No commits in common. "b94e5fd4a814b36ecb42f47bcd8f0339321770fd" and "a9e9a6e457479106be01a4ade5bb2ef091a7305f" have entirely different histories.
b94e5fd4a8
...
a9e9a6e457
4 changed files with 0 additions and 472 deletions
|
|
@ -1,161 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using GermanApp.Application.DTOs;
|
|
||||||
using GermanApp.Application.Services;
|
|
||||||
using GermanApp.Domain.Entities;
|
|
||||||
using GermanApp.Domain.Interfaces;
|
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
||||||
using Moq;
|
|
||||||
|
|
||||||
namespace GermanApp.Tests.Unit.Application.Services;
|
|
||||||
|
|
||||||
[TestClass]
|
|
||||||
public class LessonServiceTests
|
|
||||||
{
|
|
||||||
private Mock<ILessonRepository> _mockLessonRepo;
|
|
||||||
private Mock<ILevelRepository> _mockLevelRepo;
|
|
||||||
private LessonService _service;
|
|
||||||
|
|
||||||
[TestInitialize]
|
|
||||||
public void Setup()
|
|
||||||
{
|
|
||||||
_mockLessonRepo = new Mock<ILessonRepository>();
|
|
||||||
_mockLevelRepo = new Mock<ILevelRepository>();
|
|
||||||
_service = new LessonService(_mockLessonRepo.Object, _mockLevelRepo.Object);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetAllLessonsAsync_ReturnsMappedDtoList()
|
|
||||||
{
|
|
||||||
var lessons = new List<Lesson> { Lesson.Create(1, "Test", 1, "Topic", "Desc") };
|
|
||||||
_mockLessonRepo.Setup(r => r.GetAllAsync(It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(lessons);
|
|
||||||
|
|
||||||
var result = await _service.GetAllLessonsAsync();
|
|
||||||
|
|
||||||
Assert.AreEqual(1, result.Count);
|
|
||||||
Assert.AreEqual("Test", result[0].Title);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetLessonByIdAsync_WithExistingId_ReturnsLesson()
|
|
||||||
{
|
|
||||||
var lesson = Lesson.Create(1, "Test", 1, "Topic", "Desc");
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByIdAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(lesson);
|
|
||||||
|
|
||||||
var result = await _service.GetLessonByIdAsync(1);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
Assert.AreEqual("Test", result.Title);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetLessonByIdAsync_WithNonExistingId_ReturnsNull()
|
|
||||||
{
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByIdAsync(999, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync((Lesson?)null);
|
|
||||||
|
|
||||||
var result = await _service.GetLessonByIdAsync(999);
|
|
||||||
|
|
||||||
Assert.IsNull(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetLessonsByLevelAsync_ReturnsFilteredLessons()
|
|
||||||
{
|
|
||||||
var lessons = new List<Lesson> { Lesson.Create(1, "L1", 1, "T1", "D1") };
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByLevelAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(lessons);
|
|
||||||
|
|
||||||
var result = await _service.GetLessonsByLevelAsync(1);
|
|
||||||
|
|
||||||
Assert.AreEqual(1, result.Count);
|
|
||||||
Assert.AreEqual("L1", result[0].Title);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task CreateLessonAsync_WithValidDtoAndValidLevel_CreatesLesson()
|
|
||||||
{
|
|
||||||
var level = Level.Create("A1", "A1", 1);
|
|
||||||
var dto = new CreateLessonDto("New", "Desc", 1, 1, "Topic");
|
|
||||||
var lesson = Lesson.Create(1, "New", 1, "Topic", "Desc");
|
|
||||||
|
|
||||||
_mockLevelRepo.Setup(r => r.GetByIdAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level);
|
|
||||||
_mockLessonRepo.Setup(r => r.AddAsync(It.IsAny<Lesson>(), It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(lesson);
|
|
||||||
|
|
||||||
var result = await _service.CreateLessonAsync(dto);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
Assert.AreEqual("New", result.Title);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task UpdateLessonAsync_WithExistingLesson_UpdatesLesson()
|
|
||||||
{
|
|
||||||
var existing = Lesson.Create(1, "Old", 1, "OldT", "OldD");
|
|
||||||
var level = Level.Create("A1", "A1", 1);
|
|
||||||
var dto = new UpdateLessonDto("New", "NewD", 1, 1, "NewT");
|
|
||||||
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByIdAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(existing);
|
|
||||||
_mockLevelRepo.Setup(r => r.GetByIdAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level);
|
|
||||||
_mockLessonRepo.Setup(r => r.UpdateAsync(existing, It.IsAny<CancellationToken>()))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var result = await _service.UpdateLessonAsync(1, dto);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task DeleteLessonAsync_WithExistingLesson_ReturnsTrue()
|
|
||||||
{
|
|
||||||
var lesson = Lesson.Create(1, "Test", 1, "Topic", "Desc");
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByIdAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(lesson);
|
|
||||||
_mockLessonRepo.Setup(r => r.DeleteAsync(lesson, It.IsAny<CancellationToken>()))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var result = await _service.DeleteLessonAsync(1);
|
|
||||||
|
|
||||||
Assert.IsTrue(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetBeginnerLessonsAsync_ReturnsA1AndA2Lessons()
|
|
||||||
{
|
|
||||||
var level1 = new List<Lesson> { Lesson.Create(1, "A1L1", 1, "T1", "D1") };
|
|
||||||
var level2 = new List<Lesson> { Lesson.Create(2, "A2L1", 1, "T2", "D2") };
|
|
||||||
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByLevelAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level1);
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByLevelAsync(2, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level2);
|
|
||||||
|
|
||||||
var result = await _service.GetBeginnerLessonsAsync();
|
|
||||||
|
|
||||||
Assert.AreEqual(2, result.Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetAdvancedLessonsAsync_ReturnsB2AndC1Lessons()
|
|
||||||
{
|
|
||||||
var level4 = new List<Lesson> { Lesson.Create(4, "B2L1", 1, "T4", "D4") };
|
|
||||||
var level5 = new List<Lesson> { Lesson.Create(5, "C1L1", 1, "T5", "D5") };
|
|
||||||
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByLevelAsync(4, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level4);
|
|
||||||
_mockLessonRepo.Setup(r => r.GetByLevelAsync(5, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level5);
|
|
||||||
|
|
||||||
var result = await _service.GetAdvancedLessonsAsync();
|
|
||||||
|
|
||||||
Assert.AreEqual(2, result.Count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,143 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using GermanApp.Application.DTOs;
|
|
||||||
using GermanApp.Application.Services;
|
|
||||||
using GermanApp.Domain.Entities;
|
|
||||||
using GermanApp.Domain.Interfaces;
|
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
||||||
using Moq;
|
|
||||||
|
|
||||||
namespace GermanApp.Tests.Unit.Application.Services;
|
|
||||||
|
|
||||||
[TestClass]
|
|
||||||
public class LevelServiceTests
|
|
||||||
{
|
|
||||||
private Mock<ILevelRepository> _mockRepo;
|
|
||||||
private LevelService _service;
|
|
||||||
|
|
||||||
[TestInitialize]
|
|
||||||
public void Setup()
|
|
||||||
{
|
|
||||||
_mockRepo = new Mock<ILevelRepository>();
|
|
||||||
_service = new LevelService(_mockRepo.Object);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetAllLevelsAsync_ReturnsMappedDtoList()
|
|
||||||
{
|
|
||||||
var levels = new List<Level> { Level.Create("A1", "A1", 1) };
|
|
||||||
_mockRepo.Setup(r => r.GetAllOrderedAsync(It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(levels);
|
|
||||||
|
|
||||||
var result = await _service.GetAllLevelsAsync();
|
|
||||||
|
|
||||||
Assert.AreEqual(1, result.Count);
|
|
||||||
Assert.AreEqual("A1", result[0].Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetLevelByIdAsync_WithExistingId_ReturnsLevel()
|
|
||||||
{
|
|
||||||
var level = Level.Create("A1", "A1", 1);
|
|
||||||
_mockRepo.Setup(r => r.GetByIdAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level);
|
|
||||||
|
|
||||||
var result = await _service.GetLevelByIdAsync(1);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
Assert.AreEqual("A1", result.Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetLevelByIdAsync_WithNonExistingId_ReturnsNull()
|
|
||||||
{
|
|
||||||
_mockRepo.Setup(r => r.GetByIdAsync(999, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync((Level?)null);
|
|
||||||
|
|
||||||
var result = await _service.GetLevelByIdAsync(999);
|
|
||||||
|
|
||||||
Assert.IsNull(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetLevelByCodeAsync_WithExistingCode_ReturnsLevel()
|
|
||||||
{
|
|
||||||
var level = Level.Create("A1", "A1", 1);
|
|
||||||
_mockRepo.Setup(r => r.GetByCodeAsync("A1", It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level);
|
|
||||||
|
|
||||||
var result = await _service.GetLevelByCodeAsync("A1");
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
Assert.AreEqual("A1", result.Code);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task CreateLevelAsync_WithValidDto_CallsAddAsync()
|
|
||||||
{
|
|
||||||
var dto = new CreateLevelDto("Test", "T1", 1);
|
|
||||||
var level = Level.Create("Test", "T1", 1);
|
|
||||||
_mockRepo.Setup(r => r.AddAsync(It.IsAny<Level>(), It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level);
|
|
||||||
|
|
||||||
var result = await _service.CreateLevelAsync(dto);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
_mockRepo.Verify(r => r.AddAsync(It.IsAny<Level>(), It.IsAny<CancellationToken>()), Times.Once);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task UpdateLevelAsync_WithExistingLevel_CallsUpdateAsync()
|
|
||||||
{
|
|
||||||
var existing = Level.Create("A1", "A1", 1);
|
|
||||||
var dto = new UpdateLevelDto("New", "N1", 2);
|
|
||||||
_mockRepo.Setup(r => r.GetByIdAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(existing);
|
|
||||||
_mockRepo.Setup(r => r.UpdateAsync(existing, It.IsAny<CancellationToken>()))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var result = await _service.UpdateLevelAsync(1, dto);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
_mockRepo.Verify(r => r.UpdateAsync(existing, It.IsAny<CancellationToken>()), Times.Once);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task UpdateLevelAsync_WithNonExistingLevel_ReturnsNull()
|
|
||||||
{
|
|
||||||
var dto = new UpdateLevelDto("New", "N1", 2);
|
|
||||||
_mockRepo.Setup(r => r.GetByIdAsync(999, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync((Level?)null);
|
|
||||||
|
|
||||||
var result = await _service.UpdateLevelAsync(999, dto);
|
|
||||||
|
|
||||||
Assert.IsNull(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task DeleteLevelAsync_WithExistingLevel_ReturnsTrue()
|
|
||||||
{
|
|
||||||
var level = Level.Create("A1", "A1", 1);
|
|
||||||
_mockRepo.Setup(r => r.GetByIdAsync(1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(level);
|
|
||||||
_mockRepo.Setup(r => r.DeleteAsync(level, It.IsAny<CancellationToken>()))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var result = await _service.DeleteLevelAsync(1);
|
|
||||||
|
|
||||||
Assert.IsTrue(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task DeleteLevelAsync_WithNonExistingLevel_ReturnsFalse()
|
|
||||||
{
|
|
||||||
_mockRepo.Setup(r => r.GetByIdAsync(999, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync((Level?)null);
|
|
||||||
|
|
||||||
var result = await _service.DeleteLevelAsync(999);
|
|
||||||
|
|
||||||
Assert.IsFalse(result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,167 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using GermanApp.Application.DTOs;
|
|
||||||
using GermanApp.Application.Services;
|
|
||||||
using GermanApp.Domain.Entities;
|
|
||||||
using GermanApp.Domain.Interfaces;
|
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
||||||
using Moq;
|
|
||||||
|
|
||||||
namespace GermanApp.Tests.Unit.Application.Services;
|
|
||||||
|
|
||||||
[TestClass]
|
|
||||||
public class ProgressServiceTests
|
|
||||||
{
|
|
||||||
private Mock<IUserProgressRepository> _mockProgressRepo;
|
|
||||||
private Mock<ILessonRepository> _mockLessonRepo;
|
|
||||||
private Mock<ILevelRepository> _mockLevelRepo;
|
|
||||||
private ProgressService _service;
|
|
||||||
|
|
||||||
[TestInitialize]
|
|
||||||
public void Setup()
|
|
||||||
{
|
|
||||||
_mockProgressRepo = new Mock<IUserProgressRepository>();
|
|
||||||
_mockLessonRepo = new Mock<ILessonRepository>();
|
|
||||||
_mockLevelRepo = new Mock<ILevelRepository>();
|
|
||||||
_service = new ProgressService(
|
|
||||||
_mockProgressRepo.Object,
|
|
||||||
_mockLessonRepo.Object,
|
|
||||||
_mockLevelRepo.Object);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetUserProgressAsync_WithExistingProgress_ReturnsDto()
|
|
||||||
{
|
|
||||||
var progress = UserProgress.Create(1, 1);
|
|
||||||
progress.MarkAsCompleted(85);
|
|
||||||
_mockProgressRepo.Setup(r => r.GetByUserAndLessonAsync(1, 1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(progress);
|
|
||||||
|
|
||||||
var result = await _service.GetUserProgressAsync(1, 1);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
Assert.IsTrue(result.IsCompleted);
|
|
||||||
Assert.AreEqual(85, result.QuizScore);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetUserProgressAsync_WithNoProgress_ReturnsNull()
|
|
||||||
{
|
|
||||||
_mockProgressRepo.Setup(r => r.GetByUserAndLessonAsync(1, 999, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync((UserProgress?)null);
|
|
||||||
|
|
||||||
var result = await _service.GetUserProgressAsync(1, 999);
|
|
||||||
|
|
||||||
Assert.IsNull(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task HasUserCompletedLessonAsync_ReturnsRepositoryResult()
|
|
||||||
{
|
|
||||||
_mockProgressRepo.Setup(r => r.HasUserCompletedLessonAsync(1, 1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(true);
|
|
||||||
|
|
||||||
var result = await _service.HasUserCompletedLessonAsync(1, 1);
|
|
||||||
|
|
||||||
Assert.IsTrue(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task MarkLessonAsCompletedAsync_WithNewProgress_CreatesProgress()
|
|
||||||
{
|
|
||||||
_mockProgressRepo.Setup(r => r.GetByUserAndLessonAsync(1, 1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync((UserProgress?)null);
|
|
||||||
var newProgress = UserProgress.Create(1, 1);
|
|
||||||
newProgress.MarkAsCompleted(90);
|
|
||||||
_mockProgressRepo.Setup(r => r.AddAsync(It.IsAny<UserProgress>(), It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(newProgress);
|
|
||||||
|
|
||||||
var result = await _service.MarkLessonAsCompletedAsync(1, 1, 90);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
Assert.IsTrue(result.IsCompleted);
|
|
||||||
Assert.AreEqual(90, result.QuizScore);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task MarkLessonAsCompletedAsync_WithExistingProgress_UpdatesProgress()
|
|
||||||
{
|
|
||||||
var existingProgress = UserProgress.Create(1, 1);
|
|
||||||
existingProgress.UpdateQuizScore(50);
|
|
||||||
_mockProgressRepo.Setup(r => r.GetByUserAndLessonAsync(1, 1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(existingProgress);
|
|
||||||
_mockProgressRepo.Setup(r => r.UpdateAsync(existingProgress, It.IsAny<CancellationToken>()))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var result = await _service.MarkLessonAsCompletedAsync(1, 1, 85);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
Assert.IsTrue(result.IsCompleted);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task UpdateUserProgressAsync_WithNewProgress_CreatesProgress()
|
|
||||||
{
|
|
||||||
var dto = new UpdateUserProgressDto(1, false, 60);
|
|
||||||
_mockProgressRepo.Setup(r => r.GetByUserAndLessonAsync(1, 1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync((UserProgress?)null);
|
|
||||||
var newProgress = UserProgress.Create(1, 1);
|
|
||||||
newProgress.UpdateQuizScore(60);
|
|
||||||
_mockProgressRepo.Setup(r => r.AddAsync(It.IsAny<UserProgress>(), It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(newProgress);
|
|
||||||
|
|
||||||
var result = await _service.UpdateUserProgressAsync(1, dto);
|
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
|
||||||
Assert.AreEqual(60, result.QuizScore);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task ResetLessonProgressAsync_WithExistingProgress_ReturnsTrue()
|
|
||||||
{
|
|
||||||
var progress = UserProgress.Create(1, 1);
|
|
||||||
progress.MarkAsCompleted(90);
|
|
||||||
_mockProgressRepo.Setup(r => r.GetByUserAndLessonAsync(1, 1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(progress);
|
|
||||||
_mockProgressRepo.Setup(r => r.UpdateAsync(progress, It.IsAny<CancellationToken>()))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var result = await _service.ResetLessonProgressAsync(1, 1);
|
|
||||||
|
|
||||||
Assert.IsTrue(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task ResetLessonProgressAsync_WithNoProgress_ReturnsFalse()
|
|
||||||
{
|
|
||||||
_mockProgressRepo.Setup(r => r.GetByUserAndLessonAsync(1, 999, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync((UserProgress?)null);
|
|
||||||
|
|
||||||
var result = await _service.ResetLessonProgressAsync(1, 999);
|
|
||||||
|
|
||||||
Assert.IsFalse(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetAverageScoreForLevelAsync_ReturnsRepositoryResult()
|
|
||||||
{
|
|
||||||
_mockProgressRepo.Setup(r => r.GetAverageScoreForLevelAsync(1, 1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(75.5);
|
|
||||||
|
|
||||||
var result = await _service.GetAverageScoreForLevelAsync(1, 1);
|
|
||||||
|
|
||||||
Assert.AreEqual(75.5, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task GetLevelCompletionPercentageAsync_ReturnsRepositoryResult()
|
|
||||||
{
|
|
||||||
_mockProgressRepo.Setup(r => r.GetLevelCompletionPercentageAsync(1, 1, It.IsAny<CancellationToken>()))
|
|
||||||
.ReturnsAsync(60.0);
|
|
||||||
|
|
||||||
var result = await _service.GetLevelCompletionPercentageAsync(1, 1);
|
|
||||||
|
|
||||||
Assert.AreEqual(60.0, result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -198,7 +198,6 @@ Each lesson contains:
|
||||||
- [x] Create Application/Services/LevelService.cs
|
- [x] Create Application/Services/LevelService.cs
|
||||||
- [x] Create Application/Services/LessonService.cs
|
- [x] Create Application/Services/LessonService.cs
|
||||||
- [x] Create Application/Services/ProgressService.cs
|
- [x] Create Application/Services/ProgressService.cs
|
||||||
- [x] Write unit tests for services (30 tests)
|
|
||||||
- [ ] Create Application/Services/LevelService.cs
|
- [ ] Create Application/Services/LevelService.cs
|
||||||
- [ ] Create Application/Services/LessonService.cs
|
- [ ] Create Application/Services/LessonService.cs
|
||||||
- [ ] Create Application/Services/ProgressService.cs
|
- [ ] Create Application/Services/ProgressService.cs
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue