mirror of https://github.com/zulip/zulip.git
tests: Extract get_getters.
This commit is contained in:
parent
5803057589
commit
fea659eacd
|
@ -800,11 +800,106 @@ class ImportExportTest(ZulipTestCase):
|
||||||
with self.settings(BILLING_ENABLED=False), self.assertLogs(level="INFO"):
|
with self.settings(BILLING_ENABLED=False), self.assertLogs(level="INFO"):
|
||||||
do_import_realm(os.path.join(settings.TEST_WORKER_DIR, "test-export"), "test-zulip")
|
do_import_realm(os.path.join(settings.TEST_WORKER_DIR, "test-export"), "test-zulip")
|
||||||
|
|
||||||
|
getters = self.get_realm_getters()
|
||||||
|
|
||||||
|
imported_realm = Realm.objects.get(string_id="test-zulip")
|
||||||
|
|
||||||
|
# test realm
|
||||||
|
self.assertTrue(Realm.objects.filter(string_id="test-zulip").exists())
|
||||||
|
self.assertNotEqual(imported_realm.id, original_realm.id)
|
||||||
|
|
||||||
|
def assert_realm_values(f: Callable[[Realm], Any]) -> None:
|
||||||
|
orig_realm_result = f(original_realm)
|
||||||
|
imported_realm_result = f(imported_realm)
|
||||||
|
# orig_realm_result should be truthy and have some values, otherwise
|
||||||
|
# the test is kind of meaningless
|
||||||
|
assert orig_realm_result
|
||||||
|
|
||||||
|
# It may be helpful to do print(f.__name__) if you are having
|
||||||
|
# trouble debugging this.
|
||||||
|
|
||||||
|
# print(f.__name__, orig_realm_result, imported_realm_result)
|
||||||
|
self.assertEqual(orig_realm_result, imported_realm_result)
|
||||||
|
|
||||||
|
for f in getters:
|
||||||
|
assert_realm_values(f)
|
||||||
|
|
||||||
|
self.verify_emoji_code_foreign_keys()
|
||||||
|
|
||||||
|
# Our huddle hashes change, because hashes use ids that change.
|
||||||
|
self.assertNotEqual(
|
||||||
|
self.get_huddle_hashes(original_realm), self.get_huddle_hashes(imported_realm)
|
||||||
|
)
|
||||||
|
|
||||||
|
# test to highlight that bs4 which we use to do data-**id
|
||||||
|
# replacements modifies the HTML sometimes. eg replacing <br>
|
||||||
|
# with </br>, ' with \' etc. The modifications doesn't
|
||||||
|
# affect how the browser displays the rendered_content so we
|
||||||
|
# are okay with using bs4 for this. lxml package also has
|
||||||
|
# similar behavior.
|
||||||
|
orig_polonius_user = self.example_user("polonius")
|
||||||
|
original_msg = Message.objects.get(
|
||||||
|
content=special_characters_message, sender__realm=original_realm
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
original_msg.rendered_content,
|
||||||
|
'<div class="codehilite"><pre><span></span><code>'\n</code></pre></div>\n'
|
||||||
|
f'<p><span class="user-mention" data-user-id="{orig_polonius_user.id}">@Polonius</span></p>',
|
||||||
|
)
|
||||||
|
imported_polonius_user = UserProfile.objects.get(
|
||||||
|
delivery_email=self.example_email("polonius"), realm=imported_realm
|
||||||
|
)
|
||||||
|
imported_msg = Message.objects.get(
|
||||||
|
content=special_characters_message, sender__realm=imported_realm
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
imported_msg.rendered_content,
|
||||||
|
'<div class="codehilite"><pre><span></span><code>\'\n</code></pre></div>\n'
|
||||||
|
f'<p><span class="user-mention" data-user-id="{imported_polonius_user.id}">@Polonius</span></p>',
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check recipient_id was generated correctly for the imported users and streams.
|
||||||
|
for user_profile in UserProfile.objects.filter(realm=imported_realm):
|
||||||
|
self.assertEqual(
|
||||||
|
user_profile.recipient_id,
|
||||||
|
Recipient.objects.get(type=Recipient.PERSONAL, type_id=user_profile.id).id,
|
||||||
|
)
|
||||||
|
for stream in Stream.objects.filter(realm=imported_realm):
|
||||||
|
self.assertEqual(
|
||||||
|
stream.recipient_id,
|
||||||
|
Recipient.objects.get(type=Recipient.STREAM, type_id=stream.id).id,
|
||||||
|
)
|
||||||
|
|
||||||
|
for huddle_object in Huddle.objects.all():
|
||||||
|
# Huddles don't have a realm column, so we just test all Huddles for simplicity.
|
||||||
|
self.assertEqual(
|
||||||
|
huddle_object.recipient_id,
|
||||||
|
Recipient.objects.get(type=Recipient.HUDDLE, type_id=huddle_object.id).id,
|
||||||
|
)
|
||||||
|
|
||||||
|
for user_profile in UserProfile.objects.filter(realm=imported_realm):
|
||||||
|
# Check that all Subscriptions have the correct is_user_active set.
|
||||||
|
self.assertEqual(
|
||||||
|
Subscription.objects.filter(
|
||||||
|
user_profile=user_profile, is_user_active=user_profile.is_active
|
||||||
|
).count(),
|
||||||
|
Subscription.objects.filter(user_profile=user_profile).count(),
|
||||||
|
)
|
||||||
|
# Verify that we've actually tested something meaningful instead of a blind import
|
||||||
|
# with is_user_active=True used for everything.
|
||||||
|
self.assertTrue(Subscription.objects.filter(is_user_active=False).exists())
|
||||||
|
|
||||||
|
def get_realm_getters(self) -> List[Callable[[Realm], Any]]:
|
||||||
|
names = set()
|
||||||
getters: List[Callable[[Realm], Any]] = []
|
getters: List[Callable[[Realm], Any]] = []
|
||||||
|
|
||||||
def getter(f: Callable[[Realm], Any]) -> Callable[[Realm], Any]:
|
def getter(f: Callable[[Realm], Any]) -> Callable[[Realm], Any]:
|
||||||
getters.append(f)
|
getters.append(f)
|
||||||
assert f.__name__.startswith("get_")
|
assert f.__name__.startswith("get_")
|
||||||
|
|
||||||
|
# Avoid dups
|
||||||
|
assert f.__name__ not in names
|
||||||
|
names.add(f.__name__)
|
||||||
return f
|
return f
|
||||||
|
|
||||||
@getter
|
@getter
|
||||||
|
@ -915,6 +1010,7 @@ class ImportExportTest(ZulipTestCase):
|
||||||
|
|
||||||
@getter
|
@getter
|
||||||
def get_realm_user_statuses(r: Realm) -> Set[Tuple[str, str, int, str]]:
|
def get_realm_user_statuses(r: Realm) -> Set[Tuple[str, str, int, str]]:
|
||||||
|
cordelia = self.example_user("cordelia")
|
||||||
tups = {
|
tups = {
|
||||||
(rec.user_profile.full_name, rec.emoji_name, rec.status, rec.status_text)
|
(rec.user_profile.full_name, rec.emoji_name, rec.status, rec.status_text)
|
||||||
for rec in UserStatus.objects.filter(user_profile__realm_id=r.id)
|
for rec in UserStatus.objects.filter(user_profile__realm_id=r.id)
|
||||||
|
@ -924,6 +1020,7 @@ class ImportExportTest(ZulipTestCase):
|
||||||
|
|
||||||
@getter
|
@getter
|
||||||
def get_realm_emoji_reactions(r: Realm) -> Set[Tuple[str, str]]:
|
def get_realm_emoji_reactions(r: Realm) -> Set[Tuple[str, str]]:
|
||||||
|
cordelia = self.example_user("cordelia")
|
||||||
tups = {
|
tups = {
|
||||||
(rec.emoji_name, rec.user_profile.full_name)
|
(rec.emoji_name, rec.user_profile.full_name)
|
||||||
for rec in Reaction.objects.filter(
|
for rec in Reaction.objects.filter(
|
||||||
|
@ -1050,92 +1147,7 @@ class ImportExportTest(ZulipTestCase):
|
||||||
"twenty_four_hour_time": realm_user_default.twenty_four_hour_time,
|
"twenty_four_hour_time": realm_user_default.twenty_four_hour_time,
|
||||||
}
|
}
|
||||||
|
|
||||||
imported_realm = Realm.objects.get(string_id="test-zulip")
|
return getters
|
||||||
|
|
||||||
# test realm
|
|
||||||
self.assertTrue(Realm.objects.filter(string_id="test-zulip").exists())
|
|
||||||
self.assertNotEqual(imported_realm.id, original_realm.id)
|
|
||||||
|
|
||||||
def assert_realm_values(f: Callable[[Realm], Any]) -> None:
|
|
||||||
orig_realm_result = f(original_realm)
|
|
||||||
imported_realm_result = f(imported_realm)
|
|
||||||
# orig_realm_result should be truthy and have some values, otherwise
|
|
||||||
# the test is kind of meaningless
|
|
||||||
assert orig_realm_result
|
|
||||||
|
|
||||||
# It may be helpful to do print(f.__name__) if you are having
|
|
||||||
# trouble debugging this.
|
|
||||||
|
|
||||||
# print(f.__name__, orig_realm_result, imported_realm_result)
|
|
||||||
self.assertEqual(orig_realm_result, imported_realm_result)
|
|
||||||
|
|
||||||
for f in getters:
|
|
||||||
assert_realm_values(f)
|
|
||||||
|
|
||||||
self.verify_emoji_code_foreign_keys()
|
|
||||||
|
|
||||||
# Our huddle hashes change, because hashes use ids that change.
|
|
||||||
self.assertNotEqual(
|
|
||||||
self.get_huddle_hashes(original_realm), self.get_huddle_hashes(imported_realm)
|
|
||||||
)
|
|
||||||
|
|
||||||
# test to highlight that bs4 which we use to do data-**id
|
|
||||||
# replacements modifies the HTML sometimes. eg replacing <br>
|
|
||||||
# with </br>, ' with \' etc. The modifications doesn't
|
|
||||||
# affect how the browser displays the rendered_content so we
|
|
||||||
# are okay with using bs4 for this. lxml package also has
|
|
||||||
# similar behavior.
|
|
||||||
orig_polonius_user = self.example_user("polonius")
|
|
||||||
original_msg = Message.objects.get(
|
|
||||||
content=special_characters_message, sender__realm=original_realm
|
|
||||||
)
|
|
||||||
self.assertEqual(
|
|
||||||
original_msg.rendered_content,
|
|
||||||
'<div class="codehilite"><pre><span></span><code>'\n</code></pre></div>\n'
|
|
||||||
f'<p><span class="user-mention" data-user-id="{orig_polonius_user.id}">@Polonius</span></p>',
|
|
||||||
)
|
|
||||||
imported_polonius_user = UserProfile.objects.get(
|
|
||||||
delivery_email=self.example_email("polonius"), realm=imported_realm
|
|
||||||
)
|
|
||||||
imported_msg = Message.objects.get(
|
|
||||||
content=special_characters_message, sender__realm=imported_realm
|
|
||||||
)
|
|
||||||
self.assertEqual(
|
|
||||||
imported_msg.rendered_content,
|
|
||||||
'<div class="codehilite"><pre><span></span><code>\'\n</code></pre></div>\n'
|
|
||||||
f'<p><span class="user-mention" data-user-id="{imported_polonius_user.id}">@Polonius</span></p>',
|
|
||||||
)
|
|
||||||
|
|
||||||
# Check recipient_id was generated correctly for the imported users and streams.
|
|
||||||
for user_profile in UserProfile.objects.filter(realm=imported_realm):
|
|
||||||
self.assertEqual(
|
|
||||||
user_profile.recipient_id,
|
|
||||||
Recipient.objects.get(type=Recipient.PERSONAL, type_id=user_profile.id).id,
|
|
||||||
)
|
|
||||||
for stream in Stream.objects.filter(realm=imported_realm):
|
|
||||||
self.assertEqual(
|
|
||||||
stream.recipient_id,
|
|
||||||
Recipient.objects.get(type=Recipient.STREAM, type_id=stream.id).id,
|
|
||||||
)
|
|
||||||
|
|
||||||
for huddle_object in Huddle.objects.all():
|
|
||||||
# Huddles don't have a realm column, so we just test all Huddles for simplicity.
|
|
||||||
self.assertEqual(
|
|
||||||
huddle_object.recipient_id,
|
|
||||||
Recipient.objects.get(type=Recipient.HUDDLE, type_id=huddle_object.id).id,
|
|
||||||
)
|
|
||||||
|
|
||||||
for user_profile in UserProfile.objects.filter(realm=imported_realm):
|
|
||||||
# Check that all Subscriptions have the correct is_user_active set.
|
|
||||||
self.assertEqual(
|
|
||||||
Subscription.objects.filter(
|
|
||||||
user_profile=user_profile, is_user_active=user_profile.is_active
|
|
||||||
).count(),
|
|
||||||
Subscription.objects.filter(user_profile=user_profile).count(),
|
|
||||||
)
|
|
||||||
# Verify that we've actually tested something meaningful instead of a blind import
|
|
||||||
# with is_user_active=True used for everything.
|
|
||||||
self.assertTrue(Subscription.objects.filter(is_user_active=False).exists())
|
|
||||||
|
|
||||||
def test_import_realm_with_no_realm_user_default_table(self) -> None:
|
def test_import_realm_with_no_realm_user_default_table(self) -> None:
|
||||||
original_realm = Realm.objects.get(string_id="zulip")
|
original_realm = Realm.objects.get(string_id="zulip")
|
||||||
|
|
Loading…
Reference in New Issue