Arthur,

You're right, I only test for NotFound. That's mainly because I really
forgot about InternalServerError in the first place :)

Looking at

http://github.com/sam/dm-core/tree/master/lib/dm-core/resource.rb#L300
http://github.com/sam/dm-core/tree/master/lib/dm-core/repository.rb#L79

it seems, that destroying a new_record? returns false, and any kind of
database error would also return false. I guess some kind of foreign
key error or something could be a reason?

Anyway, I think all you need to do is provoke this behaviour in your
request (i.e. convince datamapper's Resource#destroy to return
fals/nil), and then test for response.status.should == 500

cheers
snusnu

On Sun, Dec 14, 2008 at 06:16, Arthur Zapparoli <[email protected]> wrote:
>
> Martin,
>
> Correct me if I'm wrong, but, in your tests: you just test the DELETE
> if there's no record. Right? So, it raises NotFound and return a 404
> status.
>
> http://github.com/snusnu/merb_resource_controller/tree/master/spec/mrc_test_app/spec/request/comments_spec.rb#L209
>
> But, there's two kind of failures in this case:
>
> - A record exists
> - No record exists (or, no record could be found with this ID)
>
> You are testing the latter, and I want to test the former.
>
> Here's my controller (same code merb-gen gives me):
>
>  def destroy(id)
>    @foo = Foo.get(id)
>    raise NotFound unless @foo
>    if @foo.destroy
>      redirect resource(:foos)
>    else
>      raise InternalServerError
>    end
>  end
>
> I wan't to test the raise InternalServerError case.
> I already have specs for the raise NotFound line. And without any mocks. :)
>
> Arthur Zapparoli
> http://merb-br.org
> http://arthurgeek.net
>
>
>
> On Sun, Dec 14, 2008 at 3:01 AM, Martin Gamsjaeger <[email protected]> 
> wrote:
>>
>> Arthur,
>>
>> I forgot to mention that the default controllers that get generated by
>> merb-gen resource don't return NotAcceptable (406) on failing
>> requests. You will have to add that yourself to the actions in
>> question. Again, have a look at
>> http://github.com/snusnu/merb_resource_controller/tree/master/lib/merb_resource_controller/actions.rb
>> to see how I do that. Basically, it boils down to providing the
>> appropriate :status option to render/display
>>
>> cheers
>> snusnu
>>
>> On Sun, Dec 14, 2008 at 05:57, Martin Gamsjaeger <[email protected]> wrote:
>>> Hey Arthur,
>>>
>>> Have a look at the specs inside
>>> http://github.com/snusnu/merb_resource_controller/tree/master to see
>>> how I do this. Not sure if that's the best, but it basically relies on
>>> returning appropriate HTTP status codes so it should be quite ok.
>>>
>>> cheers
>>> snusnu
>>>
>>> On Sun, Dec 14, 2008 at 04:27, Arthur Zapparoli <[email protected]> wrote:
>>>>
>>>> In my sucessfull DELETE, there's no mock. In fact, I don't use mocks
>>>> on all of my other tests. I know how this can make my tests brittle.
>>>>
>>>> But I couldn't figure how to test this: "if anything goes wrong with
>>>> the DELETE, raise InternalServerError" without mocking.
>>>>
>>>> And, merb-gen do not creates tests for failing. It only create tests
>>>> for successful delete.
>>>>
>>>> Arthur Zapparoli
>>>> http://merb-br.org
>>>> http://arthurgeek.net
>>>>
>>>> On Sun, Dec 14, 2008 at 12:52 AM, Tony Mann <[email protected]> wrote:
>>>>> You don't need to use mocks. To see how to do what you want, use merb-gen
>>>>> resource_controller to make controller, and then look at its specs. The
>>>>> specs use pure CRUD to create and delete resources, making it a more
>>>>> realistic test of the system.
>>>>>
>>>>> The merb community frowns on mocks, and once you ditch them, you will see
>>>>> why. Suddenly your tests fail when the actual system fails!
>>>>>
>>>>> ..tony..
>>>>>
>>>>> On Sat, Dec 13, 2008 at 2:25 PM, Arthur Zapparoli <[email protected]>
>>>>> wrote:
>>>>>>
>>>>>> Hi everyone,
>>>>>>
>>>>>> How to test a failing request on my controllers?
>>>>>>
>>>>>> Eg: I want to test a sucessfull DELETE, and a failing DELETE too.
>>>>>>
>>>>>> I did this using mocks, but I wan't to know if there's any othr way to
>>>>>> test this.
>>>>>>
>>>>>> Here's my code:
>>>>>>
>>>>>>  describe "a failing DELETE", :given => "a foo exists" do
>>>>>>
>>>>>>    before(:each) do
>>>>>>      Foo.should_receive(:get).and_return(@foo = Foo.first)
>>>>>>      @foo.should_receive(:destroy).and_return(false)
>>>>>>    end
>>>>>>
>>>>>>    it "do not deletes the foo from the database" do
>>>>>>      lambda { delete_neighborhood(Foo.first) }.should_not change {
>>>>>> Foo.count }
>>>>>>    end
>>>>>>
>>>>>>    it "raises a 500 InternalServerError" do
>>>>>>      @response = delete_neighborhood(Foo.first)
>>>>>>      @response.status.should == 500
>>>>>>    end
>>>>>>  end
>>>>>>
>>>>>> And, controller:
>>>>>>
>>>>>>  def destroy(id)
>>>>>>    @foo = Foo.get(id)
>>>>>>    raise NotFound unless @foo
>>>>>>    if @foo.destroy
>>>>>>      redirect resource(:foos), :message => {:notice => "Foo
>>>>>> sucessfully deleted"}
>>>>>>    else
>>>>>>      raise InternalServerError
>>>>>>    end
>>>>>>  end
>>>>>>
>>>>>>
>>>>>> Arthur Zapparoli
>>>>>> http://merb-br.org
>>>>>> http://arthurgeek.net
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> >
>>>>>
>>>>
>>>> >>
>>>>
>>>
>>
>> >
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"merb" 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/merb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to