Skip to content

Commit

Permalink
Get the changes spec working again
Browse files Browse the repository at this point in the history
  • Loading branch information
alexcrichton committed Nov 22, 2010
1 parent a8e2dc4 commit dabd64f
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 169 deletions.
134 changes: 134 additions & 0 deletions spec/vestal_versions/changes_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
require 'spec_helper'

describe VestalVersions::Changes do
context "a version's changes" do
let(:user){ User.create(:name => 'Steve Richert') }
subject{ user.versions.last.changes }

before do
user.update_attribute(:last_name, 'Jobs')
end

it { should be_a(Hash) }
it { should_not be_empty }

it 'has string keys' do
subject.keys.each{ |key| key.should be_a(String) }
end

it 'has two-element array values' do
subject.values.each do |key|
key.should be_a(Array)
key.size.should == 2
end
end

it 'has unique-element values' do
subject.values.each{ |v| v.uniq.should == v }
end

it "equals the model's changes" do
user.first_name = 'Stephen'
model_changes = user.changes
user.save
changes = user.versions.last.changes

model_changes.should == changes
end
end

context 'a hash of changes' do
let(:changes){ {'first_name' => ['Steve', 'Stephen']} }
let(:other){ {'first_name' => ['Catie', 'Catherine']} }

it 'properly appends other changes' do
expected = {'first_name' => ['Steve', 'Catherine']}

changes.append_changes(other).should == expected

changes.append_changes!(other)
changes.should == expected
end

it 'properly prepends other changes' do
expected = {'first_name' => ['Catie', 'Stephen']}

changes.prepend_changes(other).should == expected

changes.prepend_changes!(other)
changes.should == expected
end

it 'is reversible' do
expected = {'first_name' => ['Stephen', 'Steve']}

changes.reverse_changes.should == expected

changes.reverse_changes!
changes.should == expected
end
end

context 'the changes between two versions' do
let(:name){ 'Steve Richert' }
let(:user){ User.create(:name => name) } # 1
let(:version){ user.version }

before do
user.update_attribute(:last_name, 'Jobs') # 2
user.update_attribute(:first_name, 'Stephen') # 3
user.update_attribute(:last_name, 'Richert') # 4
user.update_attribute(:name, name) # 5
end

it 'is a hash' do
1.upto(version) do |i|
1.upto(version) do |j|
user.changes_between(i, j).should be_a(Hash)
end
end
end

it 'has string keys' do
1.upto(version) do |i|
1.upto(version) do |j|
user.changes_between(i, j).keys.each{ |key| key.should be_a(String) }
end
end
end

it 'has two-element arrays with unique values' do
1.upto(version) do |i|
1.upto(version) do |j|
user.changes_between(i, j).values.each do |value|
value.should be_a(Array)
value.size.should == 2
value.uniq.should == value
end
end
end
end

it 'is empty between identical versions' do
user.changes_between(1, version).should be_empty
user.changes_between(version, 1).should be_empty
end

it 'is should reverse with direction' do
1.upto(version) do |i|
i.upto(version) do |j|
up = user.changes_between(i, j)
down = user.changes_between(j, i)
up.should == down.reverse_changes
end
end
end

it 'is empty with invalid arguments' do
1.upto(version) do |i|
user.changes_between(i, nil).should be_blank
user.changes_between(nil, i).should be_blank
end
end
end
end
169 changes: 0 additions & 169 deletions spec/vestal_versions/changes_test.rb

This file was deleted.

0 comments on commit dabd64f

Please sign in to comment.