require 'spec_helper' module Omnibus describe Package do let(:path) { '/path/to/files/thing.deb' } subject { described_class.new(path) } describe '.initialize' do it 'sets the path' do expect(subject.instance_variables).to include(:@path) end end describe '#name' do it 'returns the basename of the file' do expect(subject.name).to eq('thing.deb') end end describe '#md5' do let(:md5) { 'abcdef123456' } before { allow(subject).to receive(:digest).with(path, :md5).and_return(md5) } it 'returns the md5 of the package at the path' do expect(subject.md5).to eq(md5) end end describe '#sha256' do let(:sha256) { 'abcdef123456' } before { allow(subject).to receive(:digest).with(path, :sha256).and_return(sha256) } it 'returns the sha256 of the package at the path' do expect(subject.sha256).to eq(sha256) end end describe '#sha512' do let(:sha512) { 'abcdef123456' } before { allow(subject).to receive(:digest).with(path, :sha512).and_return(sha512) } it 'returns the sha512 of the package at the path' do expect(subject.sha512).to eq(sha512) end end describe '#content' do context 'when the file exists' do let(:content) { 'BINARY' } before { allow(IO).to receive(:read).with(path).and_return(content) } it 'reads the file' do expect(subject.content).to eq(content) end end context 'when the file does not exist' do before { allow(IO).to receive(:read).and_raise(Errno::ENOENT) } it 'raises an exception' do expect { subject.content }.to raise_error(NoPackageFile) end end end describe '#metadata' do let(:content) { '{ "platform": "ubuntu" }' } before { allow(IO).to receive(:read).and_return(content) } it 'returns a Metadata object' do expect(subject.metadata).to be_a(Metadata) end it 'reads the information in the file' do expect(subject.metadata[:platform]).to eq('ubuntu') end end end end