add tests for sites
This commit is contained in:
parent
b41f66bfe5
commit
b17577d4fb
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue