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{})
|
|
}
|