65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import unittest
|
|
|
|
from scripts.rectification.house_table import compact_house_table, compact_house_table_from_contexts
|
|
|
|
|
|
class RectificationHouseTableTests(unittest.TestCase):
|
|
def test_compact_house_table_is_twelve_houses_without_coordinates(self):
|
|
chart = {
|
|
"ascendant": {"sign": "Taurus"},
|
|
"planets": {
|
|
"Sun": {"sign": "Taurus", "house": 1, "lon": 41.2},
|
|
"Moon": {"sign": "Cancer", "house": 3},
|
|
"Mars": {"sign": "Aries", "house": 12},
|
|
},
|
|
}
|
|
table = compact_house_table(chart, time="05:13")
|
|
self.assertIsNotNone(table)
|
|
assert table is not None
|
|
self.assertEqual(table["time"], "05:13")
|
|
self.assertEqual(table["lagna"], "金牛座")
|
|
self.assertEqual(len(table["houses"]), 12)
|
|
self.assertEqual(table["houses"][0], {
|
|
"house": 1,
|
|
"sign": "金牛座",
|
|
"occupants": ["太阳"],
|
|
})
|
|
self.assertEqual(table["houses"][2]["occupants"], ["月亮"])
|
|
self.assertEqual(table["houses"][11]["occupants"], ["火星"])
|
|
serialized = json.dumps(table, ensure_ascii=False)
|
|
for denied in ("lon", "latitude", "longitude", "degree", "score", "fingerprint"):
|
|
self.assertNotIn(denied, serialized)
|
|
|
|
def test_contexts_select_the_representative_time(self):
|
|
table = compact_house_table_from_contexts(
|
|
[
|
|
{
|
|
"feature": {"time": "05:12"},
|
|
"chart": {"ascendant": {"sign": "Aries"}, "planets": {}},
|
|
},
|
|
{
|
|
"feature": {"time": "05:13"},
|
|
"chart": {
|
|
"ascendant": {"sign": "Taurus"},
|
|
"planets": {"Sun": {"sign": "Taurus", "house": 1}},
|
|
},
|
|
},
|
|
],
|
|
"05:13",
|
|
)
|
|
self.assertIsNotNone(table)
|
|
assert table is not None
|
|
self.assertEqual(table["lagna"], "金牛座")
|
|
self.assertEqual(table["houses"][0]["occupants"], ["太阳"])
|
|
|
|
def test_missing_chart_stays_omitted(self):
|
|
self.assertIsNone(compact_house_table_from_contexts([], "05:13"))
|
|
self.assertIsNone(compact_house_table({"planets": {}}, time="05:13"))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|