ember-data-factory-guy icon indicating copy to clipboard operation
ember-data-factory-guy copied to clipboard

`withSomeParams` with `FormData` & URL query params

Open patocallaghan opened this issue 5 years ago • 1 comments

Following on from https://github.com/danielspaniel/ember-data-factory-guy/issues/381 it appears the fix I submitted didn't in fact work for our use case. I'm opening this issue for discussion as I'm not sure if it is supposed to be work 🤷‍♂️

//App code request - notice we have query params in the URL as well as FormData
$.ajax({
  url: '/some/url?foo=foo',
  type: 'POST',
  data: JSON.stringify({ bar:'bar' })
});

//Mock in test - in withSomeParams we are only matching the params
mock({
  url: '/some/url?foo=foo',
  type: 'POST'
})
  .withSomeParams({ foo: 'foo' });

The problem is if we see that the request is NOT a GET we only check the FormData values, which in this case is { bar: 'bar' } and not the values in the request params, { foo: 'foo' }. We do the comparison here

https://github.com/danielspaniel/ember-data-factory-guy/blob/b086500dbab1b7eb510e3a177cf196cfa5c66ad0/addon/mocks/mock-any-request.js#L49-L58

As a fix on our end we could just move the URL params inside the FormData prop but I guess a bigger question is if Factory Guy should support this or even if it's valid? jQuery seems to handle this scenario of sending both the params object and the FormData.

One solution is to combine the FormData with the query params if present? Or is it just a weird edge case?

patocallaghan avatar Mar 08 '19 18:03 patocallaghan

I just came across the same use case. I wonder would it be a solution to have withParams and withQueryParams functions? If you could chain them it would allow a check on both with compromising any existing functionality

cathalmcguire avatar Feb 22 '21 20:02 cathalmcguire