Commit b370729

mo khan <mo@mokhan.ca>
2015-06-01 02:57:45
extract method to get the progress for a specific exercise.
1 parent 5467abd
Changed files (3)
app/models/training_session.rb
@@ -11,4 +11,10 @@ class TrainingSession < ActiveRecord::Base
       sets: completed_sets
     )
   end
+
+  def progress_for(exercise)
+    exercise_sessions.
+      joins(:exercise_workout => :exercise).
+      find_by(exercise_workouts: {exercise_id: exercise.id})
+  end
 end
spec/models/android/import_spec.rb
@@ -38,8 +38,8 @@ describe Android::Import do
       subject.import_from(directory)
 
       training_session = user.training_sessions.order(:occurred_at).first
-      squat_session = training_session.exercise_sessions.
-        find_by(exercise_workout: squat_workout)
+      squat_session = training_session.progress_for(squat)
+
       expect(squat_session.target_weight).to eql(45.0)
       expect(squat_session.sets[0]).to eql("5")
       expect(squat_session.sets[1]).to eql("5")
@@ -52,8 +52,7 @@ describe Android::Import do
       subject.import_from(directory)
 
       training_session = user.training_sessions.order(:occurred_at).first
-      bench_session = training_session.exercise_sessions.
-        find_by(exercise_workout: bench_workout)
+      bench_session = training_session.progress_for(bench_press)
       expect(bench_session.target_weight).to eql(65.0)
       expect(bench_session.sets[0]).to eql("5")
       expect(bench_session.sets[1]).to eql("5")
@@ -66,8 +65,7 @@ describe Android::Import do
       subject.import_from(directory)
 
       training_session = user.training_sessions.order(:occurred_at).first
-      row_session = training_session.exercise_sessions.
-        find_by(exercise_workout: row_workout)
+      row_session = training_session.progress_for(barbell_row)
       expect(row_session.target_weight).to eql(65.0)
       expect(row_session.sets[0]).to eql("5")
       expect(row_session.sets[1]).to eql("5")
spec/models/training_session_spec.rb
@@ -1,8 +1,9 @@
 require "rails_helper"
 
 describe TrainingSession, type: :model do
+  subject { create(:training_session) }
+
   describe "#train" do
-    subject { create(:training_session) }
     let(:workout) { subject.workout }
     let(:sets) { [5, 5, 5, 5, 5] }
     let(:target_weight) { 200 }
@@ -20,4 +21,21 @@ describe TrainingSession, type: :model do
       expect(result.sets).to eql(sets.map { |x| x.to_s })
     end
   end
+
+  describe "#progress_for" do
+    let(:exercise) { create(:exercise) }
+    let(:workout) { subject.workout }
+
+    before :each do
+      workout.add_exercise(exercise)
+      subject.train(exercise, 100, [5, 5])
+    end
+
+    it "returns the progress for the specific exercise" do
+      result = subject.progress_for(exercise)
+      expect(result.exercise).to eql(exercise)
+      expect(result.sets).to eql(["5", "5"])
+      expect(result.target_weight).to eql(100.0)
+    end
+  end
 end