mirror of
https://github.com/misskey-dev/summaly.git
synced 2025-05-02 20:27:25 +09:00
217 lines
5.4 KiB
JavaScript
217 lines
5.4 KiB
JavaScript
/**
|
|
* Tests!
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/* dependencies below */
|
|
|
|
const assert = require('assert');
|
|
const express = require('express');
|
|
const summaly = require('../').default;
|
|
|
|
/* settings below */
|
|
|
|
Error.stackTraceLimit = Infinity;
|
|
|
|
// During the test the env variable is set to test
|
|
process.env.NODE_ENV = 'test';
|
|
process.env.SUMMALY_ALLOW_PRIVATE_IP = 'true';
|
|
|
|
// Display detail of unhandled promise rejection
|
|
process.on('unhandledRejection', console.dir);
|
|
|
|
const port = 3000;
|
|
const host = `http://localhost:${port}`;
|
|
|
|
let server;
|
|
|
|
afterEach(() => {
|
|
server.close();
|
|
});
|
|
|
|
/* tests below */
|
|
|
|
it('faviconがHTML上で指定されていないが、ルートに存在する場合、正しく設定される', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/no-favicon.html');
|
|
});
|
|
app.get('/favicon.ico', (_, res) => res.sendStatus(200));
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.icon, `${host}/favicon.ico`);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('faviconがHTML上で指定されていなくて、ルートにも存在しなかった場合 null になる', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/no-favicon.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.icon, null);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('titleがcleanupされる', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/dirty-title.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.title, 'Strawberry Pasta');
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('Private IP blocking', () => {
|
|
before(() => {
|
|
process.env.SUMMALY_ALLOW_PRIVATE_IP = 'false';
|
|
});
|
|
|
|
it('private ipなサーバーの情報を取得できない', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/og-title.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
await assert.rejects(async () => await summaly(host));
|
|
done();
|
|
});
|
|
});
|
|
|
|
after(() => {
|
|
process.env.SUMMALY_ALLOW_PRIVATE_IP = 'true';
|
|
});
|
|
});
|
|
|
|
describe('OGP', () => {
|
|
it('title', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/og-title.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.title, 'Strawberry Pasta');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('description', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/og-description.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.description, 'Strawberry Pasta');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('site_name', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/og-site_name.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.sitename, 'Strawberry Pasta');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('thumbnail', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/og-image.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.thumbnail, 'https://himasaku.net/himasaku.png');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('TwitterCard', () => {
|
|
it('title', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/twitter-title.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.title, 'Strawberry Pasta');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('description', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/twitter-description.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.description, 'Strawberry Pasta');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('thumbnail', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/twitter-image.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.thumbnail, 'https://himasaku.net/himasaku.png');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Player detection - PeerTube:video => video', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/player-peertube-video.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.player.url, 'https://example.com/embedurl');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Player detection - Pleroma:video => video', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/player-pleroma-video.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.player.url, 'https://example.com/embedurl');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Player detection - Pleroma:image => image', done => {
|
|
const app = express();
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/htmls/player-pleroma-image.html');
|
|
});
|
|
server = app.listen(port, async () => {
|
|
const summary = await summaly(host);
|
|
assert.equal(summary.player.url, null);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|