const { strict: assert } = require('assert'); const { convertToHexValue, withFixtures } = require('../helpers'); const FixtureBuilder = require('../fixture-builder'); describe('Segment metrics', function () { async function mockSegment(mockServer) { mockServer.reset(); await mockServer.forAnyRequest().thenPassThrough(); return await mockServer .forPost('https://api.segment.io/v1/batch') .withJsonBodyIncluding({ batch: [{ type: 'page' }] }) .times(3) .thenCallback(() => { return { statusCode: 200, }; }); } const ganacheOptions = { accounts: [ { secretKey: '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', balance: convertToHexValue(25000000000000000000), }, ], }; it('should send first three Page metric events upon fullscreen page load', async function () { await withFixtures( { fixtures: new FixtureBuilder() .withMetaMetricsController({ metaMetricsId: 'fake-metrics-id', participateInMetaMetrics: true, }) .build(), ganacheOptions, title: this.test.title, failOnConsoleError: false, }, async ({ driver, mockServer }) => { const mockedEndpoints = await mockSegment(mockServer); await driver.navigate(); await driver.fill('#password', 'correct horse battery staple'); await driver.press('#password', driver.Key.ENTER); await driver.wait(async () => { const isPending = await mockedEndpoints.isPending(); return isPending === false; }, 10000); const mockedRequests = await mockedEndpoints.getSeenRequests(); assert.equal(mockedRequests.length, 3); const [firstMock, secondMock, thirdMock] = mockedRequests; let [mockJson] = firstMock.body.json.batch; let { title, path } = mockJson.context.page; assert.equal(title, 'Home'); assert.equal(path, '/'); [mockJson] = secondMock.body.json.batch; ({ title, path } = mockJson.context.page); assert.equal(title, 'Unlock Page'); assert.equal(path, '/unlock'); [mockJson] = thirdMock.body.json.batch; ({ title, path } = mockJson.context.page); assert.equal(title, 'Home'); assert.equal(path, '/'); }, ); }); });