add tests for sites

This commit is contained in:
Lars Hoogestraat 2018-11-25 13:39:35 +01:00
parent b41f66bfe5
commit b17577d4fb
5 changed files with 327 additions and 12 deletions

View File

@ -79,6 +79,18 @@ func TestArticleWorkflow(t *testing.T) {
if err = checkArticle(rcvArticle, updatedArticle); err != nil {
t.Fatal(err)
}
err = doAdminRemoveArticleRequest(rAdminUser, artID)
if err != nil {
t.Fatal(err)
}
rcvArticle, err = doGetArticleByIDRequest(rAdminUser, artID)
if err == nil {
t.Fatalf("removed article, but got a category %v", rcvArticle)
}
}
func checkArticle(article *models.Article, expectedArticle *models.Article) error {
@ -285,3 +297,26 @@ func doAdminPublishArticleRequest(user reqUser, articleID int) error {
return nil
}
func doAdminRemoveArticleRequest(user reqUser, articleID int) error {
r := request{
url: "/admin/article/remove/" + strconv.Itoa(articleID),
user: user,
method: "POST",
pathVar: []pathVar{
pathVar{
key: "articleID",
value: strconv.Itoa(articleID),
},
},
}
rw := httptest.NewRecorder()
tpl := controllers.AdminArticleDeletePostHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return tpl.Err
}
return nil
}

View File

@ -63,7 +63,7 @@ func TestCategoryWorkflow(t *testing.T) {
rcvCategory, err = doAdminGetCategoryRequest(rAdminUser, id)
if err == nil {
t.Fatalf("removed cateogry, but got a category %v", rcvCategory)
t.Fatalf("removed category, but got a category %v", rcvCategory)
}
}

View File

@ -16,7 +16,7 @@ import (
)
//SiteHandler returns the site template only published sites are considered
func SiteHandler(ctx *middleware.AppContext, w http.ResponseWriter, r *http.Request) *middleware.Template {
func GetSiteHandler(ctx *middleware.AppContext, w http.ResponseWriter, r *http.Request) *middleware.Template {
site, err := ctx.SiteService.GetByLink(getVar(r, "site"), models.OnlyPublished)
if err != nil {
@ -40,6 +40,42 @@ func SiteHandler(ctx *middleware.AppContext, w http.ResponseWriter, r *http.Requ
}
}
//SiteHandler returns the site template only published sites are considered
func AdminGetSiteHandler(ctx *middleware.AppContext, w http.ResponseWriter, r *http.Request) *middleware.Template {
reqVar := getVar(r, "siteID")
id, err := parseInt(reqVar)
if err != nil {
return &middleware.Template{
Name: tplSite,
Err: err,
}
}
site, err := ctx.SiteService.GetByID(id, models.All)
if err != nil {
if err == sql.ErrNoRows {
return &middleware.Template{
Name: tplSite,
Err: httperror.NotFound("site", err),
}
}
return &middleware.Template{
Name: tplSite,
Err: err,
}
}
return &middleware.Template{
Name: tplSite,
Data: map[string]interface{}{
"site": site,
},
}
}
//AdminSitesHandler returns the template containing the sites overview in the administration
func AdminSitesHandler(ctx *middleware.AppContext, w http.ResponseWriter, r *http.Request) *middleware.Template {
page := getPageParam(r)

View File

@ -1,25 +1,268 @@
package controllers_test
func doAdminListSitesRequest(user reqUser) {
import (
"fmt"
"net/http/httptest"
"net/url"
"strconv"
"testing"
"git.hoogi.eu/go-blog/controllers"
"git.hoogi.eu/go-blog/models"
)
func TestSiteWorkflow(t *testing.T) {
setup(t)
defer teardown()
site := &models.Site{
Title: "test title",
Link: "a link",
Content: "content",
}
id, err := doAdminSiteCreateRequest(rAdminUser, site)
site.ID = id
if err != nil {
t.Error(err)
}
site, err = doAdminGetSiteRequest(rAdminUser, site.ID)
if err != nil {
t.Error(err)
}
_, err = doGetSiteRequest(rGuest, site.Link)
if err == nil {
t.Error("received an unpublished site as guest")
}
sites, err := doAdminListSitesRequest(rAdminUser)
if err != nil {
t.Error(err)
}
if len(sites) != 1 {
t.Errorf("expected 1 site to be returned, bot got %d", len(sites))
}
err = doAdminSitePublishRequest(rAdminUser, site.ID)
if err != nil {
t.Error(err)
}
_, err = doGetSiteRequest(rGuest, site.Link)
if err != nil {
t.Error(err)
}
err = doAdminSiteDeleteRequest(rAdminUser, site.ID)
if err != nil {
t.Error(err)
}
_, err = doGetSiteRequest(rGuest, site.Link)
if err == nil {
t.Error("received an removed site")
}
}
func doGetSiteRequest(user reqUser, link string) (*models.Site, error) {
r := request{
url: "/site/" + link,
user: user,
method: "GET",
pathVar: []pathVar{
pathVar{
key: "site",
value: link,
},
},
}
rw := httptest.NewRecorder()
tpl := controllers.GetSiteHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return nil, tpl.Err
}
return tpl.Data["site"].(*models.Site), nil
}
func doAdminGetSiteRequest(user reqUser, siteID int) (*models.Site, error) {
r := request{
url: "/admin/site/" + strconv.Itoa(siteID),
user: user,
method: "GET",
pathVar: []pathVar{
pathVar{
key: "siteID",
value: strconv.Itoa(siteID),
},
},
}
rw := httptest.NewRecorder()
tpl := controllers.AdminGetSiteHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return nil, tpl.Err
}
return tpl.Data["site"].(*models.Site), nil
}
func doAdminListSitesRequest(user reqUser) ([]models.Site, error) {
r := request{
url: "/admin/sites",
user: user,
method: "GET",
}
rw := httptest.NewRecorder()
tpl := controllers.AdminSitesHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return nil, tpl.Err
}
return tpl.Data["sites"].([]models.Site), nil
}
func doAdminSiteCreateRequest(user reqUser, s *models.Site) (int, error) {
values := url.Values{}
addValue(values, "title", s.Title)
addValue(values, "link", s.Link)
addValue(values, "content", s.Content)
r := request{
url: "/admin/site/new",
user: user,
method: "POST",
values: values,
}
rw := httptest.NewRecorder()
tpl := controllers.AdminSiteNewPostHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return 0, tpl.Err
}
if len(tpl.SuccessMsg) == 0 {
return -1, fmt.Errorf("there is no success message returned")
}
return tpl.Data["siteID"].(int), nil
}
func doAdminSiteCreateRequest(user reqUser) {
func doAdminSitePublishRequest(user reqUser, siteID int) error {
r := request{
url: "/admin/site/publish/" + strconv.Itoa(siteID),
user: user,
method: "POST",
pathVar: []pathVar{
pathVar{
key: "siteID",
value: strconv.Itoa(siteID),
},
},
}
rw := httptest.NewRecorder()
tpl := controllers.AdminSitePublishPostHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return tpl.Err
}
return nil
}
func doAdminSitePublishRequest(user reqUser) {
func doAdminSiteEditRequest(user reqUser, s *models.Site) error {
values := url.Values{}
addValue(values, "title", s.Title)
addValue(values, "link", s.Link)
addValue(values, "content", s.Content)
r := request{
url: "/admin/site/edit" + strconv.Itoa(s.ID),
user: user,
method: "POST",
values: values,
pathVar: []pathVar{
pathVar{
key: "siteID",
value: strconv.Itoa(s.ID),
},
},
}
rw := httptest.NewRecorder()
tpl := controllers.AdminSiteEditPostHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return tpl.Err
}
return nil
}
func doAdminSiteEditRequest(user reqUser) {
func doAdminSiteDeleteRequest(user reqUser, siteID int) error {
r := request{
url: "/admin/site/delete/" + strconv.Itoa(siteID),
user: user,
method: "POST",
pathVar: []pathVar{
pathVar{
key: "siteID",
value: strconv.Itoa(siteID),
},
},
}
rw := httptest.NewRecorder()
tpl := controllers.AdminSiteDeletePostHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return tpl.Err
}
return nil
}
func doAdminSiteDeleteRequest(user reqUser) {
}
func doAdminSiteOrderRequest(user reqUser) {
func doAdminSiteOrderRequest(user reqUser, siteID int) error {
r := request{
url: "/admin/site/publish/" + strconv.Itoa(siteID),
user: user,
method: "POST",
pathVar: []pathVar{
pathVar{
key: "siteID",
value: strconv.Itoa(siteID),
},
},
}
rw := httptest.NewRecorder()
tpl := controllers.AdminSiteOrderHandler(ctx, rw, r.buildRequest())
if tpl.Err != nil {
return tpl.Err
}
return nil
}

View File

@ -121,6 +121,7 @@ func restrictedRoutes(ctx *m.AppContext, router *mux.Router, chain alice.Chain)
router.Handle("/site/delete/{siteID}", chain.Append(ctx.RequireAdmin).Then(useTemplateHandler(ctx, c.AdminSiteDeleteHandler))).Methods("GET")
router.Handle("/site/delete/{siteID}", chain.Append(ctx.RequireAdmin).Then(useTemplateHandler(ctx, c.AdminSiteDeletePostHandler))).Methods("POST")
router.Handle("/site/order/{siteID}", chain.Append(ctx.RequireAdmin).Then(useTemplateHandler(ctx, c.AdminSiteOrderHandler))).Methods("POST")
router.Handle("/site/{siteID}", chain.Then(useTemplateHandler(ctx, c.AdminGetSiteHandler))).Methods("GET")
//article
router.Handle("/categories", chain.Then(useTemplateHandler(ctx, c.AdminListCategoriesHandler))).Methods("GET")
@ -158,7 +159,7 @@ func publicRoutes(ctx *m.AppContext, router *mux.Router, chain alice.Chain) {
router.Handle("/rss.xml", chain.Then(useXMLHandler(ctx, c.RSSFeed))).Methods("GET")
router.Handle("/site/{site}", chain.Then(useTemplateHandler(ctx, c.SiteHandler))).Methods("GET")
router.Handle("/site/{site}", chain.Then(useTemplateHandler(ctx, c.GetSiteHandler))).Methods("GET")
router.Handle("/file/{filename}", chain.Then(c.FileGetHandler(ctx))).Methods("GET")
router.Handle("/admin", chain.Then(useTemplateHandler(ctx, c.LoginHandler))).Methods("GET")