backend: added unit tests for main.go

Unit tests are testing all routes and Handlers
This commit is contained in:
Patryk Hegenberg 2023-12-06 19:28:26 +01:00 committed by Patryk Hegenberg
parent 2d0d0697fb
commit eda80cf0f0
3 changed files with 194 additions and 0 deletions

8
go.mod
View file

@ -1,3 +1,11 @@
module ddServer
go 1.21.4
require github.com/stretchr/testify v1.8.4
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

10
go.sum Normal file
View file

@ -0,0 +1,10 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

176
main_test.go Normal file
View file

@ -0,0 +1,176 @@
package main
import (
"ddServer/handlers"
"log"
"net/http"
"net/http/httptest"
"net/url"
"os"
"path/filepath"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestMain(t *testing.T) {
// Test case 1: Check if the root route ("/") returns the expected response.
t.Run("Root Route", func(t *testing.T) {
req, _ := http.NewRequest("GET", "/", nil)
rr := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.FormHandler(content, &Monsters))
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
})
// Test case 2: Check if the "/submit" route returns the expected response.
t.Run("Submit Route", func(t *testing.T) {
dir, err := filepath.Abs("test_data")
if err != nil {
log.Fatal(err)
}
filename := filepath.Join(dir, "monster.json")
EnsureDirExists(dir)
formData := url.Values{
"filename": {filename},
"name": {"Monster Name"},
"source": {"Monster Source"},
"size": {"Monster Size"},
"type": {"Monster Type"},
"alignment": {"Monster Alignment"},
"ac": {"15"}, // Beispielwert für AC
"acFrom": {"Natural Armor"}, // Beispielwert für AC From
"hpAverage": {"30"}, // Beispielwert für HP Average
"hpFormula": {"2d10+5"}, // Beispielwert für HP Formula
"speed": {"30"}, // Beispielwert für Speed
"str": {"16"}, // Beispielwert für Str
"dex": {"14"}, // Beispielwert für Dex
"con": {"18"}, // Beispielwert für Con
"int": {"10"}, // Beispielwert für Int
"wis": {"12"}, // Beispielwert für Wis
"cha": {"8"}, // Beispielwert für Cha
"saveDex": {"+2"}, // Beispielwert für Save Dex
"saveCon": {"+4"}, // Beispielwert für Save Con
"saveWis": {"+1"}, // Beispielwert für Save Wis
"perception": {"+3"}, // Beispielwert für Perception
"stealth": {"+2"}, // Beispielwert für Stealth
"damageRes": {"Fire, Cold"}, // Beispielwert für Damage Resistances
"senses": {"Darkvision"}, // Beispielwert für Senses
"languages": {"Common"}, // Beispielwert für Languages
"cr": {"2"}, // Beispielwert für CR
"traitName": {"Trait Name"}, // Beispielwert für Trait Name
"traitEntry": {"Trait Entry"}, // Beispielwert für Trait Entry
"actionName": {"Action Name"}, // Beispielwert für Action Name
"actionEntry": {"Action Entry"}, // Beispielwert für Action Entry
}
log.Println("Writing data to file:", filename)
req, _ := http.NewRequest("POST", "/submit", strings.NewReader(formData.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
rr := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.SubmitHandler(content, &chars, &Monsters, filename))
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
})
// Test case 3: Check if the "/images/" route returns the expected response.
t.Run("Images Route", func(t *testing.T) {
req, _ := http.NewRequest("GET", "/images/", nil)
rr := httptest.NewRecorder()
handler := http.StripPrefix("/images/", http.FileServer(http.FS(content)))
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
})
// Test case 4: Check if the "/addMonster" route returns the expected response.
t.Run("AddMonster Route", func(t *testing.T) {
dir, err := filepath.Abs("test_data")
if err != nil {
log.Fatal(err)
}
filename := filepath.Join(dir, "monster.json")
EnsureDirExists(dir)
formData := url.Values{
"filename": {filename},
"name": {"Monster Name"},
"source": {"Monster Source"},
"size": {"Monster Size"},
"type": {"Monster Type"},
"alignment": {"Monster Alignment"},
"ac": {"15"}, // Beispielwert für AC
"acFrom": {"Natural Armor"}, // Beispielwert für AC From
"hpAverage": {"30"}, // Beispielwert für HP Average
"hpFormula": {"2d10+5"}, // Beispielwert für HP Formula
"speed": {"30"}, // Beispielwert für Speed
"str": {"16"}, // Beispielwert für Str
"dex": {"14"}, // Beispielwert für Dex
"con": {"18"}, // Beispielwert für Con
"int": {"10"}, // Beispielwert für Int
"wis": {"12"}, // Beispielwert für Wis
"cha": {"8"}, // Beispielwert für Cha
"saveDex": {"+2"}, // Beispielwert für Save Dex
"saveCon": {"+4"}, // Beispielwert für Save Con
"saveWis": {"+1"}, // Beispielwert für Save Wis
"perception": {"+3"}, // Beispielwert für Perception
"stealth": {"+2"}, // Beispielwert für Stealth
"damageRes": {"Fire, Cold"}, // Beispielwert für Damage Resistances
"senses": {"Darkvision"}, // Beispielwert für Senses
"languages": {"Common"}, // Beispielwert für Languages
"cr": {"2"}, // Beispielwert für CR
"traitName": {"Trait Name"}, // Beispielwert für Trait Name
"traitEntry": {"Trait Entry"}, // Beispielwert für Trait Entry
"actionName": {"Action Name"}, // Beispielwert für Action Name
"actionEntry": {"Action Entry"}, // Beispielwert für Action Entry
}
req, _ := http.NewRequest("POST", "/addMonster", strings.NewReader(formData.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
rr := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.SubmitHandler(content, &chars, &Monsters, filename))
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
})
// Test case 5: Check if the "/main" route returns the expected response.
t.Run("Main Route", func(t *testing.T) {
req, _ := http.NewRequest("GET", "/main", nil)
rr := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.MainHandler(content, &Monsters))
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
})
// Test case 6: Check if the "/about" route returns the expected response.
t.Run("About Route", func(t *testing.T) {
req, _ := http.NewRequest("GET", "/about", nil)
rr := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.AboutHandler(content))
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
})
// Test case 7: Check if the "/contact" route returns the expected response.
t.Run("Contact Route", func(t *testing.T) {
req, _ := http.NewRequest("GET", "/contact", nil)
rr := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.ContactHandler(content))
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
})
}
func EnsureDirExists(dir string) error {
err := os.MkdirAll(dir, os.ModePerm)
if err != nil {
log.Println("Error creating directory:", err)
}
return err
}