mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
This isn't very slick, but it should get the main points down, and it's past time we got something like this up. Definitely needs in the future another pass at the text, and also some images (screenshots, etc.) and styling.
162 lines
7.0 KiB
Python
162 lines
7.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import absolute_import
|
|
|
|
import os
|
|
import subprocess
|
|
|
|
from django.conf import settings
|
|
from django.test import TestCase, override_settings
|
|
from typing import Any, Dict, List
|
|
|
|
from zproject.settings import DEPLOY_ROOT
|
|
from zerver.lib.integrations import INTEGRATIONS, HUBOT_LOZENGES
|
|
from zerver.lib.test_classes import ZulipTestCase
|
|
from zerver.lib.test_helpers import HostRequestMock
|
|
from zerver.lib.utils import split_by
|
|
from zerver.views.integrations import (
|
|
add_api_uri_context,
|
|
add_integrations_context,
|
|
)
|
|
|
|
class DocPageTest(ZulipTestCase):
|
|
def _test(self, url, expected_content, extra_strings=[]):
|
|
# type: (str, str, List[str]) -> None
|
|
result = self.client_get(url)
|
|
self.assertEqual(result.status_code, 200)
|
|
self.assertIn(expected_content, str(result.content))
|
|
for s in extra_strings:
|
|
self.assertIn(s, str(result.content))
|
|
|
|
def test_doc_endpoints(self):
|
|
# type: () -> None
|
|
self._test('/api/', 'We hear you like APIs')
|
|
self._test('/api/endpoints/', 'pre-built API bindings for')
|
|
self._test('/about/', 'Cambridge, Massachusetts')
|
|
# Test the i18n version of one of these pages.
|
|
self._test('/en/about/', 'Cambridge, Massachusetts')
|
|
self._test('/apps/', 'Appsolutely')
|
|
self._test('/features/', 'Talk about multiple topics at once')
|
|
self._test('/hello/', 'productive group chat')
|
|
self._test('/for/open-source/', 'for open source projects')
|
|
self._test('/integrations/',
|
|
'require creating a Zulip bot',
|
|
extra_strings=[
|
|
# Ensure that the non-webhook integratins are in the HTML.
|
|
"zulip_git_config.py",
|
|
# Ensure that the webhook integrations are in the HTML.
|
|
"https://my.pingdom.com/reports/integration/settings",
|
|
])
|
|
self._test('/devlogin/', 'Normal users')
|
|
self._test('/devtools/', 'Useful development URLs')
|
|
self._test('/errors/404/', 'Page not found')
|
|
self._test('/errors/5xx/', 'Internal server error')
|
|
self._test('/emails/', 'Road Runner invited you to join Zulip')
|
|
self._test('/register/', 'Sign up for Zulip')
|
|
|
|
result = self.client_get('/new-user/')
|
|
self.assertEqual(result.status_code, 301)
|
|
self.assertIn('hello', result['Location'])
|
|
|
|
result = self.client_get('/robots.txt')
|
|
self.assertEqual(result.status_code, 301)
|
|
self.assertIn('static/robots.txt', result['Location'])
|
|
|
|
result = self.client_get('/static/robots.txt')
|
|
self.assertEqual(result.status_code, 200)
|
|
self.assertIn(
|
|
'Disallow: /',
|
|
''.join(str(x) for x in list(result.streaming_content))
|
|
)
|
|
|
|
class IntegrationTest(TestCase):
|
|
def test_check_if_every_integration_has_logo_that_exists(self):
|
|
# type: () -> None
|
|
for integration in INTEGRATIONS.values():
|
|
self.assertTrue(os.path.isfile(os.path.join(DEPLOY_ROOT, integration.logo)))
|
|
|
|
def test_check_if_every_hubot_lozenges_has_logo_that_exists(self):
|
|
# type: () -> None
|
|
for integration in HUBOT_LOZENGES.values():
|
|
self.assertTrue(os.path.isfile(os.path.join(DEPLOY_ROOT, integration.logo)))
|
|
|
|
@override_settings(REALMS_HAVE_SUBDOMAINS=False)
|
|
def test_api_url_view_base(self):
|
|
# type: () -> None
|
|
context = dict() # type: Dict[str, Any]
|
|
add_api_uri_context(context, HostRequestMock())
|
|
self.assertEqual(context["external_api_path_subdomain"], "testserver/api")
|
|
self.assertEqual(context["external_api_uri_subdomain"], "http://testserver/api")
|
|
self.assertTrue(context["html_settings_links"])
|
|
|
|
@override_settings(REALMS_HAVE_SUBDOMAINS=True)
|
|
def test_api_url_view_subdomains_base(self):
|
|
# type: () -> None
|
|
context = dict() # type: Dict[str, Any]
|
|
add_api_uri_context(context, HostRequestMock())
|
|
self.assertEqual(context["external_api_path_subdomain"], "yourZulipDomain.testserver/api")
|
|
self.assertEqual(context["external_api_uri_subdomain"], "http://yourZulipDomain.testserver/api")
|
|
self.assertFalse(context["html_settings_links"])
|
|
|
|
@override_settings(REALMS_HAVE_SUBDOMAINS=True)
|
|
def test_api_url_view_subdomains_full(self):
|
|
# type: () -> None
|
|
context = dict() # type: Dict[str, Any]
|
|
request = HostRequestMock(host="mysubdomain.testserver")
|
|
add_api_uri_context(context, request)
|
|
self.assertEqual(context["external_api_path_subdomain"], "mysubdomain.testserver/api")
|
|
self.assertEqual(context["external_api_uri_subdomain"], "http://mysubdomain.testserver/api")
|
|
self.assertTrue(context["html_settings_links"])
|
|
|
|
def test_integration_view_html_settings_links(self):
|
|
# type: () -> None
|
|
context = dict()
|
|
context['html_settings_links'] = False
|
|
add_integrations_context(context)
|
|
self.assertEqual(
|
|
context['settings_html'],
|
|
'Zulip settings page')
|
|
self.assertEqual(
|
|
context['subscriptions_html'],
|
|
'streams page')
|
|
|
|
context = dict()
|
|
context['html_settings_links'] = True
|
|
add_integrations_context(context)
|
|
self.assertEqual(
|
|
context['settings_html'],
|
|
'<a href="../#settings">Zulip settings page</a>')
|
|
self.assertEqual(
|
|
context['subscriptions_html'],
|
|
'<a target="_blank" href="../#streams">streams page</a>')
|
|
|
|
class AuthorsPageTest(ZulipTestCase):
|
|
def setUp(self):
|
|
# type: () -> None
|
|
""" Manual installation which did not execute `tools/provision`
|
|
would not have the `static/generated/github-contributors.json` fixture
|
|
file.
|
|
"""
|
|
# This block has unreliable test coverage due to the implicit
|
|
# caching here, so we exclude it from coverage.
|
|
if not os.path.exists(settings.CONTRIBUTORS_DATA):
|
|
# Copy the fixture file in `zerver/fixtures` to `static/generated`
|
|
update_script = os.path.join(os.path.dirname(__file__),
|
|
'../../tools/update-authors-json') # nocoverage
|
|
subprocess.check_call([update_script, '--use-fixture']) # nocoverage
|
|
|
|
def test_endpoint(self):
|
|
# type: () -> None
|
|
result = self.client_get('/authors/')
|
|
self.assert_in_success_response(
|
|
['Contributors', 'Statistic last Updated:', 'commits',
|
|
'@timabbott'],
|
|
result
|
|
)
|
|
|
|
def test_split_by(self):
|
|
# type: () -> None
|
|
"""Utility function primarily used in authors page"""
|
|
flat_list = [1, 2, 3, 4, 5, 6, 7]
|
|
expected_result = [[1, 2], [3, 4], [5, 6], [7, None]]
|
|
self.assertEqual(split_by(flat_list, 2, None), expected_result)
|