2015-05-07 14:56:28 -04:00
|
|
|
if JsonVersion.table_exists?
|
2015-05-06 22:29:39 -04:00
|
|
|
|
2015-05-07 14:56:28 -04:00
|
|
|
require 'rails_helper'
|
|
|
|
|
|
|
|
describe JsonVersion, :type => :model do
|
|
|
|
it "should include the `VersionConcern` module to get base functionality" do
|
|
|
|
expect(JsonVersion).to include(PaperTrail::VersionConcern)
|
|
|
|
end
|
2015-05-06 22:29:39 -04:00
|
|
|
|
|
|
|
describe "Methods" do
|
|
|
|
describe "Class" do
|
|
|
|
|
|
|
|
describe '#where_object' do
|
|
|
|
it { expect(JsonVersion).to respond_to(:where_object) }
|
|
|
|
|
|
|
|
context "invalid arguments" do
|
|
|
|
it "should raise an error" do
|
|
|
|
expect { JsonVersion.where_object(:foo) }.to raise_error(ArgumentError)
|
|
|
|
expect { JsonVersion.where_object([]) }.to raise_error(ArgumentError)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "valid arguments", :versioning => true do
|
|
|
|
let(:fruit_names) { %w(apple orange lemon banana lime coconut strawberry blueberry) }
|
|
|
|
let(:fruit) { Fruit.new }
|
|
|
|
let(:name) { 'pomegranate' }
|
|
|
|
let(:color) { Faker::Color.name }
|
|
|
|
|
|
|
|
before do
|
|
|
|
fruit.update_attributes!(:name => name)
|
|
|
|
fruit.update_attributes!(:name => fruit_names.sample, :color => color)
|
|
|
|
fruit.update_attributes!(:name => fruit_names.sample, :color => Faker::Color.name)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should be able to locate versions according to their `object` contents" do
|
|
|
|
expect(JsonVersion.where_object(:name => name)).to eq([fruit.versions[1]])
|
|
|
|
expect(JsonVersion.where_object(:color => color)).to eq([fruit.versions[2]])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#where_object_changes' do
|
|
|
|
it { expect(JsonVersion).to respond_to(:where_object_changes) }
|
|
|
|
|
|
|
|
context "invalid arguments" do
|
|
|
|
it "should raise an error" do
|
|
|
|
expect { JsonVersion.where_object_changes(:foo) }.to raise_error(ArgumentError)
|
|
|
|
expect { JsonVersion.where_object_changes([]) }.to raise_error(ArgumentError)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "valid arguments", :versioning => true do
|
|
|
|
let(:fruit_names) { %w(apple orange lemon banana lime strawberry blueberry) }
|
|
|
|
let(:tropical_fruit_names) { %w(coconut pineapple kiwi mango melon) }
|
|
|
|
let(:fruit) { Fruit.new }
|
|
|
|
let(:name) { 'pomegranate' }
|
|
|
|
let(:color) { Faker::Color.name }
|
|
|
|
|
|
|
|
before do
|
|
|
|
fruit.update_attributes!(:name => name)
|
|
|
|
fruit.update_attributes!(:name => tropical_fruit_names.sample, :color => color)
|
|
|
|
fruit.update_attributes!(:name => fruit_names.sample, :color => Faker::Color.name)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should be able to locate versions according to their `object_changes` contents" do
|
|
|
|
expect(fruit.versions.where_object_changes(:name => name)).to eq(fruit.versions[0..1])
|
|
|
|
expect(fruit.versions.where_object_changes(:color => color)).to eq(fruit.versions[1..2])
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should be able to handle queries for multiple attributes" do
|
|
|
|
expect(fruit.versions.where_object_changes(:color => color, :name => name)).to eq([fruit.versions[1]])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2015-05-07 14:56:28 -04:00
|
|
|
|
2015-05-06 22:29:39 -04:00
|
|
|
end
|
|
|
|
end
|
2015-05-07 14:56:28 -04:00
|
|
|
|
2015-05-06 22:29:39 -04:00
|
|
|
end
|