From 3a4daff9bc1ba2eea3a65573b5d9e2e31e51ee23 Mon Sep 17 00:00:00 2001 From: Matthieu Jacquot Date: Sun, 5 Aug 2018 21:36:09 +0200 Subject: [PATCH] add getArticle for logged user --- implem/gin.server/ROUTER.go | 14 +++++ implem/gin.server/articles.go | 4 +- implem/gin.server/articles_test.go | 86 +++++++++++++++++++++--------- implem/gin.server/profileGet.go | 9 +--- 4 files changed, 78 insertions(+), 35 deletions(-) diff --git a/implem/gin.server/ROUTER.go b/implem/gin.server/ROUTER.go index 27421f9..3477b81 100644 --- a/implem/gin.server/ROUTER.go +++ b/implem/gin.server/ROUTER.go @@ -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 { diff --git a/implem/gin.server/articles.go b/implem/gin.server/articles.go index ac5dace..ba54073 100644 --- a/implem/gin.server/articles.go +++ b/implem/gin.server/articles.go @@ -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( @@ -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) diff --git a/implem/gin.server/articles_test.go b/implem/gin.server/articles_test.go index 989933b..a1c82d5 100644 --- a/implem/gin.server/articles_test.go +++ b/implem/gin.server/articles_test.go @@ -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() + }) }) } diff --git a/implem/gin.server/profileGet.go b/implem/gin.server/profileGet.go index 5c4a943..5d75ac7 100644 --- a/implem/gin.server/profileGet.go +++ b/implem/gin.server/profileGet.go @@ -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)