Merged in feature/track-filesize (pull request #200)
track file sizes for all documents in system * feature complete needs dev testing
This commit is contained in:
@@ -353,6 +353,121 @@ func TestGetFolderDocuments_EmptyFolder(t *testing.T) {
|
||||
assert.Len(t, resp.Documents, 0)
|
||||
}
|
||||
|
||||
// TestGetFolderDocuments_IncludesFileSize verifies that file sizes are returned
|
||||
// in the folder documents response when documents have file_size_bytes set.
|
||||
func TestGetFolderDocuments_IncludesFileSize(t *testing.T) {
|
||||
ctrl, cfg, clientID := setupFoldersTestController(t)
|
||||
ctx := t.Context()
|
||||
|
||||
// Create folder
|
||||
folderRec, err := cfg.GetDBQueries().CreateFolder(ctx, &repository.CreateFolderParams{
|
||||
Path: "/documents-with-sizes",
|
||||
Clientid: clientID,
|
||||
Createdby: "admin@example.com",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Create documents with file sizes
|
||||
filename1 := "small-doc.pdf"
|
||||
fileSize1 := int64(1024) // 1KB
|
||||
docID1, err := cfg.GetDBQueries().CreateDocument(ctx, &repository.CreateDocumentParams{
|
||||
Clientid: clientID,
|
||||
Hash: fmt.Sprintf("sizehash1-%s", uuid.New().String()[:8]),
|
||||
Filename: &filename1,
|
||||
Folderid: &folderRec.ID,
|
||||
FileSizeBytes: &fileSize1,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
filename2 := "large-doc.pdf"
|
||||
fileSize2 := int64(5242880) // 5MB
|
||||
docID2, err := cfg.GetDBQueries().CreateDocument(ctx, &repository.CreateDocumentParams{
|
||||
Clientid: clientID,
|
||||
Hash: fmt.Sprintf("sizehash2-%s", uuid.New().String()[:8]),
|
||||
Filename: &filename2,
|
||||
Folderid: &folderRec.ID,
|
||||
FileSizeBytes: &fileSize2,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
e := echo.New()
|
||||
req := httptest.NewRequest(http.MethodGet, fmt.Sprintf("/folders/%s/documents", folderRec.ID), nil)
|
||||
rec := httptest.NewRecorder()
|
||||
c := e.NewContext(req, rec)
|
||||
|
||||
err = ctrl.GetFolderDocuments(c, openapi_types.UUID(folderRec.ID), queryapi.GetFolderDocumentsParams{})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, http.StatusOK, rec.Code)
|
||||
|
||||
var resp struct {
|
||||
Documents []queryapi.DocumentInFolder `json:"documents"`
|
||||
}
|
||||
err = json.Unmarshal(rec.Body.Bytes(), &resp)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Len(t, resp.Documents, 2)
|
||||
|
||||
// Build a map of document ID to file size for verification
|
||||
docSizes := make(map[uuid.UUID]*int64)
|
||||
for _, doc := range resp.Documents {
|
||||
docSizes[uuid.UUID(doc.Id)] = doc.FileSizeBytes
|
||||
}
|
||||
|
||||
// Verify file sizes are present and correct
|
||||
require.NotNil(t, docSizes[docID1], "document 1 should have file size")
|
||||
assert.Equal(t, fileSize1, *docSizes[docID1], "document 1 file size should be 1024")
|
||||
|
||||
require.NotNil(t, docSizes[docID2], "document 2 should have file size")
|
||||
assert.Equal(t, fileSize2, *docSizes[docID2], "document 2 file size should be 5242880")
|
||||
}
|
||||
|
||||
// TestGetFolderDocuments_NilFileSize verifies that documents without file sizes
|
||||
// (legacy documents) return nil for fileSizeBytes.
|
||||
func TestGetFolderDocuments_NilFileSize(t *testing.T) {
|
||||
ctrl, cfg, clientID := setupFoldersTestController(t)
|
||||
ctx := t.Context()
|
||||
|
||||
// Create folder
|
||||
folderRec, err := cfg.GetDBQueries().CreateFolder(ctx, &repository.CreateFolderParams{
|
||||
Path: "/documents-no-sizes",
|
||||
Clientid: clientID,
|
||||
Createdby: "admin@example.com",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Create document WITHOUT file size (simulating legacy document)
|
||||
filename := "legacy-doc.pdf"
|
||||
docID, err := cfg.GetDBQueries().CreateDocument(ctx, &repository.CreateDocumentParams{
|
||||
Clientid: clientID,
|
||||
Hash: fmt.Sprintf("legacyhash-%s", uuid.New().String()[:8]),
|
||||
Filename: &filename,
|
||||
Folderid: &folderRec.ID,
|
||||
FileSizeBytes: nil, // No file size
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
e := echo.New()
|
||||
req := httptest.NewRequest(http.MethodGet, fmt.Sprintf("/folders/%s/documents", folderRec.ID), nil)
|
||||
rec := httptest.NewRecorder()
|
||||
c := e.NewContext(req, rec)
|
||||
|
||||
err = ctrl.GetFolderDocuments(c, openapi_types.UUID(folderRec.ID), queryapi.GetFolderDocumentsParams{})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, http.StatusOK, rec.Code)
|
||||
|
||||
var resp struct {
|
||||
Documents []queryapi.DocumentInFolder `json:"documents"`
|
||||
}
|
||||
err = json.Unmarshal(rec.Body.Bytes(), &resp)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Len(t, resp.Documents, 1)
|
||||
|
||||
// Verify file size is nil for the legacy document
|
||||
assert.Equal(t, docID, uuid.UUID(resp.Documents[0].Id))
|
||||
assert.Nil(t, resp.Documents[0].FileSizeBytes, "legacy document should have nil file size")
|
||||
}
|
||||
|
||||
func TestGetFolderMetrics_Success(t *testing.T) {
|
||||
ctrl, cfg, clientID := setupFoldersTestController(t)
|
||||
ctx := t.Context()
|
||||
|
||||
Reference in New Issue
Block a user