Sha256: b2cd518907cd81879bab8f71c2c19e6d0e4fd34daed1c63a265416fe2ed63fba

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

require 'spec_helper'

describe Sequel::Plugins::Vault do
  let(:db) { Sequel.mock(autoid: 1) }
  let(:klass) do
    Class.new(Sequel::Model(db[:vm])) do
      set_primary_key :id
      unrestrict_primary_key
      set_columns(%i[id secret secret_digest key_id])

      plugin :vault
    end
  end
  let(:dataset) { klass.dataset }
  let(:model) { klass.new }
  let(:keys) do
    ['fih3l0Z9e4NBpy5KIj+rmXVexY5O9LspzuqCFyqavjg=',
     'woRXJWevRaxZLxgoiEQtCDPBSf9TNg57bki0RUK1U48=']
  end
  let(:secret) { 'Attack at once.' }
  let(:cypher) { klass.encrypt(keys, secret) }
  let(:digest) { OpenSSL::HMAC.digest('sha512', keys.last, secret) }

  it 'encrypts vault attributes' do
    klass.vault_attributes(keys, :secret)
    model.secret = secret
    expect(model.values[:secret]).not_to eq(secret)
    expect(model.secret).to eq(secret)
    expect(model.key_id).to eq(2)
  end

  it 'allows nil value' do
    klass.vault_attributes(keys, :secret)
    model.secret = nil
    expect(model.values[:secret]).to be_nil
    expect(model.secret).to be_nil
    expect(model.key_id).to be_nil
  end

  it 'writes a digest of the value' do
    klass.vault_attributes(keys, :secret)
    model.secret = secret
    expect(model.values[:secret_digest]).not_to eq(secret)
    expect(model.secret_digest).to eq(digest)
    expect(model.key_id).to eq(2)
  end

  it 'provides a digest lookup' do
    klass.dataset = dataset.with_fetch([{ id: 1, secret: cypher, secret_digest: digest }])
    klass.vault_attributes(keys, :secret)
    lookup = klass.secret_lookup('secret')
    expect(lookup.secret).to eq(secret)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sequel_vault-0.5.2 spec/sequel/plugins/vault_spec.rb