On 11/11/2012 4:45pm, Mike Dewhirst wrote:
Can anyone help with some unit test guidance please?

How can I trap an IntegrityError in a test to prove unique_together is
working?

I'm modelling a company and multiple divisions. A solo division doesn't
need a division.name so I'm allowing it to be blank. It's __unicode__()
method returns self.name or self.company.name

All fine so far. But I insist two divisions cannot have the same name.

In Division's Meta class we have unique_together = (company, name) and
this works as advertised

In a unit test I don't seem to be able to swallow the IntegrityError!!


............................E......
=====================================================
...
IntegrityError: duplicate key value violates unique constraint
"company_division_company_id_name_key"
DETAIL:  Key (company_id, name)=(7, ) already exists.

Here is the unit test ...

     def test_twodivswithnoname(self):
         tstc = Company.objects.get(name='Company Inc')
         tstdiv, c = Division.objects.get_or_create(company=tstc)
         tstdiv.name = ''
         tstdiv.save()
         expected = ''
         result = tstdiv.name
         # prove nothing up my sleeve
         self.assertEqual(result, expected)
         # if name is None, __unicode__() returns the owning company name
         expected = 'Company Inc'
         result = '%s' % tstdiv
         self.assertEqual(result, expected)

This didn't swallow it either ...

        try:
            tstdivb = Division.objects.create(company=tstc, name='')
        except IntegrityError as e:
            pass


         tstdivb = Division.objects.create(company=tstc)
         tstdivb.name = ''
         try:
             # company and name are unique together
             tstdivb.save()
         except IntegrityError as e:
             pass
         tstdivb.delete()

I've also tried self.assertRaises(IntegrityError) instead of the
try/except block. Same result.

Thanks

Mike


--
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to