forked from laserlemon/vestal_versions
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a8e2dc4
commit dabd64f
Showing
2 changed files
with
134 additions
and
169 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file was deleted.
Oops, something went wrong.