@@ -265,16 +265,109 @@ func TestCheck(t *testing.T) {
265265 assert .Error (t , err )
266266 assert .Contains (t , err .Error (), "failed to load base coverage breakdown" )
267267 })
268+ }
268269
269- t .Run ("valid profile - diff pass" , func (t * testing.T ) {
270- t .Parallel ()
271- // add test
272- })
270+ func TestCheckDiff (t * testing.T ) {
271+ t .Parallel ()
273272
274- t .Run ("valid profile - diff fail" , func (t * testing.T ) {
275- t .Parallel ()
276- // add test
277- })
273+ if testing .Short () {
274+ return
275+ }
276+
277+ brakedownFile := t .TempDir () + "/breakdown.testcoverage"
278+ brakedownCurrentFile := t .TempDir () + "/breakdown-current.testcoverage"
279+ brakedownFileEdited := "breakdown-edit.testcoverage"
280+
281+ // run check to generate brakedown file
282+ cfg := Config {
283+ Profile : profileOK ,
284+ BreakdownFileName : brakedownFile ,
285+ SourceDir : sourceDir ,
286+ }
287+ buf := & bytes.Buffer {}
288+ pass , err := Check (buf , cfg )
289+ assert .True (t , pass )
290+ assert .NoError (t , err )
291+
292+ // should pass since brakedown is the same
293+ cfg = Config {
294+ Profile : profileOK ,
295+ SourceDir : sourceDir ,
296+ Diff : Diff {
297+ BaseBreakdownFileName : brakedownFile ,
298+ Threshold : ptr (0.0 ),
299+ },
300+ }
301+ buf = & bytes.Buffer {}
302+ pass , err = Check (buf , cfg )
303+ assert .True (t , pass )
304+ assert .NoError (t , err )
305+ assertDiffNoChange (t , buf .String ())
306+ assertDiffPercentage (t , buf .String (), 0.0 )
307+ assertDiffThreshold (t , buf .String (), * cfg .Diff .Threshold , true )
308+
309+ // should pass since diff is negative
310+ cfg = Config {
311+ Profile : profileOK ,
312+ SourceDir : sourceDir ,
313+ Diff : Diff {
314+ BaseBreakdownFileName : brakedownFile ,
315+ Threshold : ptr (- 0.001 ),
316+ },
317+ }
318+ buf = & bytes.Buffer {}
319+ pass , err = Check (buf , cfg )
320+ assert .True (t , pass )
321+ assert .NoError (t , err )
322+ assertDiffNoChange (t , buf .String ())
323+ assertDiffPercentage (t , buf .String (), 0.0 )
324+ assertDiffThreshold (t , buf .String (), * cfg .Diff .Threshold , true )
325+
326+ // should NOT pass since brakedown is the same, and diff is positive
327+ cfg = Config {
328+ Profile : profileOK ,
329+ SourceDir : sourceDir ,
330+ Diff : Diff {
331+ BaseBreakdownFileName : brakedownFile ,
332+ Threshold : ptr (0.1 ),
333+ },
334+ }
335+ buf = & bytes.Buffer {}
336+ pass , err = Check (buf , cfg )
337+ assert .False (t , pass )
338+ assert .NoError (t , err )
339+ assertDiffNoChange (t , buf .String ())
340+ assertDiffPercentage (t , buf .String (), 0.0 )
341+ assertDiffThreshold (t , buf .String (), * cfg .Diff .Threshold , false )
342+
343+ // change brakedown file to have positive difference
344+ base := readStats (t , brakedownFile )
345+ base [0 ].Covered = 0
346+ base [1 ].Covered = 0
347+
348+ tmpFile , err := os .CreateTemp (t .TempDir (), brakedownFileEdited )
349+ assert .NoError (t , err )
350+ _ , err = tmpFile .Write (coverage .StatsSerialize (base ))
351+ assert .NoError (t , err )
352+
353+ // check should now pass since difference has increased
354+ cfg = Config {
355+ Profile : profileOK ,
356+ SourceDir : sourceDir ,
357+ BreakdownFileName : brakedownCurrentFile ,
358+ Diff : Diff {
359+ BaseBreakdownFileName : tmpFile .Name (),
360+ Threshold : ptr (1.0 ),
361+ },
362+ }
363+ buf = & bytes.Buffer {}
364+ pass , err = Check (buf , cfg )
365+ assert .True (t , pass )
366+ assert .NoError (t , err )
367+
368+ diff := TotalPercentageDiff (readStats (t , brakedownCurrentFile ), base )
369+ assertDiffPercentage (t , buf .String (), diff )
370+ assertDiffThreshold (t , buf .String (), * cfg .Diff .Threshold , true )
278371}
279372
280373//nolint:paralleltest // must not be parallel because it uses env
0 commit comments