Skip to content

Commit 5195cca

Browse files
feat(api): implement /tags endpoint
1 parent 58df0a5 commit 5195cca

File tree

7 files changed

+107
-5
lines changed

7 files changed

+107
-5
lines changed

maat/app/maat-api.hoon

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
/+ server :: HTTP request processing
66
/+ schooner :: HTTP response handling
77
/+ *json-reparser
8+
/+ *list
89
:: types
910
::
1011
|%
@@ -120,7 +121,7 @@
120121
[(send [404 ~ [%plain "404 - Not Found"]]) state]
121122
::
122123
%version
123-
[(send [200 ~ [%json (version:enjs '2024-06-08.2')]]) state]
124+
[(send [200 ~ [%json (version:enjs '2024-06-16.3')]]) state]
124125
::
125126
%members
126127
[(send [200 ~ [%json (ships:enjs reg)]]) state]
@@ -157,6 +158,11 @@
157158
=. tasks (skim tasks filter-by-tags)
158159
=/ sorted (sort tasks |=([a=task b=task] (gth date.a date.b)))
159160
[(send [200 ~ [%json (led:enjs sorted)]]) state]
161+
%tags
162+
=/ tasks ~(val by led)
163+
=/ raw (apply tasks |=(=task ~(tap in tags.task)))
164+
=/ =tags (silt `(list @tas)`(flatten raw))
165+
[(send [200 ~ [%json (tags:enjs tags)]]) state]
160166
::::
161167
:: %balances
162168
::=/ path /(scot %p our.bowl)/tahuti/(scot %da now.bowl)/[gid]/net/noun

maat/lib/json-reparser.hoon

+6-2
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,13 @@
4242
^- json
4343
[%a (turn ~(val by g) group:enjs)]
4444
++ tag
45-
|= t=@t
45+
|= =^tag
4646
^- json
47-
[%s t]
47+
[%s tag]
48+
++ tags
49+
|= =^tags
50+
^- json
51+
[%a (turn ~(tap in tags) tag:enjs)]
4852
++ task
4953
|= t=^task
5054
^- json

maat/lib/list.hoon

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
:: /lib/list
2+
:::: Arms to rename kernel list functions with
3+
:: different names.
4+
::
5+
:: https://github.com/tamlut-modnys/userspace-util/blob/main/desk/lib/list.hoon
6+
::
7+
|@
8+
++ after slag
9+
++ and-each levy
10+
++ any-each lien
11+
++ append snoc
12+
++ apply turn
13+
++ before scag
14+
++ concat weld
15+
++ except skip
16+
++ filter skim
17+
:: ++ find find
18+
++ find-all fand
19+
++ flatten zing
20+
++ fold-l roll
21+
++ fold-r reel
22+
++ insert into
23+
++ item snag
24+
:: ++ join join
25+
++ length lent
26+
++ maybe murn
27+
++ range gulf
28+
:: ++ rear rear
29+
++ remove oust
30+
++ repeat reap
31+
++ reverse flop
32+
:: ++ snip snip
33+
:: ++ sort sort
34+
++ split-at skid
35+
++ substring swag
36+
++ swap snap
37+
:: ++ spin spin
38+
:: ++ spun spun
39+
:: ++ welp welp
40+
--

tests/conftest.py

+22
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ def tid():
4343
return str(uuid4())
4444

4545

46+
@pytest.fixture
47+
def tid_2():
48+
return str(uuid4())
49+
50+
4651
@pytest.fixture
4752
def gid():
4853
return str(uuid4())
@@ -90,6 +95,22 @@ def task(zod, gid, tid) -> dict:
9095
return task
9196

9297

98+
@pytest.fixture
99+
def task_2(zod, gid, tid_2) -> dict:
100+
task = {
101+
"gid": gid,
102+
"tid": tid_2,
103+
"title": "book a train ticket",
104+
"desc": "blah",
105+
"date": 1699182124,
106+
"done": False,
107+
"tags": ["areas", "resources"],
108+
}
109+
url = f"/apps/maat/api/lists/{gid}/tasks"
110+
zod.put(url, json=task)
111+
return task
112+
113+
93114
@pytest.fixture
94115
def invitee_nus(zod, gid):
95116
url = f"/apps/maat/api/lists/{gid}/invitees"
@@ -106,3 +127,4 @@ def member_nus(nus, gid, list_, invitee_nus):
106127
url = "/apps/maat/api/join"
107128
response = nus.post(url, json=join)
108129
return "~nus"
130+
return "~nus"

tests/integration/test_tags.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import pytest
2+
3+
4+
@pytest.mark.usefixtures("list_")
5+
def test_tasks_get_none(zod, gid):
6+
url = f"/apps/maat/api/lists/{gid}/tags"
7+
response = zod.get(url)
8+
assert response.status_code == 200
9+
result = response.json()
10+
assert result == []
11+
12+
13+
@pytest.mark.usefixtures("list_", "task")
14+
def test_tasks_get_single(zod, gid):
15+
url = f"/apps/maat/api/lists/{gid}/tags"
16+
response = zod.get(url)
17+
assert response.status_code == 200
18+
result = response.json()
19+
assert "areas" in result
20+
21+
22+
@pytest.mark.usefixtures("list_", "task", "task_2")
23+
def test_tasks_get_multiple(zod, gid):
24+
url = f"/apps/maat/api/lists/{gid}/tags"
25+
response = zod.get(url)
26+
assert response.status_code == 200
27+
result = response.json()
28+
assert "areas" in result
29+
assert "resources" in result
30+
assert result.count("areas") == 1

ui/css/style.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ form.inline {
5858
display: inline-block;
5959

6060
/* > input { */
61-
/* border: none; */
61+
/* border: none; */
6262
/* } */
6363
}
6464

ui/css/udjat.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)