diff --git a/src/androidTest/java/de/avalax/fitbuddy/FitbuddyAcceptanceTest.java b/src/androidTest/java/de/avalax/fitbuddy/FitbuddyAcceptanceTest.java index b21645a7..5dbc3da0 100644 --- a/src/androidTest/java/de/avalax/fitbuddy/FitbuddyAcceptanceTest.java +++ b/src/androidTest/java/de/avalax/fitbuddy/FitbuddyAcceptanceTest.java @@ -339,7 +339,29 @@ public void aFinishedWorkout_shouldBeDeleted() throws Exception { } @Test - public void threeFinishedWorkouts_shouldBeDisplayedByCreationDESC() throws Exception { + public void threeWorkouts_shouldBeOrderedByLastExecutionDateDESC() throws Exception { + BasicSetBuilder set = aSet().withWeight(42).withMaxReps(12); + BasicExerciseBuilder exercise = anExercise().withName("an exercise").withSet(set); + BasicWorkoutBuilder workout = aWorkout().withName("first workout").withExercise(exercise); + Workout firstWorkout = persistence.addWorkout(workout); + Workout secondWorkout = persistence.addWorkout(workout.withName("second workout")); + Workout thirdWorkout = persistence.addWorkout(workout.withName("third workout")); + FinishedWorkoutId firstFinishedWorkoutId = persistence.finishWorkout(firstWorkout); + FinishedWorkoutId secondFinishedWorkoutId = persistence.finishWorkout(secondWorkout); + FinishedWorkoutId thirdFinishedWorkoutId = persistence.finishWorkout(thirdWorkout); + persistence.updateFinishedWorkoutCreation(firstFinishedWorkoutId, "2017-12-29"); + persistence.updateFinishedWorkoutCreation(secondFinishedWorkoutId, "2017-12-30"); + persistence.updateFinishedWorkoutCreation(thirdFinishedWorkoutId, "2017-12-31"); + + activityRule.launchActivity(null); + + application.hasShownWorkoutDetails(0, "third workout", "Dec 31, 2017", "Executed 1 time"); + application.hasShownWorkoutDetails(1, "second workout", "Dec 30, 2017", "Executed 1 time"); + application.hasShownWorkoutDetails(2, "first workout", "Dec 29, 2017", "Executed 1 time"); + } + + @Test + public void threeFinishedWorkouts_shouldBeOrderedByCreationDESC() throws Exception { BasicSetBuilder set = aSet().withWeight(42).withMaxReps(12); BasicExerciseBuilder exercise = anExercise().withName("an exercise").withSet(set); BasicWorkoutBuilder workout = aWorkout().withName("a workout").withExercise(exercise); diff --git a/src/main/java/de/avalax/fitbuddy/port/adapter/persistence/SQLiteFinishedWorkoutRepository.java b/src/main/java/de/avalax/fitbuddy/port/adapter/persistence/SQLiteFinishedWorkoutRepository.java index 718ef5c8..520ee194 100644 --- a/src/main/java/de/avalax/fitbuddy/port/adapter/persistence/SQLiteFinishedWorkoutRepository.java +++ b/src/main/java/de/avalax/fitbuddy/port/adapter/persistence/SQLiteFinishedWorkoutRepository.java @@ -23,7 +23,7 @@ import de.avalax.fitbuddy.domain.model.workout.WorkoutId; public class SQLiteFinishedWorkoutRepository implements FinishedWorkoutRepository { - private static final String TABLE_FINISHED_WORKOUT = "finished_workout"; + static final String TABLE_FINISHED_WORKOUT = "finished_workout"; private SQLiteOpenHelper sqLiteOpenHelper; private FinishedExerciseRepository finishedExerciseRepository; diff --git a/src/main/java/de/avalax/fitbuddy/port/adapter/persistence/SQLiteWorkoutRepository.java b/src/main/java/de/avalax/fitbuddy/port/adapter/persistence/SQLiteWorkoutRepository.java index ce019fdc..bebd718e 100644 --- a/src/main/java/de/avalax/fitbuddy/port/adapter/persistence/SQLiteWorkoutRepository.java +++ b/src/main/java/de/avalax/fitbuddy/port/adapter/persistence/SQLiteWorkoutRepository.java @@ -18,6 +18,8 @@ import de.avalax.fitbuddy.domain.model.workout.WorkoutId; import de.avalax.fitbuddy.domain.model.workout.WorkoutRepository; +import static de.avalax.fitbuddy.port.adapter.persistence.SQLiteFinishedWorkoutRepository.TABLE_FINISHED_WORKOUT; + public class SQLiteWorkoutRepository implements WorkoutRepository { private static final String TABLE_WORKOUT = "workout"; private SQLiteOpenHelper sqLiteOpenHelper; @@ -100,18 +102,17 @@ private Workout createWorkout(Cursor cursor) { @Override public List loadAll() { List workoutList = new ArrayList<>(); - SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase(); - Cursor cursor = database.query(TABLE_WORKOUT, new String[] - {"id", "name"}, - null, null, null, null, null); - if (cursor.moveToFirst()) { - do { - Workout workout = createWorkout(cursor); - workoutList.add(workout); - } while (cursor.moveToNext()); + String sql = "SELECT id, name, (SELECT created FROM " + TABLE_FINISHED_WORKOUT + + " WHERE workout_id=" + TABLE_WORKOUT + ".id ORDER BY created DESC LIMIT 1) created FROM " + + TABLE_WORKOUT + " ORDER BY created DESC"; + try (SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase()) { + try (Cursor cursor = database.rawQuery(sql, null)) { + while (cursor.moveToNext()) { + Workout workout = createWorkout(cursor); + workoutList.add(workout); + } + } } - cursor.close(); - database.close(); return workoutList; }