travis-api/spec/lib/model/encrypted_column_spec.rb
Aakriti Gupta 65f1a29d86 Move travis-core files from /vendor to /lib.
- Re-factor
- Remove code for notifications
- Remove addons
- Remove travis-core gem.
- Ignore logs directory only
- Move core tests to spec/lib
2016-07-20 11:22:25 +02:00

125 lines
3.7 KiB
Ruby

class Travis::Model < ActiveRecord::Base
describe EncryptedColumn do
def encode str
Base64.strict_encode64 str
end
let(:options){ { key: 'secret-key' } }
let(:column) { EncryptedColumn.new(options) }
let(:iv) { 'a' * 16 }
let(:aes) { stub('aes', :final => '') }
describe '#encrypt?' do
it 'does not encrypt if given data is empty' do
column.encrypt?(nil).should be false
column.encrypt?('').should be false
end
context 'when disabled' do
let(:options) { { disable: true, key: 'secret-key' } }
it 'does not encrypt' do
column.encrypt?('--ENCR--abc').should be false
end
end
end
describe '#decrypt?' do
it 'does not decrypt if given data is empty' do
column.decrypt?(nil).should be false
column.decrypt?('').should be false
end
end
context 'when encryption is disabled' do
before { column.stubs :encrypt? => false }
describe '#dump' do
it 'does not encrypt data' do
column.dump('123qwe').should == '123qwe'
end
end
end
it 'allows to pass use_prefix as an option' do
EncryptedColumn.new(use_prefix: true).use_prefix?.should be true
end
it 'allows to pass key as an option' do
EncryptedColumn.new(key: 'foobarbaz').key.should == 'foobarbaz'
end
context 'when encryption is enabled' do
before { column.stubs :encrypt? => true }
context 'when prefix usage is disabled' do
before { column.stubs :use_prefix? => false }
describe '#load' do
it 'decrypts data even with no prefix' do
data = encode "to-decrypt#{iv}"
column.expects(:create_aes).with(:decrypt, 'secret-key', iv).returns(aes)
aes.expects(:update).with('to-decrypt').returns('decrypted')
column.load(data).should == 'decrypted'
end
it 'removes prefix if prefix is still used' do
data = encode "to-decrypt#{iv}"
data = "#{column.prefix}#{data}"
column.expects(:create_aes).with(:decrypt, 'secret-key', iv).returns(aes)
aes.expects(:update).with('to-decrypt').returns('decrypted')
column.load(data).should == 'decrypted'
end
end
describe '#dump' do
it 'attaches iv to encrypted string' do
column.stubs(:iv => iv)
column.expects(:create_aes).with(:encrypt, 'secret-key', iv).returns(aes)
aes.expects(:update).with('to-encrypt').returns('encrypted')
column.dump('to-encrypt').should == encode("encrypted#{iv}")
end
end
end
context 'when prefix usage is enabled' do
before { column.stubs :use_prefix? => true }
describe '#load' do
it 'does not decrypt data if prefix is not used' do
data = 'abc'
column.load(data).should == data
end
it 'decrypts data if prefix is used' do
data = encode "to-decrypt#{iv}"
data = "#{column.prefix}#{data}"
column.expects(:create_aes).with(:decrypt, 'secret-key', iv).returns(aes)
aes.expects(:update).with('to-decrypt').returns('decrypted')
column.load(data).should == 'decrypted'
end
end
describe '#dump' do
it 'attaches iv and prefix to encrypted string' do
column.stubs(:iv => iv)
column.expects(:create_aes).with(:encrypt, 'secret-key', iv).returns(aes)
aes.expects(:update).with('to-encrypt').returns('encrypted')
result = encode "encrypted#{iv}"
column.dump('to-encrypt').should == "#{column.prefix}#{result}"
end
end
end
end
end
end