|
| 1 | +import { |
| 2 | + STATUS_202, |
| 3 | + DISPATCH_COMMAND, |
| 4 | + COMMAND, |
| 5 | + PAYLOAD, |
| 6 | + SUBMIT, |
| 7 | + REQUEST_BODY, |
| 8 | + RESPONSE_STATUS, |
| 9 | + ID, |
| 10 | + TIMESTAMP |
| 11 | +} from '../../../test-utils/integ-test-utils'; |
| 12 | +import { PERFORMANCE_NAVIGATION_EVENT_TYPE } from '../../utils/constant'; |
| 13 | + |
| 14 | +const INITIATOR_TYPE = 'initiatorType'; |
| 15 | +const NAVIGATION_TYPE = 'navigationType'; |
| 16 | +const START_TIME = 'startTime'; |
| 17 | +const UNLOAD_EVENT_START = 'unloadEventStart'; |
| 18 | +const PROMPT_FOR_UNLOAD = 'promptForUnload'; |
| 19 | +const REDIRECT_COUNT = 'redirectCount'; |
| 20 | +const REDIRECT_START = 'redirectStart'; |
| 21 | +const REDIRECT_TIME = 'redirectTime'; |
| 22 | +const WORKER_START = 'workerStart'; |
| 23 | +const WORKER_TIME = 'workerTime'; |
| 24 | +const FETCH_START = 'fetchStart'; |
| 25 | +const DOMAIN_LOOKUP_START = 'domainLookupStart'; |
| 26 | +const DNS = 'dns'; |
| 27 | +const NEXT_HOP_PROTOCOL = 'nextHopProtocol'; |
| 28 | +const CONNECT_START = 'connectStart'; |
| 29 | +const CONNECT = 'connect'; |
| 30 | +const SECURE_CONNECTION_START = 'secureConnectionStart'; |
| 31 | +const TLS_TIME = 'tlsTime'; |
| 32 | +const REQUEST_START = 'requestStart'; |
| 33 | +const TIME_TO_FIRST_BYTE = 'timeToFirstByte'; |
| 34 | +const RESPONSE_START = 'responseStart'; |
| 35 | +const RESPONSE_TIME = 'responseTime'; |
| 36 | +const DOM_INTERACTIVE = 'domInteractive'; |
| 37 | +const DOM_CONTENT_LOADED_EVENT_START = 'domContentLoadedEventStart'; |
| 38 | +const DOM_CONTENT_LOADED = 'domContentLoaded'; |
| 39 | +const DOM_COMPLETE = 'domComplete'; |
| 40 | +const DOM_PROCESSING_TIME = 'domProcessingTime'; |
| 41 | +const LOAD_EVENT_START = 'loadEventStart'; |
| 42 | +const LOAD_EVENT_TIME = 'loadEventTime'; |
| 43 | +const DURATION = 'duration'; |
| 44 | +const HEADER_SIZE = 'headerSize'; |
| 45 | +const TRANSFER_SIZE = 'transferSize'; |
| 46 | +const COMPRESSION_RATIO = 'compressionRatio'; |
| 47 | +const SAFARI = 'Safari'; |
| 48 | + |
| 49 | +fixture('NagivationEvent Plugin').page( |
| 50 | + 'http://localhost:8080/delayed_page.html' |
| 51 | +); |
| 52 | + |
| 53 | +test('when plugin loads after window.load then navigation timing events are recorded', async (t: TestController) => { |
| 54 | + await t |
| 55 | + .typeText(COMMAND, DISPATCH_COMMAND, { replace: true }) |
| 56 | + .click(PAYLOAD) |
| 57 | + .pressKey('ctrl+a delete') |
| 58 | + .click(SUBMIT); |
| 59 | + |
| 60 | + const isBrowserSafari = |
| 61 | + (await REQUEST_BODY.textContent).indexOf(SAFARI) > -1; |
| 62 | + |
| 63 | + await t |
| 64 | + .expect(REQUEST_BODY.textContent) |
| 65 | + .contains(PERFORMANCE_NAVIGATION_EVENT_TYPE) |
| 66 | + .expect(REQUEST_BODY.textContent) |
| 67 | + .contains(ID) |
| 68 | + .expect(REQUEST_BODY.textContent) |
| 69 | + .contains(TIMESTAMP) |
| 70 | + |
| 71 | + .expect(REQUEST_BODY.textContent) |
| 72 | + .contains(INITIATOR_TYPE) |
| 73 | + .expect(REQUEST_BODY.textContent) |
| 74 | + .contains(START_TIME) |
| 75 | + .expect(REQUEST_BODY.textContent) |
| 76 | + .contains(UNLOAD_EVENT_START) |
| 77 | + .expect(REQUEST_BODY.textContent) |
| 78 | + .contains(PROMPT_FOR_UNLOAD) |
| 79 | + .expect(REQUEST_BODY.textContent) |
| 80 | + .contains(REDIRECT_START) |
| 81 | + .expect(REQUEST_BODY.textContent) |
| 82 | + .contains(REDIRECT_TIME) |
| 83 | + |
| 84 | + .expect(REQUEST_BODY.textContent) |
| 85 | + .contains(FETCH_START) |
| 86 | + .expect(REQUEST_BODY.textContent) |
| 87 | + .contains(DOMAIN_LOOKUP_START) |
| 88 | + .expect(REQUEST_BODY.textContent) |
| 89 | + .contains(DNS) |
| 90 | + |
| 91 | + .expect(REQUEST_BODY.textContent) |
| 92 | + .contains(CONNECT_START) |
| 93 | + .expect(REQUEST_BODY.textContent) |
| 94 | + .contains(CONNECT) |
| 95 | + .expect(REQUEST_BODY.textContent) |
| 96 | + .contains(SECURE_CONNECTION_START) |
| 97 | + .expect(REQUEST_BODY.textContent) |
| 98 | + .contains(TLS_TIME) |
| 99 | + .expect(REQUEST_BODY.textContent) |
| 100 | + .contains(REQUEST_START) |
| 101 | + .expect(REQUEST_BODY.textContent) |
| 102 | + .contains(TIME_TO_FIRST_BYTE) |
| 103 | + .expect(REQUEST_BODY.textContent) |
| 104 | + .contains(RESPONSE_START) |
| 105 | + .expect(REQUEST_BODY.textContent) |
| 106 | + .contains(RESPONSE_TIME) |
| 107 | + .expect(REQUEST_BODY.textContent) |
| 108 | + .contains(DOM_INTERACTIVE) |
| 109 | + .expect(REQUEST_BODY.textContent) |
| 110 | + .contains(DOM_CONTENT_LOADED_EVENT_START) |
| 111 | + .expect(REQUEST_BODY.textContent) |
| 112 | + .contains(DOM_CONTENT_LOADED) |
| 113 | + .expect(REQUEST_BODY.textContent) |
| 114 | + .contains(DOM_COMPLETE) |
| 115 | + .expect(REQUEST_BODY.textContent) |
| 116 | + .contains(DOM_PROCESSING_TIME) |
| 117 | + .expect(REQUEST_BODY.textContent) |
| 118 | + .contains(LOAD_EVENT_START) |
| 119 | + .expect(REQUEST_BODY.textContent) |
| 120 | + .contains(LOAD_EVENT_TIME) |
| 121 | + .expect(REQUEST_BODY.textContent) |
| 122 | + .contains(DURATION) |
| 123 | + |
| 124 | + .expect(RESPONSE_STATUS.textContent) |
| 125 | + .eql(STATUS_202.toString()); |
| 126 | + |
| 127 | + /** |
| 128 | + * Deprecated Timing Level1 used for Safari browser do not contain following attributes |
| 129 | + * https://nicj.net/navigationtiming-in-practice/ |
| 130 | + */ |
| 131 | + if (!isBrowserSafari) { |
| 132 | + await t |
| 133 | + .expect(REQUEST_BODY.textContent) |
| 134 | + .contains(REDIRECT_COUNT) |
| 135 | + .expect(REQUEST_BODY.textContent) |
| 136 | + .contains(NAVIGATION_TYPE) |
| 137 | + .expect(REQUEST_BODY.textContent) |
| 138 | + .contains(WORKER_START) |
| 139 | + .expect(REQUEST_BODY.textContent) |
| 140 | + .contains(WORKER_TIME) |
| 141 | + .expect(REQUEST_BODY.textContent) |
| 142 | + .contains(NEXT_HOP_PROTOCOL) |
| 143 | + .expect(REQUEST_BODY.textContent) |
| 144 | + .contains(HEADER_SIZE) |
| 145 | + .expect(REQUEST_BODY.textContent) |
| 146 | + .contains(TRANSFER_SIZE) |
| 147 | + .expect(REQUEST_BODY.textContent) |
| 148 | + .contains(COMPRESSION_RATIO); |
| 149 | + } |
| 150 | +}); |
0 commit comments