2026-09-19 20:31:14 +02:00
|
|
|
//go:build integration
|
|
|
|
|
|
|
|
|
|
package repository
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"os"
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/google/uuid"
|
|
|
|
|
"gorm.io/driver/postgres"
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
|
|
|
|
|
"github.com/danyel/go-guess/backend/internal/service/model"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestStoreEditsQuestionWithoutDeletingIt(t *testing.T) {
|
|
|
|
|
databaseURL := os.Getenv("TEST_DATABASE_URL")
|
|
|
|
|
if databaseURL == "" {
|
|
|
|
|
t.Skip("TEST_DATABASE_URL is not set")
|
|
|
|
|
}
|
|
|
|
|
db, err := gorm.Open(postgres.Open(databaseURL), &gorm.Config{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
store := New(db)
|
|
|
|
|
created, err := store.CreateQuestion(context.Background(), model.Question{
|
|
|
|
|
Text: "Original?", Type: "open",
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
t.Cleanup(func() { db.Exec("DELETE FROM questions WHERE id = ?", created.ID) })
|
|
|
|
|
|
|
|
|
|
updated, err := store.UpdateQuestion(context.Background(), created.ID, model.Question{
|
|
|
|
|
Text: "Choose two", Type: "multiple_choice", Options: []string{"One", "Two"},
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
if updated.ID != created.ID || updated.Text != "Choose two" || len(updated.Options) != 2 {
|
|
|
|
|
t.Fatalf("unexpected updated question: %#v", updated)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestStorePersistsJobWithTraits(t *testing.T) {
|
|
|
|
|
databaseURL := os.Getenv("TEST_DATABASE_URL")
|
|
|
|
|
if databaseURL == "" {
|
|
|
|
|
t.Skip("TEST_DATABASE_URL is not set")
|
|
|
|
|
}
|
|
|
|
|
db, err := gorm.Open(postgres.Open(databaseURL), &gorm.Config{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
store := New(db)
|
|
|
|
|
suffix := uuid.NewString()
|
|
|
|
|
created, err := store.CreateJob(context.Background(), model.JobPosting{
|
|
|
|
|
Title: "Integration " + suffix, Description: "Database mapping test",
|
|
|
|
|
Seniority: "Senior", Position: "Backend Engineer",
|
|
|
|
|
Labels: []model.Trait{{Name: "integration-" + suffix}},
|
|
|
|
|
RequiredSkills: []model.Trait{{Name: "Go"}},
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
t.Cleanup(func() { db.Exec("DELETE FROM job_postings WHERE id = ?", created.ID) })
|
|
|
|
|
|
|
|
|
|
found, err := store.GetJob(context.Background(), created.ID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
if found.Title != created.Title || len(found.Labels) != 1 || len(found.RequiredSkills) != 1 {
|
|
|
|
|
t.Fatalf("unexpected stored job: %#v", found)
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-10-01 17:36:43 +02:00
|
|
|
|
|
|
|
|
func TestStoreUpdatesParticipantAndReplacesTraits(t *testing.T) {
|
|
|
|
|
databaseURL := os.Getenv("TEST_DATABASE_URL")
|
|
|
|
|
if databaseURL == "" {
|
|
|
|
|
t.Skip("TEST_DATABASE_URL is not set")
|
|
|
|
|
}
|
|
|
|
|
db, err := gorm.Open(postgres.Open(databaseURL), &gorm.Config{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
store := New(db)
|
|
|
|
|
suffix := uuid.NewString()
|
|
|
|
|
created, err := store.CreateParticipant(context.Background(), model.Participant{
|
|
|
|
|
FirstName: "Ada", LastName: "Lovelace", Email: "candidate-" + suffix + "@example.com",
|
|
|
|
|
CV: []byte("Go developer"), CVFilename: "old.txt",
|
|
|
|
|
Traits: []model.Trait{{Name: "Go"}},
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
t.Cleanup(func() { db.Exec("DELETE FROM participants WHERE id = ?", created.ID) })
|
|
|
|
|
|
|
|
|
|
created.CV = []byte("React developer")
|
|
|
|
|
created.CVFilename = "new.txt"
|
|
|
|
|
created.Traits = []model.Trait{{Name: "React"}}
|
|
|
|
|
updated, err := store.UpdateParticipant(context.Background(), created)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
if updated.ID != created.ID || updated.CVFilename != "new.txt" ||
|
|
|
|
|
len(updated.Traits) != 1 || updated.Traits[0].Name != "React" {
|
|
|
|
|
t.Fatalf("unexpected updated participant: %#v", updated)
|
|
|
|
|
}
|
|
|
|
|
}
|