Hello --

Thanks in advance for putting up with a newbie question:)

I added two columns to my Products model. The db migration completed without
error, I added the items to the views, and I tested the expected behavior on
the site itself. The properties can be set, stored, and is displayed later.
I also put some validation in the model, and the errors display perfectly.
So everything is working just as I would expect.

Where I ran into trouble is when I ran the unit tests I have for the
products model. I'm getting errors that say the properties are an "undefined
method". Even for test cases that don't refer to these properties, they are
returning the same error. I assume this is from referencing the model. Why
does everything work correctly on the site, but the test cases don't seem to
recognize the new properties I've added to the model?

Thanks!
Madison


Additional information below:

(note: two new columns are has_case and case_quantity)

*Error:*
C:\webapp\depot>ruby -I test test/unit/product_test.rb
Loaded suite test/unit/product_test
Started
EEEEEE
Finished in 0.218401 seconds.
  1) Error:
test_default_case_values(ProductTest):
NoMethodError: undefined method `has_case' for #<Product:0x8c65b60>
    test/unit/product_test.rb:53:in `test_default_case_values'
  2) Error:
test_if_has_case_must_have_case_quantity(ProductTest):
ActiveRecord::UnknownAttributeError: unknown attribute: has_case
    test/unit/product_test.rb:58:in `new'
    test/unit/product_test.rb:58:in
`test_if_has_case_must_have_case_quantity'
  3) Error:
test_image_url(ProductTest):
NoMethodError: undefined method `case_quantity' for #<Product:0x8c606d0>
    test/unit/product_test.rb:36:in `test_image_url'
    test/unit/product_test.rb:34:in `each'
    test/unit/product_test.rb:34:in `test_image_url'
  4) Error:
test_invalid_with_empty_attributes(ProductTest):
NoMethodError: undefined method `case_quantity' for #<Product:0x8c5db20>
    test/unit/product_test.rb:10:in `test_invalid_with_empty_attributes'
  5) Error:
test_positive_price(ProductTest):
NoMethodError: undefined method `case_quantity' for #<Product:0x8c5af10>
    test/unit/product_test.rb:20:in `test_positive_price'
  6) Error:
test_unique_title(ProductTest):
NoMethodError: undefined method `case_quantity' for #<Product:0x8c57988>
    test/unit/product_test.rb:47:in `test_unique_title'
6 tests, 0 assertions, 0 failures, 6 errors
C:\webapp\depot>


*Model:*
class Product < ActiveRecord::Base
  has_many :orders, :through=> :line_items
  has_many :line_items
  validates_presence_of :title, :description, :image_url, :price
  validates_numericality_of :price, :case_quantity
  validate :price_must_be_at_least_a_cent, :if_case_must_have_quantity,
            :if_quantity_must_have_case
  validates_uniqueness_of :title
  validates_format_of :image_url,
                      :with => %r{\.(gif|jpg|png)$}i,
                      :message => 'must be a URL for GIF, JPG ' + 'or PNG
image.'
  protected
  def price_must_be_at_least_a_cent
    errors.add(:price, 'should be at least 0.01') if price.nil? || price <
0.01
  end
  def if_case_must_have_quantity
    if (has_case == true) && (case_quantity < 1)
      errors.add(:case_quantity, ': must set case quantity if this product
can be sold in cases')
    end
  end
  def if_quantity_must_have_case
    if (has_case == false) && (case_quantity > 0)
      errors.add(:case_quantity, ': must be 0 if product is not sold in
cases')
    end
  end
  def self.find_products_for_sale
    find(:all, :order => "title")
  end
end


*DB migration:*
class AddCaseAndQuantityToProducts < ActiveRecord::Migration
  def self.up
    add_column :products, :has_case, :boolean, :default => false
    add_column :products, :case_quantity, :integer, :default => 0
  end
  def self.down
    remove_column :products, :has_case
    remove_column :products, :case_quantity
  end
end

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to