UNPKG

@ptrumpis/snap-camerakit-bridge

Version:

Library for calling the Snapchat Camera-Kit API in Node.js Hackerman style 🤓

88 lines (67 loc) • 3.01 kB
import assert from 'assert'; import sinon from 'sinon'; import { chromium } from 'playwright'; import CameraKitBridge from '../src/bridge/CameraKitBridge.js'; describe('CameraKitBridge', function () { let browserStub, pageStub, logHandlerStub, cameraKitBridge; beforeEach(function () { browserStub = { newPage: sinon.stub(), close: sinon.stub().resolves(), }; pageStub = { goto: sinon.stub().resolves(), close: sinon.stub().resolves(), on: sinon.stub(), }; logHandlerStub = sinon.stub(); sinon.stub(chromium, 'launch').resolves(browserStub); browserStub.newPage.resolves(pageStub); cameraKitBridge = new CameraKitBridge({ logHandler: logHandlerStub }); }); afterEach(function () { sinon.restore(); }); it('should start the browser and navigate to the target URL', async function () { const result = await cameraKitBridge.start(); assert.strictEqual(chromium.launch.calledOnce, true); assert.strictEqual(browserStub.newPage.calledOnce, true); assert.strictEqual(pageStub.goto.calledOnceWith('https://localhost:8080/?websocketPort=3000', { waitUntil: 'domcontentloaded' }), true); assert.strictEqual(result, true); }); it('should return false if start is called while browser is already running', async function () { await cameraKitBridge.start(); const result = await cameraKitBridge.start(); assert.strictEqual(result, false); }); it('should close the browser and reset state', async function () { await cameraKitBridge.start(); const result = await cameraKitBridge.close(); assert.strictEqual(pageStub.close.calledOnce, true); assert.strictEqual(browserStub.close.calledOnce, true); assert.strictEqual(result, true); }); it('should return false if close is called when browser is not running', async function () { const result = await cameraKitBridge.close(); assert.strictEqual(result, false); }); it('should log messages received from the page console', async function () { await cameraKitBridge.start(); const consoleCallback = pageStub.on.getCall(0).args[1]; consoleCallback({ text: () => 'Test log message' }); assert.strictEqual(logHandlerStub.calledOnceWith('Test log message'), true); }); it('should reject if an error occurs in start', async function () { chromium.launch.rejects(new Error('Launch failed')); await assert.rejects(() => cameraKitBridge.start(), { message: 'Launch failed', }); }); it('should reject if an error occurs in close', async function () { await cameraKitBridge.start(); pageStub.close.rejects(new Error('Close failed')); await assert.rejects(() => cameraKitBridge.close(), { message: 'Close failed', }); }); });