Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit54d7745

Browse files
committed
Implement labels
1 parent41c3412 commit54d7745

File tree

10 files changed

+1024
-277
lines changed

10 files changed

+1024
-277
lines changed

‎api/api.go‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,13 @@ func createRouter() *echo.Echo {
109109
events.Get("",getEvents)
110110
events.Post("",addEvents)
111111

112-
/*labels := r.Group("/library/labels")
113-
labels.Get("")
114-
labels.Post("")
115-
labels.Put("/:id")
116-
labels.Delete("/:id")
112+
labels:=r.Group("/library/labels")
113+
labels.Get("",getLabels)
114+
labels.Post("",addLabel)
115+
labels.Put("/:id",updateLabel)
116+
labels.Delete("/:id",removeLabel)
117117

118-
opml := r.Group("/library")
118+
/*opml := r.Group("/library")
119119
opml.Get("/casts.opml")
120120
opml.Post("/casts.opml")*/
121121

‎api/labels.go‎

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,93 @@
11
package api
2+
3+
import (
4+
"strconv"
5+
"strings"
6+
7+
"github.com/Castcloud/castcloud-go-server/Godeps/_workspace/src/github.com/labstack/echo"
8+
9+
."github.com/Castcloud/castcloud-go-server/api/schema"
10+
)
11+
12+
typeaddedLabelstruct {
13+
IDuint64`json:"id"`
14+
Namestring`json:"name"`
15+
}
16+
17+
//
18+
// GET /library/labels
19+
//
20+
funcgetLabels(c*echo.Context)error {
21+
user:=c.Get("user").(*User)
22+
returnc.JSON(200,store.GetLabels(user.ID))
23+
}
24+
25+
//
26+
// POST /library/labels
27+
//
28+
funcaddLabel(c*echo.Context)error {
29+
name:=strings.TrimPrefix(form(c,"name"),"label/")
30+
ifname=="" {
31+
returnc.String(400,"Name too short")
32+
}
33+
34+
label:=Label{
35+
Name:name,
36+
Content:form(c,"content"),
37+
Expanded:form(c,"expanded")=="true",
38+
}
39+
40+
user:=c.Get("user").(*User)
41+
err:=store.SaveLabel(&label,user.ID)
42+
iferr==ErrLabelExists {
43+
returnc.String(409,"Existing label")
44+
}elseiferr!=nil {
45+
returnerr
46+
}
47+
48+
returnc.JSON(200,addedLabel{
49+
ID:label.ID,
50+
Name:label.Name,
51+
})
52+
}
53+
54+
//
55+
// PUT /library/labels/:id
56+
//
57+
funcupdateLabel(c*echo.Context)error {
58+
id,err:=strconv.ParseUint(c.Param("id"),10,64)
59+
iferr!=nil {
60+
returnc.NoContent(400)
61+
}
62+
63+
label:=store.GetLabel(id)
64+
iflabel==nil {
65+
returnc.String(404,"Label not found")
66+
}
67+
68+
ifname:=form(c,"name");name!="" {
69+
label.Name=name
70+
}
71+
ifcontent:=form(c,"content");content!="" {
72+
label.Content=content
73+
}
74+
ifexpanded:=form(c,"expanded");expanded!="" {
75+
label.Expanded=expanded=="true"
76+
}
77+
78+
user:=c.Get("user").(*User)
79+
returnstore.SaveLabel(label,user.ID)
80+
}
81+
82+
//
83+
// DELETE /library/labels/:id
84+
//
85+
funcremoveLabel(c*echo.Context)error {
86+
id,err:=strconv.ParseUint(c.Param("id"),10,64)
87+
iferr!=nil {
88+
returnc.NoContent(400)
89+
}
90+
91+
user:=c.Get("user").(*User)
92+
returnstore.RemoveLabel(id,user.ID)
93+
}

‎api/labels_test.go‎

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package api
2+
3+
import (
4+
"encoding/json"
5+
"net/url"
6+
"testing"
7+
8+
"github.com/Castcloud/castcloud-go-server/Godeps/_workspace/src/github.com/stretchr/testify/assert"
9+
10+
."github.com/Castcloud/castcloud-go-server/api/schema"
11+
)
12+
13+
funcTestGetLabels(t*testing.T) {
14+
r:=createRouter()
15+
16+
// It should return 200 and a list of labels with the root label
17+
// already added, which contains the test cast
18+
req:=testRequest(r,"GET","/library/labels",nil)
19+
req.Header.Set("Authorization","token")
20+
res:=req.send()
21+
assert.Equal(t,200,res.Code)
22+
labels:= []Label{}
23+
err:=json.Unmarshal(res.Body.Bytes(),&labels)
24+
assert.Nil(t,err)
25+
assert.Len(t,labels,1)
26+
assert.True(t,labels[0].Root)
27+
}
28+
29+
funcTestAddLabel(t*testing.T) {
30+
r:=createRouter()
31+
32+
// It should return 400 if the label name is not set
33+
req:=testRequest(r,"POST","/library/labels",nil)
34+
req.Header.Set("Authorization","token")
35+
assert.Equal(t,400,req.send().Code)
36+
req.PostForm= url.Values{}
37+
req.PostForm.Set("name","label/")
38+
assert.Equal(t,400,req.send().Code)
39+
40+
// It should return 200 and the added label when adding a label
41+
req.PostForm.Set("name","test")
42+
req.PostForm.Set("content","apples")
43+
req.PostForm.Set("expanded","true")
44+
res:=req.send()
45+
assert.Equal(t,200,res.Code)
46+
added:=addedLabel{}
47+
err:=json.Unmarshal(res.Body.Bytes(),&added)
48+
assert.Nil(t,err)
49+
assert.NotEqual(t,0,added.ID)
50+
assert.Equal(t,"test",added.Name)
51+
52+
// It should return 409 if the label name already exists
53+
assert.Equal(t,409,req.send().Code)
54+
55+
// It should have added the label
56+
req.Method="GET"
57+
res=req.send()
58+
assert.Equal(t,200,res.Code)
59+
labels:= []Label{}
60+
err=json.Unmarshal(res.Body.Bytes(),&labels)
61+
assert.Nil(t,err)
62+
assert.Len(t,labels,2)
63+
assert.Contains(t,labels[0].Content,"label/2")
64+
assert.Equal(t,"test",labels[1].Name)
65+
assert.Equal(t,"apples",labels[1].Content)
66+
assert.True(t,labels[1].Expanded)
67+
}
68+
69+
funcTestUpdateLabel(t*testing.T) {
70+
r:=createRouter()
71+
72+
// It should return 400 if the ID is invalid
73+
req:=testRequest(r,"PUT","/library/labels/broken",nil)
74+
req.Header.Set("Authorization","token")
75+
assert.Equal(t,400,req.send().Code)
76+
77+
// It should return 404 if the label doesnt exist
78+
req.URL.Path="/library/labels/1881"
79+
assert.Equal(t,404,req.send().Code)
80+
81+
// It should return 200 when updating a label
82+
req.URL.Path="/library/labels/2"
83+
req.PostForm= url.Values{}
84+
req.PostForm.Set("name","bob")
85+
req.PostForm.Set("content","cake")
86+
req.PostForm.Set("expanded","no_wai")
87+
assert.Equal(t,200,req.send().Code)
88+
89+
// It should have updated the label
90+
req.Method="GET"
91+
req.URL.Path="/library/labels"
92+
res:=req.send()
93+
assert.Equal(t,200,res.Code)
94+
labels:= []Label{}
95+
err:=json.Unmarshal(res.Body.Bytes(),&labels)
96+
assert.Nil(t,err)
97+
assert.Len(t,labels,2)
98+
assert.Equal(t,"bob",labels[1].Name)
99+
assert.Equal(t,"cake",labels[1].Content)
100+
assert.False(t,labels[1].Expanded)
101+
}
102+
103+
funcTestRemoveLabel(t*testing.T) {
104+
r:=createRouter()
105+
106+
// It should return 400 if the ID is invalid
107+
req:=testRequest(r,"DELETE","/library/labels/rawr",nil)
108+
req.Header.Set("Authorization","token")
109+
assert.Equal(t,400,req.send().Code)
110+
111+
// It returns 200 when removing a label
112+
req.URL.Path="/library/labels/2"
113+
assert.Equal(t,200,req.send().Code)
114+
115+
// It should have removed the label
116+
req.Method="GET"
117+
req.URL.Path="/library/labels"
118+
res:=req.send()
119+
assert.Equal(t,200,res.Code)
120+
labels:= []Label{}
121+
err:=json.Unmarshal(res.Body.Bytes(),&labels)
122+
assert.Nil(t,err)
123+
assert.Len(t,labels,1)
124+
assert.NotContains(t,labels[0].Content,"label/2")
125+
}

‎api/schema/schema.go‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ type Event struct {
4949
ClientUUIDstring`json:"-"`
5050
}
5151

52+
typeLabelstruct {
53+
IDuint64`json:"id"`
54+
Namestring`json:"name"`
55+
Contentstring`json:"content"`
56+
Expandedbool`json:"expanded"`
57+
Rootbool`json:"root"`
58+
}
59+
5260
func (u*User)UUID(tokenstring)string {
5361
for_,client:=rangeu.Clients {
5462
ifclient.Token==token {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp