veza/veza-backend-api/internal/services/stream_service_test.go
2025-12-16 11:23:49 -05:00

63 lines
2 KiB
Go

package services
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"strings"
"testing"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"go.uber.org/zap"
)
func TestStreamService_StartProcessing(t *testing.T) {
// Setup mock server
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, "/internal/jobs/transcode", r.URL.Path)
assert.Equal(t, "POST", r.Method)
assert.Equal(t, "application/json", r.Header.Get("Content-Type"))
var req TranscodeRequest
err := json.NewDecoder(r.Body).Decode(&req)
assert.NoError(t, err)
// We can't easily assert the random UUID string here unless we capture it from the request in the test setup
// However, we can assert it's a valid UUID
_, err = uuid.Parse(req.TrackID)
assert.NoError(t, err, "TrackID should be a valid UUID")
assert.Equal(t, "/path/to/file", req.FilePath)
w.WriteHeader(http.StatusOK)
}))
defer server.Close()
logger := zap.NewNop()
service := NewStreamService(server.URL, logger)
trackID := uuid.New()
err := service.StartProcessing(context.Background(), trackID, "/path/to/file")
assert.NoError(t, err)
}
func TestStreamService_StartProcessing_Error(t *testing.T) {
// Setup mock server that returns error
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
defer server.Close()
logger := zap.NewNop()
service := NewStreamService(server.URL, logger)
err := service.StartProcessing(context.Background(), uuid.New(), "/path/to/file")
assert.Error(t, err)
// MOD-P1-RES-002: Le message d'erreur change avec le retry (après 3 tentatives)
// Error message is "stream server request failed after 3 attempts: server error: 500"
assert.True(t,
strings.Contains(err.Error(), "stream server returned non-200 status after 3 attempts") ||
strings.Contains(err.Error(), "stream server request failed after 3 attempts"),
"Error should mention retry failure, got: %s", err.Error())
}