|
|
- package Api
-
- import (
- "encoding/json"
- "fmt"
- "io/ioutil"
- "log"
- "math/rand"
- "net/http"
- "net/http/httptest"
- "os"
- "path"
- "runtime"
- "strings"
- "testing"
-
- "git.tovijaeschke.xyz/tovi/SuddenImpactRecords/Database"
- "git.tovijaeschke.xyz/tovi/SuddenImpactRecords/Models"
- "github.com/gorilla/mux"
- "gorm.io/gorm"
- )
-
- func init() {
- // Fix working directory for tests
- _, filename, _, _ := runtime.Caller(0)
- dir := path.Join(path.Dir(filename), "..")
- err := os.Chdir(dir)
- if err != nil {
- panic(err)
- }
-
- log.SetOutput(ioutil.Discard)
- Database.Init()
-
- r = mux.NewRouter()
- }
-
- var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
-
- func RandStringRunes(n int) string {
- b := make([]rune, n)
- for i := range b {
- b[i] = letterRunes[rand.Intn(len(letterRunes))]
- }
- return string(b)
- }
-
- func Test_getUsers(t *testing.T) {
- t.Log("Testing getUsers...")
-
- r.HandleFunc("/user", getUsers).Methods("GET")
-
- ts := httptest.NewServer(r)
- defer ts.Close()
-
- var err error
- for i := 0; i < 20; i++ {
- userData := Models.User{
- Email: fmt.Sprintf(
- "%s@email.com",
- RandStringRunes(16),
- ),
- Password: "password",
- ConfirmPassword: "password",
- }
-
- err = Database.CreateUser(&userData)
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- }
-
- defer Database.DB.
- Session(&gorm.Session{FullSaveAssociations: true}).
- Unscoped().
- Delete(&userData)
- }
-
- res, err := http.Get(ts.URL + "/user?page=1&pageSize=10")
-
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- }
- if res.StatusCode != http.StatusOK {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, res.StatusCode)
- }
-
- getUsersData := new([]Models.User)
- err = json.NewDecoder(res.Body).Decode(getUsersData)
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- }
-
- if len(*getUsersData) != 10 {
- t.Errorf("Expected 10, recieved %d", len(*getUsersData))
- }
- }
-
- func Test_createUser(t *testing.T) {
- t.Log("Testing createUser...")
-
- r.HandleFunc("/user", createUser).Methods("POST")
-
- ts := httptest.NewServer(r)
-
- defer ts.Close()
-
- postJson := `
- {
- "email": "email@email.com",
- "password": "password",
- "confirm_password": "password",
- "first_name": "Hugh",
- "last_name": "Mann"
- }
- `
-
- res, err := http.Post(ts.URL+"/user", "application/json", strings.NewReader(postJson))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- if res.StatusCode != http.StatusOK {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, res.StatusCode)
- return
- }
-
- Database.DB.Model(Models.User{}).
- Select("count(*) > 0").
- Where("email = ?", "email@email.com").
- Delete(Models.User{})
- }
|