public async Task UpdateLessonNamesOfOpticalForms()
        {
            var lessonId       = RandomGen.Next();
            var lessonName     = RandomGen.String(20);
            var answerKeyForms = GenerateAnswerKeyOpticalForms(3, lessonId, lessonName).ToList();
            var userId         = RandomGen.Next(10000);

            using (var testServer = Create(userId))
            {
                var client = testServer.CreateClient();
                var examId = await ExecuteExamCreatedConsumerAsync(testServer, answerKeyForms);

                var forms = new List <StudentOpticalForm>
                {
                    GenerateStudentForm(examId, userId, lessonId, lessonName),
                    GenerateStudentForm(examId, userId, lessonId, lessonName),
                    GenerateStudentForm(examId, userId, lessonId, lessonName),
                    GenerateStudentForm(examId, userId, lessonId, lessonName),
                    GenerateStudentForm(examId, userId, lessonId, lessonName),
                    GenerateStudentForm(examId, userId, lessonId, lessonName),
                };
                var response = await client.PostAsync(ApiPath, forms.ToJsonContent());

                response.EnsureSuccessStatusCode();
                var studentOpticalForms = await GetListAsync <StudentOpticalForm>(client, examId);

                studentOpticalForms.SelectMany(f => f.Sections)
                .Should().NotContain(s => s.LessonName != lessonName);

                var newLessonName = RandomGen.String(20);
                var repository    = testServer.Host.Services.GetService(typeof(IOpticalFormRepository));
                var consumer      = new LessonNameChangedConsumer(repository as IOpticalFormRepository);
                var context       = Substitute.For <ConsumeContext <ILessonNameChanged> >();
                context.Message.LessonId.Returns(lessonId);
                context.Message.NewLessonName.Returns(newLessonName);
                await consumer.Consume(context);

                studentOpticalForms = await GetListAsync <StudentOpticalForm>(client, examId);

                studentOpticalForms.SelectMany(f => f.Sections)
                .Select(s => s.LessonName)
                .Distinct()
                .ToList()
                .Should()
                .HaveCount(1)
                .And
                .Contain(newLessonName);
                var answerKeyOpticalForms = await GetListAsync <AnswerKeyOpticalForm>(client, examId);

                answerKeyOpticalForms.SelectMany(f => f.Sections)
                .Select(s => s.LessonName)
                .Distinct()
                .ToList()
                .Should()
                .HaveCount(1)
                .And
                .Contain(newLessonName);
            }
        }
        public async Task UpdateLessonNamesOfOpticalForms(IFixture fixture, int userId, int lessonId, string lessonName, string newLessonName, int examId)
        {
            var answerKeyForms = GenerateAnswerKeyOpticalForms(fixture, 3, lessonId, lessonName).ToList();
            var client         = _webApplicationFactory.CreateClientWithUserId(userId);
            var repo           = _webApplicationFactory.Services.GetRequiredService <IAnswerKeyOpticalFormRepository>();

            await ExecuteExamCreatedConsumerAsync(repo, answerKeyForms, examId);

            var forms = new List <StudentOpticalForm>
            {
                GenerateStudentForm(fixture, examId, userId, lessonId, lessonName),
                GenerateStudentForm(fixture, examId, userId, lessonId, lessonName),
                GenerateStudentForm(fixture, examId, userId, lessonId, lessonName),
                GenerateStudentForm(fixture, examId, userId, lessonId, lessonName),
                GenerateStudentForm(fixture, examId, userId, lessonId, lessonName),
                GenerateStudentForm(fixture, examId, userId, lessonId, lessonName),
            };
            var response = await client.PostAsync(ApiPath, forms.ToJsonContent());

            response.EnsureSuccessStatusCode();
            var studentOpticalForms = await GetListAsync <StudentOpticalForm>(client, examId);

            var repository = _webApplicationFactory.Services.GetRequiredService <IStudentOpticalFormRepository>();
            var consumer   = new LessonNameChangedConsumer(repository, repo);
            var context    = Substitute.For <ConsumeContext <ILessonNameChanged> >();

            context.Message.LessonId.Returns(lessonId);
            context.Message.NewLessonName.Returns(newLessonName);
            await consumer.Consume(context);

            studentOpticalForms = await GetListAsync <StudentOpticalForm>(client, examId);

            studentOpticalForms.SelectMany(f => f.Sections)
            .Select(s => s.LessonName)
            .Distinct()
            .Should()
            .Contain(newLessonName);
            var answerKeyOpticalForms = await GetListAsync <AnswerKeyOpticalForm>(client, examId);

            answerKeyOpticalForms.SelectMany(f => f.Sections)
            .Select(s => s.LessonName)
            .Distinct()
            .Should()
            .Contain(newLessonName);
        }