1+ package pro.qyoga.tests.cases.app.therapist.clients.journal
2+
3+ import io.kotest.inspectors.forAny
4+ import io.kotest.matchers.shouldBe
5+ import org.junit.jupiter.api.DisplayName
6+ import org.junit.jupiter.api.Test
7+ import org.springframework.http.HttpStatus
8+ import pro.qyoga.app.therapist.clients.journal.list.JournalPageController
9+ import pro.qyoga.l10n.russianDateFormat
10+ import pro.qyoga.tests.assertions.shouldBeComponent
11+ import pro.qyoga.tests.assertions.shouldBePage
12+ import pro.qyoga.tests.assertions.shouldHaveElement
13+ import pro.qyoga.tests.assertions.shouldMatch
14+ import pro.qyoga.tests.clients.TherapistClient
15+ import pro.qyoga.tests.fixture.object_mothers.clients.ClientsObjectMother
16+ import pro.qyoga.tests.fixture.object_mothers.clients.JournalEntriesObjectMother
17+ import pro.qyoga.tests.fixture.object_mothers.therapists.THE_THERAPIST_ID
18+ import pro.qyoga.tests.fixture.object_mothers.therapists.theTherapistUserDetails
19+ import pro.qyoga.tests.infra.web.QYogaAppIntegrationBaseTest
20+ import pro.qyoga.tests.pages.publc.GenericErrorPage
21+ import pro.qyoga.tests.pages.publc.NotFoundErrorPage
22+ import pro.qyoga.tests.pages.therapist.clients.journal.entry.CreateJournalEntryForm
23+ import pro.qyoga.tests.pages.therapist.clients.journal.entry.CreateJournalEntryFragment
24+ import pro.qyoga.tests.pages.therapist.clients.journal.entry.JournalEntryFrom
25+ import java.time.LocalDate
26+
27+
28+ @DisplayName(" Фрагмент создания записи журнала страницы клиента" )
29+ class CreateJournalEntryFragmentTest : QYogaAppIntegrationBaseTest () {
30+
31+ @Test
32+ fun `должна рендерится корректно` () {
33+ // Сетап
34+ val therapist = TherapistClient .loginAsTheTherapist()
35+ val client = backgrounds.clients.createClients(1 , THE_THERAPIST_ID ).first()
36+
37+ // Действие
38+ val document = therapist.clientJournal.getCreateJournalEntryFragment(client.id)
39+
40+ // Проверка
41+ document shouldBePage CreateJournalEntryFragment (client.id, LocalDate .now())
42+ }
43+
44+ @Test
45+ fun `должна добавлять запись в журнал` () {
46+ // Сетап
47+ val therapist = TherapistClient .loginAsTheTherapist()
48+ val client = backgrounds.clients.createClients(1 , THE_THERAPIST_ID ).first()
49+ val createJournalEntryRequest = JournalEntriesObjectMother .journalEntry()
50+
51+ // Действие
52+ therapist.clientJournal.createJournalEntry(client.id, createJournalEntryRequest)
53+
54+ // И действие
55+ val modelAndView = getBean<JournalPageController >().handleGetJournalPage(client.id)
56+
57+ // Проверка
58+ val journal = JournalPageController .getJournal(modelAndView.model).content
59+ journal.forAny { it shouldMatch createJournalEntryRequest }
60+ }
61+
62+ @Test
63+ fun `должа отображать ошибку валидации, при попытки создать запись за дату, для которой уже есть запись` () {
64+ // Сетап
65+ val entryDate = LocalDate .now()
66+ val therapist = TherapistClient .loginAsTheTherapist()
67+ val client = backgrounds.clients.createClients(1 , THE_THERAPIST_ID ).first()
68+ val createJournalEntryRequest = JournalEntriesObjectMother .journalEntry(date = entryDate)
69+ backgrounds.clientJournal.createJournalEntry(client.id, createJournalEntryRequest, theTherapistUserDetails)
70+
71+ // Действие
72+ val document = therapist.clientJournal.createJournalEntryForError(client.id, createJournalEntryRequest)
73+
74+ // Проверка
75+ document.select(" body form" ).single() shouldBeComponent CreateJournalEntryForm
76+ CreateJournalEntryForm .dateInput.value(document) shouldBe russianDateFormat.format(LocalDate .now())
77+ CreateJournalEntryForm .therapeuticTaskNameInput.value(document) shouldBe createJournalEntryRequest.therapeuticTaskName
78+ CreateJournalEntryForm .entryTextInput.value(document) shouldBe createJournalEntryRequest.journalEntryText
79+ document shouldHaveElement JournalEntryFrom .DUPLICATED_DATE_MESSAGE
80+ }
81+
82+ @Test
83+ fun `должна отображтаь страницу ошибки 404 при запросе страницы создания записи журнала для несуществующего клиента` () {
84+ // Сетап
85+ val therapist = TherapistClient .loginAsTheTherapist()
86+ val notExistingClientId = ClientsObjectMother .randomId()
87+
88+ // Действие
89+ val document = therapist.clientJournal.getCreateJournalEntryFragment(
90+ notExistingClientId,
91+ expectedStatus = HttpStatus .NOT_FOUND
92+ )
93+
94+ // Проверка
95+ document shouldBePage NotFoundErrorPage
96+ }
97+
98+ @Test
99+ fun `должна отображтаь страницу ошибки 500 при запросе создания записи журнала для несуществующего клиента` () {
100+ // Сетап
101+ val therapist = TherapistClient .loginAsTheTherapist()
102+ val notExistingClientId = ClientsObjectMother .randomId()
103+ val anyJournalEntry = JournalEntriesObjectMother .journalEntry()
104+
105+ // Действие
106+ val document = therapist.clientJournal.createJournalEntryForError(
107+ notExistingClientId,
108+ anyJournalEntry,
109+ expectedStatus = HttpStatus .INTERNAL_SERVER_ERROR
110+ )
111+
112+ // Проверка
113+ document shouldBePage GenericErrorPage
114+ }
115+
116+ }
0 commit comments