Использование factory_girl с mongoid для проверки referenced_in / reference_many - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь проверить связанный документ для службы подписки.Каждая подписка встроена в учетную запись и ссылается на план.Ниже приведены различные биты кода:

Аккаунт:

Factory.define :account, :class => Account do |a|
  a.subdomain 'test'
  a.agents { [ Factory.build(:user) ] }
  a.subscription { Factory.build(:free_subscription) }
end

Подписка:

Factory.define :free_subscription, :class => Subscription do |s|
  s.started_at Time.now
  s.plan { Factory.build(:free_plan) }
end

План:

Factory.define :free_plan, :class => Plan do |p|
  p.plan_name 'Free'
  p.cost 0
end

Ошибка:

Mongoid::Errors::InvalidCollection: Access to the collection for Subscription is not allowed since it is an embedded document, please access a collection from the root document.

Если я закомментирую строку, связывающую план с подпиской, тесты сработают, но, очевидно, я не могу проверить, есть ли у подписки план.

Любые предложения будут с благодарностью.

ОБНОВЛЕНИЕ:

Вот модели:

class Account
  include Mongoid::Document

  field :company_name, :type => String
  field :subdomain, :type => String
  field :joined_at, :type => DateTime

  embeds_one :subscription

  accepts_nested_attributes_for :subscription

  before_create :set_joined_at_date

  private

  def set_joined_at_date
    self.joined_at = Time.now
  end
end

class Subscription
  include Mongoid::Document

  field :coupon_verified, :type => Boolean
  field :started_at, :type => DateTime

  referenced_in :plan
  embedded_in :account, :inverse_of => :subscription
end

class Plan
  include Mongoid::Document

  field :plan_name, :type => String
  field :cost, :type => Integer
  field :active_ticket_limit, :type => Integer
  field :agent_limit, :type => Integer
  field :company_limit, :type => Integer
  field :client_limit, :type => Integer
  field :sla_support, :type => Boolean
  field :report_support, :type => Boolean

  references_many :subscriptions
end

1 Ответ

5 голосов
/ 22 марта 2011

Вам необходимо создать учетную запись с подпиской, чтобы она была действительной.

Factory.define :free_subscription, :class => Subscription do |s|
  s.started_at Time.now
  s.plan { Factory.build(:free_plan) }
  s.account { Factory(:account) }
end
...