UNPKG

berea

Version:

A promise-wrapped library and ORM for using https://scripture.api.bible

119 lines (107 loc) 4.18 kB
const BibleService = require('../../src/bibleService'); const Bible = require('../../src/models/bible.model'); const Chapter = require('../../src/models/chapter.model'); const Passage = require('../../src/models/passage.model'); const service = new BibleService('5ae573a324440896fabd2942943728a5', 1); const bible = new Bible('06125adad2d5898a-01', service); const passageMock = { id: 'GEN.1.1-GEN.4.20', orgId: 'GEN.1.1-GEN.4.20', bibleId: '06125adad2d5898a-01', bookId: 'GEN', }; describe('Model: Passage', () => { describe('constructor', () => { describe('default props', () => { const passage = new Passage({}, bible); it('has an id', () => { expect(passage).toHaveProperty('id', ''); }); it('has empty data', () => { expect(passage).toHaveProperty('data'); expect(passage.data).toMatchObject({}); }); it('has a service', () => { expect(passage).toHaveProperty('bibleService'); expect(passage.bibleService).toBeInstanceOf(BibleService); }); }); describe('passage Props', () => { const passage = new Passage(passageMock, bible); it('has an id', () => { expect(passage).toHaveProperty('id', passageMock.id); }); it('has a name', () => { expect(passage).toHaveProperty('name', passageMock.reference); }); it('has a startVerseid', () => { expect(passage).toHaveProperty('firstVerseId', 'GEN.1.1'); }); it('has an endVerseId', () => { expect(passage).toHaveProperty('lastVerseId', 'GEN.4.20'); }); it('has a bookId', () => { expect(passage).toHaveProperty('bookId', passageMock.bookId); }); it('has chapterIds', () => { expect(passage).toHaveProperty('chapterIds'); expect(passage.chapterIds).toEqual(expect.arrayContaining(['GEN.1', 'GEN.2', 'GEN.3', 'GEN.4'])); }); it('has verseCount', () => { expect(passage).toHaveProperty('verseCount'); }); it('has a content', () => { expect(passage).toHaveProperty('content'); }); }); }); describe('refreshData', () => { it(' will populate data', async () => { const passage = new Passage('GEN.1.1-GEN.4.20', bible); await passage.refreshData(); expect(passage.data).toHaveProperty('bookId'); expect(passage.data).toHaveProperty('copyright'); expect(passage.data).toHaveProperty('verseCount', 100); }); it('dynamic props will have info', async () => { const passage = new Passage('GEN.1.1-GEN.4.20', bible); await passage.refreshData(); expect(passage.content.length).toBeGreaterThan(0); expect(passage.data.copyright.length).toBeGreaterThan(0); }); it('will have a property containing chapter objects', async () => { const passage = new Passage('GEN.1.1-GEN.4.20', bible); await passage.refreshData(); expect(passage.chapters).toBeInstanceOf(Array); expect(passage.chapters.length).toBeGreaterThan(0); expect(passage.chapters[0]).toBeInstanceOf(Chapter); }); it('will have verse content in its chapter objects', async () => { const passage = new Passage('GEN.1.1-GEN.4.20', bible); await passage.refreshData(); const [firstChapter] = passage.chapters; expect(firstChapter).toHaveProperty('data'); expect(firstChapter.data).toHaveProperty('content'); expect(firstChapter.data).toHaveProperty('verseCount'); }); }); describe('search', () => { describe('it finds stuff only in the Chapter', () => { const passage = new Passage('GEN.1.1-GEN.4.20', bible); it('can search by string', async () => { const results = await passage.search('Cain'); expect(results).toBeInstanceOf(Object); expect(results.total).toEqual(11); }); it('can search by object', async () => { const results = await passage.search({ query: 'Cain', limit: 25, }); expect(results).toBeInstanceOf(Object); expect(results.total).toEqual(11); expect(results.verseCount).toEqual(11); }); }); }); });