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
|
||||
|
||||
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