@@ -14,119 +14,93 @@ import (
1414 analytics "gopkg.in/segmentio/analytics-go.v3"
1515)
1616
17- type MockUI struct {
18- WasCalled bool
19- Return string
20- }
21-
22- func (m * MockUI ) Ask (prompt string ) string {
23- if prompt == `
24- CF Dev collects anonymous usage data to help us improve your user experience. We intend to share these anonymous usage analytics with user community by publishing quarterly reports at :
25-
26- https://github.com/pivotal-cf/cfdev/wiki/Telemetry
27-
28- Are you ok with CF Dev periodically capturing anonymized telemetry [y/N]?` {
29- m .WasCalled = true
30- }
31-
32- return m .Return
33- }
34-
35- type MockToggle struct {
36- defined bool
37- val bool
38- props map [string ]interface {}
39- SetCalled bool
40- }
41-
42- func (t * MockToggle ) Defined () bool { return t .defined }
43- func (t * MockToggle ) Get () bool { return t .val }
44- func (t * MockToggle ) Set (v bool ) error { t .val = v ; t .SetCalled = true ; return nil }
45- func (t * MockToggle ) GetProps () map [string ]interface {} { return t .props }
46-
4717var _ = Describe ("Analytics" , func () {
4818 var (
4919 mockController * gomock.Controller
5020 mockClient * mocks.MockClient
51-
52- mockToggle * MockToggle
53- exitChan chan struct {}
54- mockUI MockUI
55- subject * cfanalytics.Analytics
21+ mockToggle * mocks.MockToggle
22+ mockUI * mocks.MockUI
23+ exitChan chan struct {}
24+ subject * cfanalytics.Analytics
5625 )
5726 BeforeEach (func () {
5827 mockController = gomock .NewController (GinkgoT ())
5928 mockClient = mocks .NewMockClient (mockController )
60-
61- mockToggle = & MockToggle {}
29+ mockToggle = mocks . NewMockToggle ( mockController )
30+ mockUI = mocks . NewMockUI ( mockController )
6231 exitChan = make (chan struct {}, 1 )
63- mockUI = MockUI {WasCalled : false }
64- subject = cfanalytics .New (mockToggle , mockClient , "4.5.6-unit-test" , exitChan , & mockUI )
32+ subject = cfanalytics .New (mockToggle , mockClient , "4.5.6-unit-test" , exitChan , mockUI )
6533 })
6634 AfterEach (func () {
6735 mockController .Finish ()
6836 })
6937
7038 Describe ("PromptOptIn" , func () {
7139 Context ("When user has NOT yet answered optin prompt" , func () {
72- BeforeEach (func () { mockToggle .defined = false })
40+ BeforeEach (func () {
41+ mockToggle .EXPECT ().Defined ().Return (false ).AnyTimes ()
42+ })
7343 It ("prompts user" , func () {
44+ mockToggle .EXPECT ().Set (gomock .Any ()).AnyTimes ()
45+ mockUI .EXPECT ().Ask (gomock .Any ()).Do (func (prompt string ) {
46+ Expect (prompt ).To (ContainSubstring ("Are you ok with CF Dev periodically capturing anonymized telemetry [y/N]?" ))
47+ })
7448 Expect (subject .PromptOptIn ()).To (Succeed ())
75- Expect (mockUI .WasCalled ).To (Equal (true ))
7649 })
7750 for _ , answer := range []string {"yes" , "y" , "yEs" } {
7851 Context ("user answers " + answer , func () {
79- BeforeEach (func () { mockUI .Return = answer })
52+ BeforeEach (func () { mockUI .EXPECT (). Ask ( gomock . Any ()). Return ( answer ) })
8053 It ("saves optin" , func () {
54+ mockToggle .EXPECT ().Set (true )
55+
8156 Expect (subject .PromptOptIn ()).To (Succeed ())
82- Expect (mockToggle .SetCalled ).To (Equal (true ))
83- Expect (mockToggle .val ).To (Equal (true ))
8457 })
8558 })
8659 }
8760 for _ , answer := range []string {"no" , "N" , "anything" , "" } {
8861 Context ("user answers " + answer , func () {
89- BeforeEach (func () { mockUI .Return = answer })
62+ BeforeEach (func () { mockUI .EXPECT (). Ask ( gomock . Any ()). Return ( answer ) })
9063 It ("saves optout" , func () {
64+ mockToggle .EXPECT ().Set (false )
65+
9166 Expect (subject .PromptOptIn ()).To (Succeed ())
92- Expect (mockToggle .SetCalled ).To (Equal (true ))
93- Expect (mockToggle .val ).To (Equal (false ))
9467 })
9568 })
9669 }
9770 Context ("user hits ctrl-c" , func () {
9871 BeforeEach (func () {
99- mockUI .Return = ""
72+ mockUI .EXPECT (). Ask ( gomock . Any ()). Return ( "" )
10073 exitChan <- struct {}{}
10174 })
10275 It ("does not write set a value on toggle" , func () {
10376 Expect (subject .PromptOptIn ()).To (MatchError ("Exit while waiting for telemetry prompt" ))
104- Expect (mockToggle .SetCalled ).To (Equal (false ))
10577 })
10678 })
10779 })
10880 Context ("When user has answered optin prompt" , func () {
109- BeforeEach (func () { mockToggle .defined = true })
81+ BeforeEach (func () {
82+ mockToggle .EXPECT ().Defined ().AnyTimes ().Return (true )
83+ })
11084 It ("does not ask again" , func () {
11185 Expect (subject .PromptOptIn ()).To (Succeed ())
112- Expect (mockUI .WasCalled ).To (Equal (false ))
113- Expect (mockToggle .SetCalled ).To (Equal (false ))
11486 })
11587 })
11688 })
11789 Describe ("Event" , func () {
11890 Context ("opt out" , func () {
119- BeforeEach (func () { mockToggle .val = false })
91+ BeforeEach (func () {
92+ mockToggle .EXPECT ().Get ().AnyTimes ().Return (false )
93+ })
12094 It ("does nothing and succeeds" , func () {
12195 Expect (subject .Event ("anevent" , map [string ]interface {}{"mykey" : "myval" })).To (Succeed ())
12296 })
12397 })
12498 Context ("opt in" , func () {
12599 BeforeEach (func () {
126- mockToggle .val = true
127- mockToggle .props = map [string ]interface {}{
100+ mockToggle .EXPECT (). Get (). AnyTimes (). Return ( true )
101+ mockToggle .EXPECT (). GetProps (). AnyTimes (). Return ( map [string ]interface {}{
128102 "type" : "cf.1.2.3.iso" ,
129- }
103+ })
130104 })
131105 It ("sends identity and event to segmentio" , func () {
132106 uuid , _ := machineid .ProtectedID ("cfdev" )
0 commit comments