Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cy.intercept StaticResponse headers cannot contain content-encoding other than compress #16420

Closed
HendrikThePendric opened this issue May 10, 2021 · 4 comments
Labels
stale no activity on this issue for a long period topic: cy.intercept() type: unexpected behavior User expected result, but got another

Comments

@HendrikThePendric
Copy link

Current behavior

A network error is produced and stubbing fails when setting the content-encoding header of the static-response-object to a value other than compress.

Desired behavior

I ran into this issue when building a tool that captures and stubs network request. I was simply storing the responses I was intercepting as fixtures. I was hoping that I could simply return these fixtures later on but that turned out not to be the case, because the intercepted response headers contained a content-encoding field with value gzip and this caused the issue above.

I suspect the root of the problem could be that the proxy server cypress uses to intercept network requests uses compress as content-encoding.

Ideally the desired behaviour would be that we can specify whatever content-encoding we want.

At the very minimal, I would expect a very clear note in the docs, here.

Test code to reproduce

I have produced a minimal reproduction case here. The problem is illustrated in the last test, specifically see lines 32-34 in cypress/integration/spec.js:

    const headers = {
      'content-encoding': 'gzip',
    }

Versions

7.0.2

@jennifer-shehane jennifer-shehane added topic: cy.intercept() type: unexpected behavior User expected result, but got another labels May 11, 2021
@jennifer-shehane
Copy link
Member

Reproducible example

it('✅ works with a static response without "content-encoding"', () => {
  cy.intercept('/users', { 
    body: 'response body content', 
    headers: {}
  }).as('getUrl')

  cy.visit('https://example.com')
  cy.window().then((win) => {
    const xhr = new win.XMLHttpRequest()
    xhr.open('GET', '/users')
    xhr.send()
  })

  cy.wait('@getUrl').its('response.body').should('equal', 'response body content')
})

it('✅ works with a static response with "content-encoding" set to "compress"', () => {
  cy.intercept('/users', {
    body: 'response body content', 
    headers: {
      'content-encoding': 'compress',
    }
  }).as('getUrl')

  cy.visit('https://example.com')
  cy.window().then((win) => {
    const xhr = new win.XMLHttpRequest()
    xhr.open('GET', '/users')
    xhr.send()
  })
  cy.wait('@getUrl').its('response.body').should('equal', 'response body content')
})

it('❗️fails with a static response with "content-encoding" set to another value than "compress"', () => {
  cy.intercept('/users', {
    body: 'response body content', 
    headers: {
      'content-encoding': 'gzip', // content-encoding causes this to fail
    }
  }).as('getUrl')

  cy.visit('https://example.com')
  cy.window().then((win) => {
    const xhr = new win.XMLHttpRequest()
    xhr.open('GET', '/users')
    xhr.send()
  })
  cy.wait('@getUrl').its('response.body').should('equal', 'response body content')
})

Screen Shot 2021-05-11 at 9 02 58 AM

HendrikThePendric added a commit to dhis2/cli-utils-cypress that referenced this issue May 17, 2021
This was planned anyway to keep fixtures stable.
But also turned out to be required due to a bug:
cypress-io/cypress#16420
HendrikThePendric added a commit to dhis2/cli-utils-cypress that referenced this issue May 18, 2021
…ixtures (#176)

* fix(network-shim): ensure in-test fixtures are used instead of shim fixtures

The core issue was fixed by upgrading cypress to v7, which includes the correct overriding behaviour for `cy.intercept`.
Due to the major version bump, capturing and stubbing requests stopped working, and this was fixed by passing regexes to cy.intercept instead of strings.
A new test was introduced to the network-shim example-app to assert the in-test fixtures take presidence over the networkshim fixtures.

BREAKING CHANGE: bumps cypress 1 major version, to v7

* fix(network-shim): filter request and response headers properties

This was planned anyway to keep fixtures stable.
But also turned out to be required due to a bug:
cypress-io/cypress#16420

* fix(network-shim): disable auto-login during stub run

* fix(network-shim): add 'system/info' resource to static resources list

* feat(network-shim): run tests suite on CI

* docs(network-shim): add info about the network-shim test suite

* chore(network-shim): add command to locally run full e2e suite

* docs(network-shim): add info reg troubleshooting and local full test run

* chore(cy local): run build command before cypress commands

Co-authored-by: Jan-Gerke Salomon <jgs.salomon@gmail.com>
dhis2-bot added a commit to dhis2/cli-utils-cypress that referenced this issue May 18, 2021
# [8.0.0-alpha.1](v7.0.1...v8.0.0-alpha.1) (2021-05-18)

### Bug Fixes

* **network-shim:** ensure in-test fixtures are used instead of shim fixtures ([#176](#176)) ([84a1907](84a1907))

### BREAKING CHANGES

* **network-shim:** bumps cypress 1 major version, to v7

* fix(network-shim): filter request and response headers properties

This was planned anyway to keep fixtures stable.
But also turned out to be required due to a bug:
cypress-io/cypress#16420

* fix(network-shim): disable auto-login during stub run

* fix(network-shim): add 'system/info' resource to static resources list

* feat(network-shim): run tests suite on CI

* docs(network-shim): add info about the network-shim test suite

* chore(network-shim): add command to locally run full e2e suite

* docs(network-shim): add info reg troubleshooting and local full test run

* chore(cy local): run build command before cypress commands

Co-authored-by: Jan-Gerke Salomon <jgs.salomon@gmail.com>
dhis2-bot added a commit to dhis2/cli-utils-cypress that referenced this issue Jun 10, 2021
# [8.0.0](v7.0.1...v8.0.0) (2021-06-10)

### Bug Fixes

* **network-shim:** ensure DHIS2_BASE_URL is available in localStorage ([#214](#214)) ([741ab4b](741ab4b))
* **network-shim:** ensure in-test fixtures are used instead of shim fixtures ([#176](#176)) ([84a1907](84a1907))
* **network-shim:** fix before hook bug ([#201](#201)) ([0e1cd4c](0e1cd4c))
* **network-shim:** only incrementally update missing request stub state ([#209](#209)) ([e2ccea8](e2ccea8))
* **network-shim:** report missing stubs if at least one is found ([#208](#208)) ([45b3331](45b3331))
* **network-shim:** use electron instead of chrome for runs ([#213](#213)) ([ae73686](ae73686))

### chore

* remove node 10 support ([6245ef2](6245ef2))

### Code Refactoring

* **install command:** combine network shim command & plugin options ([4bc9a4e](4bc9a4e))
* drop the app-start flag ([9674d87](9674d87))
* simplify cypress-plugin and cli-utils-cypress ([dc58462](dc58462))
* wait for baseUrl to become available ([745194f](745194f))

### Features

* **enable auto login:** add option to install command ([e9dde4e](e9dde4e))
* **install cmd:** warn about potentially missing peer depds (temporarily) ([c3046aa](c3046aa))

### BREAKING CHANGES

* **install command:** The two options are merged into one, which is now
called "enableNetworkShim".
* New minimum version for NodeJS is 12.x.
* Drop run and open commands
We want to be consistent with how Cypress runs locally and in CI and
since we cannot use d2-utils-cypress in CI, we shouldn't run it through
d2-utils-cypress locally either.
* Change configuration keys to camelCase.
- dhis2_username => dhis2Username
- dhis2_password => dhis2Password
- dhis2_base_url => dhis2BaseUrl
- dhis2_datatest_prefix => dhis2DataTestPrefix
- dhis2_api_version => dhis2ApiVersion
* dhis2_api_stub_mode renamed to networkMode
Instead of describing the mode of the plugin, it is a bit easier to
understand if we speak in terms of the network:
- do we want to capture the network traffic (networkMode=capture),
- do we want to stub it (networkMode=stub),
- or do we want to run it against a live backend (networkMode=live)?
* 'DISABLED' renamed to 'LIVE'
To better describe the state of the network when running tests instead
of describing the state of the plugin, DISABLED is now LIVE.
* isDisabledMode renamed to isLiveMode.
Similar to the above, to better describe the state of the network vs.
the state of the plugin, replace usages of isDisabledMode with
isLiveMode.
* 'CAPTURE'|'STUB'|'LIVE' are now lowercase when passed
to the environment.
Replace networkMode=LIVE with networkMode=live.
* Drop the --waitOn flag
As of now we wait on the baseUrl that is defined in cypress.json, as
that is the URL that the tests are going to run against.
* Drop support for the --appStart flag.
As a consumer, you are expected to either use something like
concurrently to run the app server and the cypress server in a single
process, or run then manually in two separate processes. This is no
longer done automatically.
* **network-shim:** bumps cypress 1 major version, to v7

* fix(network-shim): filter request and response headers properties

This was planned anyway to keep fixtures stable.
But also turned out to be required due to a bug:
cypress-io/cypress#16420

* fix(network-shim): disable auto-login during stub run

* fix(network-shim): add 'system/info' resource to static resources list

* feat(network-shim): run tests suite on CI

* docs(network-shim): add info about the network-shim test suite

* chore(network-shim): add command to locally run full e2e suite

* docs(network-shim): add info reg troubleshooting and local full test run

* chore(cy local): run build command before cypress commands

Co-authored-by: Jan-Gerke Salomon <jgs.salomon@gmail.com>
@relief-melone
Copy link

This error still persists in v10 which unfortunately makes it impossible for me at the moment to mock network network requests for mapbox-gl

@cypress-app-bot
Copy link
Collaborator

This issue has not had any activity in 180 days. Cypress evolves quickly and the reported behavior should be tested on the latest version of Cypress to verify the behavior is still occurring. It will be closed in 14 days if no updates are provided.

@cypress-app-bot cypress-app-bot added the stale no activity on this issue for a long period label May 17, 2023
@cypress-app-bot
Copy link
Collaborator

This issue has been closed due to inactivity.

@cypress-app-bot cypress-app-bot closed this as not planned Won't fix, can't repro, duplicate, stale May 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
stale no activity on this issue for a long period topic: cy.intercept() type: unexpected behavior User expected result, but got another
Projects
None yet
Development

No branches or pull requests

4 participants