class TestCanonical(TestCase):

    def setUp(self):
        self.p = Project(
            name='foo',
            repo='http://github.com/ericholscher/django-kong',
            )
        self.p.save()


    def test_canonical_clean(self):
        # Only a url
        self.p.canonical_url = "djangokong.com"
        self.assertEqual(self.p.clean_canonical_url, "http://djangokong.com/")
        # Extra bits in the URL
        self.p.canonical_url = "http://djangokong.com/en/latest/"
        self.assertEqual(self.p.clean_canonical_url, "http://djangokong.com/")
        self.p.canonical_url = "http://djangokong.com//"
        self.assertEqual(self.p.clean_canonical_url, "http://djangokong.com/")
        # Subdomain
        self.p.canonical_url = "foo.djangokong.com"
        self.assertEqual(self.p.clean_canonical_url, "http://foo.djangokong.com/")
        # Https
        self.p.canonical_url = "https://djangokong.com//"
        self.assertEqual(self.p.clean_canonical_url, "https://djangokong.com/")
        self.p.canonical_url = "https://foo.djangokong.com//"
        self.assertEqual(self.p.clean_canonical_url, "https://foo.djangokong.com/")

    def test_canonical_subdomain(self):
        self.p.canonical_url = "https://djangokong.com//"
        with self.settings(USE_SUBDOMAIN=True):
            self.assertEqual(self.p.get_docs_url(), "http://djangokong.com/en/latest/")
示例#2
0
class TestCanonical(TestCase):
    def setUp(self):
        self.p = Project(
            name='foo',
            repo='http://github.com/ericholscher/django-kong',
        )
        self.p.save()

    def test_canonical_clean(self):
        # Only a url
        self.p.canonical_url = "djangokong.com"
        self.assertEqual(self.p.clean_canonical_url, "http://djangokong.com/")
        # Extra bits in the URL
        self.p.canonical_url = "http://djangokong.com/en/latest/"
        self.assertEqual(self.p.clean_canonical_url, "http://djangokong.com/")
        self.p.canonical_url = "http://djangokong.com//"
        self.assertEqual(self.p.clean_canonical_url, "http://djangokong.com/")
        # Subdomain
        self.p.canonical_url = "foo.djangokong.com"
        self.assertEqual(self.p.clean_canonical_url,
                         "http://foo.djangokong.com/")
        # Https
        self.p.canonical_url = "https://djangokong.com//"
        self.assertEqual(self.p.clean_canonical_url, "https://djangokong.com/")
        self.p.canonical_url = "https://foo.djangokong.com//"
        self.assertEqual(self.p.clean_canonical_url,
                         "https://foo.djangokong.com/")

    def test_canonical_subdomain(self):
        self.p.canonical_url = "https://djangokong.com//"
        with self.settings(USE_SUBDOMAIN=True):
            self.assertEqual(self.p.get_docs_url(),
                             "http://djangokong.com/en/latest/")
示例#3
0
class ProjectModelTest(SimpleTestCase):

    def setUp(self):
        self.project = Project(name="name", slug="slug")

    def test_str(self):
        self.assertEqual(str(self.project), self.project.name)

    def test_fullname(self):
        self.project.group = Group(name="Group")
        self.assertEqual("Group / name", self.project.fullname)

    @patch.object(Group, 'is_private', new_callable=PropertyMock,
                  return_value=True)
    def test_is_private_with_group_private(self, mis_private):
        self.project.group = Group()
        self.project.visibility_level = Project.Level.PRIVATE
        self.assertTrue(self.project.is_private)
        self.project.visibility_level = Project.Level.PUBLIC
        self.assertTrue(self.project.is_private)

    @patch.object(Group, 'is_private', new_callable=PropertyMock,
                  return_value=False)
    def test_is_private_with_group_public(self, mis_private):
        self.project.group = Group()
        self.project.visibility_level = Project.Level.PRIVATE
        self.assertTrue(self.project.is_private)
        self.project.visibility_level = Project.Level.PUBLIC
        self.assertFalse(self.project.is_private)

    @patch.object(Group, 'is_public', new_callable=PropertyMock,
                  return_value=True)
    def test_is_public_with_group_public(self, mis_public):
        self.project.group = Group()
        self.project.visibility_level = Project.Level.PRIVATE
        self.assertTrue(self.project.is_public)
        self.project.visibility_level = Project.Level.PUBLIC
        self.assertTrue(self.project.is_public)

    @patch.object(Group, 'is_public', new_callable=PropertyMock,
                  return_value=False)
    def test_is_public_with_group_private(self, mis_public):
        self.project.group = Group()
        self.project.visibility_level = Project.Level.PRIVATE
        self.assertFalse(self.project.is_public)
        self.project.visibility_level = Project.Level.PUBLIC
        self.assertTrue(self.project.is_public)

    def test_get_absolute_url(self):
        expected = reverse('projects:project-detail', args=["slug"])
        self.assertEqual(self.project.get_absolute_url(), expected)

    def test_get_docs_url(self):
        expected = reverse('serve-docs', args=["slug", "index.html"])
        with self.settings(SENDFILE_URL="/docs/"):
            self.assertEqual(self.project.get_docs_url(), expected)

    def test_serve_root_path(self):
        with self.settings(SENDFILE_ROOT="/test/"):
            self.assertEqual(self.project.serve_root_path, "/test/slug")

    @patch.object(Project, 'imported_archives')
    def test_last_imported_archive_date(self, mimported_archives):
        mimported_archives.latest().created = 'created'
        result = self.project.last_imported_archive_date
        mimported_archives.latest.assert_called_with('created')
        self.assertEqual(result, 'created')

    @patch.object(Project, 'imported_archives')
    def test_last_imported_archive_date_empty(self, mimported_archives):
        mimported_archives.latest.side_effect = ImportedArchive.DoesNotExist
        result = self.project.last_imported_archive_date
        self.assertIsNone(result)

    @patch.object(Project, 'imported_archives')
    def test_imported_archive_exists(self, mimported_archives):
        self.project.imported_archive_exists
        mimported_archives.exists.assert_called_with()

    @patch.object(Project, 'imported_files')
    def test_imported_files_count(self, mimported_files):
        self.project.imported_files_count
        mimported_files.count.assert_called_with()

    @patch('projects.models.token_generator.make_token', return_value="token")
    def test_api_token(self, mmake_token):
        self.assertEqual(self.project.api_token, 'token')
        mmake_token.assert_called_with(self.project)

    @patch.object(Project, 'objects')
    def test_clean(self, mobjects):
        mobjects.filter().exclude().exists.return_value = False
        Project(pk=1, name="name", group_id=10).clean()
        mobjects.filter.assert_called_with(group_id=10, name__iexact='name')
        mobjects.filter().exclude.assert_called_with(id=1)

    @patch.object(Project, 'objects')
    def test_clean_invalid(self, mobjects):
        mobjects.filter().exclude().exists.return_value = True
        with self.assertRaises(ValidationError):
            Project(pk=1, name="name", group_id=10).clean()

    @patch.object(ProjectCollaborator, 'objects')
    def test_post_save_with_created_true(self, mobjects):
        Project.post_save(Project, Project(pk=1, author_id=1), True)
        mobjects.create.assert_called_with(
            project_id=1, user_id=1, access_level=AccessLevel.OWNER)

    @patch.object(ProjectCollaborator, 'objects')
    def test_post_save_with_created_false(self, mobjects):
        Project.post_save(Project, None, False)
        mobjects.create.assert_not_called()