Akim fbfc344abf
chore(js-client): Update and restructure examples [fixes DXJ-454] (#464)
* Update examples

* Update js-client examples

* Add cli to example

* Fixes

* Update js-client

* Update js-client version in js-client examples

* PR fixes

* Remove marine-js

* Update locks

* Fix aqua

* Remove unused import

* Adjust import

* Change code comment

* Update example structures

* Fix quickstart examples

* Add aqua command to README

* Add marine example

* Fix image links

* Fixes

* Misc fixes
2023-12-12 18:46:57 +07:00

105 lines
3.0 KiB
TypeScript

import { Page } from 'puppeteer';
import handler from 'serve-handler';
import http from 'http';
import path from 'path';
const port = 3000;
const uri = `http://localhost:${port}/`;
const publicPath = path.join(__dirname, '../../build/');
console.log(publicPath);
const server = http.createServer((request, response) => {
return handler(request, response, {
public: publicPath,
});
});
const startServer = async () => {
return new Promise((resolve: any) => {
server.listen(port, resolve);
});
};
const stopServer = async () => {
return new Promise((resolve: any) => {
server.close(resolve);
});
};
const peerIdLength = '12D3KooWM2CYSHefG6KPKbYFAgsbPh8p6b8HYHc6VNkge2rPtYv5'.length;
const loadApp = async (page: Page) => {
console.log('opening page...');
await page.goto(uri);
console.log('clicking connect button...');
await page.click('.btn');
console.log('waiting for fluence to connect...');
await page.waitForTimeout(1000);
console.log('waiting for "say hello" button to appear...');
await page.waitForSelector('.btn-hello');
console.log('getting self peer id and relay...');
const peerId = await page.$eval('#peerId', (x) => x.textContent);
const relayId = await page.$eval('#relayId', (x) => x.textContent);
expect(peerId?.length).toBe(peerIdLength);
expect(relayId?.length).toBe(peerIdLength);
return {
peerId,
relayId,
};
};
const waitForSelectorAndGetText = async (page: Page, selector: string) => {
const page1Message = await page.waitForSelector('#message');
return await page1Message?.evaluate((x) => x.textContent?.trim().replace('\n', ''));
};
describe('smoke test', () => {
beforeAll(startServer);
afterAll(stopServer);
it('should work', async () => {
const page1 = await browser.newPage();
const page2 = await browser.newPage();
console.log('=== browser 1 ===');
const peerRelay1 = await loadApp(page1);
console.log('=== browser 2 ===');
const peerRelay2 = await loadApp(page2);
console.log('=== browser 1 ===');
console.log('filling form...');
await page1.focus('#targetPeerId');
await page1.keyboard.type(peerRelay2.peerId!);
await page1.focus('#targetRelayId');
await page1.keyboard.type(peerRelay2.relayId!);
console.log('clicking "say hello"...');
await page1.click('.btn-hello');
console.log('waiting for particle to execute...');
await page1.waitForTimeout(1000);
console.log('=== finale ===');
console.log('getting message from page1...');
const page1Message = await waitForSelectorAndGetText(page1, '#message');
console.log('getting message from page2...');
const page2Message = await waitForSelectorAndGetText(page2, '#message');
expect(page1Message).toBe('Hello back to you, ' + peerRelay1.peerId);
expect(page2Message).toBe('Hello from: ' + peerRelay1.peerId);
}, 15000);
});