diff --git a/spec/lib/assessor_spec.rb b/spec/lib/assessor_spec.rb index fea9d5c5..38edf8d5 100644 --- a/spec/lib/assessor_spec.rb +++ b/spec/lib/assessor_spec.rb @@ -1,24 +1,59 @@ require 'rails_helper' describe Assessor do + let(:assessor) { described_class.new(execution_environment: FactoryGirl.build(:ruby)) } + + describe '#assess' do + let(:assess) { assessor.assess(stdout: stdout) } + let(:stdout) { "Finished in 0.1 seconds (files took 0.1 seconds to load)\n2 examples, 1 failure" } + + context 'when an error occurs' do + before(:each) do + expect_any_instance_of(TestingFrameworkAdapter).to receive(:test_outcome).and_raise + end + + it 'catches the error' do + expect { assess }.not_to raise_error + end + + it 'returns a score of zero' do + expect(assess).to eq(score: 0) + end + end + + context 'when no error occurs' do + after(:each) { assess } + + it 'utilizes the testing framework adapter' do + expect(assessor.instance_variable_get(:@testing_framework_adapter)).to receive(:test_outcome) + end + + it 'calculates the score' do + expect(assessor).to receive(:calculate_score) + end + end + end + describe '#calculate_score' do let(:count) { 42 } let(:passed) { 17 } let(:test_outcome) { {count: count, passed: passed} } - context 'with a testing framework adapter' do - let(:assessor) { described_class.new(execution_environment: FactoryGirl.build(:ruby)) } + it 'returns the correct score' do + expect(assessor.send(:calculate_score, test_outcome)).to eq(passed.to_f / count.to_f) + end + end - it 'returns the correct score' do - expect(assessor.send(:calculate_score, test_outcome)).to eq(passed.to_f / count.to_f) + describe '#initialize' do + context 'with an execution environment with a testing framework adapter' do + it 'assigns the testing framework adapter' do + expect(assessor.instance_variable_get(:@testing_framework_adapter)).to be_an(RspecAdapter) end end - context 'without a testing framework adapter' do - let(:assessor) { described_class.new(execution_environment: FactoryGirl.build(:execution_environment)) } - + context 'with an execution environment without a testing framework adapter' do it 'raises an error' do - expect { assessor.send(:calculate_score, test_outcome) }.to raise_error + expect { described_class.new(execution_environment: FactoryGirl.build(:ruby, testing_framework: nil)) }.to raise_error(Assessor::Error) end end end