master
 1require "rails_helper"
 2
 3feature "Workouts", type: :feature do
 4  let(:user) { create(:user, password: "password") }
 5  before :each do
 6    subject.login_with(user.username, "password")
 7  end
 8
 9  feature "viewing history" do
10    include_context "stronglifts_program"
11    subject { WorkoutsPage.new }
12    let!(:workout) do
13      create(:workout,
14             user: user,
15             routine: routine_a,
16             occurred_at: DateTime.now,
17             body_weight: 210.0
18            )
19    end
20
21    it "displays each training session" do
22      subject.visit_page
23      expect(page).to have_content(workout.occurred_at.strftime("%a, %d %b"))
24    end
25  end
26
27  feature "starting a new workout" do
28    include_context "stronglifts_program"
29    subject { NewWorkoutPage.new }
30
31    it "creates a new workout" do
32      subject.visit_page
33      subject.change_body_weight(225.0)
34      subject.click_start
35
36      expect(user.workouts.count).to eql(1)
37      expect(user.workouts.last.body_weight).to eql(225.0)
38    end
39  end
40
41  feature "recording a workout", js: true do
42    include_context "stronglifts_program"
43
44    subject { EditWorkoutPage.new(workout) }
45
46    let!(:workout) do
47      squat_workout
48      bench_workout
49      row_workout
50      dips_workout
51      workout = user.next_workout_for(routine_a)
52      workout.update!(occurred_at: DateTime.now, body_weight: 225)
53      workout
54    end
55
56    before :each do
57      subject.visit_page
58      subject.open_section(squat)
59    end
60
61    it "saves the successful set" do
62      first_squat_set = workout.sets.for(squat).to_a.at(0)
63      subject.complete(set: first_squat_set)
64      expect(first_squat_set.reload.actual_repetitions).to eql(5)
65    end
66
67    it "saves the failed set" do
68      second_squat_set = workout.sets.for(squat).to_a.at(1)
69      subject.complete(set: second_squat_set, repetitions: 4)
70      expect(second_squat_set.reload.actual_repetitions).to eql(4)
71    end
72
73    it "does not change an incomplete set" do
74      third_squat_set = workout.sets.for(squat).to_a.at(2)
75      expect(third_squat_set.reload.actual_repetitions).to be_nil
76    end
77  end
78end