Поддельные отношения многие ко многим, используя Ember CLI Mirage
Заранее извиняюсь: я новичок в Ember (2.2.0) и Mirage, и мне поручено создать приемочные тесты для существующего приложения Ember. Моя задача состоит в том, чтобы использовать Mirage (0.1.13) и приборы (не фабрики), чтобы высмеивать существующие отношения "один ко многим" или "многие ко многим" в наших данных. Я не смог найти полных примеров, которые моделируют нетривиальные отношения.
Рассмотрим следующее простое отношение "многие ко многим": пользователь может иметь несколько ролей.
Соответствующие модели Ember:
// models/user.js
import Ember from "ember";
import DS from 'ember-data';
export default DS.Model.extend({
email: DS.attr('string'),
//unidirectional M-M
roles: DS.hasMany('user-role', {inverse: null})
});
// models/user-role.js
import DS from 'ember-data';
export default DS.Model.extend({
description: DS.attr('string')
});
Обратите внимание, что user-role
дефис.
Моя попытка создания светильников:
// mirage/fixtures/users.js
export default [
{id: 1, email: 'user@email.com', roles: {userRole_ids: [1]}},
{id: 2, email: 'supervisor@email.com', roles: {userRole_ids: [1, 2]}}
];
// mirage/fixtures/userRoles.js
export default [
{id: 1, description: 'regular user'},
{id: 2, description: 'supervisor'}
];
//mirage/config.js
export default function() {
//...
//single user data
this.get('/users/:id', function(db, request) {
let id = request.params.id;
return db.users.find(id);
});
//...
}
Когда я ставлю точку останова в finders.js
на
var payload = normalizeResponseHelper(serializer, store, typeClass, adapterPayload, id, 'findRecord');
и проверить ценность adapterPayload
Я вижу, например,
email: "supervisor@email.com"
id: 2
roles: Array[2]
0: Object:
userRole_id: 1
1: Object:
userRole_id: 2
вместо ожидаемого
email: "supervisor@email.com"
id: 2
roles: Array[2]
0: Object
id: 1
description: "regular user"
1: Object
id: 2
description: "supervisor"
Другими словами, внешний ключ идентификатора роли пользователя не разрешается Mirage в соответствующую запись. Я подозреваю, что это как-то связано с переносом в роли пользователя, не соответствующим моему названию userRoles.js
файл.
Внутренняя функциональность (которую я пытаюсь смоделировать) реализована с использованием JAX-RS JPA и Spring Framework, показанных ниже:
// User.java
//...
@Entity
@Table(name = "User")
public class User extends BaseBizObj<User, SimplePrimaryKey<String>, UserRepository> {
//...
@ManyToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "Roles")
@NotNull
@JsonProperty
private Set<UserRole> roles;
//...
}
// UserRole.java
//...
@Entity
@Table(name = "UserRole")
public class User extends BaseBizObj<User, SimplePrimaryKey<String>, UserRoleRepository> {
//...
@Column(name = "Description")
@NotNull
@JsonProperty
private String description;
//...
}
Любая помощь будет оценена.