UNPKG

@caspingus/lt

Version:

A utility library of helpers and tools for working with Learnosity APIs.

227 lines (199 loc) 8.01 kB
const puppeteer = require('puppeteer'); const server = require('./api-server/src/server'); describe('LT Core', () => { let browser; let page; beforeAll(async () => { await server.startServer(); browser = await puppeteer.launch(); page = await browser.newPage(); // Log all console messages from the test page page.on('console', consoleMsg => { if (!consoleMsg.text().includes('Learnosity developer version')) { console.log(`== From test page console: ${consoleMsg.text()}`); } }); page.on('requestfailed', request => { console.log(`${request.url()} failed to load. Reason: ${request.failure().errorText}`); }); page.on('pageerror', error => { console.log(`Page error: ${error.message}`); }); page.on('response', response => { if (!response.ok()) { console.log(`HTTP error: ${response.status()} on ${response.url()}`); } }); console.time('page-load-complete'); await page.goto('http://localhost:5150/itemsapi'); console.timeEnd('page-load-complete'); console.time('selector-lookup'); await page.waitForSelector('.has-loaded', { timeout: 6000 }); console.timeEnd('selector-lookup'); }); afterAll(async () => { await browser.close(); server.stopServer(); }); describe('Activity module', () => { describe('activity()', () => { test('is an object', async () => { const value = await page.evaluate(() => { return window.LT.activity(); }); expect(value).toEqual(expect.any(Object)); }); test('has the correct activity_id', async () => { const value = await page.evaluate(() => { return window.LT.activity().activity_id; }); expect(value).toEqual('lt_integration_testing'); }); }); }); describe('Items module', () => { describe('isFirstItem()', () => { test('is a boolean', async () => { const value = await page.evaluate(() => { return window.LT.isFirstItem(); }); expect(value).toEqual(expect.any(Boolean)); }); test('is true (when on first item)', async () => { const value = await page.evaluate(() => { return window.LT.itemReference(); }); expect(value).toBeTruthy(); }); test('is false (when not on first item)', async () => { const value = await page.evaluate(() => { return new Promise((resolve, reject) => { itemsApp.on('item:changed', () => { resolve(window.LT.isFirstItem()); }); window.LT.navigate(1); }); }); expect(value).toBeFalsy(); }); }); describe('isLastItem()', () => { test('is a boolean', async () => { const value = await page.evaluate(() => { return window.LT.isLastItem(); }); expect(value).toEqual(expect.any(Boolean)); }); test('is false (when not on last item)', async () => { const value = await page.evaluate(() => { return window.LT.isLastItem(); }); expect(value).toBeFalsy(); }); test('is true (when on last item)', async () => { const value = await page.evaluate(() => { return new Promise((resolve, reject) => { itemsApp.on('item:changed', () => { resolve(window.LT.isLastItem()); }); window.LT.navigate(LT.totalItems() - 1); }); }); expect(value).toBeTruthy(); }); }); describe('itemReference()', () => { test('is a string', async () => { const value = await page.evaluate(() => { return window.LT.itemReference(); }); expect(value).toEqual(expect.any(String)); }); test('matches an exact value', async () => { const value = await page.evaluate(() => { return new Promise((resolve, reject) => { itemsApp.on('item:changed', () => { resolve(window.LT.itemReference()); }); window.LT.navigate(0); }); }); expect(value).toBe('itembranching-demo-open1'); }); }); describe('itemPosition()', () => { test('is a number', async () => { const value = await page.evaluate(() => { return window.LT.itemPosition(); }); expect(value).toEqual(expect.any(Number)); }); test('matches an exact value of 1', async () => { const value = await page.evaluate(() => { // We assume we're already on item 1 from the test above return window.LT.itemPosition(); }); expect(value).toBe(1); }); test('matches an exact value of 2', async () => { const value = await page.evaluate(() => { return new Promise((resolve, reject) => { itemsApp.on('item:changed', () => { resolve(window.LT.itemPosition()); }); window.LT.navigate(1); }); }); expect(value).toBe(2); }); }); describe('itemElement()', () => { test('is an element', async () => { const value = await page.evaluate(() => { return window.LT.itemElement(); }); expect.stringContaining('<div'); }); }); describe('dynamic()', () => { test('is an empty object', async () => { const value = await page.evaluate(() => { return window.LT.dynamic(); }); expect(value).toEqual({}); }); // TODO: item with dynamic content }); describe('flag()', () => { test('is a flagged item', async () => { const value = await page.evaluate(() => { window.LT.flag(); return window.LT.item().user_flagged; }); expect(value).toBeTruthy(); }); test('is not a flagged item', async () => { const value = await page.evaluate(() => { window.LT.flag(); return window.LT.item().user_flagged; }); expect(value).toBeFalsy(); }); }); describe('isFlagged()', () => { test('is a flagged item', async () => { const value = await page.evaluate(() => { return window.LT.isFlagged(); }); expect(value).toBeFalsy(); }); test('is not a flagged item', async () => { const value = await page.evaluate(() => { window.LT.flag(); return window.LT.isFlagged(); }); expect(value).toBeTruthy(); }); }); }); });