mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 21:13:36 +00:00
tests: Eliminate narrow.json fixture.
In 2484d870b4 I created tests
using a fixture called narrow.json. I believe my intention
was to eventually use the fixture for similar tests on the
frontend, but that never happened.
Almost seven years later, I think it's time to just use
straightforward code in Python to test build_narrow_filter.
In particular, we want to move to dataclasses, so that would
create an addition nuisance for fixture-based tests. The
fixture was already annoying in terms of being an extra moving
part, being hard to read, and not being type-safe.
In order to avoid typos, I mostly code-generated the new
Python code by instrumenting the old test:
narrow_filter = build_narrow_filter(narrow)
+ print("###\n")
+ print(f"narrow_filter = build_narrow_filter({narrow})\n")
for e in accept_events:
message = e["message"]
flags = e["flags"]
@@ -610,6 +612,8 @@ class NarrowLibraryTest(ZulipTestCase):
if flags is None:
flags = []
self.assertTrue(narrow_filter(message=message, flags=flags))
+ print(f"self.assertTrue(narrow_filter(message={message}, flags={flags},))")
+ print()
for e in reject_events:
message = e["message"]
flags = e["flags"]
@@ -618,6 +622,8 @@ class NarrowLibraryTest(ZulipTestCase):
if flags is None:
flags = []
self.assertFalse(narrow_filter(message=message, flags=flags))
+ print(f"self.assertFalse(narrow_filter(message={message}, flags={flags},))")
+ print()
I then basically pasted the output in and ran black to format it.
This commit is contained in:
323
zerver/tests/fixtures/narrow.json
vendored
323
zerver/tests/fixtures/narrow.json
vendored
@@ -1,323 +0,0 @@
|
||||
[
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":{
|
||||
"display_recipient":"devel",
|
||||
"type":"stream"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"private"
|
||||
},
|
||||
"flags":null
|
||||
},
|
||||
{
|
||||
"message":{
|
||||
"display_recipient":"social",
|
||||
"type":"stream"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"stream",
|
||||
"devel"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"stream",
|
||||
"subject":"BarK"
|
||||
},
|
||||
"flags":null
|
||||
},
|
||||
{
|
||||
"message":{
|
||||
"type":"stream",
|
||||
"topic":"bark"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"private"
|
||||
},
|
||||
"flags":null
|
||||
},
|
||||
{
|
||||
"message":{
|
||||
"type":"stream",
|
||||
"subject":"play with tail"
|
||||
},
|
||||
"flags":null
|
||||
},
|
||||
{
|
||||
"message":{
|
||||
"type":"stream",
|
||||
"topic":"play with tail"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"topic",
|
||||
"bark"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":{
|
||||
"display_recipient":"devel",
|
||||
"type":"stream",
|
||||
"subject":"python"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"private"
|
||||
},
|
||||
"flags":null
|
||||
},
|
||||
{
|
||||
"message":{
|
||||
"display_recipient":"devel",
|
||||
"type":"stream",
|
||||
"subject":"java"
|
||||
},
|
||||
"flags":null
|
||||
},
|
||||
{
|
||||
"message":{
|
||||
"display_recipient":"social",
|
||||
"type":"stream"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"stream",
|
||||
"devel"
|
||||
],
|
||||
[
|
||||
"topic",
|
||||
"python"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":{
|
||||
"sender_email":"hamlet@zulip.com"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":{
|
||||
"sender_email":"cordelia@zulip.com"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"sender",
|
||||
"hamlet@zulip.com"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"private"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"stream"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"is",
|
||||
"dm"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"private"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"stream"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"is",
|
||||
"private"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":null,
|
||||
"flags":[
|
||||
"starred"
|
||||
]
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":null,
|
||||
"flags":[
|
||||
"alerted"
|
||||
]
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"is",
|
||||
"starred"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":null,
|
||||
"flags":[
|
||||
"mentioned"
|
||||
]
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":null,
|
||||
"flags":[
|
||||
"starred"
|
||||
]
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"is",
|
||||
"alerted"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":null,
|
||||
"flags":[
|
||||
"mentioned"
|
||||
]
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":null,
|
||||
"flags":[
|
||||
"starred"
|
||||
]
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"is",
|
||||
"mentioned"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":null,
|
||||
"flags": []
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":null,
|
||||
"flags":[
|
||||
"read"
|
||||
]
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"is",
|
||||
"unread"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"accept_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"stream",
|
||||
"subject":"✔ python"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"reject_events":[
|
||||
{
|
||||
"message":{
|
||||
"type":"private"
|
||||
},
|
||||
"flags":null
|
||||
},
|
||||
{
|
||||
"message":{
|
||||
"type":"stream",
|
||||
"subject":"java"
|
||||
},
|
||||
"flags":null
|
||||
}
|
||||
],
|
||||
"narrow":[
|
||||
[
|
||||
"is",
|
||||
"resolved"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1,5 +1,4 @@
|
||||
import datetime
|
||||
import os
|
||||
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Union
|
||||
from unittest import mock
|
||||
|
||||
@@ -593,31 +592,243 @@ class NarrowBuilderTest(ZulipTestCase):
|
||||
|
||||
class NarrowLibraryTest(ZulipTestCase):
|
||||
def test_build_narrow_filter(self) -> None:
|
||||
fixtures_path = os.path.join(os.path.dirname(__file__), "fixtures/narrow.json")
|
||||
with open(fixtures_path, "rb") as f:
|
||||
scenarios = orjson.loads(f.read())
|
||||
self.assert_length(scenarios, 11)
|
||||
for scenario in scenarios:
|
||||
narrow = scenario["narrow"]
|
||||
accept_events = scenario["accept_events"]
|
||||
reject_events = scenario["reject_events"]
|
||||
narrow_filter = build_narrow_filter(narrow)
|
||||
for e in accept_events:
|
||||
message = e["message"]
|
||||
flags = e["flags"]
|
||||
if message is None:
|
||||
message = {}
|
||||
if flags is None:
|
||||
flags = []
|
||||
self.assertTrue(narrow_filter(message=message, flags=flags))
|
||||
for e in reject_events:
|
||||
message = e["message"]
|
||||
flags = e["flags"]
|
||||
if message is None:
|
||||
message = {}
|
||||
if flags is None:
|
||||
flags = []
|
||||
self.assertFalse(narrow_filter(message=message, flags=flags))
|
||||
narrow_filter = build_narrow_filter([["stream", "devel"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={"display_recipient": "devel", "type": "stream"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "private"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"display_recipient": "social", "type": "stream"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["topic", "bark"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={"type": "stream", "subject": "BarK"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={"type": "stream", "topic": "bark"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "private"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "stream", "subject": "play with tail"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "stream", "topic": "play with tail"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["stream", "devel"], ["topic", "python"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={"display_recipient": "devel", "type": "stream", "subject": "python"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "private"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"display_recipient": "devel", "type": "stream", "subject": "java"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"display_recipient": "social", "type": "stream"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["sender", "hamlet@zulip.com"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={"sender_email": "hamlet@zulip.com"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"sender_email": "cordelia@zulip.com"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["is", "dm"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={"type": "private"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "stream"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["is", "private"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={"type": "private"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "stream"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["is", "starred"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={},
|
||||
flags=["starred"],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={},
|
||||
flags=["alerted"],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["is", "alerted"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={},
|
||||
flags=["mentioned"],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={},
|
||||
flags=["starred"],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["is", "mentioned"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={},
|
||||
flags=["mentioned"],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={},
|
||||
flags=["starred"],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["is", "unread"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={},
|
||||
flags=["read"],
|
||||
)
|
||||
)
|
||||
|
||||
###
|
||||
|
||||
narrow_filter = build_narrow_filter([["is", "resolved"]])
|
||||
|
||||
self.assertTrue(
|
||||
narrow_filter(
|
||||
message={"type": "stream", "subject": "✔ python"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "private"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
narrow_filter(
|
||||
message={"type": "stream", "subject": "java"},
|
||||
flags=[],
|
||||
)
|
||||
)
|
||||
|
||||
def test_build_narrow_filter_invalid(self) -> None:
|
||||
with self.assertRaises(JsonableError):
|
||||
|
||||
Reference in New Issue
Block a user