Поддельные отношения многие ко многим, используя 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;
    //...
}

Любая помощь будет оценена.

0 ответов

Другие вопросы по тегам