package boxstore import ( "os" "path/filepath" "testing" "time" "warpbox/lib/models" ) func TestCleanupExpiredBoxesDeletesOnlyExpiredManifestBoxes(t *testing.T) { root := filepath.Join(t.TempDir(), "uploads") previousRoot := UploadRoot() t.Cleanup(func() { SetUploadRoot(previousRoot) }) SetUploadRoot(root) expiredID := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" activeID := "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" legacyID := "cccccccccccccccccccccccccccccccc" if err := os.MkdirAll(BoxPath(expiredID), 0755); err != nil { t.Fatalf("mkdir expired: %v", err) } if err := os.MkdirAll(BoxPath(activeID), 0755); err != nil { t.Fatalf("mkdir active: %v", err) } if err := os.MkdirAll(BoxPath(legacyID), 0755); err != nil { t.Fatalf("mkdir legacy: %v", err) } if err := WriteManifest(expiredID, models.BoxManifest{CreatedAt: time.Now().UTC().Add(-2 * time.Hour), ExpiresAt: time.Now().UTC().Add(-time.Minute)}); err != nil { t.Fatalf("write expired manifest: %v", err) } if err := WriteManifest(activeID, models.BoxManifest{CreatedAt: time.Now().UTC(), ExpiresAt: time.Now().UTC().Add(time.Hour)}); err != nil { t.Fatalf("write active manifest: %v", err) } result, err := CleanupExpiredBoxes() if err != nil { t.Fatalf("cleanup failed: %v", err) } if result.Deleted != 1 { t.Fatalf("expected 1 deleted box, got %d", result.Deleted) } if len(result.DeletedIDs) != 1 || result.DeletedIDs[0] != expiredID { t.Fatalf("expected deleted id %s, got %#v", expiredID, result.DeletedIDs) } if _, err := os.Stat(BoxPath(expiredID)); !os.IsNotExist(err) { t.Fatalf("expected expired box dir removed, stat err=%v", err) } if _, err := os.Stat(BoxPath(activeID)); err != nil { t.Fatalf("expected active box to remain, stat err=%v", err) } if _, err := os.Stat(BoxPath(legacyID)); err != nil { t.Fatalf("expected legacy box to remain, stat err=%v", err) } }