spec/warp/dir/store_spec.rb in warp-dir-1.1.0 vs spec/warp/dir/store_spec.rb in warp-dir-1.1.1
- old
+ new
@@ -3,103 +3,128 @@
require 'warp/dir/config'
require 'warp/dir/store'
require 'tempfile'
RSpec.describe Warp::Dir::Store do
- include_context :fake_serializer
- include_context :initialized_store
- context 'when store responds to common methods on collections' do
- let(:point_name) { 'moo' }
- let(:point_path) { ENV['HOME'] + '/tmp/12398485' }
+ describe 'with no existin warprc file' do
+ let(:config_path) { "/tmp/warprc#{srand()}" }
+ let(:config) { Warp::Dir::Config.new(warprc: config_path) }
let(:store) { Warp::Dir::Store.new(config) }
- let(:p1) { Warp::Dir::Point.new('p', ENV['HOME'] + '/workspace') }
- let(:p2) { Warp::Dir::Point.new('n', ENV['HOME'] + '/workspace/new-project') }
- it 'should be able to have an empty store' do
- expect(store.points).to be_empty
+ after do
+ File.unlink(config_path) if File.exists?(config_path)
end
- it 'should respond to #size and return 0' do
- expect(store.size).to eql(0)
+ it 'does not fail for find requests' do
+ expect(File.exist?(config.warprc)).to be_falsey, config.warprc
+ expect { store['mypoint'] }.to raise_error(Warp::Dir::Errors::PointNotFound)
end
- it 'it should respond to #<< and add a new point' do
- store.add(point: p1)
- store.add(point: p2)
- store << Warp::Dir::Point.new('123', '436')
- expect(store.size).to eql(3)
+ it 'creates the file when adding points' do
+ expect(File.exist?(config.warprc)).to be_falsey, config.warprc
+ expect(store.size).to eql(0)
+ store.add(point_name: 'mypoint', point_path: '/tmp')
+ expect(File.exist?(config.warprc)).to be_falsey, config.warprc
end
end
- context 'when the data storeis empty' do
- let(:point_name) { 'moo' }
- let(:point_path) { ENV['HOME'] + '/tmp/12398485' }
- let(:store) { Warp::Dir::Store.new(config) }
+ describe 'with an exiting warprc file' do
+ include_context :fake_serializer
+ include_context :initialized_store
- it 'should be able to initialize the Store' do
- expect(store.points).to be_empty
- end
+ context 'when store responds to common methods on collections' do
+ let(:point_name) { 'moo' }
+ let(:point_path) { ENV['HOME'] + '/tmp/12398485' }
+ let(:store) { Warp::Dir::Store.new(config) }
+ let(:p1) { Warp::Dir::Point.new('p', ENV['HOME'] + '/workspace') }
+ let(:p2) { Warp::Dir::Point.new('n', ENV['HOME'] + '/workspace/new-project') }
- it 'should respond to #size and return 0' do
- expect(store.size).to eql(0)
- end
+ it 'should be able to have an empty store' do
+ expect(store.points).to be_empty
+ end
- it 'it should respond to #<< and add a new point' do
- expect(store.size).to eql(0)
- store << Warp::Dir::Point.new('123', '436')
- expect(store.size).to eql(1)
- end
+ it 'should respond to #size and return 0' do
+ expect(store.size).to eql(0)
+ end
- it 'should be able to add a new point to the Store' do
- store.add(point_name: point_name, point_path: point_path)
- corrected_path = Warp::Dir.absolute point_path
- expect(store[point_name].path).to eql(corrected_path)
+ it 'it should respond to #<< and add a new point' do
+ store.add(point: p1)
+ store.add(point: p2)
+ store << Warp::Dir::Point.new('123', '436')
+ expect(store.size).to eql(3)
+ end
end
- it 'should not be able to add a different point with the same name' do
- store.add(point_name: point_name, point_path: point_path)
- # double adding the same point is ok
- expect { store.add(point_name: point_name, point_path: point_path) }.to_not raise_error
- # adding another point pointing to the same name is not OK
- expect { store.add(point_name: point_name, point_path: point_path + '98984') }.to raise_error(Warp::Dir::Errors::PointAlreadyExists)
- end
+ context 'when the data storeis empty' do
+ let(:point_name) { 'moo' }
+ let(:point_path) { ENV['HOME'] + '/tmp/12398485' }
+ let(:store) { Warp::Dir::Store.new(config) }
- it 'should be able to add multiple points to the Store' do
- store.add(point_name: 'm1', point_path: '123')
- store.add(point_name: 'm2', point_path: '456')
- expect(store['m1'].path).to eql('123')
- expect(store['m2'].path).to eql('456')
- end
- end
+ it 'should be able to initialize the Store' do
+ expect(store.points).to be_empty
+ end
- context 'data store contains some warp points already' do
- let(:store) { Warp::Dir::Store.new(config) }
- before do
- store.add(point_name: 'm1', point_path: 'A1')
- store.add(point_name: 'm2', point_path: 'A2')
- store.save!
- end
+ it 'should respond to #size and return 0' do
+ expect(store.size).to eql(0)
+ end
- describe 'reading data' do
- let(:new_store) { Warp::Dir::Store.new(config) }
+ it 'it should respond to #<< and add a new point' do
+ expect(store.size).to eql(0)
+ store << Warp::Dir::Point.new('123', '436')
+ expect(store.size).to eql(1)
+ end
- it 'should restore correctly compared to last saved' do
- expect(new_store['m1'].path).to eql('A1')
- expect(new_store['m2'].path).to eql('A2')
+ it 'should be able to add a new point to the Store' do
+ store.add(point_name: point_name, point_path: point_path)
+ corrected_path = Warp::Dir.absolute point_path
+ expect(store[point_name].path).to eql(corrected_path)
end
- it 'should not allow overwriting without a force flag' do
+ it 'should not be able to add a different point with the same name' do
+ store.add(point_name: point_name, point_path: point_path)
+ # double adding the same point is ok
+ expect { store.add(point_name: point_name, point_path: point_path) }.to_not raise_error
# adding another point pointing to the same name is not OK
- expect { new_store.add(point_name: 'm1', point_path: '98984') }.to raise_error(Warp::Dir::Errors::PointAlreadyExists)
+ expect { store.add(point_name: point_name, point_path: point_path + '98984') }.to raise_error(Warp::Dir::Errors::PointAlreadyExists)
end
- it 'should be able to find previously saved item' do
- expect(new_store['m1']).to eql(Warp::Dir::Point.new('m1', 'A1'))
+ it 'should be able to add multiple points to the Store' do
+ store.add(point_name: 'm1', point_path: '123')
+ store.add(point_name: 'm2', point_path: '456')
+ expect(store['m1'].path).to eql('123')
+ expect(store['m2'].path).to eql('456')
end
+ end
- it 'should be able to handle when it doesnt find a given element' do
- expect { new_store['ASDSADAS'] }.to raise_error(Warp::Dir::Errors::PointNotFound)
+ context 'data store contains some warp points already' do
+ let(:store) { Warp::Dir::Store.new(config) }
+ before do
+ store.add(point_name: 'm1', point_path: 'A1')
+ store.add(point_name: 'm2', point_path: 'A2')
+ store.save!
+ end
+
+ describe 'reading data' do
+ let(:new_store) { Warp::Dir::Store.new(config) }
+
+ it 'should restore correctly compared to last saved' do
+ expect(new_store['m1'].path).to eql('A1')
+ expect(new_store['m2'].path).to eql('A2')
+ end
+
+ it 'should not allow overwriting without a force flag' do
+ # adding another point pointing to the same name is not OK
+ expect { new_store.add(point_name: 'm1', point_path: '98984') }.to raise_error(Warp::Dir::Errors::PointAlreadyExists)
+ end
+
+ it 'should be able to find previously saved item' do
+ expect(new_store['m1']).to eql(Warp::Dir::Point.new('m1', 'A1'))
+ end
+
+ it 'should be able to handle when it doesnt find a given element' do
+ expect { new_store['ASDSADAS'] }.to raise_error(Warp::Dir::Errors::PointNotFound)
+ end
end
end
end
end