@@ -273,7 +273,7 @@ func TestIsSubmitted(t *testing.T) {
273273 })
274274}
275275
276- func execReportWithOutput (t * testing.T , homeDir , repoDir , monthFlag , yearFlag , outputFlag string ) (string , error ) {
276+ func execReportWithExport (t * testing.T , homeDir , repoDir , monthFlag , weekFlag , yearFlag , exportFlag string ) (string , error ) {
277277 t .Helper ()
278278 stdout := new (bytes.Buffer )
279279
@@ -285,15 +285,17 @@ func execReportWithOutput(t *testing.T, homeDir, repoDir, monthFlag, yearFlag, o
285285 {Name : "week" , Usage : "ISO week number" },
286286 {Name : "year" , Usage : "year" },
287287 {Name : "project" , Usage : "project name or ID" },
288- {Name : "output " , Usage : "export report as PDF " },
288+ {Name : "export " , Usage : "export format (pdf) " },
289289 },
290290 RunE : func (c * cobra.Command , args []string ) error {
291- of , _ := c .Flags ().GetString ("output " )
291+ ef , _ := c .Flags ().GetString ("export " )
292292 mf , _ := c .Flags ().GetString ("month" )
293+ wf , _ := c .Flags ().GetString ("week" )
293294 yf , _ := c .Flags ().GetString ("year" )
294295 mc := c .Flags ().Changed ("month" )
296+ wc := c .Flags ().Changed ("week" )
295297 yc := c .Flags ().Changed ("year" )
296- return runReport (c , homeDir , repoDir , "" , mf , "" , yf , of , mc , false , yc , fixedNow )
298+ return runReport (c , homeDir , repoDir , "" , mf , wf , yf , ef , mc , wc , yc , fixedNow )
297299 },
298300 }.Build ()
299301
@@ -303,21 +305,20 @@ func execReportWithOutput(t *testing.T, homeDir, repoDir, monthFlag, yearFlag, o
303305 if monthFlag != "" {
304306 cmdArgs = append (cmdArgs , "--month" , monthFlag )
305307 }
308+ if weekFlag != "" {
309+ cmdArgs = append (cmdArgs , "--week" , weekFlag )
310+ }
306311 if yearFlag != "" {
307312 cmdArgs = append (cmdArgs , "--year" , yearFlag )
308313 }
309- if outputFlag != "" {
310- cmdArgs = append (cmdArgs , "--output" , outputFlag )
311- } else {
312- cmdArgs = append (cmdArgs , "--output=" )
313- }
314+ cmdArgs = append (cmdArgs , "--export" , exportFlag )
314315 cmd .SetArgs (cmdArgs )
315316
316317 err := cmd .Execute ()
317318 return stdout .String (), err
318319}
319320
320- func TestReportOutputFlag_GeneratesPDF (t * testing.T ) {
321+ func TestReportExportFlag_GeneratesPDF (t * testing.T ) {
321322 homeDir , repoDir , proj := setupReportTest (t )
322323
323324 e := entry.Entry {
@@ -330,35 +331,39 @@ func TestReportOutputFlag_GeneratesPDF(t *testing.T) {
330331 }
331332 require .NoError (t , entry .WriteEntry (homeDir , proj .Slug , e ))
332333
333- outDir := t .TempDir ()
334- outPath := filepath .Join (outDir , "test-output.pdf" )
334+ origDir , _ := os .Getwd ()
335+ tmpDir := t .TempDir ()
336+ require .NoError (t , os .Chdir (tmpDir ))
337+ t .Cleanup (func () { _ = os .Chdir (origDir ) })
335338
336- stdout , err := execReportWithOutput (t , homeDir , repoDir , "6" , "2025" , outPath )
339+ stdout , err := execReportWithExport (t , homeDir , repoDir , "6" , "" , " 2025" , "pdf" )
337340 require .NoError (t , err )
338- assert .Contains (t , stdout , "Exported report to" )
339341
340- info , sErr := os .Stat (outPath )
342+ expectedName := fmt .Sprintf ("%s-2025-month-06.pdf" , proj .Slug )
343+ assert .Contains (t , stdout , "Exported report to " + expectedName )
344+
345+ info , sErr := os .Stat (filepath .Join (tmpDir , expectedName ))
341346 require .NoError (t , sErr )
342347 assert .True (t , info .Size () > 0 )
343348}
344349
345- func TestReportOutputFlag_EmptyMonth (t * testing.T ) {
350+ func TestReportExportFlag_EmptyMonth (t * testing.T ) {
346351 homeDir , repoDir , _ := setupReportTest (t )
347352
348- outDir := t .TempDir ()
349- outPath := filepath .Join (outDir , "empty.pdf" )
353+ origDir , _ := os .Getwd ()
354+ tmpDir := t .TempDir ()
355+ require .NoError (t , os .Chdir (tmpDir ))
356+ t .Cleanup (func () { _ = os .Chdir (origDir ) })
350357
351- stdout , err := execReportWithOutput (t , homeDir , repoDir , "1" , "2025" , outPath )
358+ stdout , err := execReportWithExport (t , homeDir , repoDir , "1" , "" , " 2025" , "pdf" )
352359 require .NoError (t , err )
353360 assert .Contains (t , stdout , "No time entries" )
354-
355- _ , sErr := os .Stat (outPath )
356- assert .True (t , os .IsNotExist (sErr ))
357361}
358362
359- func TestReportOutputFlag_AutoName (t * testing.T ) {
363+ func TestReportExportFlag_WeekAutoName (t * testing.T ) {
360364 homeDir , repoDir , proj := setupReportTest (t )
361365
366+ // Week 23 of 2025 starts Mon Jun 2
362367 e := entry.Entry {
363368 ID : "a010010" ,
364369 Start : time .Date (2025 , 6 , 2 , 10 , 0 , 0 , 0 , time .UTC ),
@@ -374,17 +379,25 @@ func TestReportOutputFlag_AutoName(t *testing.T) {
374379 require .NoError (t , os .Chdir (tmpDir ))
375380 t .Cleanup (func () { _ = os .Chdir (origDir ) })
376381
377- stdout , err := execReportWithOutput (t , homeDir , repoDir , "6 " , "2025" , "" )
382+ stdout , err := execReportWithExport (t , homeDir , repoDir , "" , "23" , " 2025" , "pdf " )
378383 require .NoError (t , err )
379384
380- expectedName := fmt .Sprintf ("%s-2025-06 .pdf" , proj .Slug )
385+ expectedName := fmt .Sprintf ("%s-2025-week-23 .pdf" , proj .Slug )
381386 assert .Contains (t , stdout , expectedName )
382387
383388 info , sErr := os .Stat (filepath .Join (tmpDir , expectedName ))
384389 require .NoError (t , sErr )
385390 assert .True (t , info .Size () > 0 )
386391}
387392
393+ func TestReportExportFlag_UnsupportedFormat (t * testing.T ) {
394+ homeDir , repoDir , _ := setupReportTest (t )
395+
396+ _ , err := execReportWithExport (t , homeDir , repoDir , "6" , "" , "2025" , "csv" )
397+ assert .Error (t , err )
398+ assert .Contains (t , err .Error (), "unsupported export format" )
399+ }
400+
388401func TestReportRegisteredAsSubcommand (t * testing.T ) {
389402 root := newRootCmd ()
390403 names := make ([]string , len (root .Commands ()))
0 commit comments