Skip to content

Commit 16af6e5

Browse files
committed
refactor/qg-253: LocalizedICalCalendarItem удалён в пользу генерализации ICalCalendarItem
1 parent 85ee3b9 commit 16af6e5

File tree

13 files changed

+53
-49
lines changed

13 files changed

+53
-49
lines changed

app/src/main/kotlin/pro/qyoga/i9ns/calendars/ical/ICalCalendarsRepo.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import pro.qyoga.i9ns.calendars.ical.ical4j.toICalCalendarItem
1515
import pro.qyoga.i9ns.calendars.ical.model.*
1616
import pro.qyoga.i9ns.calendars.ical.persistance.ICalCalendarsDao
1717
import pro.qyoga.i9ns.calendars.ical.persistance.findAllByOwner
18+
import java.time.LocalDateTime
1819
import java.time.ZonedDateTime
1920

2021

@@ -71,6 +72,6 @@ class ICalCalendarsRepo(
7172

7273
private fun ICalCalendar.localizedICalCalendarItemsIn(
7374
interval: Interval<ZonedDateTime>,
74-
): List<LocalizedICalCalendarItem> =
75+
): List<ICalCalendarItem<LocalDateTime>> =
7576
(this.calendarItemsIn(interval) ?: emptyList())
76-
.map(ICalCalendarItem::toLocalizedICalCalendarItem)
77+
.map { it.toLocalizedICalCalendarItem() }

app/src/main/kotlin/pro/qyoga/i9ns/calendars/ical/ical4j/VEventExt.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ val VEvent.geographicsPosOrNull: String?
5555
val VEvent.locationOrNull: String?
5656
get() = this.location?.value
5757

58-
fun VEvent.toICalCalendarItem(): ICalCalendarItem =
58+
fun VEvent.toICalCalendarItem(): ICalCalendarItem<ZonedDateTime> =
5959
toICalCalendarItem(Period(startDateTime, startDateTime + javaDuration))
6060

61-
fun VEvent.toICalCalendarItem(period: Period<ZonedDateTime>): ICalCalendarItem = ICalCalendarItem(
61+
fun VEvent.toICalCalendarItem(period: Period<ZonedDateTime>): ICalCalendarItem<ZonedDateTime> = ICalCalendarItem(
6262
id,
6363
title,
6464
descriptionOrNull ?: "",

app/src/main/kotlin/pro/qyoga/i9ns/calendars/ical/model/ICalCalendar.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ fun ICalCalendar.findById(eventId: ICalEventId) =
6262

6363
fun ICalCalendar.calendarItemsIn(
6464
interval: Interval<ZonedDateTime>
65-
): List<ICalCalendarItem>? =
65+
): List<ICalCalendarItem<ZonedDateTime>>? =
6666
vEvents()
6767
?.flatMap { ve: VEvent ->
6868
ve.calculateRecurrenceSet<ZonedDateTime>(interval.toICalPeriod())

app/src/main/kotlin/pro/qyoga/i9ns/calendars/ical/model/ICalCalendarItem.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,22 @@ package pro.qyoga.i9ns.calendars.ical.model
22

33
import pro.qyoga.core.calendar.api.CalendarItem
44
import java.time.Duration
5+
import java.time.LocalDateTime
56
import java.time.ZonedDateTime
7+
import java.time.temporal.Temporal
68

79

8-
data class ICalCalendarItem(
10+
data class ICalCalendarItem<DATE : Temporal>(
911
override val id: ICalEventId,
1012
override val title: String,
1113
override val description: String,
12-
override val dateTime: ZonedDateTime,
14+
override val dateTime: DATE,
1315
override val duration: Duration,
1416
override val location: String?
15-
) : CalendarItem<ICalEventId, ZonedDateTime>
17+
) : CalendarItem<ICalEventId, DATE>
1618

17-
fun ICalCalendarItem.toLocalizedICalCalendarItem(): LocalizedICalCalendarItem =
18-
LocalizedICalCalendarItem(
19+
fun ICalCalendarItem<ZonedDateTime>.toLocalizedICalCalendarItem(): ICalCalendarItem<LocalDateTime> =
20+
ICalCalendarItem(
1921
this.id,
2022
this.title,
2123
this.description,

app/src/main/kotlin/pro/qyoga/i9ns/calendars/ical/model/LocalizedICalCalendarItem.kt

Lines changed: 0 additions & 15 deletions
This file was deleted.

app/src/test/kotlin/pro/qyoga/tests/cases/app/therapist/appointments/core/CreateAppointmentPageTest.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ import pro.qyoga.tests.pages.therapist.appointments.CreateAppointmentForm
2828
import pro.qyoga.tests.pages.therapist.appointments.CreateAppointmentPage
2929
import pro.qyoga.tests.pages.therapist.appointments.EditAppointmentForm
3030
import pro.qyoga.tests.platform.instancio.KSelect.Companion.field
31-
import java.time.Duration
32-
import java.time.LocalDate
33-
import java.time.LocalTime
34-
import java.time.ZoneId
31+
import java.time.*
3532
import java.time.temporal.ChronoUnit
3633
import java.util.*
3734

@@ -157,9 +154,12 @@ class CreateAppointmentPageTest : QYogaAppIntegrationBaseTest() {
157154
fun createAppointmentWithIcsEventId() {
158155
// Сетап
159156
val event = aCalendarItem {
160-
set(field(ICalCalendarItem::dateTime), randomAppointmentDate().atZone(asiaNovosibirskTimeZone))
161-
set(field(ICalCalendarItem::duration), Duration.ofMinutes(75))
162-
set(field(ICalCalendarItem::description), randomSentence())
157+
set(
158+
field(ICalCalendarItem<ZonedDateTime>::dateTime),
159+
randomAppointmentDate().atZone(asiaNovosibirskTimeZone)
160+
)
161+
set(field(ICalCalendarItem<ZonedDateTime>::duration), Duration.ofMinutes(75))
162+
set(field(ICalCalendarItem<ZonedDateTime>::description), randomSentence())
163163
}
164164
iCalsCalendarsFixturePresets.createICalCalendarWithSingleEvent(event)
165165

app/src/test/kotlin/pro/qyoga/tests/cases/app/therapist/appointments/core/SchedulePageTest.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import pro.qyoga.tests.pages.therapist.appointments.appointmentCards
2424
import pro.qyoga.tests.pages.therapist.appointments.shouldMatch
2525
import pro.qyoga.tests.platform.instancio.KSelect.Companion.field
2626
import java.time.LocalDate
27+
import java.time.ZonedDateTime
2728

2829

2930
@DisplayName("Страница календаря")
@@ -115,8 +116,11 @@ class SchedulePageTest : QYogaAppIntegrationBaseTest() {
115116
// Сетап
116117
val today = LocalDate.now()
117118
val event = aCalendarItem {
118-
set(field(ICalCalendarItem::dateTime), today.atTime(randomWorkingTime()).atZone(asiaNovosibirskTimeZone))
119-
set(field(ICalCalendarItem::duration), AppointmentsObjectMother.fullCardDuration)
119+
set(
120+
field(ICalCalendarItem<ZonedDateTime>::dateTime),
121+
today.atTime(randomWorkingTime()).atZone(asiaNovosibirskTimeZone)
122+
)
123+
set(field(ICalCalendarItem<ZonedDateTime>::duration), AppointmentsObjectMother.fullCardDuration)
120124
}
121125

122126
ICalsCalendarsFixturePresets.createICalCalendarWithSingleEvent(event)

app/src/test/kotlin/pro/qyoga/tests/cases/core/calendar/ical/ICalCalendarsRepoTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import pro.qyoga.tests.fixture.object_mothers.therapists.THE_THERAPIST_REF
1111
import pro.qyoga.tests.fixture.presets.ICalsCalendarsFixturePresets
1212
import pro.qyoga.tests.infra.web.QYogaAppBaseKoTest
1313
import pro.qyoga.tests.platform.instancio.KSelect.Companion.field
14+
import java.time.ZonedDateTime
1415

1516

1617
@DisplayName("Репозиторий ical-календарей")
@@ -25,7 +26,7 @@ class ICalCalendarsRepoTest : QYogaAppBaseKoTest({
2526
val iCalEvent = aCalendarItem()
2627
val iCal = getBean<ICalsCalendarsFixturePresets>().createICalCalendarWithSingleEvent(iCalEvent)
2728
val updatedEvent = aCalendarItem {
28-
set(field(ICalCalendarItem::id), iCalEvent.id)
29+
set(field(ICalCalendarItem<ZonedDateTime>::id), iCalEvent.id)
2930
}
3031
getBean<ICalCalendarsBackgrounds>().updateICalSource(
3132
iCal.icsUrl,

app/src/testFixtures/kotlin/pro/qyoga/tests/fixture/object_mothers/calendars/CalendarsObjectMother.kt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package pro.qyoga.tests.fixture.object_mothers.calendars
22

33
import org.instancio.Instancio
44
import org.instancio.InstancioApi
5+
import org.instancio.Model
56
import pro.qyoga.i9ns.calendars.ical.model.ICalCalendarItem
67
import pro.qyoga.i9ns.calendars.ical.model.ICalEventId
78
import pro.qyoga.tests.fixture.data.asiaNovosibirskTimeZone
@@ -11,23 +12,30 @@ import pro.qyoga.tests.fixture.object_mothers.appointments.AppointmentsObjectMot
1112
import pro.qyoga.tests.fixture.object_mothers.appointments.randomAppointmentDate
1213
import pro.qyoga.tests.platform.instancio.KSelect.Companion.field
1314
import pro.qyoga.tests.platform.instancio.generateBy
15+
import java.time.ZonedDateTime
1416

1517

1618
object CalendarsObjectMother {
1719

18-
private val aCalendarItemModel = Instancio.of(ICalCalendarItem::class.java)
20+
@Suppress("UNCHECKED_CAST")
21+
private val aCalendarItemModel: Model<ICalCalendarItem<ZonedDateTime>> = Instancio.of(ICalCalendarItem::class.java)
22+
.withTypeParameters(ZonedDateTime::class.java)
1923
.run {
20-
generateBy(field(ICalCalendarItem::id)) { aICalEventId() }
21-
generateBy(field(ICalCalendarItem::title)) { aAppointmentEventTitle() }
22-
generateBy(field(ICalCalendarItem::dateTime)) { randomAppointmentDate().atZone(asiaNovosibirskTimeZone) }
23-
generateBy(field(ICalCalendarItem::duration)) { AppointmentsObjectMother.fullCardDuration }
24+
generateBy(field(ICalCalendarItem<ZonedDateTime>::id)) { aICalEventId() }
25+
generateBy(field(ICalCalendarItem<ZonedDateTime>::title)) { aAppointmentEventTitle() }
26+
generateBy(field(ICalCalendarItem<ZonedDateTime>::dateTime)) {
27+
randomAppointmentDate().atZone(
28+
asiaNovosibirskTimeZone
29+
)
30+
}
31+
generateBy(field(ICalCalendarItem<ZonedDateTime>::duration)) { AppointmentsObjectMother.fullCardDuration }
2432
}
2533
.withSeed(faker.random().nextLong())
26-
.toModel()
34+
.toModel() as Model<ICalCalendarItem<ZonedDateTime>>
2735

2836
fun aICalEventId() = ICalEventId(faker.internet().uuid().toString())
2937

30-
fun aCalendarItem(configureInstance: InstancioApi<ICalCalendarItem>.() -> InstancioApi<ICalCalendarItem> = { this }): ICalCalendarItem {
38+
fun aCalendarItem(configureInstance: InstancioApi<ICalCalendarItem<ZonedDateTime>>.() -> InstancioApi<ICalCalendarItem<ZonedDateTime>> = { this }): ICalCalendarItem<ZonedDateTime> {
3139
return Instancio.of(aCalendarItemModel).run {
3240
this.configureInstance()
3341
}

app/src/testFixtures/kotlin/pro/qyoga/tests/fixture/object_mothers/calendars/ical/ICalCalendarsObjectMother.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import pro.qyoga.tests.fixture.object_mothers.calendars.CalendarsObjectMother
1616
import pro.qyoga.tests.fixture.object_mothers.therapists.THE_THERAPIST_REF
1717
import java.io.StringWriter
1818
import java.net.URI
19+
import java.time.ZonedDateTime
1920
import java.time.temporal.Temporal
2021

2122

@@ -30,14 +31,14 @@ object ICalCalendarsObjectMother {
3031
)
3132
}
3233

33-
fun aIcsFile(event: ICalCalendarItem): String {
34+
fun aIcsFile(event: ICalCalendarItem<ZonedDateTime>): String {
3435
val calendar = aICalCalendar(event)
3536
val icsFile = StringWriter()
3637
CalendarOutputter().output(calendar, icsFile)
3738
return icsFile.toString()
3839
}
3940

40-
fun aICalCalendar(event: ICalCalendarItem): Calendar {
41+
fun aICalCalendar(event: ICalCalendarItem<ZonedDateTime>): Calendar {
4142
val calendar = Calendar()
4243
.withProdId("-//azhidkov.pro//Trainer Advisor Tests//RU")
4344
.withDefaults()

0 commit comments

Comments
 (0)