spec/sequel_adapter_spec.rb in slosilo-0.0.0 vs spec/sequel_adapter_spec.rb in slosilo-0.1.2
- old
+ new
@@ -1,171 +1,60 @@
require 'spec_helper'
-require 'sequel'
-require 'io/grab'
require 'slosilo/adapters/sequel_adapter'
describe Slosilo::Adapters::SequelAdapter do
- include_context "with example key"
-
let(:model) { double "model" }
- before { allow(subject).to receive_messages create_model: model }
+ before { subject.stub create_model: model }
describe "#get_key" do
context "when given key does not exist" do
- before { allow(model).to receive_messages :[] => nil }
+ before { model.stub :[] => nil }
it "returns nil" do
- expect(subject.get_key(:whatever)).not_to be
+ subject.get_key(:whatever).should_not be
end
end
-
- context "when it exists" do
- let(:id) { "id" }
- before { allow(model).to receive(:[]).with(id).and_return (double "key entry", id: id, key: rsa.to_der) }
- it "returns it" do
- expect(subject.get_key(id)).to eq(key)
- end
- end
end
describe "#put_key" do
let(:id) { "id" }
+ let(:key) { "key" }
it "creates the key" do
- expect(model).to receive(:create).with(hash_including(:id => id, :key => key.to_der))
- allow(model).to receive_messages columns: [:id, :key]
+ model.should_receive(:create).with id: id, key: key
subject.put_key id, key
end
-
- it "adds the fingerprint if feasible" do
- expect(model).to receive(:create).with(hash_including(:id => id, :key => key.to_der, :fingerprint => key.fingerprint))
- allow(model).to receive_messages columns: [:id, :key, :fingerprint]
- subject.put_key id, key
- end
end
let(:adapter) { subject }
describe "#each" do
let(:one) { double("one", id: :one, key: :onek) }
let(:two) { double("two", id: :two, key: :twok) }
- before { allow(model).to receive(:each).and_yield(one).and_yield(two) }
+ before { model.stub(:each).and_yield(one).and_yield(two) }
it "iterates over each key" do
results = []
- allow(Slosilo::Key).to receive(:new) {|x|x}
adapter.each { |id,k| results << { id => k } }
- expect(results).to eq([ { one: :onek}, {two: :twok } ])
+ results.should == [ { one: :onek}, {two: :twok } ]
end
end
-
- shared_context "database" do
+
+ describe '#model' do
let(:db) { Sequel.sqlite }
before do
- allow(subject).to receive(:create_model).and_call_original
- Sequel::Model.cache_anonymous_models = false
+ Slosilo::encryption_key = Slosilo::Symmetric.new.random_key
+ subject.unstub :create_model
+ require 'sequel'
Sequel::Model.db = db
- end
- end
-
- shared_context "encryption key" do
- before do
- Slosilo.encryption_key = Slosilo::Symmetric.new.random_key
- end
- end
-
- context "with old schema" do
- include_context "encryption key"
- include_context "database"
-
- before do
- db.create_table :slosilo_keystore do
- String :id, primary_key: true
- bytea :key, null: false
- end
- subject.put_key 'test', key
- end
-
- context "after migration" do
- before { subject.migrate! }
-
- it "supports look up by id" do
- expect(subject.get_key("test")).to eq(key)
- end
-
- it "supports look up by fingerprint, without a warning" do
- expect($stderr.grab do
- expect(subject.get_by_fingerprint(key.fingerprint)).to eq([key, 'test'])
- end).to be_empty
- end
- end
-
- it "supports look up by id" do
- expect(subject.get_key("test")).to eq(key)
- end
-
- it "supports look up by fingerprint, but issues a warning" do
- expect($stderr.grab do
- expect(subject.get_by_fingerprint(key.fingerprint)).to eq([key, 'test'])
- end).not_to be_empty
- end
- end
-
- shared_context "current schema" do
- include_context "database"
- before do
Sequel.extension :migration
- require 'slosilo/adapters/sequel_adapter/migration.rb'
- Sequel::Migration.descendants.first.apply db, :up
+ require 'slosilo/adapters/sequel_adapter/migration'
+ Sequel::Migration::descendants.first.apply db, :up
end
- end
-
- context "with current schema" do
- include_context "encryption key"
- include_context "current schema"
- before do
- subject.put_key 'test', key
- end
-
- it "supports look up by id" do
- expect(subject.get_key("test")).to eq(key)
- end
-
- it "supports look up by fingerprint" do
- expect(subject.get_by_fingerprint(key.fingerprint)).to eq([key, 'test'])
- end
- end
-
- context "with an encryption key", :wip do
- include_context "encryption key"
- include_context "current schema"
-
- it { is_expected.to be_secure }
-
- it "saves the keys in encrypted form" do
- subject.put_key 'test', key
-
- expect(db[:slosilo_keystore][id: 'test'][:key]).to_not eq(key.to_der)
- expect(subject.get_key 'test').to eq(key)
- end
- end
-
- context "without an encryption key", :wip do
- before do
- Slosilo.encryption_key = nil
- end
-
- include_context "current schema"
-
- it { is_expected.not_to be_secure }
-
- it "refuses to store a private key" do
- expect { subject.put_key 'test', key }.to raise_error(Slosilo::Error::InsecureKeyStorage)
- end
-
- it "saves the keys in plaintext form" do
- pkey = key.public
- subject.put_key 'test', pkey
-
- expect(db[:slosilo_keystore][id: 'test'][:key]).to eq(pkey.to_der)
- expect(subject.get_key 'test').to eq(pkey)
+
+ let(:key) { 'fake key' }
+ let(:id) { 'some id' }
+ it "transforms (encrypts) the key" do
+ subject.model.create id: id, key: key
+ db[:slosilo_keystore][id: id][:key].should_not == key
+ subject.model[id].key.should == key
end
end
end