package api import ( "TheAdversary/database" "TheAdversary/schema" "net/http" "net/http/httptest" "testing" "time" ) func TestEdit(t *testing.T) { if err := initTestDatabase("edit_test.sqlite3"); err != nil { t.Fatal(err) } database.GetDB().Table("article").Create([]map[string]interface{}{ { "title": "test article", "summary": "example summary", "created": time.Now().Unix(), "link": "/article/test-article", "markdown": "Just a simple test article", "html": "

Just a simple test article

", }, }) database.GetDB().Table("author").Create([]map[string]interface{}{ { "name": "test", "password": "", }, { "name": "admin", "password": "123456", "information": "im the admin", }, }) database.GetDB().Table("article_author").Create([]map[string]interface{}{ { "article_id": 1, "author_id": 1, }, }) server := httptest.NewServer(http.HandlerFunc(Edit)) newTitle := "New title" var created int64 database.GetDB().Table("article").Select("created").Where("id = 1").Find(&created) checkTestInformation(t, server.URL, []testInformation{ { Method: http.MethodPost, Code: http.StatusUnauthorized, }, { Method: http.MethodPost, Cookie: map[string]string{ "session_id": initSession(), }, Body: editPayload{ Id: 69, }, Code: http.StatusNotFound, }, { Method: http.MethodPost, Cookie: map[string]string{ "session_id": initSession(), }, Body: editPayload{ Id: 1, Title: &newTitle, Authors: &[]int{ 2, }, }, ResultBody: schema.ArticleSummary{ Id: 1, Title: "New title", Summary: "example summary", Authors: []schema.Author{ { Id: 1, Name: "test", }, { Id: 2, Name: "admin", Information: "im the admin", }, }, Created: created, Tags: []string{}, Link: "/article/test-article", }, AfterExec: func(information *testInformation) { var modified int64 database.GetDB().Table("article").Select("modified").Where("id = 1").Find(&modified) res := information.ResultBody.(schema.ArticleSummary) res.Modified = modified information.ResultBody = res }, Code: http.StatusOK, }, }) }