Commit 9531340
Changed files (2)
app
models
spec
models
app/models/training_session.rb
@@ -6,11 +6,18 @@ class TrainingSession < ActiveRecord::Base
def train(exercise, target_weight, completed_sets)
recommendation = workout.exercise_workouts.find_by(exercise: exercise)
- exercise_sessions.create!(
- target_weight: target_weight,
- exercise_workout: recommendation,
- sets: completed_sets
- )
+
+ session = exercise_sessions.find_by(exercise_workout: recommendation)
+ if session.present?
+ session.update!(sets: completed_sets, target_weight: target_weight)
+ session
+ else
+ exercise_sessions.create!(
+ exercise_workout: recommendation,
+ sets: completed_sets,
+ target_weight: target_weight
+ )
+ end
end
def progress_for(exercise)
spec/models/training_session_spec.rb
@@ -20,6 +20,25 @@ describe TrainingSession, type: :model do
expect(result.exercise).to eql(squat)
expect(result.sets).to eql(sets.map(&:to_s))
end
+
+ it "updates a completed exercise" do
+ subject.train(squat, target_weight, sets)
+
+ new_weight = target_weight + 10
+ new_sets = [5, 5, 5]
+ result = subject.train(squat, new_weight, new_sets)
+ expect(result).to be_persisted
+ expect(result.target_weight).to eql(new_weight.to_f)
+ expect(result.exercise).to eql(squat)
+ expect(result.sets).to eql(new_sets.map(&:to_s))
+ end
+
+ it "cannot save a duplicate exercise" do
+ result = subject.train(squat, target_weight, sets)
+ subject.train(squat, target_weight, sets)
+ expect(subject.exercise_sessions.count).to eql(1)
+ expect(subject.exercise_sessions).to match_array([result])
+ end
end
describe "#progress_for" do