Skip to content

Commit e283df2

Browse files
authored
Pass adapterOptions to buildURL for adapterAction (#153)
Added for apiAction in d3a5d37
1 parent 58ec8c6 commit e283df2

2 files changed

Lines changed: 47 additions & 2 deletions

File tree

addon/index.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export async function apiAction(
4343
export async function adapterAction(
4444
adapter,
4545
modelName,
46-
{ requestType = 'createRecord', method, path, data }
46+
{ requestType = 'createRecord', method, path, data, adapterOptions }
4747
) {
4848
assert(`Missing \`method\` option`, method);
4949
assert(
@@ -54,7 +54,12 @@ export async function adapterAction(
5454
VALID_METHODS.includes(method)
5555
);
5656

57-
let baseUrl = adapter.buildURL(modelName, null, null, requestType);
57+
let baseUrl = adapter.buildURL(
58+
modelName,
59+
null,
60+
{ adapterOptions },
61+
requestType
62+
);
5863
let url = addPath(baseUrl, path);
5964

6065
return await adapter.ajax(url, method, { data });

tests/unit/adapter-actions-test.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { module, test } from 'qunit';
22
import { setupTest } from 'ember-qunit';
33
import { adapterAction } from '@mainmatter/ember-api-actions';
44
import { ServerError } from '@ember-data/adapter/error';
5+
import RESTAdapter from '@ember-data/adapter/rest';
56

67
module('adapterAction()', function (hooks) {
78
setupTest(hooks);
@@ -48,4 +49,43 @@ module('adapterAction()', function (hooks) {
4849
ServerError
4950
);
5051
});
52+
53+
test('buildURL can receive adapterOptions', async function (assert) {
54+
class UserAdapter extends RESTAdapter {
55+
buildURL(modelName, id, { adapterOptions }) {
56+
let url = super.buildURL(...arguments);
57+
if (adapterOptions?.test === true) {
58+
return `${url}?test=true`;
59+
}
60+
return url;
61+
}
62+
}
63+
64+
this.owner.register('adapter:user', UserAdapter);
65+
66+
let { worker, rest, adapter } = await prepare(this);
67+
68+
worker.use(
69+
rest.post('/users/my-action', (req, res, ctx) => {
70+
let body = {};
71+
if (req.url.searchParams.has('test')) {
72+
body.test = true;
73+
}
74+
return res(ctx.json(body));
75+
})
76+
);
77+
78+
let responseA = await adapterAction(adapter, 'user', {
79+
method: 'POST',
80+
path: 'my-action',
81+
adapterOptions: { test: true },
82+
});
83+
assert.deepEqual(responseA, { test: true });
84+
85+
let responseB = await adapterAction(adapter, 'user', {
86+
method: 'POST',
87+
path: 'my-action',
88+
});
89+
assert.deepEqual(responseB, {});
90+
});
5191
});

0 commit comments

Comments
 (0)