Created
September 15, 2013 02:43
-
-
Save arthurnn/6567607 to your computer and use it in GitHub Desktop.
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
require "spec_helper" | |
class User | |
include Mongoid::Document | |
has_and_belongs_to_many :cars, inverse_of: :users | |
has_one :favorite_car, class_name: 'Car', inverse_of: :person | |
before_validation :set_default_favorite_car, on: :create | |
before_save :update_cars | |
def set_default_favorite_car | |
unless self.favorite_car | |
self.favorite_car = Car.create! | |
end | |
end | |
def updated_cars | |
[favorite_car].compact | |
end | |
def update_cars | |
_updated_cars = updated_cars | |
self.cars = _updated_cars unless self.cars.map(&:id).sort == _updated_cars.map(&:id).sort | |
true | |
end | |
end | |
class Car | |
include Mongoid::Document | |
has_and_belongs_to_many :users, inverse_of: :cars | |
belongs_to :person, class_name: 'User', inverse_of: :favorite_car#, autosave: true | |
end | |
describe User do | |
before do | |
@user = User.create! | |
end | |
describe "updating favorite_car" do | |
before do | |
@car = Car.create! | |
@user.favorite_car = @car | |
@user.save! | |
end | |
it "should update cars" do | |
@user.cars.should eq([@car]) | |
end | |
it "should update car_ids" do | |
@user.car_ids.should eq([@car.id]) | |
end | |
it "should persist new cars" do | |
@user.reload.cars.should eq([@car]) | |
end | |
end | |
end | |
describe Car do | |
before do | |
@car = Car.create! | |
end | |
describe "updating person" do | |
before do | |
@user = User.create!(favorite_car: @car) | |
@car.person = @user | |
@car.save! | |
end | |
it "should update users" do | |
@car.users.should eq([@user]) | |
end | |
it "should update user_ids" do | |
@car.user_ids.should eq([@user.id]) | |
end | |
it "should persist new users" do | |
@car.reload.users.should eq([@user]) | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment