11import socket from 'src/main'
2- import { dft_response , TestConsole , enquiry_options , sleep } from './_shared'
2+ import { dft_response , TestConsole , enquiry_options , sleep , tick , prepare_ga , teardown_ga } from './_shared'
33
4- describe ( 'main.js' , done => {
4+ describe ( 'main.js' , ( ) => {
55 let server
66 before ( ( ) => {
77 server = sinon . fakeServer . create ( )
88 server . autoRespond = true
99 server . respondWith ( dft_response )
10+ prepare_ga ( )
11+ } )
12+ after ( ( ) => {
13+ server . restore ( )
14+ teardown_ga ( )
1015 } )
11- after ( ( ) => { server . restore ( ) } )
1216
1317 it ( 'should initialise with different element name' , done => {
1418 let outer = document . createElement ( 'div' )
@@ -78,6 +82,34 @@ describe('main.js', done => {
7882 vm . contractors = [ { } ]
7983 expect ( vm . config . url_root ) . to . equal ( '/context.html' )
8084 } )
85+
86+ it ( 'should do ga' , async ( ) => {
87+ // TODO currently window.ga gets contaminated by other tests if you use await sleep(50)
88+ const ga_data = prepare_ga ( )
89+ let el = document . createElement ( 'div' )
90+ el . setAttribute ( 'id' , 'socket' )
91+ document . body . appendChild ( el )
92+ const vm = socket ( 'public_key' , { url_root : '/' } )
93+ vm . enquiry_form_info = 'foobar' // prevent get_enquiry making a GET request
94+ vm . contractors . push ( { name : 'Fred Bloggs' , link : '123-fred-bloggs' , tag_line : 'hello' } )
95+ // ga already installed
96+ expect ( ga_data ) . to . deep . equal ( [
97+ 'create,-,auto,gridtcs' , 'gridtcs.set,dimension1,grid' , 'gridtcs.set,dimension2,hash' , 'gridtcs.send,pageview'
98+ ] )
99+ await tick ( )
100+
101+ expect ( vm . $el . querySelector ( 'a' ) . attributes [ 'href' ] . value ) . to . equal ( '#/123-fred-bloggs' )
102+
103+ vm . goto ( 'con-modal' , { link : '123-fred-bloggs' } )
104+ await tick ( )
105+ expect ( vm . $el . querySelector ( 'h2' ) . textContent ) . to . equal ( 'Fred Bloggs' )
106+
107+ expect ( ga_data ) . to . deep . equal ( [
108+ 'create,-,auto,gridtcs' , 'gridtcs.set,dimension1,grid' , 'gridtcs.set,dimension2,hash' , 'gridtcs.send,pageview' ,
109+ 'gridtcs.set,page,/123-fred-bloggs' , 'gridtcs.send,pageview' , 'set,page,/123-fred-bloggs' , 'send,pageview'
110+ ] )
111+ vm . $el . querySelector ( '.tcs-extra button' ) . click ( )
112+ } )
81113} )
82114
83115describe ( 'main.js' , ( ) => {
@@ -87,8 +119,12 @@ describe('main.js', () => {
87119 server . autoRespond = true
88120 server . respondWith ( '/public_key/contractors' , dft_response )
89121 server . respondWith ( '/public_key/enquiry' , dft_response ) // to prevent errors with get_enquiry
122+ prepare_ga ( )
123+ } )
124+ after ( ( ) => {
125+ server . restore ( )
126+ teardown_ga ( )
90127 } )
91- after ( ( ) => { server . restore ( ) } )
92128
93129 it ( 'should download contractors' , async ( ) => {
94130 let el = document . createElement ( 'div' )
@@ -110,8 +146,12 @@ describe('main.js', () => {
110146 server . autoRespond = true
111147 server . respondWith ( '/public_key/contractors' , [ 404 , { } , 'badness' ] )
112148 server . respondWith ( '/public_key/enquiry' , dft_response ) // to prevent errors with get_enquiry
149+ prepare_ga ( )
150+ } )
151+ after ( ( ) => {
152+ server . restore ( )
153+ teardown_ga ( )
113154 } )
114- after ( ( ) => { server . restore ( ) } )
115155
116156 it ( 'should show error with bad response' , async ( ) => {
117157 let el = document . createElement ( 'div' )
@@ -134,6 +174,9 @@ describe('main.js', () => {
134174} )
135175
136176describe ( 'main.js' , ( ) => {
177+ before ( ( ) => prepare_ga ( ) )
178+ after ( ( ) => teardown_ga ( ) )
179+
137180 it ( 'should show connection error' , async ( ) => {
138181 let el = document . createElement ( 'div' )
139182 el . setAttribute ( 'id' , 'socket' )
@@ -161,8 +204,12 @@ describe('main.js', () => {
161204 server . respondWith ( '/public-key/contractors' , dft_response )
162205 server . respondWith ( '/public-key/enquiry' , [ 200 , { 'Content-Type' : 'application/json' } , '{"response": "ok"}' ] )
163206 server . respondWith ( '/foobar' , [ 200 , { 'Content-Type' : 'application/json' } , '{"the": "response"}' ] )
207+ prepare_ga ( )
208+ } )
209+ after ( ( ) => {
210+ server . restore ( )
211+ teardown_ga ( )
164212 } )
165- after ( ( ) => { server . restore ( ) } )
166213
167214 it ( 'should get enquiry info' , async ( ) => {
168215 let el = document . createElement ( 'div' )
@@ -219,8 +266,12 @@ describe('main.js', () => {
219266 expect ( obj ) . to . deep . equal ( { first_field : 'foobar' , attributes : { foo : 'X' } } )
220267 xhr . respond ( 201 , { 'Content-Type' : 'application/json' } , '{"response": "ok"}' )
221268 } )
269+ prepare_ga ( )
270+ } )
271+ after ( ( ) => {
272+ server . restore ( )
273+ teardown_ga ( )
222274 } )
223- after ( ( ) => { server . restore ( ) } )
224275
225276 it ( 'should post enquiry data' , async ( ) => {
226277 let el = document . createElement ( 'div' )
0 commit comments