[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) {
|
||||
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 (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"goji.io/pat"
|
||||
|
||||
"github.com/genofire/hs_master-kss-monolith/lib/database"
|
||||
lib "github.com/genofire/hs_master-kss-monolith/lib/http"
|
||||
|
@ -11,8 +14,20 @@ import (
|
|||
|
||||
func listReview(w http.ResponseWriter, r *http.Request) {
|
||||
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
|
||||
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)
|
||||
log.Info("done")
|
||||
}
|
||||
|
|
|
@ -5,21 +5,34 @@ import (
|
|||
"testing"
|
||||
|
||||
"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"
|
||||
)
|
||||
|
||||
func TestReview(t *testing.T) {
|
||||
database.Open(database.Config{
|
||||
Type: "sqlite3",
|
||||
Connection: ":memory:",
|
||||
})
|
||||
database.Write.LogMode(true)
|
||||
assertion, router := test.Init(t)
|
||||
|
||||
BindAPI(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([]interface{}{}, result)
|
||||
assertion.Len(result, 1)
|
||||
|
||||
test.Close()
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
|
||||
func TestStatus(t *testing.T) {
|
||||
assertion, router := test.Init(t)
|
||||
|
||||
BindAPI(router)
|
||||
session := test.NewSession(router)
|
||||
|
||||
|
@ -18,4 +19,5 @@ func TestStatus(t *testing.T) {
|
|||
assertion.Equal("running", result["status"])
|
||||
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"
|
||||
"testing"
|
||||
|
||||
"github.com/genofire/hs_master-kss-monolith/lib/database"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
goji "goji.io"
|
||||
|
@ -16,11 +17,19 @@ import (
|
|||
//Init to initialisieren a API
|
||||
func Init(t *testing.T) (assertion *assert.Assertions, router *goji.Mux) {
|
||||
assertion = assert.New(t)
|
||||
|
||||
database.Open(database.Config{
|
||||
Type: "sqlite3",
|
||||
Connection: ":memory:",
|
||||
})
|
||||
database.Write.LogMode(true)
|
||||
router = goji.NewMux()
|
||||
return
|
||||
}
|
||||
|
||||
func Close() {
|
||||
database.Close()
|
||||
}
|
||||
|
||||
type Request struct {
|
||||
req *http.Request
|
||||
cookies []*http.Cookie
|
||||
|
|
Reference in New Issue