require 'spec_helper' describe WithStudentPathNavigation, organization_workspace: :test do helper WithStudentPathNavigation helper FontAwesome::Rails::IconHelper describe '#next_button' do context 'with problems' do let(:lesson) { create(:lesson, name: 'my guide', exercises: [ create(:exercise, id: 11, name: 'exercise 1'), create(:exercise, id: 12, name: 'exercise 2'), create(:exercise, id: 13, name: 'exercise 3') ]) } let!(:exercise_1) { lesson.exercises.first } let!(:exercise_2) { lesson.exercises.second } let!(:exercise_3) { lesson.exercises.third } let(:current_user) { create(:user) } context 'when user did not submit any solution' do it { expect(next_button(exercise_1)).to eq "Next: exercise 2 " } it { expect(next_button(exercise_2)).to eq "Next: exercise 3 " } it { expect(next_button(exercise_3)).to eq "Next pending: exercise 1 " } end context 'when on last unresolved exercise' do before do exercise_1.submit_solution!(current_user).passed! exercise_3.submit_solution!(current_user).passed! end it { expect(next_button(exercise_1)).to eq "Next: exercise 2 " } it { expect(next_button(exercise_2)).to be nil } it { expect(next_button(exercise_3)).to eq "Next pending: exercise 2 " } end context 'when user did submit a solution' do before do exercise_1.submit_solution!(current_user).passed! end it { expect(next_button(exercise_1)).to eq "Next: exercise 2 " } it { expect(next_button(exercise_2)).to eq "Next: exercise 3 " } it { expect(next_button(exercise_3)).to eq "Next pending: exercise 2 " } end end context 'with non-terminal readings' do let(:lesson) { create(:lesson, name: 'my guide', exercises: [ create(:reading, id: 11, name: 'exercise 1'), create(:exercise, id: 12, name: 'exercise 2') ]) } let!(:reading) { lesson.exercises.first } let!(:exercise) { lesson.exercises.second } let(:current_user) { create(:user) } context 'when user did not submit any exercise' do it { expect(next_button(reading)).to eq "Next: exercise 2 " } it { expect(next_button(exercise)).to eq "Next pending: exercise 1 " } end context 'when user finished just reading' do before do reading.submit_confirmation!(current_user) end it { expect(next_button(reading)).to eq "Next: exercise 2 " } it { expect(next_button(exercise)).to eq nil } end end context 'with guides' do let!(:current_user) { create(:user) } context 'when guide has no suggestions' do let(:exercise) { build(:exercise) } let(:lesson) { create(:lesson, name: 'Guide A', exercises: [exercise]) } let(:chapter) { create(:chapter, lessons: [lesson]) } before { reindex_current_organization! } before { exercise.submit_solution!(current_user).passed! } it { expect(next_button(lesson)).to be nil } end context 'when guide has one suggestion' do let!(:suggested_lesson) { create(:lesson, name: 'l3') } let!(:lesson) { create(:lesson, name: 'l2') } let!(:another_lesson) { create(:lesson, name: 'l1') } let!(:chapter) { create(:chapter, lessons: [another_lesson, lesson, suggested_lesson]) } before { reindex_current_organization! } it { expect(next_button(lesson)).to include "Next: #{suggested_lesson.name} " } end context 'when guide has many suggestions' do let!(:suggested_lesson_1) { create(:lesson) } let!(:suggested_lesson_2) { create(:lesson) } let!(:lesson) { create(:lesson) } let!(:chapter) { create(:chapter, lessons: [lesson, suggested_lesson_1, suggested_lesson_2]) } before { reindex_current_organization! } it { expect(next_button(lesson)).to include "Next: #{suggested_lesson_1.name} " } it { expect(next_button(lesson)).to be_html_safe } end end end end