namespace Common.Builders; using Domain.Entities; /// /// Builder pattern for creating Enrollment test objects. /// public class EnrollmentBuilder { private int _id = 1; private int _studentId = 1; private int _subjectId = 1; private Student? _student; private Subject? _subject; private DateTime? _enrolledAt; public EnrollmentBuilder WithId(int id) { _id = id; return this; } public EnrollmentBuilder WithStudentId(int studentId) { _studentId = studentId; return this; } public EnrollmentBuilder WithSubjectId(int subjectId) { _subjectId = subjectId; return this; } public EnrollmentBuilder WithStudent(Student student) { _student = student; _studentId = student.Id; return this; } public EnrollmentBuilder WithSubject(Subject subject) { _subject = subject; _subjectId = subject.Id; return this; } public EnrollmentBuilder WithEnrolledAt(DateTime enrolledAt) { _enrolledAt = enrolledAt; return this; } public Enrollment Build() { var enrollment = new Enrollment(_studentId, _subjectId); SetProperty(enrollment, "Id", _id); if (_student is not null) SetProperty(enrollment, "Student", _student); if (_subject is not null) SetProperty(enrollment, "Subject", _subject); if (_enrolledAt.HasValue) SetProperty(enrollment, "EnrolledAt", _enrolledAt.Value); return enrollment; } private static void SetProperty(T obj, string propertyName, object value) where T : class => typeof(T).GetProperty(propertyName)!.SetValue(obj, value); }