Fix createOnlyInstance for related methods
For scoped or related create method, the createOnlyInstance flag should be calculated on the target model. For example, User.createAccessTokens should set the flag only if AccessToken has updateonly properties.
This commit is contained in:
parent
4d4070e542
commit
6570b94843
15
lib/model.js
15
lib/model.js
|
@ -763,12 +763,7 @@ module.exports = function(registry) {
|
||||||
var pathName =
|
var pathName =
|
||||||
(scope.options && scope.options.http && scope.options.http.path) || scopeName;
|
(scope.options && scope.options.http && scope.options.http.path) || scopeName;
|
||||||
|
|
||||||
// if there is atleast one updateOnly property, then we set
|
var modelTo = scope.modelTo;
|
||||||
// createOnlyInstance flag in __create__ to indicate loopback-swagger
|
|
||||||
// code to create a separate model instance for create operation only
|
|
||||||
const updateOnlyProps = this.getUpdateOnlyProperties ?
|
|
||||||
this.getUpdateOnlyProperties() : false;
|
|
||||||
const hasUpdateOnlyProps = updateOnlyProps && updateOnlyProps.length > 0;
|
|
||||||
|
|
||||||
var isStatic = scope.isStatic;
|
var isStatic = scope.isStatic;
|
||||||
var toModelName = scope.modelTo.modelName;
|
var toModelName = scope.modelTo.modelName;
|
||||||
|
@ -780,8 +775,16 @@ module.exports = function(registry) {
|
||||||
// For a relation with through model, the toModelName should be the one
|
// For a relation with through model, the toModelName should be the one
|
||||||
// from the target model
|
// from the target model
|
||||||
toModelName = relation.modelTo.modelName;
|
toModelName = relation.modelTo.modelName;
|
||||||
|
modelTo = relation.modelTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if there is atleast one updateOnly property, then we set
|
||||||
|
// createOnlyInstance flag in __create__ to indicate loopback-swagger
|
||||||
|
// code to create a separate model instance for create operation only
|
||||||
|
const updateOnlyProps = modelTo.getUpdateOnlyProperties ?
|
||||||
|
modelTo.getUpdateOnlyProperties() : false;
|
||||||
|
const hasUpdateOnlyProps = updateOnlyProps && updateOnlyProps.length > 0;
|
||||||
|
|
||||||
define('__get__' + scopeName, {
|
define('__get__' + scopeName, {
|
||||||
isStatic: isStatic,
|
isStatic: isStatic,
|
||||||
http: {verb: 'get', path: '/' + pathName},
|
http: {verb: 'get', path: '/' + pathName},
|
||||||
|
|
|
@ -133,8 +133,8 @@ describe('remoting - integration', function() {
|
||||||
|
|
||||||
it('should have correct signatures for hasMany methods',
|
it('should have correct signatures for hasMany methods',
|
||||||
function() {
|
function() {
|
||||||
var physicianClass = findClass('store');
|
var storeClass = findClass('store');
|
||||||
var methods = getFormattedPrototypeMethods(physicianClass.methods);
|
var methods = getFormattedPrototypeMethods(storeClass.methods);
|
||||||
|
|
||||||
var expectedMethods = [
|
var expectedMethods = [
|
||||||
'prototype.__findById__widgets(fk:any):widget ' +
|
'prototype.__findById__widgets(fk:any):widget ' +
|
||||||
|
@ -208,6 +208,15 @@ describe('remoting - integration', function() {
|
||||||
var createMethod = getCreateMethod(customerClass.methods);
|
var createMethod = getCreateMethod(customerClass.methods);
|
||||||
assert(createMethod.accepts[0].createOnlyInstance === false);
|
assert(createMethod.accepts[0].createOnlyInstance === false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('sets createOnlyInstance based on target model for scoped or related methods',
|
||||||
|
function() {
|
||||||
|
var userClass = findClass('user');
|
||||||
|
var createMethod = userClass.methods.find(function(m) {
|
||||||
|
return (m.name === 'prototype.__create__accessTokens');
|
||||||
|
});
|
||||||
|
assert(createMethod.accepts[0].createOnlyInstance === false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue