class GenericsTest(TestCase):

    def setUp(self):

        self.mew = Cat(name="mew")
        self.mew.save()

        self.snoopy = Dog(name="snoopy")
        self.snoopy.save()

        cat_house = AnimalHouse(animal=self.mew)
        cat_house.save()

        dog_house = AnimalHouse(animal=self.snoopy)
        dog_house.save()

    def test_polymorphic_calls(self):

        houses = AnimalHouse.objects.all()

        self.assertEquals(houses[0].animal.make_sound(), "meow!")
        self.assertEquals(houses[1].animal.make_sound(), "guau!")

    def test_generic_filter(self):        

        cat_houses = AnimalHouse.objects.filter(content_type=ContentType.objects.get_for_model(Cat))
        self.assertEquals([house.animal for house in cat_houses], [self.mew])

        dog_houses = AnimalHouse.objects.filter(content_type=ContentType.objects.get_for_model(Dog))
        self.assertEquals([house.animal for house in dog_houses], [self.snoopy])