test: cover exercise label reconciliation
This commit is contained in:
parent
56535704ca
commit
f4271c9f3e
2 changed files with 58 additions and 2 deletions
|
|
@ -1571,7 +1571,32 @@ class TrainlogRepositoryDraftTest {
|
||||||
assertEquals(listOf("sxe_max_pec", "sxe_max_rear"), detail.exercises.map { it.entryId })
|
assertEquals(listOf("sxe_max_pec", "sxe_max_rear"), detail.exercises.map { it.entryId })
|
||||||
assertEquals(listOf(101.5, 86.0), detail.exercises.map { it.maxWeightKg })
|
assertEquals(listOf(101.5, 86.0), detail.exercises.map { it.maxWeightKg })
|
||||||
assertTrue(detail.exercises.all { it.sets.isEmpty() })
|
assertTrue(detail.exercises.all { it.sets.isEmpty() })
|
||||||
assertEquals(2, reopened.listLatestExerciseMaxima().size)
|
val renamed = reopened.editExercise(
|
||||||
|
ExerciseEditInput(
|
||||||
|
rearDelt.exerciseId,
|
||||||
|
"Rear Delt",
|
||||||
|
rearDelt.recordingMode,
|
||||||
|
rearDelt.trackingMode,
|
||||||
|
rearDelt.dataFields,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
assertTrue(renamed is EditExerciseResult.Saved)
|
||||||
|
assertEquals(rearDelt.exerciseId, (renamed as EditExerciseResult.Saved).exercise.exerciseId)
|
||||||
|
assertEquals(2, reopened.listExercises().size)
|
||||||
|
val renamedDetail = reopened.getSessionDetail(sessionId)!!
|
||||||
|
assertEquals("Rear Delt", renamedDetail.exercises[1].exerciseName)
|
||||||
|
assertEquals("sxe_max_rear", renamedDetail.exercises[1].entryId)
|
||||||
|
assertEquals(86.0, renamedDetail.exercises[1].maxWeightKg!!, 0.0)
|
||||||
|
assertEquals("rear_delt_pec_fly", renamedDetail.exercises[1].equipmentId)
|
||||||
|
val latestMaxima = reopened.listLatestExerciseMaxima()
|
||||||
|
assertEquals(2, latestMaxima.size)
|
||||||
|
assertTrue(
|
||||||
|
latestMaxima.any {
|
||||||
|
it.exerciseId == rearDelt.exerciseId &&
|
||||||
|
it.exerciseName == "Rear Delt" &&
|
||||||
|
it.maxWeightKg == 86.0
|
||||||
|
},
|
||||||
|
)
|
||||||
try {
|
try {
|
||||||
reopened.buildMobileExportJson()
|
reopened.buildMobileExportJson()
|
||||||
fail("Frozen V1 must refuse explicit max data")
|
fail("Frozen V1 must refuse explicit max data")
|
||||||
|
|
@ -1585,6 +1610,8 @@ class TrainlogRepositoryDraftTest {
|
||||||
.getJSONArray("exercises")
|
.getJSONArray("exercises")
|
||||||
assertEquals(101.5, exported.getJSONObject(0).getDouble("max_weight_kg"), 0.0)
|
assertEquals(101.5, exported.getJSONObject(0).getDouble("max_weight_kg"), 0.0)
|
||||||
assertEquals(86.0, exported.getJSONObject(1).getDouble("max_weight_kg"), 0.0)
|
assertEquals(86.0, exported.getJSONObject(1).getDouble("max_weight_kg"), 0.0)
|
||||||
|
assertEquals(rearDelt.exerciseId, exported.getJSONObject(1).getString("exercise_id"))
|
||||||
|
assertEquals("Rear Delt", exported.getJSONObject(1).getString("name"))
|
||||||
assertFalse(exported.getJSONObject(0).has("sets"))
|
assertFalse(exported.getJSONObject(0).has("sets"))
|
||||||
assertFalse(exported.getJSONObject(1).has("sets"))
|
assertFalse(exported.getJSONObject(1).has("sets"))
|
||||||
val replay = reopened.applyPcMobileExportV2Json(exportedJson)
|
val replay = reopened.applyPcMobileExportV2Json(exportedJson)
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,34 @@ def main():
|
||||||
assert second.returncode == 0, second.stdout + second.stderr
|
assert second.returncode == 0, second.stdout + second.stderr
|
||||||
assert "sessions_skipped=1" in second.stdout
|
assert "sessions_skipped=1" in second.stdout
|
||||||
|
|
||||||
resumed = payload()
|
renamed = payload()
|
||||||
|
renamed["exercises"][1]["name"] = "Rear Delt"
|
||||||
|
renamed["sessions"][0]["exercises"][1]["name"] = "Rear Delt"
|
||||||
|
artifact.write_text(json.dumps(renamed), encoding="utf-8")
|
||||||
|
rename_result = run(IMPORTER, artifact, "--database", database)
|
||||||
|
assert rename_result.returncode == 0, rename_result.stdout + rename_result.stderr
|
||||||
|
assert "exercises_reconciled=1" in rename_result.stdout
|
||||||
|
assert "sessions_skipped=1" in rename_result.stdout
|
||||||
|
connection = sqlite3.connect(database)
|
||||||
|
assert connection.execute(
|
||||||
|
"SELECT exercise_id,name FROM exercises WHERE exercise_id='ex_rear'"
|
||||||
|
).fetchone() == ("ex_rear", "Rear Delt")
|
||||||
|
assert connection.execute("SELECT count(*) FROM exercises").fetchone()[0] == 2
|
||||||
|
assert connection.execute("SELECT count(*) FROM sessions").fetchone()[0] == 1
|
||||||
|
assert connection.execute(
|
||||||
|
"SELECT se.entry_id,se.equipment_id,mr.max_weight_kg "
|
||||||
|
"FROM max_results mr JOIN session_exercises se "
|
||||||
|
"ON se.id=mr.session_exercise_row_id ORDER BY se.position"
|
||||||
|
).fetchall() == [
|
||||||
|
("sxe_pec", "rear_delt_pec_fly", 100.0),
|
||||||
|
("sxe_rear", "rear_delt_pec_fly", 86.0),
|
||||||
|
]
|
||||||
|
connection.close()
|
||||||
|
rename_replay = run(IMPORTER, artifact, "--database", database)
|
||||||
|
assert rename_replay.returncode == 0, rename_replay.stdout + rename_replay.stderr
|
||||||
|
assert "sessions_skipped=1" in rename_replay.stdout
|
||||||
|
|
||||||
|
resumed = copy.deepcopy(renamed)
|
||||||
resumed["sessions"][0]["exercises"][0]["max_weight_kg"] = 101.5
|
resumed["sessions"][0]["exercises"][0]["max_weight_kg"] = 101.5
|
||||||
artifact.write_text(json.dumps(resumed), encoding="utf-8")
|
artifact.write_text(json.dumps(resumed), encoding="utf-8")
|
||||||
update = run(IMPORTER, artifact, "--database", database)
|
update = run(IMPORTER, artifact, "--database", database)
|
||||||
|
|
@ -100,6 +127,8 @@ def main():
|
||||||
round_trip = json.loads(exported.read_text(encoding="utf-8"))
|
round_trip = json.loads(exported.read_text(encoding="utf-8"))
|
||||||
values = round_trip["sessions"][0]["exercises"]
|
values = round_trip["sessions"][0]["exercises"]
|
||||||
assert [entry["max_weight_kg"] for entry in values] == [101.5, 86.0]
|
assert [entry["max_weight_kg"] for entry in values] == [101.5, 86.0]
|
||||||
|
assert values[1]["exercise_id"] == "ex_rear"
|
||||||
|
assert values[1]["name"] == "Rear Delt"
|
||||||
assert all("sets" not in entry and "continuous" not in entry for entry in values)
|
assert all("sets" not in entry and "continuous" not in entry for entry in values)
|
||||||
|
|
||||||
invalid = copy.deepcopy(payload())
|
invalid = copy.deepcopy(payload())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue