55 "time"
66
77 "code.cloudfoundry.org/cfdev/cfanalytics"
8+ "code.cloudfoundry.org/cfdev/cfanalytics/mocks"
89 "github.com/denisbrodbeck/machineid"
10+ "github.com/golang/mock/gomock"
911 . "github.com/onsi/ginkgo"
1012 . "github.com/onsi/gomega"
1113 "github.com/onsi/gomega/gstruct"
@@ -42,29 +44,28 @@ func (t *MockToggle) Get() bool { return t.val }
4244func (t * MockToggle ) Set (v bool ) error { t .val = v ; t .SetCalled = true ; return nil }
4345func (t * MockToggle ) GetProps () map [string ]interface {} { return t .props }
4446
45- type MockClient struct {
46- CloseWasCalled bool
47- EnqueueCalledWith analytics.Message
48- }
49-
50- func (c * MockClient ) Close () error { c .CloseWasCalled = true ; return nil }
51- func (c * MockClient ) Enqueue (msg analytics.Message ) error { c .EnqueueCalledWith = msg ; return nil }
52-
5347var _ = Describe ("Analytics" , func () {
5448 var (
49+ mockController * gomock.Controller
50+ mockClient * mocks.MockClient
51+
5552 mockToggle * MockToggle
56- mockClient * MockClient
5753 exitChan chan struct {}
5854 mockUI MockUI
5955 subject * cfanalytics.Analytics
6056 )
6157 BeforeEach (func () {
58+ mockController = gomock .NewController (GinkgoT ())
59+ mockClient = mocks .NewMockClient (mockController )
60+
6261 mockToggle = & MockToggle {}
63- mockClient = & MockClient {}
6462 exitChan = make (chan struct {}, 1 )
6563 mockUI = MockUI {WasCalled : false }
6664 subject = cfanalytics .New (mockToggle , mockClient , "4.5.6-unit-test" , exitChan , & mockUI )
6765 })
66+ AfterEach (func () {
67+ mockController .Finish ()
68+ })
6869
6970 Describe ("PromptOptIn" , func () {
7071 Context ("When user has NOT yet answered optin prompt" , func () {
@@ -118,7 +119,6 @@ var _ = Describe("Analytics", func() {
118119 BeforeEach (func () { mockToggle .val = false })
119120 It ("does nothing and succeeds" , func () {
120121 Expect (subject .Event ("anevent" , map [string ]interface {}{"mykey" : "myval" })).To (Succeed ())
121- Expect (mockClient .EnqueueCalledWith ).To (BeNil ())
122122 })
123123 })
124124 Context ("opt in" , func () {
@@ -128,21 +128,29 @@ var _ = Describe("Analytics", func() {
128128 "type" : "cf.1.2.3.iso" ,
129129 }
130130 })
131- It ("sends event to segmentio" , func () {
132- Expect (subject .Event ("anevent" , map [string ]interface {}{"mykey" : "myval" })).To (Succeed ())
133-
131+ It ("sends identity and event to segmentio" , func () {
134132 uuid , _ := machineid .ProtectedID ("cfdev" )
135- Expect (mockClient .EnqueueCalledWith ).To (gstruct .MatchFields (gstruct .IgnoreExtras , gstruct.Fields {
136- "UserId" : Equal (uuid ),
137- "Event" : Equal ("anevent" ),
138- "Timestamp" : BeTemporally (">=" , time .Now ().Add (- 1 * time .Minute )),
139- "Properties" : BeEquivalentTo (map [string ]interface {}{
140- "os" : runtime .GOOS ,
141- "version" : "4.5.6-unit-test" ,
142- "type" : "cf.1.2.3.iso" ,
143- "mykey" : "myval" ,
144- }),
145- }))
133+
134+ mockClient .EXPECT ().Enqueue (gomock .Any ()).Do (func (msg analytics.Message ) {
135+ Expect (msg ).To (Equal (analytics.Identify {
136+ UserId : uuid ,
137+ }))
138+ })
139+ mockClient .EXPECT ().Enqueue (gomock .Any ()).Do (func (msg analytics.Message ) {
140+ Expect (msg ).To (gstruct .MatchFields (gstruct .IgnoreExtras , gstruct.Fields {
141+ "UserId" : Equal (uuid ),
142+ "Event" : Equal ("anevent" ),
143+ "Timestamp" : BeTemporally (">=" , time .Now ().Add (- 1 * time .Minute )),
144+ "Properties" : BeEquivalentTo (map [string ]interface {}{
145+ "os" : runtime .GOOS ,
146+ "version" : "4.5.6-unit-test" ,
147+ "type" : "cf.1.2.3.iso" ,
148+ "mykey" : "myval" ,
149+ }),
150+ }))
151+ })
152+
153+ Expect (subject .Event ("anevent" , map [string ]interface {}{"mykey" : "myval" })).To (Succeed ())
146154 })
147155 })
148156 })
0 commit comments