feat: 🎸 add support for custom cancel session method

This commit is contained in:
Randall Morey committed 2020-09-18 10:59:07 -04:00
1 parent 9e482d6434
commit 7a17ff3bfa
5 files changed
+94 -2

No files matched your search

@@ -27,4 +27,9 @@ export default class GeneratedSessionModel extends BaseModel {
})
updated_time;
@attr('number', {
description: 'Current version number of this resource.',
})
version;
}
+26 -2
View File
@@ -1,3 +1,27 @@
import Model from '@ember-data/model';
import GeneratedSessionModel from '../generated/models/session';
export default class SessionModel extends Model { }
export default class SessionModel extends GeneratedSessionModel {
// =methods
/**
* Cancels the session via the `cancel` method.
* See serializer and adapter for more information.
* @param {object} options
* @param {object} options.adapterOptions
* @return {Promise}
*/
cancelSession(options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'cancel',
};
return this.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions,
},
});
}
}
+31
View File
@@ -0,0 +1,31 @@
import ApplicationSerializer from './application';
export default class SessionSerializer extends ApplicationSerializer {
// =methods
/**
* If `adapterOptions.method` is `cancel`, the serialization should
* include the version field only.
* @override
* @param {Snapshot} snapshot
* @return {object}
*/
serialize(snapshot) {
let serialized = super.serialize(...arguments);
if (snapshot?.adapterOptions?.method === 'cancel') {
serialized = this.serializeForCancel(snapshot);
}
return serialized;
}
/**
* Returns a payload containing only version
* @param {Snapshot} snapshot
* @return {object}
*/
serializeForCancel(snapshot) {
return {
version: snapshot.attr('version'),
};
}
}
+1
View File
@@ -0,0 +1 @@
export { default } from 'api/serializers/session';
@@ -0,0 +1,31 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Serializer | session', function(hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) {
let store = this.owner.lookup('service:store');
let serializer = store.serializerFor('session');
assert.ok(serializer);
});
test('it serializes only version when `adapterOptions.method` is `cancel`', function (assert) {
assert.expect(1);
const store = this.owner.lookup('service:store');
const serializer = store.serializerFor('session');
const record = store.createRecord('session', {
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {
method: 'cancel',
};
const serializedRecord = serializer.serialize(snapshot);
assert.deepEqual(serializedRecord, {
version: 1,
});
});
});