159 lines
5.9 KiB
Go
159 lines
5.9 KiB
Go
package handlers
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
archivalDomain "git.nakama.town/fmartingr/hako/internal/archival/domain"
|
|
authDomain "git.nakama.town/fmartingr/hako/internal/auth/domain"
|
|
"git.nakama.town/fmartingr/hako/internal/model"
|
|
"git.nakama.town/fmartingr/hako/internal/server/middleware"
|
|
"git.nakama.town/fmartingr/hako/internal/testutil"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestArchiveHandler_GetArchiveHistory(t *testing.T) {
|
|
ctx := context.Background()
|
|
deps := testutil.GetTestConfigurationAndDependencies(t, ctx)
|
|
|
|
// Initialize domains
|
|
deps.Dependencies.Domains().SetLinks(archivalDomain.NewLinkDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetArchives(archivalDomain.NewArchiveDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetCategories(archivalDomain.NewCategoryDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetAuth(authDomain.NewAuthDomain(deps.Dependencies))
|
|
|
|
// Create a test user
|
|
user, token, err := testutil.NewTestUser(t, deps.Dependencies, "test@example.com", "testpassword123")
|
|
require.NoError(t, err)
|
|
|
|
// Create a link
|
|
link, err := deps.Dependencies.Domains().Links().CreateLink(ctx, "https://example.com/history", user.ID.String())
|
|
require.NoError(t, err)
|
|
|
|
// Create archive handler
|
|
archiveHandler := NewArchiveHandler(deps.Dependencies)
|
|
|
|
// Create handler with auth middleware
|
|
globalAuthMiddleware := middleware.AuthMiddleware(deps.Dependencies.GetJWTService(), deps.Dependencies.UserStore)
|
|
requireAuthMiddleware := middleware.RequireAuthMiddleware()
|
|
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("GET /links/{linkId}/archives", archiveHandler.HandleGetArchiveHistory)
|
|
handler := globalAuthMiddleware(requireAuthMiddleware(mux))
|
|
|
|
// Test request
|
|
req := httptest.NewRequest(http.MethodGet, "/links/"+link.ID+"/archives", nil)
|
|
req.Header.Set("Authorization", "Bearer "+token)
|
|
req.SetPathValue("linkId", link.ID)
|
|
w := httptest.NewRecorder()
|
|
|
|
handler.ServeHTTP(w, req)
|
|
|
|
// Assert response
|
|
resp := testutil.NewTestResponse(w)
|
|
resp.AssertStatus(t, http.StatusOK)
|
|
|
|
// Check response structure
|
|
var archives []ArchiveResponse
|
|
err = json.Unmarshal(resp.GetBody(), &archives)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, archives)
|
|
}
|
|
|
|
func TestArchiveHandler_ReArchiveLink(t *testing.T) {
|
|
ctx := context.Background()
|
|
deps := testutil.GetTestConfigurationAndDependencies(t, ctx)
|
|
|
|
// Initialize domains
|
|
deps.Dependencies.Domains().SetLinks(archivalDomain.NewLinkDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetArchives(archivalDomain.NewArchiveDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetCategories(archivalDomain.NewCategoryDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetAuth(authDomain.NewAuthDomain(deps.Dependencies))
|
|
|
|
// Create a test user
|
|
user, token, err := testutil.NewTestUser(t, deps.Dependencies, "test@example.com", "testpassword123")
|
|
require.NoError(t, err)
|
|
|
|
// Create a link
|
|
link, err := deps.Dependencies.Domains().Links().CreateLink(ctx, "https://example.com/rearchive", user.ID.String())
|
|
require.NoError(t, err)
|
|
|
|
// Create archive handler
|
|
archiveHandler := NewArchiveHandler(deps.Dependencies)
|
|
|
|
// Create handler with auth middleware
|
|
globalAuthMiddleware := middleware.AuthMiddleware(deps.Dependencies.GetJWTService(), deps.Dependencies.UserStore)
|
|
requireAuthMiddleware := middleware.RequireAuthMiddleware()
|
|
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("POST /links/{linkId}/archives", archiveHandler.HandleReArchiveLink)
|
|
handler := globalAuthMiddleware(requireAuthMiddleware(mux))
|
|
|
|
// Test request
|
|
req := httptest.NewRequest(http.MethodPost, "/links/"+link.ID+"/archives", nil)
|
|
req.Header.Set("Authorization", "Bearer "+token)
|
|
req.SetPathValue("linkId", link.ID)
|
|
w := httptest.NewRecorder()
|
|
|
|
handler.ServeHTTP(w, req)
|
|
|
|
// Assert response
|
|
resp := testutil.NewTestResponse(w)
|
|
resp.AssertStatus(t, http.StatusAccepted)
|
|
}
|
|
|
|
func TestArchiveHandler_GetArchiveFiles(t *testing.T) {
|
|
ctx := context.Background()
|
|
deps := testutil.GetTestConfigurationAndDependencies(t, ctx)
|
|
|
|
// Initialize domains
|
|
deps.Dependencies.Domains().SetLinks(archivalDomain.NewLinkDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetArchives(archivalDomain.NewArchiveDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetCategories(archivalDomain.NewCategoryDomain(deps.Dependencies))
|
|
deps.Dependencies.Domains().SetAuth(authDomain.NewAuthDomain(deps.Dependencies))
|
|
|
|
// Create a test user
|
|
user, token, err := testutil.NewTestUser(t, deps.Dependencies, "test@example.com", "testpassword123")
|
|
require.NoError(t, err)
|
|
|
|
// Create a link (which creates an archive)
|
|
link, err := deps.Dependencies.Domains().Links().CreateLink(ctx, "https://example.com/files", user.ID.String())
|
|
require.NoError(t, err)
|
|
|
|
// Get archives for the link
|
|
archives, err := deps.Dependencies.Domains().Archives().GetArchiveHistory(ctx, link.ID)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, archives)
|
|
|
|
// Create archive handler
|
|
archiveHandler := NewArchiveHandler(deps.Dependencies)
|
|
|
|
// Create handler with auth middleware
|
|
globalAuthMiddleware := middleware.AuthMiddleware(deps.Dependencies.GetJWTService(), deps.Dependencies.UserStore)
|
|
requireAuthMiddleware := middleware.RequireAuthMiddleware()
|
|
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("GET /archives/{archiveId}/files", archiveHandler.HandleGetArchiveFiles)
|
|
handler := globalAuthMiddleware(requireAuthMiddleware(mux))
|
|
|
|
// Test request
|
|
req := httptest.NewRequest(http.MethodGet, "/archives/"+archives[0].ID+"/files", nil)
|
|
req.Header.Set("Authorization", "Bearer "+token)
|
|
req.SetPathValue("archiveId", archives[0].ID)
|
|
w := httptest.NewRecorder()
|
|
|
|
handler.ServeHTTP(w, req)
|
|
|
|
// Assert response
|
|
resp := testutil.NewTestResponse(w)
|
|
resp.AssertStatus(t, http.StatusOK)
|
|
|
|
// Check response structure
|
|
var files []model.ArchiveFileResponse
|
|
err = json.Unmarshal(resp.GetBody(), &files)
|
|
require.NoError(t, err)
|
|
// Files may be empty if archive hasn't been processed yet
|
|
}
|