package de.avalax.fitbuddy.port.adapter.persistence; import android.content.Context; import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.List; import de.avalax.fitbuddy.BuildConfig; import de.avalax.fitbuddy.R; import de.avalax.fitbuddy.domain.model.exercise.Exercise; import de.avalax.fitbuddy.domain.model.finished_exercise.FinishedExercise; import de.avalax.fitbuddy.domain.model.finished_exercise.FinishedExerciseRepository; import de.avalax.fitbuddy.domain.model.finished_workout.FinishedWorkout; import de.avalax.fitbuddy.domain.model.finished_workout.FinishedWorkoutId; import de.avalax.fitbuddy.domain.model.finished_workout.FinishedWorkoutException; import de.avalax.fitbuddy.domain.model.finished_workout.FinishedWorkoutRepository; import de.avalax.fitbuddy.domain.model.set.Set; import de.avalax.fitbuddy.domain.model.workout.BasicWorkout; import de.avalax.fitbuddy.domain.model.workout.Workout; import de.avalax.fitbuddy.domain.model.workout.WorkoutId; import static org.hamcrest.CoreMatchers.any; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.emptyCollectionOf; import static org.hamcrest.Matchers.hasSize; @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, manifest = "src/main/AndroidManifest.xml", sdk=21) public class SQLiteFinishedWorkoutRepositoryTest { private FinishedWorkoutRepository finishedWorkoutRepository; private Workout workout; @Before public void setUp() throws Exception { Context context = RuntimeEnvironment.application.getApplicationContext(); FitbuddySQLiteOpenHelper sqLiteOpenHelper = new FitbuddySQLiteOpenHelper("SQLiteSetRepositoryTest", 1, context, R.raw.fitbuddy_db); FinishedExerciseRepository finishedExerciseRepository = new SQLiteFinishedExerciseRepository(sqLiteOpenHelper); finishedWorkoutRepository = new SQLiteFinishedWorkoutRepository(sqLiteOpenHelper, finishedExerciseRepository); workout = new BasicWorkout(); workout.setWorkoutId(new WorkoutId("42")); workout.setName("basicWorkout"); } @Test(expected = FinishedWorkoutException.class) public void loadWithNullInstance_shouldThrowWorkoutNotFoundException() throws Exception { finishedWorkoutRepository.load(null); } @Test(expected = FinishedWorkoutException.class) public void loadByUnknownWorkoutId_shouldThrowWorkoutNotFoundException() throws Exception { finishedWorkoutRepository.load(new FinishedWorkoutId("21")); } @Test public void saveWorkout_shouldInsertWorkoutWithNewFinishedWorkoutId() throws Exception { FinishedWorkoutId finishedWorkoutId = finishedWorkoutRepository.saveWorkout(workout); assertThat(finishedWorkoutId, any(FinishedWorkoutId.class)); } @Test public void saveWorkout_shouldInsertWorkoutInformationsIntoDatabase() throws Exception { FinishedWorkoutId finishedWorkoutId = finishedWorkoutRepository.saveWorkout(workout); FinishedWorkout finishedWorkout = finishedWorkoutRepository.load(finishedWorkoutId); assertThat(finishedWorkout.getFinishedWorkoutId(), equalTo(finishedWorkoutId)); assertThat(finishedWorkout.getWorkoutId(), equalTo(workout.getWorkoutId())); assertThat(finishedWorkout.getName(), equalTo(workout.getName())); assertThat(finishedWorkout.getCreated(), any(String.class)); } @Test public void saveWorkout_shouldAlsoInsertExerciseInformationsIntoDatabase() throws Exception { Exercise exercise = workout.getExercises().createExercise(); exercise.setName("finished exercise"); Set set = exercise.getSets().createSet(); set.setWeight(42.21); set.setMaxReps(15); set.setReps(12); FinishedWorkoutId finishedWorkoutId = finishedWorkoutRepository.saveWorkout(workout); FinishedWorkout finishedWorkout = finishedWorkoutRepository.load(finishedWorkoutId); List<FinishedExercise> finishedExercises = finishedWorkout.getFinishedExercises(); assertThat(finishedExercises, hasSize(1)); assertThat(finishedExercises.get(0).getName(), equalTo(exercise.getName())); assertThat(finishedExercises.get(0).getWeight(), equalTo(exercise.getSets().get(0).getWeight())); assertThat(finishedExercises.get(0).getReps(), equalTo(exercise.getSets().get(0).getReps())); assertThat(finishedExercises.get(0).getMaxReps(), equalTo(exercise.getSets().get(0).getMaxReps())); } @Test public void noFinishedWorkouts_shouldReturnEmptyList() throws Exception { List<FinishedWorkout> finishedWorkouts = finishedWorkoutRepository.loadAll(); assertThat(finishedWorkouts, emptyCollectionOf(FinishedWorkout.class)); } @Test public void twoPersistedFinishedWorkouts_shouldReturnListWithThem() throws Exception { FinishedWorkoutId finishedWorkoutId1 = finishedWorkoutRepository.saveWorkout(new BasicWorkout()); FinishedWorkoutId finishedWorkoutId2 = finishedWorkoutRepository.saveWorkout(new BasicWorkout()); List<FinishedWorkout> finishedWorkouts = finishedWorkoutRepository.loadAll(); assertThat(finishedWorkouts, hasSize(2)); assertThat(finishedWorkouts.get(0).getFinishedWorkoutId(), Matchers.equalTo(finishedWorkoutId1)); assertThat(finishedWorkouts.get(1).getFinishedWorkoutId(), Matchers.equalTo(finishedWorkoutId2)); } }