@@ -160,6 +160,43 @@ func TestObjectRepo_CountOverviewAttention(t *testing.T) {
160160 }
161161}
162162
163+ func TestObjectRepo_AggregateByStateIncludesTotalSize (t * testing.T ) {
164+ db := testDB (t )
165+ repos := repository .NewRepositories (db )
166+ ctx := context .Background ()
167+ bucket := seedBucket (t , db , "state-aggregate-bucket" )
168+
169+ cached := newObjectVersion (bucket .ID , "cached.txt" , "01J00000000000000000000B01" , 10 )
170+ if _ , err := repos .Objects .CreateVersionAndSetCurrent (ctx , cached ); err != nil {
171+ t .Fatalf ("seed cached version: %v" , err )
172+ }
173+ failed := newObjectVersion (bucket .ID , "failed.txt" , "01J00000000000000000000B02" , 20 )
174+ if _ , err := repos .Objects .CreateVersionAndSetCurrent (ctx , failed ); err != nil {
175+ t .Fatalf ("seed failed version: %v" , err )
176+ }
177+ if err := repos .Objects .UpdateVersionStateToFailed (ctx , failed .VersionID , model .ObjectStateCached , "upload failed" ); err != nil {
178+ t .Fatalf ("mark failed version: %v" , err )
179+ }
180+ if _ , err := repos .Objects .CreateDeleteMarkerAndSetCurrent (ctx , bucket .ID , "deleted.txt" , "01J00000000000000000000B03" ); err != nil {
181+ t .Fatalf ("seed delete marker: %v" , err )
182+ }
183+
184+ rows , err := repos .Objects .AggregateByState (ctx )
185+ if err != nil {
186+ t .Fatalf ("AggregateByState: %v" , err )
187+ }
188+ byState := make (map [string ]repository.ObjectStateAggregate , len (rows ))
189+ for _ , row := range rows {
190+ byState [row .State ] = row
191+ }
192+ if got := byState [string (model .ObjectStateCached )]; got .Count != 1 || got .TotalSize != 10 {
193+ t .Fatalf ("cached aggregate = count:%d size:%d, want 1/10" , got .Count , got .TotalSize )
194+ }
195+ if got := byState [string (model .ObjectStateFailed )]; got .Count != 1 || got .TotalSize != 20 {
196+ t .Fatalf ("failed aggregate = count:%d size:%d, want 1/20" , got .Count , got .TotalSize )
197+ }
198+ }
199+
163200func TestObjectRepo_CreateVersionAndSetCurrent_ConcurrentFirstUpload (t * testing.T ) {
164201 sqldb , err := sql .Open ("sqlite" , "file:" + filepath .Join (t .TempDir (), "objects.db" )+ "?_pragma=journal_mode(WAL)&_pragma=busy_timeout(5000)&_pragma=foreign_keys(1)" )
165202 if err != nil {
0 commit comments