def test_update_adds_missing_from_signal(self):
        provider = ThirdPartyProvider(api_endpoint='http://example.com',
                                      resource_type='photo')
        self.assertNotIn(provider, self.registry)

        # Signal updates
        provider.save()

        self.assertIn(provider, self.registry)
    def setUp(self):
        # Create a provider
        self.provider = ThirdPartyProvider(name='test',
                                           resource_type='rich',
                                           is_active=True,
                                           expose=True)
        self.provider.save()

        # Add URLSchemes
        self.scheme, created = URLScheme.objects.get_or_create(
            scheme='foo',
            defaults={'provider': self.provider}
        )

        if not created:
            self.scheme.provider = self.provider
            self.scheme.save()
class ModelsTestCase(TestCase):

    def setUp(self):
        # Create a provider
        self.provider = ThirdPartyProvider(name='test',
                                           resource_type='rich',
                                           is_active=True,
                                           expose=True)
        self.provider.save()

        # Add URLSchemes
        self.scheme, created = URLScheme.objects.get_or_create(
            scheme='foo',
            defaults={'provider': self.provider}
        )

        if not created:
            self.scheme.provider = self.provider
            self.scheme.save()

    def tearDown(self):
        self.scheme.delete()
        self.provider.delete()

    def test_url_schemes_property_cached(self):
        assert not hasattr(self.provider, '_url_schemes')
        self.provider.url_schemes
        assert self.provider._url_schemes == [u'foo']

    def test_provider_post_save_signal_invalidates_cache(self):
        self.provider.url_schemes
        assert hasattr(self.provider, '_url_schemes')

        self.provider.save()
        assert not hasattr(self.provider, '_url_schemes')

    def test_scheme_post_save_signal_invalidates_cache(self):
        self.provider.url_schemes
        assert hasattr(self.provider, '_url_schemes')

        self.scheme.save()
        assert not hasattr(self.provider, '_url_schemes')