diff --git a/src/main/scala/com.github.mgifos.workouts/model/WeeklyPlan.scala b/src/main/scala/com.github.mgifos.workouts/model/WeeklyPlan.scala index 88aef36..1fb0808 100644 --- a/src/main/scala/com.github.mgifos.workouts/model/WeeklyPlan.scala +++ b/src/main/scala/com.github.mgifos.workouts/model/WeeklyPlan.scala @@ -10,15 +10,14 @@ class WeeklyPlan(csv: Array[Byte]) { private lazy val processed: Seq[Option[Workout]] = { - def weekPlan(week: Week, acc: Seq[Option[Workout]]): Seq[Option[Workout]] = Seq.tabulate(7) { weekDayNo => - val maybeDayText = week.lift(weekDayNo + 1).flatMap(text => Option(text.trim).filter(_.nonEmpty)) - maybeDayText.map { dayText => - Workout.parseDef(dayText) match { - case Right(definition) => definition - case Left(_) => onlyDefs(acc).find(_.name == dayText).map(_.toRef).getOrElse(WorkoutNote(dayText)) - } + def weekPlan(week: Week, previousWeeks: Seq[Option[Workout]]): Seq[Option[Workout]] = Seq.tabulate(7) { weekDayNo => + week.lift(weekDayNo + 1).flatMap(text => Option(text.trim).filter(_.nonEmpty)) + }.foldLeft(Seq.empty[Option[Workout]])((acc, maybeDayText) => acc :+ maybeDayText.map { dayText => + Workout.parseDef(dayText) match { + case Right(definition) => definition + case Left(_) => onlyDefs(previousWeeks ++ acc).find(_.name == dayText).map(_.toRef).getOrElse(WorkoutNote(dayText)) } - } + }) def loop(weeks: List[Week], acc: Seq[Option[Workout]]): Seq[Option[Workout]] = weeks match { case Nil => acc diff --git a/src/test/scala/com/github/mgifos/workouts/WeekPlanSpec.scala b/src/test/scala/com/github/mgifos/workouts/WeekPlanSpec.scala new file mode 100644 index 0000000..b48567a --- /dev/null +++ b/src/test/scala/com/github/mgifos/workouts/WeekPlanSpec.scala @@ -0,0 +1,17 @@ +package com.github.mgifos.workouts + +import com.github.mgifos.workouts.model._ +import org.scalatest.{ FlatSpec, Matchers } + +class WeekPlanSpec extends FlatSpec with Matchers { + + val runFast = "running: run-fast\n- warmup: 10:00\n- repeat: 2\n - run: 1500m @ 4:30-5:00\n - recover: 01:30 @ z2\n- cooldown: lap-button" + val runSlow = "running: run-slow\n- warmup: 10:00\n- run: 5km @ z2\n- cooldown: lap-button" + val testPlan = s"""1,"$runFast",,run-fast,,run-fast,,,\n2,,run-fast,"$runSlow",run-fast,,run-slow,,""" + + "WeekPlan" should "detect workout definitions and references properly" in { + val plan = new WeeklyPlan(testPlan.getBytes) + plan.get.flatten should have size 7 + plan.workouts should have size 2 + } +} diff --git a/src/test/scala/com/github/mgifos/workouts/model/WorkoutSpec.scala b/src/test/scala/com/github/mgifos/workouts/model/WorkoutSpec.scala index caf1d3b..3622ae6 100644 --- a/src/test/scala/com/github/mgifos/workouts/model/WorkoutSpec.scala +++ b/src/test/scala/com/github/mgifos/workouts/model/WorkoutSpec.scala @@ -40,7 +40,6 @@ class WorkoutSpec extends FlatSpec with Matchers { testNames.foreach { testName => val x = Workout.parseDef(testWO.replace("run-fast", testName)) - println(x) x.right.get.name should be(testName) } }