def test_resolve_anyurlfield(self): root = SimpleTextPage.objects.create(title="Home", slug="home", status=SimpleTextPage.PUBLISHED, author=self.user, override_url='/') RedirectNode.objects.create( title="Redirect", status=RedirectNode.PUBLISHED, author=self.user, parent=root, slug="redirect", new_url=AnyUrlValue('fluent_pages.urlnode', root.pk)) response = self.client.get('/redirect/') self.assertRedirects(response, '/')
def test_valid_db_id(self): """ Make sure ID values are properly stored and serialized. """ reg = UrlTypeRegistry() urltype = reg.register(PageModel) page = PageModel.objects.create(slug='foo') v = AnyUrlValue(urltype.prefix, page.id, reg) # Database state self.assertTrue(page.id) self.assertEqual(urltype.prefix, 'any_urlfield.pagemodel') # app_label.modelname self.assertEqual(v.type_prefix, urltype.prefix) self.assertEqual(v.type_value, page.id) self.assertEqual(v.to_db_value(), 'any_urlfield.pagemodel://1') # Frontend self.assertEqual( unicode(v), "/foo/") # fetches model and returns get_absolute_url() # Programmer API's self.assertIs(v.get_model(), PageModel) self.assertEqual(v.get_object(), page) self.assertTrue(v.exists())
def test_resolve_values(self): """ Make sure ID values are properly stored and serialized. """ reg = UrlTypeRegistry() urltype = reg.register(PageModel) page = PageModel.objects.create(slug='foo') valid = AnyUrlValue(urltype.prefix, page.id, reg) invalid = AnyUrlValue(urltype.prefix, 999999, reg) with self.assertNumQueries(1): AnyUrlValue.resolve_values([valid, invalid]) self.assertTrue(valid._resolved_objects) self.assertTrue(invalid._resolved_objects) with self.assertNumQueries(0): self.assertEqual(valid.get_object(), page) self.assertTrue(valid.exists()) self.assertRaises(PageModel.DoesNotExist, lambda: invalid.get_object()) self.assertFalse(invalid.exists())
def test_pickle_registry(self): reg = UrlTypeRegistry() urltype = reg.register(PageModel) page = PageModel.objects.create(slug='foo') # See if custom registries can be pickled v1 = AnyUrlValue(urltype.prefix, page.id, reg) out = StringIO() pickle.dump(v1, out) # Unpickle. out.seek(0) v2 = pickle.load(out) self.assertEqual(v1, v2) # Note that __eq__ is overridden for AnyUrlValue!
def test_invalid_db_id(self): reg = UrlTypeRegistry() urltype = reg.register(PageModel) v = AnyUrlValue(urltype.prefix, 999999, reg) # Database state self.assertEqual(v.type_value, 999999) self.assertEqual(v.to_db_value(), 'any_urlfield.pagemodel://999999') # Frontend self.assertEqual(unicode(v), "#DoesNotExist") # Avoids frontend errors # Programmer API's self.assertIs(v.get_model(), PageModel) self.assertRaises(PageModel.DoesNotExist, lambda: v.get_object()) self.assertFalse(v.exists())
def test_invalid_db_id(self): reg = UrlTypeRegistry() urltype = reg.register(PageModel) v = AnyUrlValue(urltype.prefix, 999999, reg) # Database state self.assertEqual(v.type_value, 999999) self.assertEqual(v.to_db_value(), 'any_urlfield.pagemodel://999999') # Frontend from any_urlfield.models.values import logger logger.warning("NOTE: The following statement will cause a log to output") self.assertEqual(unicode(v), "#DoesNotExist") # Avoids frontend errors # Programmer API's self.assertIs(v.get_model(), PageModel) self.assertRaises(PageModel.DoesNotExist, lambda: v.get_object()) self.assertFalse(v.exists())
def test_pickle_registry(self): """ Test pickle when the ``AnyUrlValue`` has a custom registry. """ reg = UrlTypeRegistry() urltype = reg.register(PageModel) page = PageModel.objects.create(slug='foo') # See if custom registries can be pickled v1 = AnyUrlValue(urltype.prefix, page.id, reg) out = StringIO() pickle.dump(v1, out) # Unpickle. out.seek(0) v2 = pickle.load(out) self.assertEqual(v1, v2) # Note that __eq__ is overridden for AnyUrlValue! # See that the object still works properly self.assertEqual(v2.get_object(), page) self.assertEqual(str(v2), '/foo/')