Files
Kazier/backend/repository/devices_test.go
T
2026-09-17 07:59:21 +02:00

74 lines
1.8 KiB
Go

package repository
import (
"testing"
"github.com/kazier/backend/dbtest"
)
func newTestDevices(t *testing.T) *Devices {
t.Helper()
conn := dbtest.OpenTestDatabase(t, repositoryTestURL)
return &Devices{DB: conn}
}
func TestDevicesUpsertAndExists(t *testing.T) {
d := newTestDevices(t)
deviceID := NewID()
exists, err := d.Exists(deviceID)
if err != nil || exists {
t.Fatalf("device non enregistré : exists=%v err=%v", exists, err)
}
if err := d.Upsert(deviceID); err != nil {
t.Fatalf("upsert: %v", err)
}
exists, err = d.Exists(deviceID)
if err != nil || !exists {
t.Fatalf("après upsert : exists=%v err=%v", exists, err)
}
// Upsert idempotent (ON CONFLICT) → pas d'erreur ni de doublon.
if err := d.Upsert(deviceID); err != nil {
t.Fatalf("second upsert: %v", err)
}
exists, err = d.Exists(deviceID)
if err != nil || !exists {
t.Fatalf("après second upsert : exists=%v err=%v", exists, err)
}
var count int
if err := d.DB.QueryRow(`SELECT COUNT(*) FROM devices WHERE device_id = $1`, deviceID).Scan(&count); err != nil {
t.Fatalf("count: %v", err)
}
if count != 1 {
t.Errorf("device dupliqué, count = %d", count)
}
}
func TestDevicesMarkUser(t *testing.T) {
d := newTestDevices(t)
deviceID := NewID()
if err := d.Upsert(deviceID); err != nil {
t.Fatalf("upsert: %v", err)
}
users := &Users{DB: d.DB}
userID, err := users.Create("device-user", "device-user", "hash", false)
if err != nil {
t.Fatalf("create user: %v", err)
}
if err := d.MarkUser(deviceID, userID); err != nil {
t.Fatalf("mark user: %v", err)
}
var storedUser string
if err := d.DB.QueryRow(`SELECT user_id FROM devices WHERE device_id = $1`, deviceID).Scan(&storedUser); err != nil {
t.Fatalf("read user_id: %v", err)
}
if storedUser != userID {
t.Errorf("user_id mémorisé = %q, attendu %q", storedUser, userID)
}
}