mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 06:53:25 +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 datetime
|
||||||
import os
|
|
||||||
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Union
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Union
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
@@ -593,31 +592,243 @@ class NarrowBuilderTest(ZulipTestCase):
|
|||||||
|
|
||||||
class NarrowLibraryTest(ZulipTestCase):
|
class NarrowLibraryTest(ZulipTestCase):
|
||||||
def test_build_narrow_filter(self) -> None:
|
def test_build_narrow_filter(self) -> None:
|
||||||
fixtures_path = os.path.join(os.path.dirname(__file__), "fixtures/narrow.json")
|
narrow_filter = build_narrow_filter([["stream", "devel"]])
|
||||||
with open(fixtures_path, "rb") as f:
|
|
||||||
scenarios = orjson.loads(f.read())
|
self.assertTrue(
|
||||||
self.assert_length(scenarios, 11)
|
narrow_filter(
|
||||||
for scenario in scenarios:
|
message={"display_recipient": "devel", "type": "stream"},
|
||||||
narrow = scenario["narrow"]
|
flags=[],
|
||||||
accept_events = scenario["accept_events"]
|
)
|
||||||
reject_events = scenario["reject_events"]
|
)
|
||||||
narrow_filter = build_narrow_filter(narrow)
|
|
||||||
for e in accept_events:
|
self.assertFalse(
|
||||||
message = e["message"]
|
narrow_filter(
|
||||||
flags = e["flags"]
|
message={"type": "private"},
|
||||||
if message is None:
|
flags=[],
|
||||||
message = {}
|
)
|
||||||
if flags is None:
|
)
|
||||||
flags = []
|
self.assertFalse(
|
||||||
self.assertTrue(narrow_filter(message=message, flags=flags))
|
narrow_filter(
|
||||||
for e in reject_events:
|
message={"display_recipient": "social", "type": "stream"},
|
||||||
message = e["message"]
|
flags=[],
|
||||||
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([["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:
|
def test_build_narrow_filter_invalid(self) -> None:
|
||||||
with self.assertRaises(JsonableError):
|
with self.assertRaises(JsonableError):
|
||||||
|
|||||||
Reference in New Issue
Block a user