added tests for db and user
Some checks reported errors
arbeitszeitmessung/pipeline/head Something is wrong with the build of this commit
Some checks reported errors
arbeitszeitmessung/pipeline/head Something is wrong with the build of this commit
This commit is contained in:
@@ -30,7 +30,12 @@ type Booking struct {
|
||||
CounterId int `json:"counter_id"`
|
||||
}
|
||||
|
||||
var DB *sql.DB
|
||||
type IDatabase interface {
|
||||
Prepare(query string) (*sql.Stmt, error)
|
||||
Exec(query string, args ...any) (sql.Result, error)
|
||||
}
|
||||
|
||||
var DB IDatabase
|
||||
|
||||
func (b *Booking) New(card_uid string, geraet_id int16, check_in_out int16) Booking {
|
||||
return Booking{
|
||||
|
||||
38
Backend/models/db_test.go
Normal file
38
Backend/models/db_test.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package models_test
|
||||
|
||||
import (
|
||||
"arbeitszeitmessung/models"
|
||||
"database/sql"
|
||||
"testing"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
type DBFixture struct {
|
||||
Database models.IDatabase
|
||||
TX *sql.Tx
|
||||
}
|
||||
|
||||
func SetupDBFixture(t *testing.T) *DBFixture {
|
||||
t.Helper()
|
||||
|
||||
db, err := sql.Open("postgres", "postgres://postgres:password@localhost:5433/arbeitszeitmessung?sslmode=disable")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to connect to database: %v", err)
|
||||
}
|
||||
|
||||
tx, err := db.Begin()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to start transaction: %v", err)
|
||||
}
|
||||
|
||||
t.Cleanup(func() {
|
||||
tx.Rollback()
|
||||
db.Close()
|
||||
})
|
||||
|
||||
return &DBFixture{
|
||||
Database: tx,
|
||||
TX: tx,
|
||||
}
|
||||
}
|
||||
@@ -24,13 +24,13 @@ func (u *User) GetUserFromSession(Session *scs.SessionManager, ctx context.Conte
|
||||
var user User
|
||||
var err error
|
||||
if helper.GetEnv("GO_ENV", "production") == "debug" {
|
||||
user, err = (*User).GetByPersonalNummer(nil, 123)
|
||||
user, err = GetUserByPersonalNr(123)
|
||||
} else {
|
||||
if !Session.Exists(ctx, "user") {
|
||||
log.Println("No user in session storage!")
|
||||
return user, errors.New("No user in session storage!")
|
||||
}
|
||||
user, err = (*User).GetByPersonalNummer(nil, Session.GetInt(ctx, "user"))
|
||||
user, err = GetUserByPersonalNr(Session.GetInt(ctx, "user"))
|
||||
}
|
||||
if err != nil {
|
||||
log.Println("Cannot get user from session!")
|
||||
@@ -95,7 +95,7 @@ func (u *User) CheckOut() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *User) GetByPersonalNummer(personalNummer int) (User, error) {
|
||||
func GetUserByPersonalNr(personalNummer int) (User, error) {
|
||||
var user User
|
||||
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, card_uid, vorname, nachname, arbeitszeit_per_tag FROM s_personal_daten WHERE personal_nummer = $1;`))
|
||||
|
||||
56
Backend/models/user_test.go
Normal file
56
Backend/models/user_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package models_test
|
||||
|
||||
import (
|
||||
"arbeitszeitmessung/models"
|
||||
"database/sql"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var testUser models.User = models.User{Vorname: "Kim", Name: "Mustermensch", PersonalNummer: 456, CardUID: "aaaa-aaaa", ArbeitszeitPerTag: 8}
|
||||
|
||||
func SetupUserFixture(t *testing.T, db models.IDatabase) {
|
||||
t.Helper()
|
||||
db.Exec(`INSERT INTO "s_personal_daten" ("personal_nummer", "aktiv_beschaeftigt", "vorname", "nachname", "geburtsdatum", "plz", "adresse", "geschlecht", "card_uid", "hauptbeschaeftigungs_ort", "arbeitszeit_per_tag", "arbeitszeit_min_start", "arbeitszeit_max_ende", "vorgesetzter_pers_nr") VALUES
|
||||
(456, 't', 'Kim', 'Mustermensch', '2003-02-01', '08963', 'Altenburger Str. 44A', 1, 'aaaa-aaaa', 1, 8, '07:00:00', '20:00:00', 0);`)
|
||||
}
|
||||
|
||||
func TestGetUserByPersonalNr(t *testing.T) {
|
||||
tc := SetupDBFixture(t)
|
||||
SetupUserFixture(t, tc.Database)
|
||||
|
||||
models.DB = tc.Database
|
||||
|
||||
user, err := models.GetUserByPersonalNr(testUser.PersonalNummer)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if user != testUser {
|
||||
t.Error("Retrieved user not the same as testUser!")
|
||||
}
|
||||
|
||||
_, err = models.GetUserByPersonalNr(000)
|
||||
if err != sql.ErrNoRows {
|
||||
t.Error("Wrong error handling, when retrieving wrong personalnummer")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckAnwesenheit(t *testing.T) {
|
||||
tc := SetupDBFixture(t)
|
||||
models.DB = tc.Database
|
||||
SetupUserFixture(t, tc.Database)
|
||||
|
||||
var actual bool
|
||||
|
||||
if actual = testUser.CheckAnwesenheit(); actual != false {
|
||||
t.Errorf("Checkabwesenheit with no booking should be false but is %t", actual)
|
||||
}
|
||||
tc.Database.Exec("INSERT INTO anwesenheit (timestamp, card_uid, check_in_out, geraet_id) VALUES (NOW() - INTERVAL '2 hour', 'aaaa-aaaa', 1, 1);")
|
||||
if actual = testUser.CheckAnwesenheit(); actual != true {
|
||||
t.Errorf("Checkabwesenheit with 'kommen' booking should be true but is %t", actual)
|
||||
}
|
||||
|
||||
tc.Database.Exec("INSERT INTO anwesenheit (timestamp, card_uid, check_in_out, geraet_id) VALUES (NOW() - INTERVAL '1 hour', 'aaaa-aaaa', 2, 1);")
|
||||
if actual = testUser.CheckAnwesenheit(); actual != false {
|
||||
t.Errorf("Checkabwesenheit with 'gehen' booking should be false but is %t", actual)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user