@@ -6,7 +6,10 @@ import (
66 "time"
77
88 "github.com/golang/mock/gomock"
9+ "github.com/mattolenik/cloudflare-ddns-client/ddns"
910 "github.com/mattolenik/cloudflare-ddns-client/test"
11+ "github.com/stretchr/testify/assert"
12+ "github.com/stretchr/testify/require"
1013)
1114
1215func TestUpdate (t * testing.T ) {
@@ -33,10 +36,35 @@ func TestUpdate(t *testing.T) {
3336 assert .Equal (ip , actualIP )
3437}
3538
39+ type TestFlow struct {
40+ t * testing.T
41+ assert * assert.Assertions
42+ require * require.Assertions
43+ description string
44+ }
45+
46+ func It (t * testing.T , desc string ) * TestFlow {
47+ return & TestFlow {
48+ description : desc ,
49+ t : t ,
50+ assert : assert .New (t ),
51+ require : require .New (t ),
52+ }
53+ }
54+
55+ // TODO: Make generic so should funcs can take any function type? Make not dependent upon testify if possible
56+ type ShouldFunc func (t * testing.T , assert * assert.Assertions , require * require.Assertions )
57+
58+ func (f * TestFlow ) Should (msg string , fn ShouldFunc ) * TestFlow {
59+ f .t .Run (fmt .Sprintf ("It '%s' should '%s'" , f .description , msg ), func (t * testing.T ) { fn (f .t , f .assert , f .require ) })
60+ return f
61+ }
62+
3663func TestDaemon (t * testing.T ) {
37- assert , _ , ctrl , cleanup := test .NewTools (t )
38- defer cleanup ()
64+ daemon := It (t , "daemon" )
3965
66+ updatePeriod := 50 * time .Millisecond
67+ retryDelay := 50 * time .Millisecond
4068 domain := "abc.com"
4169 record := "xyz.abc.com"
4270 currentSuffix := 0
@@ -46,26 +74,33 @@ func TestDaemon(t *testing.T) {
4674 currentIP = fmt .Sprintf ("1.1.1.%d" , currentSuffix )
4775 return currentIP , nil
4876 }
49- getCurrentIP := func () interface {} { return currentIP }
77+ ctrl := gomock .NewController (t )
78+ defer ctrl .Finish ()
79+ ddnsProvider , ipProvider , configProvider := fixtures (ctrl )
80+ ddnsDaemon := ddns .NewDefaultDaemon (ddnsProvider , ipProvider , configProvider )
5081
51- ddnsProvider := NewMockDDNSProvider (ctrl )
52- ipProvider := NewMockIPProvider (ctrl )
53- configProvider := NewMockConfigProvider (ctrl )
54- ddnsDaemon := NewDefaultDaemon (ddnsProvider , ipProvider , configProvider )
55- updatePeriod := 50 * time .Millisecond
56- retryDelay := 50 * time .Millisecond
57- ddnsDaemon .Start (updatePeriod , retryDelay )
82+ daemon .Should ("run" , func (t * testing.T , assert * assert.Assertions , require * require.Assertions ) {
83+ getCurrentIP := func () interface {} { return currentIP }
5884
59- configProvider .EXPECT ().Get ().Return (domain , record , nil )
60- ipProvider .EXPECT ().Get ().DoAndReturn (ipGen )
61- //ddnsProvider.EXPECT().Update(gomock.Eq(domain), gomock.Eq(record), gomock.Eq(ip)).Return(nil).Times(1)
62- //ddnsProvider.EXPECT().Get(domain, record).Return(ip, nil).Times(1)
63- ddnsProvider .EXPECT ().
64- Update (
65- gomock .Eq (domain ),
66- gomock .Eq (record ),
67- FnMatch (gomock .Eq , getCurrentIP ),
68- ).AnyTimes ()
85+ ddnsDaemon .Start (updatePeriod , retryDelay )
86+
87+ configProvider .EXPECT ().Get ().Return (domain , record , nil )
88+ ipProvider .EXPECT ().Get ().DoAndReturn (ipGen )
89+ //ddnsProvider.EXPECT().Update(gomock.Eq(domain), gomock.Eq(record), gomock.Eq(ip)).Return(nil).Times(1)
90+ //ddnsProvider.EXPECT().Get(domain, record).Return(ip, nil).Times(1)
91+ ddnsProvider .EXPECT ().
92+ Update (
93+ gomock .Eq (domain ),
94+ gomock .Eq (record ),
95+ FnMatch (gomock .Eq , getCurrentIP ),
96+ ).AnyTimes ()
97+ })
98+ }
99+
100+ func fixtures (ctrl * gomock.Controller ) (ddnsProvider * MockDDNSProvider , ipProvider * MockIPProvider , configProvider * MockConfigProvider ) {
101+ return NewMockDDNSProvider (ctrl ),
102+ NewMockIPProvider (ctrl ),
103+ NewMockConfigProvider (ctrl )
69104}
70105
71106type funcMatcher struct {
0 commit comments