Skip to content

Commit 90bbdb7

Browse files
authored
Pass record snapshots to buildURL() method (#31)
1 parent 6d2d354 commit 90bbdb7

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

addon/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ export async function apiAction(
2727
let modelName = modelClass.modelName;
2828
let adapter = record.store.adapterFor(modelName);
2929

30-
let baseUrl = adapter.buildURL(modelName, record.id, null, requestType);
30+
let snapshot = record._createSnapshot();
31+
32+
let baseUrl = adapter.buildURL(modelName, record.id, snapshot, requestType);
3133
let url = path ? `${baseUrl}/${path}` : baseUrl;
3234

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

tests/unit/custom-actions-test.js

Lines changed: 26 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 { apiAction } from '@mainmatter/ember-api-actions';
44
import { ServerError } from '@ember-data/adapter/error';
5+
import RESTAdapter from '@ember-data/adapter/rest';
56

67
module('customAction()', function (hooks) {
78
setupTest(hooks);
@@ -62,4 +63,29 @@ module('customAction()', function (hooks) {
6263
ServerError
6364
);
6465
});
66+
67+
test('buildURL() can use the snapshot parameter', async function (assert) {
68+
class UserAdapter extends RESTAdapter {
69+
buildURL(modelName, id, snapshot, requestType) {
70+
if (requestType === 'updateRecord') {
71+
return `/users/${snapshot.record.name}`;
72+
} else {
73+
return super.buildURL(...arguments);
74+
}
75+
}
76+
}
77+
78+
this.owner.register('adapter:user', UserAdapter);
79+
80+
let { worker, rest, user } = await prepare(this);
81+
82+
worker.use(
83+
rest.post('/users/rwjblue/like', (req, res, ctx) => {
84+
return res(ctx.json({ custom: 'buildURL' }));
85+
})
86+
);
87+
88+
let response = await apiAction(user, { method: 'POST', path: 'like' });
89+
assert.deepEqual(response, { custom: 'buildURL' });
90+
});
6591
});

0 commit comments

Comments
 (0)