feat: Добавил синхронизацию преподавателей из лекций
Backend CI / build-and-test (push) Successful in 55s
Frontend CI / build-and-check (push) Failing after 5m9s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Failing after 12s
🚀 Create and publish a Docker image / Build & publish backend image (push) Has been skipped
🚀 Create and publish a Docker image / Build & publish frontend image (push) Has been skipped
🚀 Create and publish a Docker image / Update stack on Portainer (push) Has been skipped
Backend CI / build-and-test (push) Successful in 55s
Frontend CI / build-and-check (push) Failing after 5m9s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Failing after 12s
🚀 Create and publish a Docker image / Build & publish backend image (push) Has been skipped
🚀 Create and publish a Docker image / Build & publish frontend image (push) Has been skipped
🚀 Create and publish a Docker image / Update stack on Portainer (push) Has been skipped
This commit is contained in:
@@ -3,6 +3,7 @@ using Microsoft.Extensions.Logging.Abstractions;
|
||||
using NSubstitute;
|
||||
using UniVerse.Application.DTOs.Sync;
|
||||
using UniVerse.Application.Interfaces;
|
||||
using UniVerse.Domain.Enums;
|
||||
using UniVerse.Infrastructure.Data;
|
||||
using UniVerse.Infrastructure.Services;
|
||||
using Xunit;
|
||||
@@ -123,11 +124,107 @@ public class ScheduleSyncServiceTests
|
||||
Assert.Equal(48, lecture.MaxEnrollments);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SyncScheduleAsync_UsesModeusEventAttendeeTeacher()
|
||||
{
|
||||
await using var db = CreateDbContext();
|
||||
var modeus = new FakeModeusApiClient(BuildEventsResponse());
|
||||
var service = new ScheduleSyncService(db, modeus, NullLogger<ScheduleSyncService>.Instance);
|
||||
|
||||
var result = await service.SyncScheduleAsync(new SyncScheduleRequest(null, null, null, null));
|
||||
|
||||
Assert.Null(result.Error);
|
||||
Assert.Equal(1, result.Created);
|
||||
|
||||
var lecture = await db.Lectures.Include(item => item.Teacher).SingleAsync();
|
||||
Assert.Equal("Иванов Иван Иванович", lecture.Teacher?.DisplayName);
|
||||
Assert.Equal("modeus-b5a5cad8-60c2-4d94-9972-8a0c2e981440@modeus.local", lecture.Teacher?.Email);
|
||||
|
||||
var teacherProfile = await db.TeacherProfiles.Include(item => item.User).SingleAsync();
|
||||
Assert.Equal("b5a5cad8-60c2-4d94-9972-8a0c2e981440", teacherProfile.ModeusId);
|
||||
Assert.Equal(teacherProfile.UserId, lecture.TeacherId);
|
||||
|
||||
var teacherRole = await db.UserRoles.SingleAsync();
|
||||
Assert.Equal(lecture.TeacherId, teacherRole.UserId);
|
||||
Assert.Equal(UserRole.Teacher, teacherRole.Role);
|
||||
}
|
||||
|
||||
private static AppDbContext CreateDbContext()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder<AppDbContext>()
|
||||
.UseInMemoryDatabase($"ScheduleSyncTests_{Guid.NewGuid()}")
|
||||
.Options;
|
||||
|
||||
return new AppDbContext(options);
|
||||
}
|
||||
|
||||
private static ModeusEventsResponse BuildEventsResponse()
|
||||
{
|
||||
const string eventId = "48102128-2224-4cb9-ae8f-a91d0b7c512a";
|
||||
const string courseId = "73aa6226-adbb-4e15-b264-e16fee19fd73";
|
||||
const string attendeeId = "a894db4e-833f-4f52-a153-fdd7c7d32ca7";
|
||||
const string personId = "b5a5cad8-60c2-4d94-9972-8a0c2e981440";
|
||||
|
||||
return new ModeusEventsResponse
|
||||
{
|
||||
Embedded = new ModeusEventsEmbedded
|
||||
{
|
||||
Events =
|
||||
[
|
||||
new ModeusEvent
|
||||
{
|
||||
Id = eventId,
|
||||
Name = "Тема 20. Управление ресурсами проекта. Часть 2.",
|
||||
TypeId = "LAB",
|
||||
StartsAt = new DateTime(2026, 4, 14, 5, 0, 0, DateTimeKind.Utc),
|
||||
EndsAt = new DateTime(2026, 4, 14, 6, 35, 0, DateTimeKind.Utc),
|
||||
Links = new ModeusEventLinks
|
||||
{
|
||||
CourseUnitRealization = new ModeusHrefLink($"/{courseId}")
|
||||
}
|
||||
}
|
||||
],
|
||||
CourseUnitRealizations =
|
||||
[
|
||||
new ModeusCourseUnitRealization(
|
||||
courseId,
|
||||
"Управление проектами разработки программного обеспечения",
|
||||
"УПРПО")
|
||||
],
|
||||
EventTeams = [new ModeusEventTeam(eventId, 25)],
|
||||
EventAttendees =
|
||||
[
|
||||
new ModeusEventAttendee
|
||||
{
|
||||
Id = attendeeId,
|
||||
RoleId = "TEACH",
|
||||
RoleName = "Преподаватель",
|
||||
Links = new ModeusEventAttendeeLinks
|
||||
{
|
||||
Event = new ModeusHrefLink($"/{eventId}"),
|
||||
Person = new ModeusHrefLink($"/{personId}")
|
||||
}
|
||||
}
|
||||
],
|
||||
Persons =
|
||||
[
|
||||
new ModeusPerson(
|
||||
personId,
|
||||
"Иванов",
|
||||
"Иван",
|
||||
"Иванович",
|
||||
"Иванов Иван Иванович")
|
||||
]
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private sealed class FakeModeusApiClient(ModeusEventsResponse events) : IModeusApiClient
|
||||
{
|
||||
public Task<ModeusEventsResponse> SearchEventsAsync(SyncScheduleRequest request) => Task.FromResult(events);
|
||||
|
||||
public Task<ModeusRoomsResponse> SearchRoomsAsync() => Task.FromResult(new ModeusRoomsResponse());
|
||||
|
||||
public Task<List<ModeusEmployee>> SearchEmployeeAsync(string fullname) => Task.FromResult(new List<ModeusEmployee>());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user