Skip to content

Commit

Permalink
add getArticle for logged user
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthieu Jacquot committed Aug 5, 2018
1 parent 1afefcc commit 3a4daff
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 35 deletions.
14 changes: 14 additions & 0 deletions implem/gin.server/ROUTER.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,20 @@ func (rH RouterHandler) jwtMiddleware() gin.HandlerFunc {
}
}

func (rH RouterHandler) getUserNameFromToken(c *gin.Context) string {
jwt, err := getJWT(c.GetHeader("Authorization"))
if err != nil {
return ""
}

userName, err := rH.authHandler.GetUserName(jwt)
if err != nil {
return ""
}

return userName
}

func getJWT(authHeader string) (string, error) {
splitted := strings.Split(authHeader, "Token ")
if len(splitted) != 2 {
Expand Down
4 changes: 2 additions & 2 deletions implem/gin.server/articles.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func (rH RouterHandler) articlesFilteredGet(c *gin.Context) {
}

user, articles, count, err := rH.ucHandler.GetArticles(
rH.getUserName(c),
rH.getUserNameFromToken(c),
limit,
offset,
uc.NewFilters(
Expand Down Expand Up @@ -60,7 +60,7 @@ func (rH RouterHandler) articlesFeedGet(c *gin.Context) {
offset = defaultOffset
}

user, articles, count, err := rH.ucHandler.ArticlesFeed(rH.getUserName(c), limit, offset)
user, articles, count, err := rH.ucHandler.ArticlesFeed(rH.getUserNameFromToken(c), limit, offset)
if err != nil {
log(err)
c.Status(http.StatusUnprocessableEntity)
Expand Down
86 changes: 61 additions & 25 deletions implem/gin.server/articles_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,39 +21,75 @@ var articlesFilteredPath = "/api/articles"
var articlesFeedPath = "/api/articles/feed"

func TestArticlesFiltered(t *testing.T) {
// todo : add test with auth
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

limit := 10
offset := 2
author := "jane"
tag := "tag1"
fav := "false"

ucHandler := mock.NewMockHandler(mockCtrl)
ucHandler.EXPECT().
GetArticles("", limit, offset, gomock.Any()).
Return(nil, domain.ArticleCollection{testData.Article("jane")}, 10, nil).
Times(1)
t.Run("no auth", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
ucHandler := mock.NewMockHandler(mockCtrl)
ucHandler.EXPECT().
GetArticles("", limit, offset, gomock.Any()).
Return(nil, domain.ArticleCollection{testData.Article("jane")}, 10, nil).
Times(1)

gE := gin.Default()
server.NewRouter(ucHandler, nil).SetRoutes(gE)
ts := httptest.NewServer(gE)
defer ts.Close()
gE := gin.Default()
server.NewRouter(ucHandler, nil).SetRoutes(gE)
ts := httptest.NewServer(gE)
defer ts.Close()

t.Run("happyCase", func(t *testing.T) {
baloo.New(ts.URL).
Get(articlesFilteredPath).
AddQuery("limit", strconv.Itoa(limit)).
AddQuery("offset", strconv.Itoa(offset)).
AddQuery("author", author).
AddQuery("tag", tag).
AddQuery("favorited", fav).
Expect(t).
Status(200).
JSONSchema(testData.ArticleMultipleRespDefinition).
Done()
t.Run("happyCase", func(t *testing.T) {
baloo.New(ts.URL).
Get(articlesFilteredPath).
AddQuery("limit", strconv.Itoa(limit)).
AddQuery("offset", strconv.Itoa(offset)).
AddQuery("author", author).
AddQuery("tag", tag).
AddQuery("favorited", fav).
Expect(t).
Status(200).
JSONSchema(testData.ArticleMultipleRespDefinition).
Done()
})
})

t.Run("logged user", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

testUser := testData.User("jane")
ucHandler := mock.NewMockHandler(mockCtrl)
ucHandler.EXPECT().
GetArticles(testUser.Name, limit, offset, gomock.Any()).
Return(nil, domain.ArticleCollection{testData.Article("jane")}, 10, nil).
Times(1)

jwtHandler := jwt.NewTokenHandler("mySalt")
gE := gin.Default()
server.NewRouter(ucHandler, jwtHandler).SetRoutes(gE)
authToken, err := jwtHandler.GenUserToken(testUser.Name)
assert.NoError(t, err)

ts := httptest.NewServer(gE)
defer ts.Close()

t.Run("happyCase", func(t *testing.T) {
baloo.New(ts.URL).
Get(articlesFilteredPath).
AddQuery("limit", strconv.Itoa(limit)).
AddQuery("offset", strconv.Itoa(offset)).
AddQuery("author", author).
AddQuery("tag", tag).
AddQuery("favorited", fav).
AddHeader("Authorization", testData.TokenPrefix+authToken).
Expect(t).
Status(200).
JSONSchema(testData.ArticleMultipleRespDefinition).
Done()
})
})
}

Expand Down
9 changes: 1 addition & 8 deletions implem/gin.server/profileGet.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,8 @@ import (

func (rH RouterHandler) profileGet(c *gin.Context) {
log := rH.log(rH.MethodAndPath(c))
requestingUserName := ""

if jwt, err := getJWT(c.GetHeader("Authorization")); err == nil {
if userName, err := rH.authHandler.GetUserName(jwt); err == nil {
requestingUserName = userName
}
}

user, follows, err := rH.ucHandler.ProfileGet(requestingUserName, c.Param("username"))
user, follows, err := rH.ucHandler.ProfileGet(rH.getUserNameFromToken(c), c.Param("username"))
if err != nil {
log(err)
c.Status(http.StatusUnprocessableEntity)
Expand Down

0 comments on commit 3a4daff

Please sign in to comment.