Forum: Ruby on Rails Problems using nested objects in a test

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Fdb488647484e40f785dde7134afc6d1?d=identicon&s=25 Heinz Strunk (cojones)
on 2009-03-01 16:31
Hey,

I'm having some problems testing the creation of objects with nested
objects. First of all, the test itself:
def test_should_create_user
  assert_difference('User.count') do
    post :create, :user => {
  :character => characters(:user_controller_test),
  :username => 'test123',
  :password => 'test123', :password_confirmation => 'test123',
  :email => 'test123@brothelking.de' }
  end
  assert_redirected_to
end

My problem is, that :character has an object as value and converting it
to an arraay with .to_a doesn't really help cause the create method in
the Users controller looks like:
@nationality = Nationality.find(params[:character][:nationality])
params[:character][:nationality] = @nationality
params[:character][:birthday] =
Date.strptime(params[:character][:birthday], '%d.%m.%Y').to_s(:db)
@user = User.new(params[:user])
@character = Character.new(params[:character])
@user.character = @character

When I convert the characters(:user_controller_test) to an array it has
:nationality_id as a value but not :nationality as I'd have it when I
was using a normal form.

Does anyone know how I could solve that problem?

One more thing.. I've got many nested objects in User that's why I need
to create @nationality and @character in order to create @user and
actually save it. Is there a more convenient way of doing this than I do
it above?

Thanks
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-01 17:56
(Received via mailing list)
On Mar 1, 3:31 pm, Heinz Strunk <rails-mailing-l...@andreas-s.net>
wrote:
>   :email => 'test...@brothelking.de' }
> Date.strptime(params[:character][:birthday], '%d.%m.%Y').to_s(:db)
> @user = User.new(params[:user])
> @character = Character.new(params[:character])
> @user.character = @character
>
> When I convert the characters(:user_controller_test) to an array it has
> :nationality_id as a value but not :nationality as I'd have it when I
> was using a normal form.
>
> Does anyone know how I could solve that problem?

It's up to you to create the sort of hash that would have been
submitted normally. If the way your controller and test data work
means that you have to spell that our at :character => {:nationality
=> characters(:user_controller_test).something.something ...} then
you've just got to get on with it

Fred
Fdb488647484e40f785dde7134afc6d1?d=identicon&s=25 Heinz Strunk (cojones)
on 2009-03-01 18:01
So there's no method to create the hash the way it'd be accepted? Sounds
like a helper method... :)
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-01 18:04
(Received via mailing list)
On Mar 1, 5:01 pm, Heinz Strunk <rails-mailing-l...@andreas-s.net>
wrote:
> So there's no method to create the hash the way it'd be accepted? Sounds
> like a helper method... :)

Well given an activerecord object then foo.attributes is a hash of
attributes, however this cannot anticipate how you're handling things
in the controller (eg nationality/nationality_id and the thing you're
doing with dates)

Fred
This topic is locked and can not be replied to.