realm_logo: Return default logo for realms on LIMITED plan.

This completes our effort to avoid destroying realm logo state while
providing a path to dowgrade from paid plans to LIMITED.
This commit is contained in:
Vishnu KS
2020-06-08 15:23:24 +05:30
committed by Tim Abbott
parent d0220fc5fc
commit eb829e6dce
3 changed files with 38 additions and 14 deletions

View File

@@ -38,7 +38,7 @@ from zerver.lib.narrow import check_supported_events_narrow_filter, read_stop_wo
from zerver.lib.presence import get_presence_for_user, get_presences_for_realm
from zerver.lib.push_notifications import push_notifications_enabled
from zerver.lib.realm_icon import realm_icon_url
from zerver.lib.realm_logo import get_realm_logo_url
from zerver.lib.realm_logo import get_realm_logo_source, get_realm_logo_url
from zerver.lib.request import JsonableError
from zerver.lib.soft_deactivation import reactivate_user_if_soft_deactivated
from zerver.lib.stream_subscription import handle_stream_notifications_compatibility
@@ -66,9 +66,9 @@ from zproject.backends import email_auth_enabled, password_auth_enabled
def add_realm_logo_fields(state: Dict[str, Any], realm: Realm) -> None:
state['realm_logo_url'] = get_realm_logo_url(realm, night = False)
state['realm_logo_source'] = realm.logo_source
state['realm_logo_source'] = get_realm_logo_source(realm, night = False)
state['realm_night_logo_url'] = get_realm_logo_url(realm, night = True)
state['realm_night_logo_source'] = realm.night_logo_source
state['realm_night_logo_source'] = get_realm_logo_source(realm, night = True)
state['max_logo_file_size'] = settings.MAX_LOGO_FILE_SIZE
def always_want(msg_type: str) -> bool:

View File

@@ -6,14 +6,21 @@ from zerver.lib.upload import upload_backend
from zerver.models import Realm
def get_realm_logo_url(realm: Realm, night: bool) -> str:
def get_realm_logo_source(realm: Realm, night: bool) -> str:
if realm.plan_type == Realm.LIMITED:
return Realm.LOGO_DEFAULT
if night:
logo_source = realm.night_logo_source
logo_version = realm.night_logo_version
else:
logo_source = realm.logo_source
logo_version = realm.logo_version
if logo_source == 'U':
return realm.night_logo_source
return realm.logo_source
def get_realm_logo_url(realm: Realm, night: bool) -> str:
logo_source = get_realm_logo_source(realm, night)
if logo_source == Realm.LOGO_UPLOADED:
if night:
logo_version = realm.night_logo_version
else:
logo_version = realm.logo_version
return upload_backend.get_realm_logo_url(realm.id, logo_version, night)
return settings.DEFAULT_LOGO_URI+'?version=0'

View File

@@ -1392,13 +1392,13 @@ class RealmLogoTest(UploadSerializeMixin, ZulipTestCase):
def test_get_default_logo(self) -> None:
self.login('hamlet')
realm = get_realm('zulip')
do_change_logo_source(realm, Realm.LOGO_UPLOADED, self.night)
do_change_logo_source(realm, Realm.LOGO_DEFAULT, self.night)
response = self.client_get("/json/realm/logo", {'night': ujson.dumps(self.night)})
redirect_url = response['Location']
self.assertEqual(redirect_url, get_realm_logo_url(realm, self.night) +
f'&night={str(self.night).lower()}')
is_night_str = str(self.night).lower()
self.assertEqual(redirect_url, f"/static/images/logo/zulip-org-logo.png?version=0&night={is_night_str}")
def test_get_realm_logo(self) -> None:
def test_get_uploaded_logo(self) -> None:
self.login('hamlet')
realm = get_realm('zulip')
do_change_logo_source(realm, Realm.LOGO_UPLOADED, self.night)
@@ -1407,6 +1407,23 @@ class RealmLogoTest(UploadSerializeMixin, ZulipTestCase):
self.assertTrue(redirect_url.endswith(get_realm_logo_url(realm, self.night) +
f'&night={str(self.night).lower()}'))
is_night_str = str(self.night).lower()
if self.night:
file_name = "night_logo.png"
else:
file_name = "logo.png"
self.assertEqual(redirect_url, f"/user_avatars/{realm.id}/realm/{file_name}?version=2&night={is_night_str}")
do_change_plan_type(realm, Realm.LIMITED)
if self.night:
self.assertEqual(realm.night_logo_source, Realm.LOGO_UPLOADED)
else:
self.assertEqual(realm.logo_source, Realm.LOGO_UPLOADED)
response = self.client_get("/json/realm/logo", {'night': ujson.dumps(self.night)})
redirect_url = response['Location']
self.assertEqual(redirect_url, f"/static/images/logo/zulip-org-logo.png?version=0&night={is_night_str}")
def test_valid_logos(self) -> None:
"""
A PUT request to /json/realm/logo with a valid file should return a url