thanks for your reply David,
what worried me (well, got me thinking) was having to put on A's specs too
much knowledge about when B's attributes were valid or not. I ended up doing
more or less what you expose, but only:
* using nil as the invalid input
* using one valid combination for the valid ones

greetings,
joaquin

2010/3/15 David Chelimsky <dchelim...@gmail.com>

> On Fri, Mar 12, 2010 at 7:45 AM, Joaquin Rivera Padron
> <joahk...@gmail.com> wrote:
> > hi there,
> > I have a Rails model A, that has_one model B, model A have a method
> called
> > save_nested_b that:
> > * context 'invalid B params'
> >  ** context 'no nested B exists' => do nothing
> >  ** context 'nested B exists' => remove it
> >
> > * context 'valid B params'
> >  ** context 'no nested B exists' => create it
> >  ** context 'nested B exists' => remove it and create new one (or edit
> > attributes linking to A)
> >
> > the save_nested_b method implementation should not be problematic. My
> > question is:
> >
> > on A specs I want to make sure all above on the list happens but not
> having
> > to repeat all B validations on making 'invalid B params' examples,
> because B
> > have its own specs, and also the A specs for save_nested_b will be
> brittle
> > when B validations change (not to mention the combinations of invalid
> fields
> > can be long)
> >
> > how would you do this? would you do a loose thing like:
> >
> > context 'invalid B params' do
> > ..
> > a.save_nested_b nil
> > a.should have_no_b
> > ..
> > end
> >
> > giving it a more thought after writing this email I guess I would go for
> this approach, what do you think?
>
> Depends on who is calling save_nested_b. I usually save associations
> via callbacks as part of the save operation, and wouldn't call
> save_nested_b from outside the A object. In that case, I'd treat
> save_nested_b as a private method and likely not spec it directly.
> i.e.
>
> a = A.create!(valid_a_attributes, :b => valid_b_attributes)
> a.should have_a_b
>
> a = A.create!(valid_a_attributes, :b => invalid_b_attributes)
> a.should have_no_b
>
> etc
>
> WDYT?
>
> David
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>



-- 
www.least-significant-bit.com
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to