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:
Steve Howell
2023-06-28 17:59:22 +00:00
committed by Tim Abbott
parent 8ea0c5bbad
commit d64d1c81a4
2 changed files with 237 additions and 349 deletions

View File

@@ -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"
]
]
}
]

View File

@@ -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):