proving_spec.rb revision 6d51085721a2dacbcdddaaf0ae56f2c6103c300c
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksarequire 'spec_helper'
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksadescribe 'OntologyVersion - Proving' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa setup_hets
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa let(:user) { create :user }
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa let(:parent_ontology) { create :distributed_ontology }
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa before do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa parse_this(user, parent_ontology, hets_out_file('Simple_Implications'))
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa stub_hets_for(prove_out_file('Simple_Implications'), command: 'prove', method: :post)
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa let(:ontology) { parent_ontology.children.find_by_name('Group') }
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa let(:version) { ontology.current_version }
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa context 'without exception' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa before do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa version.async_prove
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa Worker.drain
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa it 'should be done' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect(ontology.reload.state).to eq('done')
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa context 'on sidekiq shutdown' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa before do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa allow(Hets).to receive(:prove_via_api).and_raise(Sidekiq::Shutdown)
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa version.async_prove
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect { Worker.drain }.to raise_error(Sidekiq::Shutdown)
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa it 'should reset status to pending' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect(ontology.reload.state).to eq('pending')
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa context 'on hets error' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa before do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa allow(Hets).to receive(:prove_via_api).
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa and_raise(Hets::HetsError, 'serious error')
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa version.async_prove
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect { Worker.drain }.to raise_error(Hets::HetsError)
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa it 'should set status to failed' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect(ontology.reload.state).to eq('failed')
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa context 'on failed to update state' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa before do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa allow(Hets).to receive(:prove_via_api).
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa and_raise(Hets::HetsError, 'first error')
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa allow_any_instance_of(OntologyVersion).to receive(:after_failed).
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa and_raise('second exception')
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa version.async_prove
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect { Worker.drain }.to raise_error(RuntimeError)
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa it 'should set status to failed on ontology' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect(ontology.reload.state).to eq('failed')
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa it 'should set state to failed' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect(version.reload.state).to eq('failed')
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa it 'should contain the nested error' do
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa nested_error_regex = /nested exception.*second exception.*first error/im
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa expect(version.reload.last_error).to match(nested_error_regex)
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksa end
6d51085721a2dacbcdddaaf0ae56f2c6103c300cEugen Kuksaend