Comparing version 0.10.0 to 0.10.1
@@ -57,4 +57,6 @@ 'use strict'; | ||
Genre: expect.anything(), | ||
Tag: expect.anything(), | ||
Author: expect.anything(), | ||
BookGenres: expect.anything(), | ||
BookTags: expect.anything(), | ||
Publisher: expect.anything() | ||
@@ -75,2 +77,8 @@ })); | ||
expect(state.Tag.items).toHaveLength(4); | ||
expect((0, _keys2.default)(state.Tag.itemsById)).toHaveLength(4); | ||
expect(state.BookTags.items).toHaveLength(5); | ||
expect((0, _keys2.default)(state.BookTags.itemsById)).toHaveLength(5); | ||
expect(state.Author.items).toHaveLength(3); | ||
@@ -157,3 +165,3 @@ expect((0, _keys2.default)(state.Author.itemsById)).toHaveLength(3); | ||
var book = Book.first(); | ||
expect(book.toString()).toBe('Book: {id: 0, name: Tommi Kaikkonen - an Autobiography, ' + 'releaseYear: 2050, author: 0, cover: 0, genres: [0, 1], publisher: 1}'); | ||
expect(book.toString()).toBe('Book: {id: 0, name: Tommi Kaikkonen - an Autobiography, ' + 'releaseYear: 2050, author: 0, cover: 0, genres: [0, 1], tags: [Technology, Literary], publisher: 1}'); | ||
}); | ||
@@ -214,3 +222,4 @@ | ||
Book = _session11.Book, | ||
Genre = _session11.Genre; | ||
Genre = _session11.Genre, | ||
Tag = _session11.Tag; | ||
@@ -230,2 +239,14 @@ // Forward (from many-to-many field declaration) | ||
expect(relatedBooks.modelClass).toBe(Book); | ||
// Forward (from many-to-many field declaration with idAttribute is name) | ||
var relatedTags = book.tags; | ||
expect(relatedTags).toBeInstanceOf(_.QuerySet); | ||
expect(relatedTags.modelClass).toBe(Tag); | ||
expect(relatedTags.count()).toBe(2); | ||
// Backward | ||
var tag = Tag.first(); | ||
var tagRelatedBooks = tag.books; | ||
expect(tagRelatedBooks).toBeInstanceOf(_.QuerySet); | ||
expect(tagRelatedBooks.modelClass).toBe(Book); | ||
}); | ||
@@ -232,0 +253,0 @@ |
@@ -153,2 +153,3 @@ 'use strict'; | ||
var Genre = void 0; | ||
var Tag = void 0; | ||
var Publisher = void 0; | ||
@@ -162,2 +163,3 @@ beforeEach(function () { | ||
Genre = _createTestModels.Genre; | ||
Tag = _createTestModels.Tag; | ||
Publisher = _createTestModels.Publisher; | ||
@@ -195,3 +197,3 @@ | ||
it('correctly sets model prototypes', function () { | ||
orm.register(Book, Author, Cover, Genre, Publisher); | ||
orm.register(Book, Author, Cover, Genre, Tag, Publisher); | ||
expect(Book.isSetUp).toBeFalsy(); | ||
@@ -206,2 +208,5 @@ | ||
var tagsDescriptor = (0, _getOwnPropertyDescriptor2.default)(Book.prototype, 'tags'); | ||
expect(tagsDescriptor).toBeUndefined(); | ||
var publisherDescriptor = (0, _getOwnPropertyDescriptor2.default)(Book.prototype, 'publisher'); | ||
@@ -227,2 +232,6 @@ expect(publisherDescriptor).toBeUndefined(); | ||
tagsDescriptor = (0, _getOwnPropertyDescriptor2.default)(Book.prototype, 'tags'); | ||
expect((0, _typeof3.default)(tagsDescriptor.get)).toBe('function'); | ||
expect((0, _typeof3.default)(tagsDescriptor.set)).toBe('function'); | ||
publisherDescriptor = (0, _getOwnPropertyDescriptor2.default)(Book.prototype, 'publisher'); | ||
@@ -234,3 +243,3 @@ expect((0, _typeof3.default)(publisherDescriptor.get)).toBe('function'); | ||
it('correctly gets the default state', function () { | ||
orm.register(Book, Author, Cover, Genre, Publisher); | ||
orm.register(Book, Author, Cover, Genre, Tag, Publisher); | ||
var defaultState = orm.getEmptyState(); | ||
@@ -249,2 +258,7 @@ | ||
}, | ||
BookTags: { | ||
items: [], | ||
itemsById: {}, | ||
meta: {} | ||
}, | ||
Author: { | ||
@@ -265,2 +279,7 @@ items: [], | ||
}, | ||
Tag: { | ||
items: [], | ||
itemsById: {}, | ||
meta: {} | ||
}, | ||
Publisher: { | ||
@@ -275,3 +294,3 @@ items: [], | ||
it('correctly starts a mutating session', function () { | ||
orm.register(Book, Author, Cover, Genre, Publisher); | ||
orm.register(Book, Author, Cover, Genre, Tag, Publisher); | ||
var initialState = orm.getEmptyState(); | ||
@@ -278,0 +297,0 @@ var session = orm.mutableSession(initialState); |
@@ -25,2 +25,3 @@ 'use strict'; | ||
var genreQs = void 0; | ||
var tagQs = void 0; | ||
beforeEach(function () { | ||
@@ -33,2 +34,3 @@ var _createTestSessionWit = (0, _utils.createTestSessionWithData)(); | ||
genreQs = session.Genre.getQuerySet(); | ||
tagQs = session.Tag.getQuerySet(); | ||
}); | ||
@@ -39,2 +41,3 @@ | ||
expect(genreQs.count()).toBe(4); | ||
expect(tagQs.count()).toBe(4); | ||
}); | ||
@@ -147,2 +150,3 @@ | ||
Genre = _createTestModels.Genre, | ||
Tag = _createTestModels.Tag, | ||
Cover = _createTestModels.Cover, | ||
@@ -176,3 +180,3 @@ Author = _createTestModels.Author, | ||
var orm = new _.ORM(); | ||
orm.register(Book, Genre, Cover, Author, Publisher); | ||
orm.register(Book, Genre, Tag, Cover, Author, Publisher); | ||
@@ -179,0 +183,0 @@ var _createTestSessionWit2 = (0, _utils.createTestSessionWithData)(orm), |
@@ -22,2 +22,3 @@ 'use strict'; | ||
var Genre = void 0; | ||
var Tag = void 0; | ||
var Author = void 0; | ||
@@ -32,2 +33,3 @@ var Publisher = void 0; | ||
Genre = _createTestModels.Genre; | ||
Tag = _createTestModels.Tag; | ||
Author = _createTestModels.Author; | ||
@@ -37,3 +39,3 @@ Publisher = _createTestModels.Publisher; | ||
orm = new _.ORM(); | ||
orm.register(Book, Cover, Genre, Author, Publisher); | ||
orm.register(Book, Cover, Genre, Tag, Author, Publisher); | ||
emptyState = orm.getEmptyState(); | ||
@@ -47,2 +49,3 @@ }); | ||
Genre.reducer = jest.fn(); | ||
Tag.reducer = jest.fn(); | ||
Publisher.reducer = jest.fn(); | ||
@@ -60,2 +63,3 @@ | ||
expect(Genre.reducer).toHaveBeenCalledTimes(1); | ||
expect(Tag.reducer).toHaveBeenCalledTimes(1); | ||
expect(Publisher.reducer).toHaveBeenCalledTimes(1); | ||
@@ -62,0 +66,0 @@ }); |
@@ -14,2 +14,3 @@ 'use strict'; | ||
var Genre = void 0; | ||
var Tag = void 0; | ||
var Author = void 0; | ||
@@ -24,2 +25,3 @@ var Publisher = void 0; | ||
Genre = _createTestModels.Genre; | ||
Tag = _createTestModels.Tag; | ||
Author = _createTestModels.Author; | ||
@@ -29,3 +31,3 @@ Publisher = _createTestModels.Publisher; | ||
orm = new _.ORM(); | ||
orm.register(Book, Cover, Genre, Author, Publisher); | ||
orm.register(Book, Cover, Genre, Tag, Author, Publisher); | ||
emptyState = orm.getEmptyState(); | ||
@@ -38,2 +40,3 @@ }); | ||
expect(Genre.session).toBeUndefined(); | ||
expect(Tag.session).toBeUndefined(); | ||
expect(Cover.session).toBeUndefined(); | ||
@@ -47,2 +50,3 @@ expect(Publisher.session).toBeUndefined(); | ||
expect(session.Genre.session).toBe(session); | ||
expect(session.Tag.session).toBe(session); | ||
expect(session.Cover.session).toBe(session); | ||
@@ -58,2 +62,3 @@ expect(session.Publisher.session).toBe(session); | ||
expect((0, _utils.isSubclass)(session.Genre, Genre)).toBe(true); | ||
expect((0, _utils.isSubclass)(session.Tag, Tag)).toBe(true); | ||
expect((0, _utils.isSubclass)(session.Publisher, Publisher)).toBe(true); | ||
@@ -124,2 +129,3 @@ }); | ||
expect(nextState[Genre.modelName]).toBe(emptyState[Genre.modelName]); | ||
expect(nextState[Tag.modelName]).toBe(emptyState[Tag.modelName]); | ||
expect(nextState[Publisher.modelName]).toBe(emptyState[Publisher.modelName]); | ||
@@ -135,3 +141,3 @@ }); | ||
expect(firstSession.sessionBoundModels).toHaveLength(6); | ||
expect(firstSession.sessionBoundModels).toHaveLength(8); | ||
@@ -141,2 +147,3 @@ expect(firstSession.Book).not.toBe(secondSession.Book); | ||
expect(firstSession.Genre).not.toBe(secondSession.Genre); | ||
expect(firstSession.Tag).not.toBe(secondSession.Tag); | ||
expect(firstSession.Cover).not.toBe(secondSession.Cover); | ||
@@ -143,0 +150,0 @@ expect(firstSession.Publisher).not.toBe(secondSession.Publisher); |
@@ -139,2 +139,31 @@ 'use strict'; | ||
it('filter works correctly with "idAttribute" is "name" and filter argument is a function', function () { | ||
state = (0, _deepFreeze2.default)({ | ||
items: ['work', 'personal', 'urgent'], | ||
itemsById: { | ||
work: { | ||
name: 'work' | ||
}, | ||
personal: { | ||
name: 'personal' | ||
}, | ||
urgent: { | ||
name: 'urgent' | ||
} | ||
}, | ||
meta: {} | ||
}); | ||
table = new _Table2.default({ idAttribute: 'name' }); | ||
var clauses = [{ | ||
type: _constants.FILTER, | ||
payload: function payload(attrs) { | ||
return ['work', 'urgent'].indexOf(attrs[table.idAttribute]) > -1; | ||
} | ||
}]; | ||
var result = table.query(state, clauses); | ||
expect(result.length).toBe(2); | ||
expect(result[0]).toBe(state.itemsById.work); | ||
expect(result[1]).toBe(state.itemsById.urgent); | ||
}); | ||
it('orderBy works correctly with prop argument', function () { | ||
@@ -141,0 +170,0 @@ var clauses = [{ type: _constants.ORDER_BY, payload: [['data'], ['inc']] }]; |
@@ -33,5 +33,5 @@ 'use strict'; | ||
var _Model6 = require('../Model'); | ||
var _Model7 = require('../Model'); | ||
var _Model7 = _interopRequireDefault(_Model6); | ||
var _Model8 = _interopRequireDefault(_Model7); | ||
@@ -75,2 +75,12 @@ var _fields = require('../fields'); | ||
var TAGS_INITIAL = [{ | ||
name: 'Technology' | ||
}, { | ||
name: 'Literary' | ||
}, { | ||
name: 'Natural' | ||
}, { | ||
name: 'Redux' | ||
}]; | ||
var BOOKS_INITIAL = [{ | ||
@@ -81,2 +91,3 @@ name: 'Tommi Kaikkonen - an Autobiography', | ||
genres: [0, 1], | ||
tags: ['Technology', 'Literary'], | ||
releaseYear: 2050, | ||
@@ -89,2 +100,3 @@ publisher: 1 | ||
genres: [2], | ||
tags: ['Technology'], | ||
releaseYear: 2008, | ||
@@ -97,2 +109,3 @@ publisher: 0 | ||
genres: [2, 3], | ||
tags: ['Technology', 'Redux'], | ||
releaseYear: 2015, | ||
@@ -127,2 +140,3 @@ publisher: 0 | ||
genres: (0, _fields.many)('Genre', 'books'), | ||
tags: (0, _fields.many)('Tag', 'books'), | ||
publisher: (0, _fields.fk)('Publisher', 'books') | ||
@@ -133,3 +147,3 @@ }; | ||
return BookModel; | ||
}(_Model7.default); | ||
}(_Model8.default); | ||
@@ -161,3 +175,3 @@ Book.modelName = 'Book'; | ||
return AuthorModel; | ||
}(_Model7.default); | ||
}(_Model8.default); | ||
Author.modelName = 'Author'; | ||
@@ -174,3 +188,3 @@ | ||
return CoverModel; | ||
}(_Model7.default); | ||
}(_Model8.default); | ||
Cover.modelName = 'Cover'; | ||
@@ -191,3 +205,3 @@ Cover.fields = { | ||
return GenreModel; | ||
}(_Model7.default); | ||
}(_Model8.default); | ||
Genre.modelName = 'Genre'; | ||
@@ -199,12 +213,30 @@ Genre.fields = { | ||
var Publisher = function (_Model5) { | ||
(0, _inherits3.default)(PublisherModel, _Model5); | ||
var Tag = function (_Model5) { | ||
(0, _inherits3.default)(TagModel, _Model5); | ||
function TagModel() { | ||
(0, _classCallCheck3.default)(this, TagModel); | ||
return (0, _possibleConstructorReturn3.default)(this, _Model5.apply(this, arguments)); | ||
} | ||
return TagModel; | ||
}(_Model8.default); | ||
Tag.modelName = 'Tag'; | ||
Tag.options = { | ||
idAttribute: 'name' | ||
}; | ||
Tag.fields = { | ||
name: (0, _fields.attr)() | ||
}; | ||
var Publisher = function (_Model6) { | ||
(0, _inherits3.default)(PublisherModel, _Model6); | ||
function PublisherModel() { | ||
(0, _classCallCheck3.default)(this, PublisherModel); | ||
return (0, _possibleConstructorReturn3.default)(this, _Model5.apply(this, arguments)); | ||
return (0, _possibleConstructorReturn3.default)(this, _Model6.apply(this, arguments)); | ||
} | ||
return PublisherModel; | ||
}(_Model7.default); | ||
}(_Model8.default); | ||
Publisher.modelName = 'Publisher'; | ||
@@ -221,2 +253,3 @@ Publisher.fields = { | ||
Genre: Genre, | ||
Tag: Tag, | ||
Publisher: Publisher | ||
@@ -232,2 +265,3 @@ }; | ||
Genre = models.Genre, | ||
Tag = models.Tag, | ||
Publisher = models.Publisher; | ||
@@ -237,3 +271,3 @@ | ||
var orm = new _ORM2.default(); | ||
orm.register(Book, Author, Cover, Genre, Publisher); | ||
orm.register(Book, Author, Cover, Genre, Tag, Publisher); | ||
return orm; | ||
@@ -255,2 +289,3 @@ } | ||
Genre = _orm$mutableSession.Genre, | ||
Tag = _orm$mutableSession.Tag, | ||
Book = _orm$mutableSession.Book, | ||
@@ -268,2 +303,5 @@ Publisher = _orm$mutableSession.Publisher; | ||
}); | ||
TAGS_INITIAL.forEach(function (props) { | ||
return Tag.create(props); | ||
}); | ||
BOOKS_INITIAL.forEach(function (props) { | ||
@@ -270,0 +308,0 @@ return Book.create(props); |
@@ -8,2 +8,6 @@ 'use strict'; | ||
var _typeof2 = require('babel-runtime/helpers/typeof'); | ||
var _typeof3 = _interopRequireDefault(_typeof2); | ||
var _keys = require('babel-runtime/core-js/object/keys'); | ||
@@ -219,2 +223,11 @@ | ||
if ((typeof payload === 'undefined' ? 'undefined' : (0, _typeof3.default)(payload)) !== 'object') { | ||
/** | ||
* payload could also be a function in which case | ||
* we would have no way of knowing what it does, | ||
* so we default to false for non-objects | ||
*/ | ||
return false; | ||
} | ||
if (!payload.hasOwnProperty(attribute)) return false; | ||
@@ -221,0 +234,0 @@ var attributeValue = payload[attribute]; |
{ | ||
"name": "redux-orm", | ||
"version": "0.10.0", | ||
"version": "0.10.1", | ||
"description": "Simple ORM to manage and query your state trees", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -30,4 +30,6 @@ import deepFreeze from 'deep-freeze'; | ||
Genre: expect.anything(), | ||
Tag: expect.anything(), | ||
Author: expect.anything(), | ||
BookGenres: expect.anything(), | ||
BookTags: expect.anything(), | ||
Publisher: expect.anything() | ||
@@ -49,2 +51,8 @@ }) | ||
expect(state.Tag.items).toHaveLength(4); | ||
expect(Object.keys(state.Tag.itemsById)).toHaveLength(4); | ||
expect(state.BookTags.items).toHaveLength(5); | ||
expect(Object.keys(state.BookTags.itemsById)).toHaveLength(5); | ||
expect(state.Author.items).toHaveLength(3); | ||
@@ -116,3 +124,3 @@ expect(Object.keys(state.Author.itemsById)).toHaveLength(3); | ||
expect(book.toString()).toBe('Book: {id: 0, name: Tommi Kaikkonen - an Autobiography, ' + | ||
'releaseYear: 2050, author: 0, cover: 0, genres: [0, 1], publisher: 1}'); | ||
'releaseYear: 2050, author: 0, cover: 0, genres: [0, 1], tags: [Technology, Literary], publisher: 1}'); | ||
}); | ||
@@ -167,2 +175,3 @@ | ||
Genre, | ||
Tag, | ||
} = session; | ||
@@ -182,2 +191,14 @@ | ||
expect(relatedBooks.modelClass).toBe(Book); | ||
// Forward (from many-to-many field declaration with idAttribute is name) | ||
const relatedTags = book.tags; | ||
expect(relatedTags).toBeInstanceOf(QuerySet); | ||
expect(relatedTags.modelClass).toBe(Tag); | ||
expect(relatedTags.count()).toBe(2); | ||
// Backward | ||
const tag = Tag.first(); | ||
const tagRelatedBooks = tag.books; | ||
expect(tagRelatedBooks).toBeInstanceOf(QuerySet); | ||
expect(tagRelatedBooks.modelClass).toBe(Book); | ||
}); | ||
@@ -184,0 +205,0 @@ |
@@ -62,2 +62,3 @@ import { ORM, Session, Model, oneToOne, fk, many } from '../'; | ||
let Genre; | ||
let Tag; | ||
let Publisher; | ||
@@ -70,2 +71,3 @@ beforeEach(() => { | ||
Genre, | ||
Tag, | ||
Publisher, | ||
@@ -104,3 +106,3 @@ } = createTestModels()); | ||
it('correctly sets model prototypes', () => { | ||
orm.register(Book, Author, Cover, Genre, Publisher); | ||
orm.register(Book, Author, Cover, Genre, Tag, Publisher); | ||
expect(Book.isSetUp).toBeFalsy(); | ||
@@ -124,2 +126,8 @@ | ||
let tagsDescriptor = Object.getOwnPropertyDescriptor( | ||
Book.prototype, | ||
'tags' | ||
); | ||
expect(tagsDescriptor).toBeUndefined(); | ||
let publisherDescriptor = Object.getOwnPropertyDescriptor( | ||
@@ -157,2 +165,9 @@ Book.prototype, | ||
tagsDescriptor = Object.getOwnPropertyDescriptor( | ||
Book.prototype, | ||
'tags' | ||
); | ||
expect(typeof tagsDescriptor.get).toBe('function'); | ||
expect(typeof tagsDescriptor.set).toBe('function'); | ||
publisherDescriptor = Object.getOwnPropertyDescriptor( | ||
@@ -167,3 +182,3 @@ Book.prototype, | ||
it('correctly gets the default state', () => { | ||
orm.register(Book, Author, Cover, Genre, Publisher); | ||
orm.register(Book, Author, Cover, Genre, Tag, Publisher); | ||
const defaultState = orm.getEmptyState(); | ||
@@ -182,2 +197,7 @@ | ||
}, | ||
BookTags: { | ||
items: [], | ||
itemsById: {}, | ||
meta: {}, | ||
}, | ||
Author: { | ||
@@ -198,2 +218,7 @@ items: [], | ||
}, | ||
Tag: { | ||
items: [], | ||
itemsById: {}, | ||
meta: {}, | ||
}, | ||
Publisher: { | ||
@@ -208,3 +233,3 @@ items: [], | ||
it('correctly starts a mutating session', () => { | ||
orm.register(Book, Author, Cover, Genre, Publisher); | ||
orm.register(Book, Author, Cover, Genre, Tag, Publisher); | ||
const initialState = orm.getEmptyState(); | ||
@@ -211,0 +236,0 @@ const session = orm.mutableSession(initialState); |
@@ -8,2 +8,3 @@ import { Model, ORM, QuerySet } from '../'; | ||
let genreQs; | ||
let tagQs; | ||
beforeEach(() => { | ||
@@ -13,2 +14,3 @@ ({ session } = createTestSessionWithData()); | ||
genreQs = session.Genre.getQuerySet(); | ||
tagQs = session.Tag.getQuerySet(); | ||
}); | ||
@@ -19,2 +21,3 @@ | ||
expect(genreQs.count()).toBe(4); | ||
expect(tagQs.count()).toBe(4); | ||
}); | ||
@@ -115,2 +118,3 @@ | ||
Genre, | ||
Tag, | ||
Cover, | ||
@@ -132,3 +136,3 @@ Author, | ||
const orm = new ORM(); | ||
orm.register(Book, Genre, Cover, Author, Publisher); | ||
orm.register(Book, Genre, Tag, Cover, Author, Publisher); | ||
const { session: sess } = createTestSessionWithData(orm); | ||
@@ -135,0 +139,0 @@ |
@@ -9,2 +9,3 @@ import { ORM, Session, createReducer, createSelector } from '../'; | ||
let Genre; | ||
let Tag; | ||
let Author; | ||
@@ -18,2 +19,3 @@ let Publisher; | ||
Genre, | ||
Tag, | ||
Author, | ||
@@ -23,3 +25,3 @@ Publisher, | ||
orm = new ORM(); | ||
orm.register(Book, Cover, Genre, Author, Publisher); | ||
orm.register(Book, Cover, Genre, Tag, Author, Publisher); | ||
emptyState = orm.getEmptyState(); | ||
@@ -33,2 +35,3 @@ }); | ||
Genre.reducer = jest.fn(); | ||
Tag.reducer = jest.fn(); | ||
Publisher.reducer = jest.fn(); | ||
@@ -46,2 +49,3 @@ | ||
expect(Genre.reducer).toHaveBeenCalledTimes(1); | ||
expect(Tag.reducer).toHaveBeenCalledTimes(1); | ||
expect(Publisher.reducer).toHaveBeenCalledTimes(1); | ||
@@ -48,0 +52,0 @@ }); |
@@ -10,2 +10,3 @@ import { ORM } from '../'; | ||
let Genre; | ||
let Tag; | ||
let Author; | ||
@@ -19,2 +20,3 @@ let Publisher; | ||
Genre, | ||
Tag, | ||
Author, | ||
@@ -24,3 +26,3 @@ Publisher, | ||
orm = new ORM(); | ||
orm.register(Book, Cover, Genre, Author, Publisher); | ||
orm.register(Book, Cover, Genre, Tag, Author, Publisher); | ||
emptyState = orm.getEmptyState(); | ||
@@ -33,2 +35,3 @@ }); | ||
expect(Genre.session).toBeUndefined(); | ||
expect(Tag.session).toBeUndefined(); | ||
expect(Cover.session).toBeUndefined(); | ||
@@ -42,2 +45,3 @@ expect(Publisher.session).toBeUndefined(); | ||
expect(session.Genre.session).toBe(session); | ||
expect(session.Tag.session).toBe(session); | ||
expect(session.Cover.session).toBe(session); | ||
@@ -53,2 +57,3 @@ expect(session.Publisher.session).toBe(session); | ||
expect(isSubclass(session.Genre, Genre)).toBe(true); | ||
expect(isSubclass(session.Tag, Tag)).toBe(true); | ||
expect(isSubclass(session.Publisher, Publisher)).toBe(true); | ||
@@ -119,2 +124,3 @@ }); | ||
expect(nextState[Genre.modelName]).toBe(emptyState[Genre.modelName]); | ||
expect(nextState[Tag.modelName]).toBe(emptyState[Tag.modelName]); | ||
expect(nextState[Publisher.modelName]).toBe(emptyState[Publisher.modelName]); | ||
@@ -130,3 +136,3 @@ }); | ||
expect(firstSession.sessionBoundModels).toHaveLength(6); | ||
expect(firstSession.sessionBoundModels).toHaveLength(8); | ||
@@ -136,2 +142,3 @@ expect(firstSession.Book).not.toBe(secondSession.Book); | ||
expect(firstSession.Genre).not.toBe(secondSession.Genre); | ||
expect(firstSession.Tag).not.toBe(secondSession.Tag); | ||
expect(firstSession.Cover).not.toBe(secondSession.Cover); | ||
@@ -138,0 +145,0 @@ expect(firstSession.Publisher).not.toBe(secondSession.Publisher); |
@@ -125,2 +125,33 @@ import deepFreeze from 'deep-freeze'; | ||
it('filter works correctly with "idAttribute" is "name" and filter argument is a function', () => { | ||
state = deepFreeze({ | ||
items: ['work', 'personal', 'urgent'], | ||
itemsById: { | ||
work: { | ||
name: 'work', | ||
}, | ||
personal: { | ||
name: 'personal', | ||
}, | ||
urgent: { | ||
name: 'urgent', | ||
}, | ||
}, | ||
meta: {}, | ||
}); | ||
table = new Table({ idAttribute: 'name' }); | ||
const clauses = [ | ||
{ | ||
type: FILTER, | ||
payload: (attrs) => | ||
['work', 'urgent'] | ||
.indexOf(attrs[table.idAttribute]) > -1 | ||
} | ||
]; | ||
const result = table.query(state, clauses); | ||
expect(result.length).toBe(2); | ||
expect(result[0]).toBe(state.itemsById.work); | ||
expect(result[1]).toBe(state.itemsById.urgent); | ||
}); | ||
it('orderBy works correctly with prop argument', () => { | ||
@@ -156,4 +187,4 @@ const clauses = [{ type: ORDER_BY, payload: [['data'], ['inc']] }]; | ||
const clauses = [ | ||
{ type: FILTER, payload: row => row.id !== 1 }, | ||
{ type: FILTER, payload: { id: 1 } }, | ||
{ type: FILTER, payload: row => row.id !== 1 }, | ||
{ type: FILTER, payload: { id: 1 } }, | ||
]; | ||
@@ -160,0 +191,0 @@ const result = table.query(state, clauses); |
@@ -51,2 +51,17 @@ import ORM from '../ORM'; | ||
const TAGS_INITIAL = [ | ||
{ | ||
name: 'Technology', | ||
}, | ||
{ | ||
name: 'Literary', | ||
}, | ||
{ | ||
name: 'Natural', | ||
}, | ||
{ | ||
name: 'Redux', | ||
}, | ||
]; | ||
const BOOKS_INITIAL = [ | ||
@@ -58,2 +73,3 @@ { | ||
genres: [0, 1], | ||
tags: ['Technology', 'Literary'], | ||
releaseYear: 2050, | ||
@@ -67,2 +83,3 @@ publisher: 1, | ||
genres: [2], | ||
tags: ['Technology'], | ||
releaseYear: 2008, | ||
@@ -76,2 +93,3 @@ publisher: 0, | ||
genres: [2, 3], | ||
tags: ['Technology', 'Redux'], | ||
releaseYear: 2015, | ||
@@ -101,2 +119,3 @@ publisher: 0, | ||
genres: many('Genre', 'books'), | ||
tags: many('Tag', 'books'), | ||
publisher: fk('Publisher', 'books'), | ||
@@ -138,2 +157,11 @@ }; | ||
const Tag = class TagModel extends Model {}; | ||
Tag.modelName = 'Tag'; | ||
Tag.options = { | ||
idAttribute: 'name', | ||
}; | ||
Tag.fields = { | ||
name: attr(), | ||
}; | ||
const Publisher = class PublisherModel extends Model {}; | ||
@@ -151,2 +179,3 @@ Publisher.modelName = 'Publisher'; | ||
Genre, | ||
Tag, | ||
Publisher, | ||
@@ -163,2 +192,3 @@ }; | ||
Genre, | ||
Tag, | ||
Publisher, | ||
@@ -168,3 +198,3 @@ } = models; | ||
const orm = new ORM(); | ||
orm.register(Book, Author, Cover, Genre, Publisher); | ||
orm.register(Book, Author, Cover, Genre, Tag, Publisher); | ||
return orm; | ||
@@ -181,3 +211,3 @@ } | ||
const state = orm.getEmptyState(); | ||
const { Author, Cover, Genre, Book, Publisher } = orm.mutableSession(state); | ||
const { Author, Cover, Genre, Tag, Book, Publisher } = orm.mutableSession(state); | ||
@@ -187,2 +217,3 @@ AUTHORS_INITIAL.forEach(props => Author.create(props)); | ||
GENRES_INITIAL.forEach(props => Genre.create(props)); | ||
TAGS_INITIAL.forEach(props => Tag.create(props)); | ||
BOOKS_INITIAL.forEach(props => Book.create(props)); | ||
@@ -189,0 +220,0 @@ PUBLISHERS_INITIAL.forEach(props => Publisher.create(props)); |
@@ -178,2 +178,11 @@ import forOwn from 'lodash/forOwn'; | ||
if (typeof payload !== 'object') { | ||
/** | ||
* payload could also be a function in which case | ||
* we would have no way of knowing what it does, | ||
* so we default to false for non-objects | ||
*/ | ||
return false; | ||
} | ||
if (!payload.hasOwnProperty(attribute)) return false; | ||
@@ -180,0 +189,0 @@ const attributeValue = payload[attribute]; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
5874536
132
29528
0
1