Aller au contenu

Partie 4: Tests et Déploiement

circle Partie 4/4 - Temps estimé: 20 minutes

arrow_back Retour à l'index


Objectif

Dans cette dernière partie, vous allez ajouter des tests unitaires et déployer votre API Blog avec Docker.

Ce que vous allez faire: - Écrire des tests unitaires pour le service Post - Lancer les tests - Créer une image Docker - Déployer avec docker-compose


Étape 12: Tests unitaires

12.1 Tester le service Post

Créer internal/domain/post/service_test.go:

package post_test

import (
    "context"
    "testing"

    "blog-api/internal/models"
    "blog-api/internal/interfaces/mocks"
    "blog-api/pkg/logger"
    "github.com/stretchr/testify/assert"
    "github.com/stretchr/testify/mock"
)

func TestPostService_Create(t *testing.T) {
    // Arrange
    mockRepo := new(mocks.PostRepository)
    log := logger.New(&config.Config{AppEnv: "test"})
    service := post.NewService(mockRepo, log)

    mockRepo.On("Create", mock.Anything, mock.AnythingOfType("*models.Post")).
        Return(nil)

    // Act
    result, err := service.Create(context.Background(), 1, "Test Title", "Test Content", "tag1,tag2")

    // Assert
    assert.NoError(t, err)
    assert.NotNil(t, result)
    assert.Equal(t, "Test Title", result.Title)
    assert.Equal(t, "test-title", result.Slug)
    mockRepo.AssertExpectations(t)
}

12.2 Lancer les tests

make test

Étape 13: Déploiement Docker

13.1 Build l'image Docker

make docker-build

13.2 Lancer avec docker-compose

Le fichier docker-compose.yml est déjà généré:

docker-compose up -d

Cela lance: - L'application sur le port 8080 - PostgreSQL sur le port 5432

13.3 Vérifier le déploiement

curl http://localhost:8080/health

Conclusion

Félicitations! Vous avez créé une API Blog complète avec:

check_circle Authentification JWT (User, Login, Register) check_circle Articles (CRUD complet avec slug, tags, publish/unpublish) check_circle Commentaires (Create, List, Delete) check_circle Relations (Post → Author, Comment → Post + Author) check_circle Pagination (Limit/Offset) check_circle Tests unitaires check_circle Déploiement Docker check_circle Architecture hexagonale check_circle Logging structuré check_circle Error handling centralisé

Résumé de ce que vous avez appris

  1. Installation de create-go-starter
  2. Génération d'un projet complet
  3. Configuration (.env, PostgreSQL, JWT)
  4. Architecture hexagonale:
  5. Domain (entities, services)
  6. Adapters (handlers, repositories)
  7. Interfaces (ports)
  8. Dependency Injection avec uber-go/fx
  9. GORM (migrations, queries, relations)
  10. Fiber (routes, middleware, handlers)
  11. Tests avec testify et mocks
  12. Docker et docker-compose

Prochaines étapes

Pour aller plus loin:

  • Upload d'images pour les articles
  • Recherche full-text dans les posts
  • Likes/Votes sur les articles
  • Catégories pour organiser les posts
  • Swagger pour documenter l'API
  • CI/CD avec GitHub Actions
  • Kubernetes pour déploiement en production

Ressources

Bon coding! rocket_launch


arrow_back Partie 3: Exposer l'API HTTP | arrow_back Retour à l'index