Files
threshold-ui/addons/api/tests/unit/adapters/application-test.js
T

73 lines
2.5 KiB
JavaScript

import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import config from 'ember-get-config';
import RESTAdapter from '@ember-data/adapter/rest';
import { InvalidError } from '@ember-data/adapter/error';
module('Unit | Adapter | application', function (hooks) {
setupTest(hooks);
test('its namespace is equal to the configured namespace', function (assert) {
assert.expect(2);
const adapter = this.owner.lookup('adapter:application');
assert.ok(adapter.namespace);
assert.equal(adapter.namespace, config.api.namespace);
});
test('it generates correct URL prefixes', function (assert) {
assert.expect(1);
const adapter = this.owner.lookup('adapter:application');
assert.equal(adapter.urlPrefix(), config.api.namespace);
});
test('it rewrites PUT to PATCH, but leaves others unchanged', function (assert) {
assert.expect(1);
const adapter = this.owner.lookup('adapter:application');
// TODO this is icky, should be changed to a spy or stub
RESTAdapter.prototype.ajax = (url, type) => {
assert.equal(type, 'PATCH');
};
adapter.ajax('/', 'PUT');
});
test('it correctly identifies 400 responses as invalid', function (assert) {
assert.expect(2);
const adapter = this.owner.lookup('adapter:application');
assert.ok(adapter.isInvalid(400));
assert.notOk(adapter.isInvalid(401));
});
test('it returns an proper InvalidError from handleResponse', function (assert) {
assert.expect(3);
const adapter = this.owner.lookup('adapter:application');
let payload = {
status: 400,
code: 'invalid_argument',
message: 'The request was invalid.',
};
let handledResponse = adapter.handleResponse(400, {}, payload);
assert.ok(handledResponse instanceof InvalidError);
assert.equal(handledResponse.errors.length, 1);
assert.equal(handledResponse.message, 'The request was invalid.');
});
test('it returns field-level errors in InvalidError from handleResponse', function (assert) {
assert.expect(1);
const adapter = this.owner.lookup('adapter:application');
let payload = {
status: 400,
code: 'invalid_argument',
message: 'The request was invalid.',
details: {
fields: [{ name: 'name', message: 'Name is wrong.' }],
},
};
let handledResponse = adapter.handleResponse(400, {}, payload);
assert.equal(
handledResponse.errors.length,
2,
'A base error plus one field error'
);
});
});