require 'spec_helper' require 'ostruct' describe ContextualizationResultHelper do helper IconsHelper helper FontAwesome5::Rails::IconHelper helper ContextualizationResultHelper describe 'render_affable_expectation_result' do let(:html) { render_affable_expectation_result expectation_result } context 'plain explanation' do let(:expectation_result) { {result: :failed, explanation: 'you must delegate'} } it { expect(html).to eq ' you must delegate' } end context 'html explanation' do let(:expectation_result) { {result: :failed, explanation: 'you must use if'} } it { expect(html).to eq ' you must use if' } end end describe 'render_test_results' do let(:html) { render_test_results contextualization } context 'structured results' do context 'when single passed submission' do let(:language) { build(:language, output_content_type: :plain) } let(:problem) { build(:problem, language: language) } let(:contextualization) { Assignment.new( exercise: problem, test_results: [{title: '2 is 2', status: :passed, result: ''}]) } it { expect(html).to be_html_safe } it { expect(html).to include "" } it { expect(html).to include "2 is 2" } end context 'when single failed submission' do context 'when plain results' do let(:language) { build(:language, output_content_type: :plain) } let(:problem) { build(:problem, language: language) } let(:contextualization) { Assignment.new( exercise: problem, test_results: [{title: '2 is 2', status: :failed, result: 'something _went_ wrong'}]) } it { expect(html).to include "" } it { expect(html).to include "2 is 2" } it { expect(html).to include "
something _went_ wrong
" } end context 'when markdown results' do let(:language) { build(:language, output_content_type: :markdown) } let(:problem) { build(:problem, language: language) } let(:contextualization) { Assignment.new( exercise: problem, test_results: [{title: '2 is 2', status: :failed, result: 'something went _really_ wrong'}]) } it { expect(html).to include "" } it { expect(html).to include "2 is 2" } it { expect(html).to include "

something went really wrong

" } end context 'when markdown results with summary and title' do let(:language) { build(:language, output_content_type: :markdown) } let(:problem) { build(:problem, language: language) } let(:contextualization) { Assignment.new( exercise: problem, test_results: [{title: 'foo is 2', status: :failed, result: 'foo is undefined', summary: {type: 'undefined_variable', message: 'you are using things that are _not defined_'}}]) } it { expect(html).to include 'foo is 2: you are using things that are not defined' } it { expect(html).to include "" } it { expect(html).to include '

foo is undefined

' } end context 'when markdown results with summary and no title' do let(:language) { build(:language, output_content_type: :markdown) } let(:problem) { build(:problem, language: language) } let(:contextualization) { Assignment.new( exercise: problem, test_results: [{title: '', status: :failed, result: 'foo is undefined', summary: {type: 'undefined_variable', message: 'you are using things that are _not defined_'}}]) } it { expect(html).to include 'you are using things that are not defined' } it { expect(html).to include "" } it { expect(html).to include '

foo is undefined

' } end end end context 'unstructured results' do let(:language) { build(:language, )} let(:problem) { build(:problem, language: language) } let(:contextualization) { Assignment.new( exercise: problem, result: 'ooops, something went wrong'.html_safe) } it { expect(html).to be_html_safe } it { expect(html).to include '
ooops, something went wrong
' } it { expect(html).to include 'Results:' } end end end