require 'ostruct' require 'spec_helper' require_worker 'instance_worker' module RCS module Worker describe FilesystemEvidenceMixin do silence_alerts enable_license evidence_no_conflict describe '#detect_updated_path' do def klass(agent) open_struct = OpenStruct.new(agent: agent) open_struct.singleton_class.send(:include, described_class) open_struct end def paths_to_entries(paths) paths.map { |p| {path: p} } end context 'with unix filesystem' do let(:agent) { factory_create(:agent, platform: 'linux') } let(:subject) { klass(agent) } before do described_class.stub(:agent).and_return(agent) end it 'returns expected path' do subject.stub(:entries).and_return paths_to_entries %w[/usr /usr/foo /usr/bar] expect(subject.detect_updated_path).to eq('/usr') subject.stub(:entries).and_return paths_to_entries %w[/usr/ /usr/foo /usr/bar] expect(subject.detect_updated_path).to eq('/usr') subject.stub(:entries).and_return paths_to_entries %w[/usr] expect(subject.detect_updated_path).to eq('/usr') subject.stub(:entries).and_return paths_to_entries %w[/usr /] expect(subject.detect_updated_path).to eq('/') subject.stub(:entries).and_return paths_to_entries %w[/usr/ /] expect(subject.detect_updated_path).to eq('/') subject.stub(:entries).and_return paths_to_entries %w[/usr/] expect(subject.detect_updated_path).to eq('/usr/') subject.stub(:entries).and_return paths_to_entries %w[/] expect(subject.detect_updated_path).to eq('/') end end context 'with windows filesystem' do let(:agent) { factory_create(:agent, platform: 'windows') } let(:subject) { klass(agent) } before do described_class.stub(:agent).and_return(agent) end it 'returns expected path' do subject.stub(:entries).and_return paths_to_entries %w[c:] expect(subject.detect_updated_path).to eq('c:') subject.stub(:entries).and_return paths_to_entries %w[c:\\] expect(subject.detect_updated_path).to eq('c:\\') subject.stub(:entries).and_return paths_to_entries %w[c: c:\\foo] expect(subject.detect_updated_path).to eq('c:') subject.stub(:entries).and_return paths_to_entries %w[c:\\ c:\\foo] expect(subject.detect_updated_path).to eq('c:') subject.stub(:entries).and_return paths_to_entries %w[c:\\foo\\bar c:\\foo] expect(subject.detect_updated_path).to eq('c:\\foo') subject.stub(:entries).and_return paths_to_entries %w[c:\\foo\\bar c:\\foo\\] expect(subject.detect_updated_path).to eq('c:\\foo') end end end end end end .