mirror of
https://github.com/misskey-dev/summaly.git
synced 2025-08-03 06:46:34 +09:00
wip???
This commit is contained in:
216
test/index.js
216
test/index.js
@ -1,216 +0,0 @@
|
||||
/**
|
||||
* Tests!
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/* dependencies below */
|
||||
|
||||
import * as assert from 'assert';
|
||||
import express from 'express';
|
||||
import { summaly } from '../built/index.js';
|
||||
|
||||
/* 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();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
225
test/index.ts
Normal file
225
test/index.ts
Normal file
@ -0,0 +1,225 @@
|
||||
/**
|
||||
* Tests!
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/* dependencies below */
|
||||
|
||||
import * as fs from 'fs';
|
||||
import fastify from 'fastify';
|
||||
import { summaly } from '../built/index.js';
|
||||
import { dirname } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import {expect, jest, test, describe, beforeEach, afterEach} from '@jest/globals';
|
||||
|
||||
const _filename = fileURLToPath(import.meta.url);
|
||||
const _dirname = dirname(_filename);
|
||||
|
||||
/* 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';
|
||||
|
||||
const port = 3060;
|
||||
const host = `http://localhost:${port}`;
|
||||
|
||||
// Display detail of unhandled promise rejection
|
||||
process.on('unhandledRejection', console.dir);
|
||||
|
||||
let app: ReturnType<typeof fastify>;
|
||||
|
||||
afterEach(() => {
|
||||
if (app) app.close();
|
||||
});
|
||||
|
||||
/* tests below */
|
||||
|
||||
test('faviconがHTML上で指定されていないが、ルートに存在する場合、正しく設定される', async () => {
|
||||
console.log('AAAAAAAAAAAAAAAAAAAAAAAA')
|
||||
app = fastify({
|
||||
logger: true,
|
||||
});
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/no-favicon.html'));
|
||||
});
|
||||
app.get('/favicon.ico', (_, reply) => reply.status(200));
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.icon).toBe(`${host}/favicon.ico`);
|
||||
});
|
||||
/*
|
||||
test('faviconがHTML上で指定されていなくて、ルートにも存在しなかった場合 null になる', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/no-favicon.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.icon).toBe(null);
|
||||
});
|
||||
|
||||
test('titleがcleanupされる', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/ditry-title.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.title).toBe('Strawberry Pasta');
|
||||
});
|
||||
|
||||
describe('Private IP blocking', () => {
|
||||
beforeEach(() => {
|
||||
process.env.SUMMALY_ALLOW_PRIVATE_IP = 'false';
|
||||
});
|
||||
|
||||
test('private ipなサーバーの情報を取得できない', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/og-title.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
expect(summaly(host)).toThrow();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
process.env.SUMMALY_ALLOW_PRIVATE_IP = 'true';
|
||||
});
|
||||
});
|
||||
|
||||
describe('OGP', () => {
|
||||
test('title', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/og-title.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.title).toBe('Strawberry Pasta');
|
||||
});
|
||||
|
||||
test('description', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/og-description.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.description).toBe('Strawberry Pasta');
|
||||
});
|
||||
|
||||
test('site_name', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/og-site_name.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.sitename).toBe('Strawberry Pasta');
|
||||
});
|
||||
|
||||
test('thumbnail', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/og-image.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.thumbnail).toBe('https://himasaku.net/himasaku.png');
|
||||
});
|
||||
});
|
||||
|
||||
describe('TwitterCard', () => {
|
||||
test('title', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/twitter-title.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.title).toBe('Strawberry Pasta');
|
||||
});
|
||||
|
||||
test('description', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/twitter-description.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.description).toBe('Strawberry Pasta');
|
||||
});
|
||||
|
||||
test('thumbnail', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/twitter-image.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.thumbnail).toBe('https://himasaku.net/himasaku.png');
|
||||
});
|
||||
|
||||
test('Player detection - PeerTube:video => video', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/player-peertube-video.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.player.url).toBe('https://example.com/embedurl');
|
||||
});
|
||||
|
||||
test('Player detection - Pleroma:video => video', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/player-pleroma-video.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.player.url).toBe('https://example.com/embedurl');
|
||||
});
|
||||
|
||||
test('Player detection - Pleroma:image => image', async () => {
|
||||
app = fastify();
|
||||
app.get('/', (request, reply) => {
|
||||
return reply.send(fs.createReadStream(_dirname + '/htmls/player-pleroma-image.html'));
|
||||
});
|
||||
await app.listen({ port });
|
||||
await app.ready();
|
||||
|
||||
const summary = await summaly(host);
|
||||
expect(summary.player.url).toBe('https://example.com/embedurl');
|
||||
});
|
||||
});
|
||||
*/
|
Reference in New Issue
Block a user