mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
246 lines
8.4 KiB
Python
246 lines
8.4 KiB
Python
from __future__ import annotations
|
|
|
|
from copy import deepcopy
|
|
from typing import Any
|
|
from unittest import TestCase
|
|
|
|
from sentry.utils.meta import Meta
|
|
|
|
input_meta = {"": {"err": ["existing"], "val": "original", "rem": [{"type": "x"}]}}
|
|
|
|
other_meta = {"": {"err": ["additional"], "val": "changed", "rem": [{"type": "y"}]}}
|
|
|
|
merged_meta = {"": {"err": ["existing", "additional"], "val": "changed", "rem": [{"type": "y"}]}}
|
|
|
|
|
|
class MetaTests(TestCase):
|
|
def test_get_new(self):
|
|
assert Meta().raw() == {}
|
|
assert Meta().get() == {}
|
|
assert list(Meta().iter_errors()) == []
|
|
assert Meta().get_event_errors() == []
|
|
|
|
def test_create_new(self):
|
|
meta = Meta()
|
|
assert meta.create() == {}
|
|
assert meta.raw() == {"": {}}
|
|
|
|
def test_merge_new(self):
|
|
meta = Meta()
|
|
assert meta.merge(Meta(other_meta)) == other_meta[""]
|
|
assert meta.raw() == other_meta
|
|
|
|
def test_add_error_new(self):
|
|
meta = Meta()
|
|
meta.add_error("additional", "changed")
|
|
assert meta.raw() == {"": {"err": ["additional"], "val": "changed"}}
|
|
|
|
def test_get_missing(self):
|
|
assert Meta({}).raw() == {}
|
|
assert Meta({}).get() == {}
|
|
assert list(Meta({}).iter_errors()) == []
|
|
assert Meta({}).get_event_errors() == []
|
|
|
|
def test_create_missing(self):
|
|
data: dict[str, Any] = {}
|
|
meta = Meta(data)
|
|
assert meta.create() == {}
|
|
assert data == {"": {}}
|
|
|
|
def test_merge_missing(self):
|
|
data: dict[str, Any] = {}
|
|
meta = Meta(data)
|
|
assert meta.merge(Meta(other_meta)) == other_meta[""]
|
|
assert data == other_meta
|
|
|
|
def test_add_error_missing(self):
|
|
data: dict[str, Any] = {}
|
|
meta = Meta(data)
|
|
meta.add_error("additional", "changed")
|
|
assert data == {"": {"err": ["additional"], "val": "changed"}}
|
|
|
|
def test_get_none(self):
|
|
assert Meta({"": None}).raw() == {"": None}
|
|
assert Meta({"": None}).get() == {}
|
|
assert list(Meta({"": None}).iter_errors()) == []
|
|
assert Meta({"": None}).get_event_errors() == []
|
|
|
|
def test_create_none(self):
|
|
data = {"": None}
|
|
meta = Meta(data)
|
|
assert meta.create() == {}
|
|
assert data == {"": {}}
|
|
|
|
def test_merge_none(self):
|
|
data = {"": None}
|
|
meta = Meta(data)
|
|
assert meta.merge(Meta(other_meta)) == other_meta[""]
|
|
assert data == other_meta
|
|
|
|
def test_add_error_none(self):
|
|
data = {"": None}
|
|
meta = Meta(data)
|
|
meta.add_error("additional", "changed")
|
|
assert data == {"": {"err": ["additional"], "val": "changed"}}
|
|
|
|
def test_get_empty(self):
|
|
assert Meta({"": {}}).raw() == {"": {}}
|
|
assert Meta({"": {}}).get() == {}
|
|
assert list(Meta({"": {}}).iter_errors()) == []
|
|
assert Meta({"": {}}).get_event_errors() == []
|
|
|
|
def test_create_empty(self):
|
|
data: dict[str, Any] = {"": {}}
|
|
meta = Meta(data)
|
|
assert meta.create() == {}
|
|
assert data == {"": {}}
|
|
|
|
def test_merge_empty(self):
|
|
data: dict[str, Any] = {"": {}}
|
|
meta = Meta(data)
|
|
assert meta.merge(Meta(other_meta)) == other_meta[""]
|
|
assert data == other_meta
|
|
|
|
def test_add_error_empty(self):
|
|
data: dict[str, Any] = {"": {}}
|
|
meta = Meta(data)
|
|
meta.add_error("additional", "changed")
|
|
assert data == {"": {"err": ["additional"], "val": "changed"}}
|
|
|
|
def test_get_root(self):
|
|
assert Meta(input_meta).raw() == input_meta
|
|
assert Meta(input_meta).get() == input_meta[""]
|
|
assert list(Meta(input_meta).iter_errors()) == [["existing", {}]]
|
|
assert Meta(input_meta).get_event_errors() == [{"type": "existing", "value": "original"}]
|
|
|
|
def test_create_root(self):
|
|
changed = deepcopy(input_meta)
|
|
meta = Meta(changed)
|
|
# should be idempotent
|
|
assert meta.create() == input_meta[""]
|
|
assert changed == input_meta
|
|
|
|
def test_merge_root(self):
|
|
changed = deepcopy(input_meta)
|
|
meta = Meta(changed)
|
|
assert meta.merge(Meta(other_meta)) == merged_meta[""]
|
|
assert changed == merged_meta
|
|
|
|
def test_add_error_root(self):
|
|
changed = deepcopy(input_meta)
|
|
meta = Meta(changed)
|
|
meta.add_error("additional", "changed")
|
|
assert meta.get() == {
|
|
"err": ["existing", "additional"],
|
|
"val": "changed",
|
|
"rem": [{"type": "x"}],
|
|
}
|
|
|
|
def test_get_nested_missing(self):
|
|
data: dict[str, Any] = {}
|
|
assert Meta(data).enter("field").raw() == {}
|
|
assert Meta(data).enter("field").get() == {}
|
|
assert list(Meta(data).enter("field").iter_errors()) == []
|
|
assert Meta(data).enter("field").get_event_errors() == []
|
|
|
|
def test_create_nested_missing(self):
|
|
data: dict[str, Any] = {}
|
|
meta = Meta(data)
|
|
assert meta.enter("field").create() == {}
|
|
assert data == {"field": {"": {}}}
|
|
|
|
def test_merge_nested_missing(self):
|
|
data: dict[str, Any] = {}
|
|
meta = Meta(data)
|
|
assert meta.enter("field").merge(Meta(other_meta)) == other_meta[""]
|
|
assert data == {"field": other_meta}
|
|
|
|
def test_add_error_nested_missing(self):
|
|
data: dict[str, Any] = {}
|
|
meta = Meta(data)
|
|
meta.enter("field").add_error("additional", "changed")
|
|
assert meta.enter("field").get() == {"err": ["additional"], "val": "changed"}
|
|
|
|
def test_get_nested_existing(self):
|
|
data = {"field": input_meta}
|
|
assert Meta(data).enter("field").raw() == input_meta
|
|
assert Meta(data).enter("field").get() == input_meta[""]
|
|
assert list(Meta(data).enter("field").iter_errors()) == [["existing", {}]]
|
|
assert Meta(data).enter("field").get_event_errors() == [
|
|
{"type": "existing", "name": "field", "value": "original"}
|
|
]
|
|
|
|
def test_create_nested_existing(self):
|
|
data = {"field": input_meta}
|
|
changed = deepcopy(data)
|
|
meta = Meta(changed)
|
|
assert meta.enter("field").create() == input_meta[""]
|
|
assert changed == data
|
|
|
|
def test_merge_nested_existing(self):
|
|
data = {"field": input_meta}
|
|
changed = deepcopy(data)
|
|
meta = Meta(changed)
|
|
assert meta.enter("field").merge(Meta(other_meta)) == merged_meta[""]
|
|
assert changed == {"field": merged_meta}
|
|
|
|
def test_add_error_nested_existing(self):
|
|
data = {"field": input_meta}
|
|
changed = deepcopy(data)
|
|
meta = Meta(changed)
|
|
meta.enter("field").add_error("additional", "changed")
|
|
assert meta.enter("field").get() == {
|
|
"err": ["existing", "additional"],
|
|
"val": "changed",
|
|
"rem": [{"type": "x"}],
|
|
}
|
|
|
|
def test_get_nested_index(self):
|
|
data = {"0": input_meta}
|
|
assert Meta(data).enter(0).raw() == input_meta
|
|
assert Meta(data).enter(0).get() == input_meta[""]
|
|
assert list(Meta(data).enter(0).iter_errors()) == [["existing", {}]]
|
|
|
|
def test_create_nested_index(self):
|
|
data: dict[str, Any] = {}
|
|
meta = Meta(data)
|
|
assert meta.enter(0).create() == {}
|
|
assert data == {"0": {"": {}}}
|
|
|
|
def test_stringify_error(self):
|
|
meta = Meta()
|
|
meta.add_error(ValueError("invalid stuff"), "changed")
|
|
assert list(meta.iter_errors()) == [["invalid stuff", {}]]
|
|
|
|
def test_error_with_data(self):
|
|
meta = Meta()
|
|
meta.add_error("invalid url", data={"url": "invalid"})
|
|
assert list(meta.iter_errors()) == [["invalid url", {"url": "invalid"}]]
|
|
|
|
def test_get_multiple_event_errors(self):
|
|
# XXX: Value is only added to the first error, which is usually the
|
|
# normalization error.
|
|
assert Meta(merged_meta).get_event_errors() == [
|
|
{"type": "existing", "value": "changed"},
|
|
{"type": "additional"},
|
|
]
|
|
|
|
def test_add_remark(self):
|
|
meta = Meta()
|
|
meta.add_remark({"rule_id": "react", "type": "s"})
|
|
assert meta.get() == {
|
|
"rem": [["react", "s"]],
|
|
}
|
|
meta.add_remark({"rule_id": "removal-rule", "type": "x"})
|
|
assert meta.get() == {
|
|
"rem": [["react", "s"], ["removal-rule", "x"]],
|
|
}
|
|
|
|
def test_add_remark_with_value(self):
|
|
meta = Meta()
|
|
meta.add_remark({"rule_id": "react", "type": "s"}, "Minified React error #109")
|
|
assert meta.get() == {
|
|
"rem": [["react", "s"]],
|
|
"val": "Minified React error #109",
|
|
}
|