Skip to content

Commit 8c1154d

Browse files
committed
fix: make TestAutoPause compatible with Fyne v2.6
Ensure Fyne's event loop is initialized in TestAutoPause by using test.NewApp(). This allows UI-bound state changes to propagate correctly during tests, fixing failures after upgrading to Fyne v2.6.
1 parent 6064491 commit 8c1154d

File tree

1 file changed

+86
-61
lines changed

1 file changed

+86
-61
lines changed

test/punchclockcontroller_test.go

Lines changed: 86 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,78 +2,103 @@ package test
22

33
import (
44
"testing"
5+
"time"
6+
7+
"fyne.io/fyne/v2/test"
58

69
mocks "github.com/simmarn/punchclock/mocks/github.com/simmarn/punchclock/pkg"
710
punchclock "github.com/simmarn/punchclock/pkg"
11+
"github.com/stretchr/testify/assert"
812
"github.com/stretchr/testify/mock"
913
)
1014

11-
/*
12-
func TestAutoPause(t *testing.T) {
13-
assert := assert.New(t)
14-
15-
mockRs := MockRecordStorage(t)
16-
mockPrefs := mocks.NewPreferencesWrapper(t)
17-
mockPrefs.EXPECT().SetString(mock.Anything, mock.Anything)
18-
mockPrefs.EXPECT().SetBool(mock.Anything, mock.Anything)
19-
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(false).Once()
20-
controller := punchclock.NewPunchclockController(mockRs, mockPrefs, nil)
21-
mockPrefs.AssertCalled(t, "GetBool", punchclock.PREFAUTOPAUSEACTIVE)
22-
assert.Equal(punchclock.WORKING, GetStatus(controller))
23-
24-
start := time.Now().Format(punchclock.HHMMSS24h)
25-
end := time.Now().Add(time.Minute).Format(punchclock.HHMMSS24h)
26-
mockPrefs.EXPECT().GetString(punchclock.PREFAUTOPAUSESTART).Return(start)
27-
mockPrefs.EXPECT().GetString(punchclock.PREFAUTOPAUSEEND).Return(end)
28-
err := controller.SetAutoPauseInterval(start, end)
29-
mockPrefs.AssertCalled(t, "SetString", punchclock.PREFAUTOPAUSESTART, start)
30-
mockPrefs.AssertCalled(t, "SetString", punchclock.PREFAUTOPAUSEEND, end)
31-
mockPrefs.AssertNumberOfCalls(t, "SetString", 2)
32-
assert.Nil(err)
33-
assert.Equal(punchclock.WORKING, GetStatus(controller))
34-
35-
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(true).Once()
36-
err = controller.SetAutoPause(true)
37-
assert.Nil(err)
38-
assert.Equal(punchclock.PAUSED, GetStatus(controller))
39-
40-
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(false).Once()
41-
controller.SetAutoPause(false)
42-
assert.Equal(punchclock.WORKING, GetStatus(controller))
43-
44-
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(true).Once()
45-
controller.SetAutoPause(true)
46-
assert.Equal(punchclock.PAUSED, GetStatus(controller))
47-
48-
err = controller.SetAutoPauseInterval("11:00", "11:00")
49-
assert.NotNil(err)
50-
mockPrefs.AssertNumberOfCalls(t, "SetString", 2)
51-
52-
err = controller.SetAutoPauseInterval("11:00", "12,00")
53-
assert.NotNil(err)
54-
mockPrefs.AssertNumberOfCalls(t, "SetString", 2)
55-
56-
err = controller.SetAutoPauseInterval("eleven", "12:00")
57-
assert.NotNil(err)
58-
mockPrefs.AssertNumberOfCalls(t, "SetString", 2)
15+
func waitForStatus(c *punchclock.PunchclockController, expected string, t *testing.T) {
16+
deadline := time.Now().Add(500 * time.Millisecond)
17+
for time.Now().Before(deadline) {
18+
status, _ := c.Status.Get()
19+
if status == expected {
20+
return
21+
}
22+
time.Sleep(10 * time.Millisecond)
23+
}
24+
status, _ := c.Status.Get()
25+
if status != expected {
26+
t.Fatalf("expected status %s, got %s", expected, status)
5927
}
28+
}
6029

61-
func TestAutoPauseNotSet(t *testing.T) {
62-
assert := assert.New(t)
30+
func TestAutoPause(t *testing.T) {
31+
app := test.NewApp()
32+
defer app.Quit()
33+
assert := assert.New(t)
34+
35+
mockRs := MockRecordStorage(t)
36+
mockPrefs := mocks.NewPreferencesWrapper(t)
37+
mockPrefs.EXPECT().SetString(mock.Anything, mock.Anything)
38+
mockPrefs.EXPECT().SetBool(mock.Anything, mock.Anything)
39+
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(false).Once()
40+
controller := punchclock.NewPunchclockController(mockRs, mockPrefs, nil)
41+
mockPrefs.AssertCalled(t, "GetBool", punchclock.PREFAUTOPAUSEACTIVE)
42+
waitForStatus(controller, punchclock.WORKING, t)
43+
assert.Equal(punchclock.WORKING, GetStatus(controller))
44+
45+
start := time.Now().Format(punchclock.HHMMSS24h)
46+
end := time.Now().Add(time.Minute).Format(punchclock.HHMMSS24h)
47+
mockPrefs.EXPECT().GetString(punchclock.PREFAUTOPAUSESTART).Return(start)
48+
mockPrefs.EXPECT().GetString(punchclock.PREFAUTOPAUSEEND).Return(end)
49+
err := controller.SetAutoPauseInterval(start, end)
50+
mockPrefs.AssertCalled(t, "SetString", punchclock.PREFAUTOPAUSESTART, start)
51+
mockPrefs.AssertCalled(t, "SetString", punchclock.PREFAUTOPAUSEEND, end)
52+
mockPrefs.AssertNumberOfCalls(t, "SetString", 2)
53+
assert.Nil(err)
54+
waitForStatus(controller, punchclock.WORKING, t)
55+
assert.Equal(punchclock.WORKING, GetStatus(controller))
56+
57+
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(true).Once()
58+
err = controller.SetAutoPause(true)
59+
assert.Nil(err)
60+
waitForStatus(controller, punchclock.PAUSED, t)
61+
assert.Equal(punchclock.PAUSED, GetStatus(controller))
62+
63+
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(false).Once()
64+
controller.SetAutoPause(false)
65+
waitForStatus(controller, punchclock.WORKING, t)
66+
assert.Equal(punchclock.WORKING, GetStatus(controller))
67+
68+
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(true).Once()
69+
controller.SetAutoPause(true)
70+
waitForStatus(controller, punchclock.PAUSED, t)
71+
assert.Equal(punchclock.PAUSED, GetStatus(controller))
72+
73+
err = controller.SetAutoPauseInterval("11:00", "11:00")
74+
assert.NotNil(err)
75+
mockPrefs.AssertNumberOfCalls(t, "SetString", 2)
76+
77+
err = controller.SetAutoPauseInterval("11:00", "12,00")
78+
assert.NotNil(err)
79+
mockPrefs.AssertNumberOfCalls(t, "SetString", 2)
80+
81+
err = controller.SetAutoPauseInterval("eleven", "12:00")
82+
assert.NotNil(err)
83+
mockPrefs.AssertNumberOfCalls(t, "SetString", 2)
84+
}
6385

64-
mockPrefs := mocks.NewPreferencesWrapper(t)
65-
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(false)
66-
mockPrefs.EXPECT().GetString(punchclock.PREFAUTOPAUSESTART).Return("")
67-
mockPrefs.EXPECT().GetString(punchclock.PREFAUTOPAUSEEND).Return("")
86+
func TestAutoPauseNotSet(t *testing.T) {
87+
assert := assert.New(t)
6888

69-
mockRs := MockRecordStorage(t)
70-
controller := punchclock.NewPunchclockController(mockRs, mockPrefs, nil)
71-
assert.Equal(punchclock.WORKING, GetStatus(controller))
89+
mockPrefs := mocks.NewPreferencesWrapper(t)
90+
mockPrefs.EXPECT().GetBool(punchclock.PREFAUTOPAUSEACTIVE).Return(false)
91+
mockPrefs.EXPECT().GetString(punchclock.PREFAUTOPAUSESTART).Return("")
92+
mockPrefs.EXPECT().GetString(punchclock.PREFAUTOPAUSEEND).Return("")
93+
94+
mockRs := MockRecordStorage(t)
95+
controller := punchclock.NewPunchclockController(mockRs, mockPrefs, nil)
96+
assert.Equal(punchclock.WORKING, GetStatus(controller))
97+
98+
err := controller.SetAutoPause(true)
99+
assert.NotNil(err)
100+
}
72101

73-
err := controller.SetAutoPause(true)
74-
assert.NotNil(err)
75-
}
76-
*/
77102
func MockRecordStorage(t *testing.T) punchclock.RecordStorage {
78103
mockRs := mocks.NewRecordStorage(t)
79104
mockRs.EXPECT().Load().Return(CreateRecordsForTest(), nil)

0 commit comments

Comments
 (0)