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

Remove fallback for when no model serializer #7759

Merged
merged 4 commits into from
Dec 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/-ember-data/node-tests/fixtures/expected.js
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@ module.exports = {
'(private) @ember-data/store Store#setRecordId',
'(public) @ember-data/adapter Adapter#coalesceFindRequests',
'(public) @ember-data/adapter Adapter#createRecord',
'(public) @ember-data/adapter Adapter#defaultSerializer',
'(public) @ember-data/adapter Adapter#deleteRecord',
'(public) @ember-data/adapter Adapter#findAll',
'(public) @ember-data/adapter Adapter#findMany',
Expand Down
284 changes: 1 addition & 283 deletions packages/-ember-data/tests/integration/store/serializer-for-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';

import Store from '@ember-data/store';
import { deprecatedTest } from '@ember-data/unpublished-test-infra/test-support/deprecated-test';

class TestAdapter {
constructor(args) {
Expand Down Expand Up @@ -57,20 +56,7 @@ module('integration/store - serializerFor', function (hooks) {
}
return lookup.call(owner, registrationName);
};
/*
we fallback to -json-api adapter by default when no other adapter is present.
This adapter specifies a defaultSerializer. We register our own to ensure
that this does not occur.
*/
class AppAdapter extends TestAdapter {
constructor() {
super(...arguments);
// ensure our adapter instance does not specify a fallback
// we use an empty string as that would cause `owner.lookup` to blow up if not guarded properly
// whereas `null` `undefined` `false` would not.
this.defaultSerializer = '';
}
}
class AppAdapter extends TestAdapter {}
owner.register('adapter:application', AppAdapter);

assert.expectAssertion(() => {
Expand Down Expand Up @@ -187,274 +173,6 @@ module('integration/store - serializerFor', function (hooks) {
assert.ok(appSerializer === serializer, 'We fell back to the application serializer instance');
});

module('Adapter Fallback', function () {
deprecatedTest(
'we can specify a fallback serializer on the adapter when there is no application serializer',
{
id: 'ember-data:default-serializer',
count: 1,
until: '4.0',
},
async function (assert) {
let { owner } = this;
let personAdapterDidInit = false;
let fallbackSerializerDidInit = false;

class PersonAdapter extends TestAdapter {
constructor() {
super(...arguments);
this.defaultSerializer = '-fallback';
}

didInit() {
personAdapterDidInit = true;
}
}
class FallbackSerializer extends TestSerializer {
didInit() {
fallbackSerializerDidInit = true;
}
}

owner.register('adapter:person', PersonAdapter);
owner.register('serializer:-fallback', FallbackSerializer);

let serializer = store.serializerFor('person');

assert.ok(serializer instanceof FallbackSerializer, 'We found the serializer');
assert.ok(personAdapterDidInit, 'We instantiated the adapter');
assert.ok(fallbackSerializerDidInit, 'We instantiated the serializer');
personAdapterDidInit = false;
fallbackSerializerDidInit = false;

let fallbackSerializer = store.serializerFor('-fallback');
assert.ok(fallbackSerializer instanceof FallbackSerializer, 'We found the correct serializer');
assert.ok(!fallbackSerializerDidInit, 'We did not instantiate the serializer again');
assert.ok(!personAdapterDidInit, 'We did not instantiate the adapter again');
assert.ok(fallbackSerializer === serializer, 'We fell back to the fallback-serializer instance');
}
);

deprecatedTest(
'specifying defaultSerializer on the application adapter when there is a per-type serializer does not work',
{
id: 'ember-data:default-serializer',
until: '4.0',
},
async function (assert) {
let { owner } = this;
let appAdapterDidInit = false;
let personAdapterDidInit = false;
let fallbackSerializerDidInit = false;
let defaultSerializerDidInit = false;

class AppAdapter extends TestAdapter {
constructor() {
super(...arguments);
this.defaultSerializer = '-fallback';
}

didInit() {
appAdapterDidInit = true;
}
}
class PersonAdapter extends TestAdapter {
constructor() {
super(...arguments);
this.defaultSerializer = null;
}

didInit() {
personAdapterDidInit = true;
}
}
class FallbackSerializer extends TestSerializer {
didInit() {
fallbackSerializerDidInit = true;
}
}
class DefaultSerializer extends TestSerializer {
didInit() {
defaultSerializerDidInit = true;
}
}

owner.register('adapter:application', AppAdapter);
owner.register('adapter:person', PersonAdapter);
owner.register('serializer:-fallback', FallbackSerializer);
/*
serializer:-default is the "last chance" fallback and is
registered automatically as the json-api serializer.
*/
owner.unregister('serializer:-default');
owner.register('serializer:-default', DefaultSerializer);

let serializer = store.serializerFor('person');

assert.ok(serializer instanceof DefaultSerializer, 'We found the serializer');
assert.ok(personAdapterDidInit, 'We instantiated the person adapter');
assert.ok(!appAdapterDidInit, 'We did not instantiate the application adapter');
assert.ok(!fallbackSerializerDidInit, 'We did not instantiate the application adapter fallback serializer');
assert.ok(defaultSerializerDidInit, 'We instantiated the `-default` fallback serializer');
personAdapterDidInit = false;
appAdapterDidInit = false;
fallbackSerializerDidInit = false;
defaultSerializerDidInit = false;

let defaultSerializer = store.serializerFor('-default');
assert.ok(defaultSerializer instanceof DefaultSerializer, 'We found the correct serializer');
assert.ok(!defaultSerializerDidInit, 'We did not instantiate the serializer again');
assert.ok(!appAdapterDidInit, 'We did not instantiate the application adapter');
assert.ok(!fallbackSerializerDidInit, 'We did not instantiate the application adapter fallback serializer');
assert.ok(!personAdapterDidInit, 'We did not instantiate the adapter again');
assert.ok(defaultSerializer === serializer, 'We fell back to the fallback-serializer instance');
}
);

deprecatedTest(
'specifying defaultSerializer on a fallback adapter when there is no per-type serializer does work',
{
id: 'ember-data:default-serializer',
until: '4.0',
},
async function (assert) {
let { owner } = this;
let appAdapterDidInit = false;
let fallbackSerializerDidInit = false;
let defaultSerializerDidInit = false;

class AppAdapter extends TestAdapter {
constructor() {
super(...arguments);
this.defaultSerializer = '-fallback';
}

didInit() {
appAdapterDidInit = true;
}
}
class FallbackSerializer extends TestSerializer {
didInit() {
fallbackSerializerDidInit = true;
}
}
class DefaultSerializer extends TestSerializer {
didInit() {
defaultSerializerDidInit = true;
}
}

owner.register('adapter:application', AppAdapter);
owner.register('serializer:-fallback', FallbackSerializer);
/*
serializer:-default is the "last chance" fallback and is
registered automatically as the json-api serializer.
*/
owner.unregister('serializer:-default');
owner.register('serializer:-default', DefaultSerializer);

let serializer = store.serializerFor('person');

assert.ok(serializer instanceof FallbackSerializer, 'We found the serializer');
assert.ok(appAdapterDidInit, 'We instantiated the fallback application adapter');
assert.ok(fallbackSerializerDidInit, 'We instantiated the application adapter fallback defaultSerializer');
assert.ok(!defaultSerializerDidInit, 'We did not instantiate the `-default` fallback serializer');
appAdapterDidInit = false;
fallbackSerializerDidInit = false;
defaultSerializerDidInit = false;

let fallbackSerializer = store.serializerFor('-fallback');
assert.ok(fallbackSerializer instanceof FallbackSerializer, 'We found the correct serializer');
assert.ok(!defaultSerializerDidInit, 'We did not instantiate the default serializer');
assert.ok(!appAdapterDidInit, 'We did not instantiate the application adapter again');
assert.ok(
!fallbackSerializerDidInit,
'We did not instantiate the application adapter fallback serializer again'
);
assert.ok(fallbackSerializer === serializer, 'We fell back to the fallback-serializer instance');
}
);
});

deprecatedTest(
'When the per-type, application and adapter specified fallback serializer do not exist, we fallback to the -default serializer',
{
id: 'ember-data:default-serializer',
count: 4,
until: '4.0',
},
async function (assert) {
let { owner } = this;
let appAdapterDidInit = false;
let defaultSerializerDidInit = false;

class AppAdapter extends TestAdapter {
constructor() {
super(...arguments);
this.defaultSerializer = '-not-a-real-fallback';
}

didInit() {
appAdapterDidInit = true;
}
}
class DefaultSerializer extends TestSerializer {
didInit() {
defaultSerializerDidInit = true;
}
}

owner.register('adapter:application', AppAdapter);
/*
serializer:-default is the "last chance" fallback and is
registered automatically as the json-api serializer.
*/
owner.unregister('serializer:-default');
owner.register('serializer:-default', DefaultSerializer);

let serializer = store.serializerFor('person');

assert.ok(serializer instanceof DefaultSerializer, 'We found the serializer');
assert.ok(appAdapterDidInit, 'We instantiated the fallback application adapter');
assert.ok(defaultSerializerDidInit, 'We instantiated the `-default` fallback serializer');
appAdapterDidInit = false;
defaultSerializerDidInit = false;

let appSerializer = store.serializerFor('application');

assert.ok(appSerializer instanceof DefaultSerializer, 'We found the serializer');
assert.ok(!appAdapterDidInit, 'We did not instantiate the application adapter again');
assert.ok(!defaultSerializerDidInit, 'We did not instantiate the `-default` fallback serializer again');
appAdapterDidInit = false;
defaultSerializerDidInit = false;

let fallbackSerializer = store.serializerFor('-not-a-real-fallback');

assert.ok(fallbackSerializer instanceof DefaultSerializer, 'We found the serializer');
assert.ok(!appAdapterDidInit, 'We did not instantiate the application adapter again');
assert.ok(!defaultSerializerDidInit, 'We did not instantiate the `-default` fallback serializer again');
appAdapterDidInit = false;
defaultSerializerDidInit = false;

let defaultSerializer = store.serializerFor('-default');
assert.ok(defaultSerializer instanceof DefaultSerializer, 'We found the correct serializer');
assert.ok(!defaultSerializerDidInit, 'We did not instantiate the default serializer again');
assert.ok(!appAdapterDidInit, 'We did not instantiate the application adapter again');
assert.ok(
defaultSerializer === serializer,
'We fell back to the -default serializer instance for the per-type serializer'
);
assert.ok(
defaultSerializer === appSerializer,
'We fell back to the -default serializer instance for the application serializer'
);
assert.ok(
defaultSerializer === fallbackSerializer,
'We fell back to the -default serializer instance for the adapter defaultSerializer'
);
}
);

test('serializers are destroyed', async function (assert) {
let { owner } = this;
let didInstantiate = false;
Expand Down
15 changes: 0 additions & 15 deletions packages/-ember-data/tests/unit/store/serializer-for-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { module, test } from 'qunit';
import DS from 'ember-data';
import { setupTest } from 'ember-qunit';

import { deprecatedTest } from '@ember-data/unpublished-test-infra/test-support/deprecated-test';
import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug';

let store, Person;
Expand Down Expand Up @@ -41,20 +40,6 @@ module('unit/store/serializer_for - DS.Store#serializerFor', function (hooks) {
);
});

deprecatedTest(
'Calling serializerFor with a type that has not been registered and in an application that does not have an ApplicationSerializer looks up the default Ember Data serializer',
{
id: 'ember-data:default-serializer',
until: '4.0',
},
function (assert) {
assert.ok(
store.serializerFor('person') instanceof DS.JSONSerializer,
'serializer returned from serializerFor is an instance of DS.JSONSerializer'
);
}
);

testInDebug('Calling serializerFor with a model class should assert', function (assert) {
assert.expectAssertion(() => {
store.serializerFor(Person);
Expand Down
24 changes: 0 additions & 24 deletions packages/adapter/addon/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -205,30 +205,6 @@ import type { Dict } from '@ember-data/store/-private/ts-interfaces/utils';
export default class Adapter extends EmberObject implements MinimumAdapterInterface {
declare _coalesceFindRequests: boolean;

/**
If you would like your adapter to use a custom serializer you can
set the `defaultSerializer` property to be the name of the custom
serializer.

Note the `defaultSerializer` serializer has a lower priority than
a model specific serializer (i.e. `PostSerializer`) or the
`application` serializer.

```app/adapters/django.js
import Adapter from '@ember-data/adapter';

export default Adapter.extend({
defaultSerializer: 'django'
});
```

@deprecated
@property defaultSerializer
@public
@type {String}
*/
defaultSerializer = '-default';

/**
The `findRecord()` method is invoked when the store is asked for a record that
has not previously been loaded. In response to `findRecord()` being called, you
Expand Down
2 changes: 0 additions & 2 deletions packages/adapter/addon/json-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,6 @@ import RESTAdapter from './rest';
@extends RESTAdapter
*/
class JSONAPIAdapter extends RESTAdapter {
defaultSerializer = '-json-api';

_defaultContentType = 'application/vnd.api+json';

/**
Expand Down
2 changes: 0 additions & 2 deletions packages/adapter/addon/rest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,6 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) {
*/
useFetch = true;

defaultSerializer = '-rest';

_defaultContentType = 'application/json; charset=utf-8';

@computed()
Expand Down
Loading