From b6ca2f8909bfc0856f32ed7295d4d78eacb76c29 Mon Sep 17 00:00:00 2001 From: Bill Glesias Date: Mon, 10 Jan 2022 18:02:23 -0500 Subject: [PATCH] split out log:added log:changed and command:update into separate methods (still broken) --- packages/driver/src/cy/multidomain/index.ts | 83 +++++++++++---------- packages/driver/src/multidomain/index.js | 4 +- 2 files changed, 46 insertions(+), 41 deletions(-) diff --git a/packages/driver/src/cy/multidomain/index.ts b/packages/driver/src/cy/multidomain/index.ts index c60bb6280930..6eabb3ae46b9 100644 --- a/packages/driver/src/cy/multidomain/index.ts +++ b/packages/driver/src/cy/multidomain/index.ts @@ -91,67 +91,71 @@ export function addCommands (Commands, Cypress: Cypress.Cypress, cy: Cypress.cy, } const updateCommand = (details) => { - if (details.logAdded) { - const attrs = details.logAdded - - attrs.consoleProps = () => details.logAdded.consoleProps - attrs.renderProps = () => details.logAdded.renderProps - - const log = Cypress.log(attrs) + if (details.end) { + const command = commands[details.id] - // if the log needs to stream updates, defer its result - if (!attrs.ended) { - logs[log.get('id')] = { - log, - deferred: createDeferred(), - } + if (command) { + delete commands[details.id] + command.deferred.resolve() } - - return } + } - if (details.logChanged) { - const readableLog = logs[details.logChanged.id].log.get() + const onLogAdded = ({ logAdded }) => { + const attrs = logAdded - const diff = difference(details.logChanged, readableLog) + attrs.consoleProps = () => logAdded.consoleProps + attrs.renderProps = () => logAdded.renderProps - Object.keys(diff).forEach((key) => { - const logResults = details.logChanged[key] + const log = Cypress.log(attrs) - // TODO: whitelist params but try this first to see if problem resolves - // if its undefined or null, but is an object that is empty, skip it - if (logResults !== undefined && logResults !== null && !(_.isObject(logResults) && _.isEmpty(logResults))) { - logs[details.logChanged.id].log.set(key, logResults) - } - }) + // if the log needs to stream updates, defer its result + if (!attrs.ended) { + logs[log.get('id')] = { + log, + deferred: createDeferred(), + } + } - const isEnded = logs[details.logChanged.id].log.get('ended') + return + } - if (isEnded) { - const log = logs[details.logChanged.id] + const onLogChanged = ({ logChanged }) => { + const readableLog = logs[logChanged.id].log.get() - delete logs[details.logChanged.id] - log.deferred.resolve() + const diff = difference(logChanged, readableLog) + + Object.keys(diff).forEach((key) => { + const logResults = logChanged[key] + + // TODO: whitelist params but try this first to see if problem resolves + // if its undefined or null, but is an object that is empty, skip it + if (logResults !== undefined && logResults !== null && !(_.isObject(logResults) && _.isEmpty(logResults))) { + logs[logChanged.id].log.set(key, logResults) } + }) - return - } + const isEnded = logs[logChanged.id].log.get('ended') - if (details.end) { - const command = commands[details.id] + if (isEnded) { + const log = logs[logChanged.id] - if (command) { - delete commands[details.id] - command.deferred.resolve() - } + delete logs[logChanged.id] + log.deferred.resolve() } + + return } communicator.on('command:enqueued', addCommand) communicator.on('command:update', updateCommand) + communicator.on('log:added', onLogAdded) + communicator.on('log:changed', onLogChanged) + const cleanup = async () => { communicator.off('command:enqueued', addCommand) + communicator.off('log:added', onLogAdded) // don't allow for new commands to be enqueued, but wait for commands to update in the secondary domain const pendingCommands = Object.keys(commands).map((command) => commands[command].deferred.promise) @@ -159,6 +163,7 @@ export function addCommands (Commands, Cypress: Cypress.Cypress, cy: Cypress.cy, return Promise.all(pendingCommands.concat(pendingLogs)).then(() => { communicator.off('command:update', updateCommand) + communicator.off('log:changed', onLogChanged) }) } diff --git a/packages/driver/src/multidomain/index.js b/packages/driver/src/multidomain/index.js index fd9f9bad2326..5112db0af0ef 100644 --- a/packages/driver/src/multidomain/index.js +++ b/packages/driver/src/multidomain/index.js @@ -29,13 +29,13 @@ const onCommandEnd = (command) => { } const onLogAdded = (attrs) => { - specBridgeCommunicator.toPrimary('command:update', { + specBridgeCommunicator.toPrimary('log:added', { logAdded: $Log.toSerializedJSON(attrs), }) } const onLogChanged = (attrs) => { - specBridgeCommunicator.toPrimary('command:update', { + specBridgeCommunicator.toPrimary('log:changed', { logChanged: $Log.toSerializedJSON(attrs), }) }