[TASK] add review route by product id
This commit is contained in:
		
							parent
							
								
									07eb1e384b
								
							
						
					
					
						commit
						c428429a99
					
				| 
						 | 
					@ -7,5 +7,5 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func BindAPI(router *goji.Mux) {
 | 
					func BindAPI(router *goji.Mux) {
 | 
				
			||||||
	router.HandleFunc(pat.Get("/api/status"), status)
 | 
						router.HandleFunc(pat.Get("/api/status"), status)
 | 
				
			||||||
	router.HandleFunc(pat.Get("/api/reviews"), listReview)
 | 
						router.HandleFunc(pat.Get("/api/review/:productid"), listReview)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,9 @@ package http
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"goji.io/pat"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/genofire/hs_master-kss-monolith/lib/database"
 | 
						"github.com/genofire/hs_master-kss-monolith/lib/database"
 | 
				
			||||||
	lib "github.com/genofire/hs_master-kss-monolith/lib/http"
 | 
						lib "github.com/genofire/hs_master-kss-monolith/lib/http"
 | 
				
			||||||
| 
						 | 
					@ -11,8 +14,20 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func listReview(w http.ResponseWriter, r *http.Request) {
 | 
					func listReview(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
	log := logger.HTTP(r)
 | 
						log := logger.HTTP(r)
 | 
				
			||||||
 | 
						id, err := strconv.ParseInt(pat.Param(r, "productid"), 10, 64)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Warn("wrong productid format")
 | 
				
			||||||
 | 
							http.Error(w, "wrong productid", http.StatusNotAcceptable)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						log.WithField("productid", id)
 | 
				
			||||||
	var list []*models.Review
 | 
						var list []*models.Review
 | 
				
			||||||
	database.Read.Find(&list)
 | 
						result := database.Read.Where("product_id = ?", id).Find(&list)
 | 
				
			||||||
 | 
						if result.RowsAffected == 0 {
 | 
				
			||||||
 | 
							log.Warn("no reviews found")
 | 
				
			||||||
 | 
							http.Error(w, "no reviews found", http.StatusNotFound)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	lib.Write(w, list)
 | 
						lib.Write(w, list)
 | 
				
			||||||
	log.Info("done")
 | 
						log.Info("done")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,21 +5,34 @@ import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/genofire/hs_master-kss-monolith/lib/database"
 | 
						"github.com/genofire/hs_master-kss-monolith/lib/database"
 | 
				
			||||||
 | 
						"github.com/genofire/hs_master-kss-monolith/models"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/genofire/hs_master-kss-monolith/test"
 | 
						"github.com/genofire/hs_master-kss-monolith/test"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestReview(t *testing.T) {
 | 
					func TestReview(t *testing.T) {
 | 
				
			||||||
	database.Open(database.Config{
 | 
					 | 
				
			||||||
		Type:       "sqlite3",
 | 
					 | 
				
			||||||
		Connection: ":memory:",
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
	database.Write.LogMode(true)
 | 
					 | 
				
			||||||
	assertion, router := test.Init(t)
 | 
						assertion, router := test.Init(t)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BindAPI(router)
 | 
						BindAPI(router)
 | 
				
			||||||
	session := test.NewSession(router)
 | 
						session := test.NewSession(router)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	result, w := session.JSONRequest("GET", "/api/reviews", nil)
 | 
						result, w := session.JSONRequest("GET", "/api/review/a", nil)
 | 
				
			||||||
 | 
						assertion.Equal(http.StatusNotAcceptable, w.StatusCode)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result, w = session.JSONRequest("GET", "/api/review/1", nil)
 | 
				
			||||||
 | 
						assertion.Equal(http.StatusNotFound, w.StatusCode)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						database.Write.Create(&models.Review{
 | 
				
			||||||
 | 
							ProductID:   3,
 | 
				
			||||||
 | 
							FirstName:   "Max",
 | 
				
			||||||
 | 
							LastName:    "Mustmann",
 | 
				
			||||||
 | 
							RatingStars: 3,
 | 
				
			||||||
 | 
							Text:        "blub",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result, w = session.JSONRequest("GET", "/api/review/3", nil)
 | 
				
			||||||
	assertion.Equal(http.StatusOK, w.StatusCode)
 | 
						assertion.Equal(http.StatusOK, w.StatusCode)
 | 
				
			||||||
	assertion.Equal([]interface{}{}, result)
 | 
						assertion.Len(result, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						test.Close()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,7 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestStatus(t *testing.T) {
 | 
					func TestStatus(t *testing.T) {
 | 
				
			||||||
	assertion, router := test.Init(t)
 | 
						assertion, router := test.Init(t)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BindAPI(router)
 | 
						BindAPI(router)
 | 
				
			||||||
	session := test.NewSession(router)
 | 
						session := test.NewSession(router)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,4 +19,5 @@ func TestStatus(t *testing.T) {
 | 
				
			||||||
	assertion.Equal("running", result["status"])
 | 
						assertion.Equal("running", result["status"])
 | 
				
			||||||
	assertion.Equal(float64(0), result["review_count"])
 | 
						assertion.Equal(float64(0), result["review_count"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						test.Close()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										11
									
								
								test/http.go
								
								
								
								
							
							
						
						
									
										11
									
								
								test/http.go
								
								
								
								
							| 
						 | 
					@ -8,6 +8,7 @@ import (
 | 
				
			||||||
	"net/http/httptest"
 | 
						"net/http/httptest"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/genofire/hs_master-kss-monolith/lib/database"
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	goji "goji.io"
 | 
						goji "goji.io"
 | 
				
			||||||
| 
						 | 
					@ -16,11 +17,19 @@ import (
 | 
				
			||||||
//Init to initialisieren a API
 | 
					//Init to initialisieren a API
 | 
				
			||||||
func Init(t *testing.T) (assertion *assert.Assertions, router *goji.Mux) {
 | 
					func Init(t *testing.T) (assertion *assert.Assertions, router *goji.Mux) {
 | 
				
			||||||
	assertion = assert.New(t)
 | 
						assertion = assert.New(t)
 | 
				
			||||||
 | 
						database.Open(database.Config{
 | 
				
			||||||
 | 
							Type:       "sqlite3",
 | 
				
			||||||
 | 
							Connection: ":memory:",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						database.Write.LogMode(true)
 | 
				
			||||||
	router = goji.NewMux()
 | 
						router = goji.NewMux()
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Close() {
 | 
				
			||||||
 | 
						database.Close()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Request struct {
 | 
					type Request struct {
 | 
				
			||||||
	req     *http.Request
 | 
						req     *http.Request
 | 
				
			||||||
	cookies []*http.Cookie
 | 
						cookies []*http.Cookie
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in New Issue