backend: added unit tests for main.go
Unit tests are testing all routes and Handlers
This commit is contained in:
parent
2d0d0697fb
commit
eda80cf0f0
3 changed files with 194 additions and 0 deletions
8
go.mod
8
go.mod
|
|
@ -1,3 +1,11 @@
|
||||||
module ddServer
|
module ddServer
|
||||||
|
|
||||||
go 1.21.4
|
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
10
go.sum
Normal 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
176
main_test.go
Normal 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
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue