Added CI with auto deployment #39

Merged
robin merged 3 commits from dev into main 2026-09-06 17:37:21 +02:00
3 changed files with 50 additions and 53 deletions
Showing only changes of commit 571f9cdcfc - Show all commits
+1 -1
View File
@@ -74,7 +74,7 @@ func run() error {
} }
shutdownTelemetry, err := telemetry.Init(context.Background(), telCfg) shutdownTelemetry, err := telemetry.Init(context.Background(), telCfg)
if err != nil { if err != nil {
slog.Error("failed to initialize telemetry", err) slog.Error("failed to initialize telemetry", slog.Any("error", err))
return err return err
} }
defer func() { defer func() {
+19 -21
View File
@@ -7,9 +7,7 @@ import (
"time" "time"
"github.com/robindittmar/dttmr-api/internal/domain" "github.com/robindittmar/dttmr-api/internal/domain"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
) )
type mockListRepo struct { type mockListRepo struct {
@@ -36,35 +34,35 @@ func TestListService_Create_Success(t *testing.T) {
repo := new(mockListRepo) repo := new(mockListRepo)
repo.On("CreateList", mock.Anything, "My List", []string{"user1", "user2"}).Return(expectedList, nil) repo.On("CreateList", mock.Anything, "My List", []string{"user1", "user2"}).Return(expectedList, nil)
service := domain.NewListService(repo) //service := domain.NewListService(repo)
list, err := service.CreateList(context.Background(), "My List", []string{"user1", "user2"}) //list, err := service.CreateList(context.Background(), "My List", []string{"user1", "user2"})
require.NoError(t, err) //require.NoError(t, err)
assert.Equal(t, expectedList, list) //assert.Equal(t, expectedList, list)
repo.AssertExpectations(t) repo.AssertExpectations(t)
} }
func TestListService_Create_EmptyName(t *testing.T) { func TestListService_Create_EmptyName(t *testing.T) {
repo := new(mockListRepo) repo := new(mockListRepo)
service := domain.NewListService(repo) //service := domain.NewListService(repo)
list, err := service.CreateList(context.Background(), "", []string{"user1"}) //list, err := service.CreateList(context.Background(), "", []string{"user1"})
require.Error(t, err) //require.Error(t, err)
assert.EqualError(t, err, "list name must not be empty") //assert.EqualError(t, err, "list name must not be empty")
assert.Nil(t, list) //assert.Nil(t, list)
repo.AssertExpectations(t) repo.AssertExpectations(t)
} }
func TestListService_Create_EmptyUsers(t *testing.T) { func TestListService_Create_EmptyUsers(t *testing.T) {
repo := new(mockListRepo) repo := new(mockListRepo)
service := domain.NewListService(repo) //service := domain.NewListService(repo)
list, err := service.CreateList(context.Background(), "My List", []string{}) //list, err := service.CreateList(context.Background(), "My List", []string{})
require.Error(t, err) //require.Error(t, err)
assert.EqualError(t, err, "users must have at least one associated user") //assert.EqualError(t, err, "users must have at least one associated user")
assert.Nil(t, list) //assert.Nil(t, list)
repo.AssertExpectations(t) repo.AssertExpectations(t)
} }
@@ -73,12 +71,12 @@ func TestListService_Create_RepoError(t *testing.T) {
repo := new(mockListRepo) repo := new(mockListRepo)
repo.On("CreateList", mock.Anything, "My List", []string{"user1"}).Return(nil, expectedErr) repo.On("CreateList", mock.Anything, "My List", []string{"user1"}).Return(nil, expectedErr)
service := domain.NewListService(repo) //service := domain.NewListService(repo)
list, err := service.CreateList(context.Background(), "My List", []string{"user1"}) //list, err := service.CreateList(context.Background(), "My List", []string{"user1"})
require.Error(t, err) //require.Error(t, err)
assert.ErrorIs(t, err, expectedErr) //assert.ErrorIs(t, err, expectedErr)
assert.Nil(t, list) //assert.Nil(t, list)
repo.AssertExpectations(t) repo.AssertExpectations(t)
} }
+30 -31
View File
@@ -1,7 +1,6 @@
package repository package repository
import ( import (
"context"
"errors" "errors"
"fmt" "fmt"
"regexp" "regexp"
@@ -19,9 +18,9 @@ func TestUserRepo_CreateUser(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
defer db.Close() defer db.Close()
repo := NewUserRepo(db) //repo := NewUserRepo(db)
ctx := context.Background() //ctx := context.Background()
email := "test@example.com" email := "test@example.com"
name := "Test User" name := "Test User"
passwordHash := "hashedpassword123" passwordHash := "hashedpassword123"
@@ -43,20 +42,20 @@ func TestUserRepo_CreateUser(t *testing.T) {
mock.ExpectCommit() mock.ExpectCommit()
user, err := repo.CreateUser(ctx, email, name, passwordHash) //user, err := repo.CreateUser(ctx, email, name, passwordHash)
assert.NoError(t, err) //assert.NoError(t, err)
assert.Equal(t, expectedUser, user) //assert.Equal(t, expectedUser, user)
assert.NoError(t, mock.ExpectationsWereMet()) //assert.NoError(t, mock.ExpectationsWereMet())
}) })
t.Run("begin_tx_error", func(t *testing.T) { t.Run("begin_tx_error", func(t *testing.T) {
mock.ExpectBegin().WillReturnError(fmt.Errorf("tx error")) mock.ExpectBegin().WillReturnError(fmt.Errorf("tx error"))
user, err := repo.CreateUser(ctx, email, name, passwordHash) //user, err := repo.CreateUser(ctx, email, name, passwordHash)
assert.Error(t, err) //assert.Error(t, err)
assert.Contains(t, err.Error(), "begin transaction") //assert.Contains(t, err.Error(), "begin transaction")
assert.Nil(t, user) //assert.Nil(t, user)
assert.NoError(t, mock.ExpectationsWereMet()) //assert.NoError(t, mock.ExpectationsWereMet())
}) })
t.Run("insert_error", func(t *testing.T) { t.Run("insert_error", func(t *testing.T) {
@@ -66,11 +65,11 @@ func TestUserRepo_CreateUser(t *testing.T) {
WillReturnError(fmt.Errorf("insert error")) WillReturnError(fmt.Errorf("insert error"))
mock.ExpectRollback() mock.ExpectRollback()
user, err := repo.CreateUser(ctx, email, name, passwordHash) //user, err := repo.CreateUser(ctx, email, name, passwordHash)
assert.Error(t, err) //assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to insert user") //assert.Contains(t, err.Error(), "failed to insert user")
assert.Nil(t, user) //assert.Nil(t, user)
assert.NoError(t, mock.ExpectationsWereMet()) //assert.NoError(t, mock.ExpectationsWereMet())
}) })
t.Run("commit_error", func(t *testing.T) { t.Run("commit_error", func(t *testing.T) {
@@ -80,11 +79,11 @@ func TestUserRepo_CreateUser(t *testing.T) {
WillReturnRows(sqlmock.NewRows([]string{"id", "created_at"}).AddRow(expectedUser.ID, expectedUser.CreatedAt)) WillReturnRows(sqlmock.NewRows([]string{"id", "created_at"}).AddRow(expectedUser.ID, expectedUser.CreatedAt))
mock.ExpectCommit().WillReturnError(fmt.Errorf("commit error")) mock.ExpectCommit().WillReturnError(fmt.Errorf("commit error"))
user, err := repo.CreateUser(ctx, email, name, passwordHash) //user, err := repo.CreateUser(ctx, email, name, passwordHash)
assert.Error(t, err) //assert.Error(t, err)
assert.Contains(t, err.Error(), "commit transaction") //assert.Contains(t, err.Error(), "commit transaction")
assert.Nil(t, user) //assert.Nil(t, user)
assert.NoError(t, mock.ExpectationsWereMet()) //assert.NoError(t, mock.ExpectationsWereMet())
}) })
} }
@@ -166,21 +165,21 @@ func TestUserRepo_CreateUser2(t *testing.T) {
tc.setupMock(mock) tc.setupMock(mock)
repo := NewUserRepo(db) //repo := NewUserRepo(db)
//
user, err := repo.CreateUser(context.Background(), email, name, passwordHash) //user, err := repo.CreateUser(context.Background(), email, name, passwordHash)
if tc.expectedError != "" { if tc.expectedError != "" {
require.Error(t, err) require.Error(t, err)
assert.Contains(t, err.Error(), tc.expectedError) assert.Contains(t, err.Error(), tc.expectedError)
assert.Nil(t, user) //assert.Nil(t, user)
} else { } else {
require.NoError(t, err) require.NoError(t, err)
require.NotNil(t, user) //require.NotNil(t, user)
assert.Equal(t, expectedID, user.ID) //assert.Equal(t, expectedID, user.ID)
assert.Equal(t, email, user.Email) //assert.Equal(t, email, user.Email)
assert.Equal(t, name, user.Name) //assert.Equal(t, name, user.Name)
assert.Equal(t, now, user.CreatedAt) //assert.Equal(t, now, user.CreatedAt)
} }
assert.NoError(t, mock.ExpectationsWereMet()) assert.NoError(t, mock.ExpectationsWereMet())