-
Date: Sun, 5 Jun 2022 12:26:36 +0900
Subject: [PATCH 18/21] chore: lint fixes
---
.../client/src/components/modal-page-window.vue | 16 ++++++++--------
packages/client/src/components/note-detailed.vue | 16 ++++++++--------
packages/client/src/components/note.vue | 14 +++++++-------
.../components/notification-setting-window.vue | 15 ++++++++-------
packages/client/src/components/notification.vue | 9 +++++----
packages/client/src/components/notifications.vue | 7 +++----
packages/client/src/components/number-diff.vue | 4 ++--
7 files changed, 41 insertions(+), 40 deletions(-)
diff --git a/packages/client/src/components/modal-page-window.vue b/packages/client/src/components/modal-page-window.vue
index 2e17d5d030..21bdb657b7 100644
--- a/packages/client/src/components/modal-page-window.vue
+++ b/packages/client/src/components/modal-page-window.vue
@@ -39,8 +39,8 @@ export default defineComponent({
inject: {
sideViewHook: {
- default: null
- }
+ default: null,
+ },
},
provide() {
@@ -94,31 +94,31 @@ export default defineComponent({
}, {
icon: 'fas fa-expand-alt',
text: this.$ts.showInPage,
- action: this.expand
+ action: this.expand,
}, this.sideViewHook ? {
icon: 'fas fa-columns',
text: this.$ts.openInSideView,
action: () => {
this.sideViewHook(this.path);
this.$refs.window.close();
- }
+ },
} : undefined, {
icon: 'fas fa-external-link-alt',
text: this.$ts.popout,
- action: this.popout
+ action: this.popout,
}, null, {
icon: 'fas fa-external-link-alt',
text: this.$ts.openInNewTab,
action: () => {
window.open(this.url, '_blank');
this.$refs.window.close();
- }
+ },
}, {
icon: 'fas fa-link',
text: this.$ts.copyLink,
action: () => {
copyToClipboard(this.url);
- }
+ },
}];
},
},
@@ -155,7 +155,7 @@ export default defineComponent({
onContextmenu(ev: MouseEvent) {
os.contextMenu(this.contextmenu, ev);
- }
+ },
},
});
diff --git a/packages/client/src/components/note-detailed.vue b/packages/client/src/components/note-detailed.vue
index 14bbbd4f3c..6234b710d2 100644
--- a/packages/client/src/components/note-detailed.vue
+++ b/packages/client/src/components/note-detailed.vue
@@ -222,7 +222,7 @@ function react(viaKeyboard = false): void {
reactionPicker.show(reactButton.value, reaction => {
os.api('notes/reactions/create', {
noteId: appearNote.id,
- reaction: reaction
+ reaction: reaction,
});
}, () => {
focus();
@@ -233,7 +233,7 @@ function undoReact(note): void {
const oldReaction = note.myReaction;
if (!oldReaction) return;
os.api('notes/reactions/delete', {
- noteId: note.id
+ noteId: note.id,
});
}
@@ -257,7 +257,7 @@ function onContextmenu(ev: MouseEvent): void {
function menu(viaKeyboard = false): void {
os.popupMenu(getNoteMenu({ note: note, translating, translation, menuButton }), menuButton.value, {
- viaKeyboard
+ viaKeyboard,
}).then(focus);
}
@@ -269,12 +269,12 @@ function showRenoteMenu(viaKeyboard = false): void {
danger: true,
action: () => {
os.api('notes/delete', {
- noteId: note.id
+ noteId: note.id,
});
isDeleted.value = true;
- }
+ },
}], renoteTime.value, {
- viaKeyboard: viaKeyboard
+ viaKeyboard: viaKeyboard,
});
}
@@ -288,14 +288,14 @@ function blur() {
os.api('notes/children', {
noteId: appearNote.id,
- limit: 30
+ limit: 30,
}).then(res => {
replies.value = res;
});
if (appearNote.replyId) {
os.api('notes/conversation', {
- noteId: appearNote.replyId
+ noteId: appearNote.replyId,
}).then(res => {
conversation.value = res.reverse();
});
diff --git a/packages/client/src/components/note.vue b/packages/client/src/components/note.vue
index bc8a0dd19d..e5744d1ce9 100644
--- a/packages/client/src/components/note.vue
+++ b/packages/client/src/components/note.vue
@@ -210,7 +210,7 @@ function react(viaKeyboard = false): void {
reactionPicker.show(reactButton.value, reaction => {
os.api('notes/reactions/create', {
noteId: appearNote.id,
- reaction: reaction
+ reaction: reaction,
});
}, () => {
focus();
@@ -221,7 +221,7 @@ function undoReact(note): void {
const oldReaction = note.myReaction;
if (!oldReaction) return;
os.api('notes/reactions/delete', {
- noteId: note.id
+ noteId: note.id,
});
}
@@ -245,7 +245,7 @@ function onContextmenu(ev: MouseEvent): void {
function menu(viaKeyboard = false): void {
os.popupMenu(getNoteMenu({ note: note, translating, translation, menuButton }), menuButton.value, {
- viaKeyboard
+ viaKeyboard,
}).then(focus);
}
@@ -257,12 +257,12 @@ function showRenoteMenu(viaKeyboard = false): void {
danger: true,
action: () => {
os.api('notes/delete', {
- noteId: note.id
+ noteId: note.id,
});
isDeleted.value = true;
- }
+ },
}], renoteTime.value, {
- viaKeyboard: viaKeyboard
+ viaKeyboard: viaKeyboard,
});
}
@@ -284,7 +284,7 @@ function focusAfter() {
function readPromo() {
os.api('promo/read', {
- noteId: appearNote.id
+ noteId: appearNote.id,
});
isDeleted.value = true;
}
diff --git a/packages/client/src/components/notification-setting-window.vue b/packages/client/src/components/notification-setting-window.vue
index ec1efec261..64d828394b 100644
--- a/packages/client/src/components/notification-setting-window.vue
+++ b/packages/client/src/components/notification-setting-window.vue
@@ -1,5 +1,6 @@
-
import { defineComponent, PropType } from 'vue';
-import XModalWindow from '@/components/ui/modal-window.vue';
+import { notificationTypes } from 'misskey-js';
import MkSwitch from './form/switch.vue';
import MkInfo from './ui/info.vue';
import MkButton from './ui/button.vue';
-import { notificationTypes } from 'misskey-js';
+import XModalWindow from '@/components/ui/modal-window.vue';
export default defineComponent({
components: {
XModalWindow,
MkSwitch,
MkInfo,
- MkButton
+ MkButton,
},
props: {
@@ -53,7 +54,7 @@ export default defineComponent({
type: Boolean,
required: false,
default: true,
- }
+ },
},
emits: ['done', 'closed'],
@@ -93,7 +94,7 @@ export default defineComponent({
for (const type in this.typesMap) {
this.typesMap[type as typeof notificationTypes[number]] = true;
}
- }
- }
+ },
+ },
});
diff --git a/packages/client/src/components/notification.vue b/packages/client/src/components/notification.vue
index 3791c576ee..cbfd809f37 100644
--- a/packages/client/src/components/notification.vue
+++ b/packages/client/src/components/notification.vue
@@ -16,7 +16,8 @@
-
import { defineComponent, ref, onMounted, onUnmounted, watch } from 'vue';
import * as misskey from 'misskey-js';
-import { getNoteSummary } from '@/scripts/get-note-summary';
import XReactionIcon from './reaction-icon.vue';
import MkFollowButton from './follow-button.vue';
import XReactionTooltip from './reaction-tooltip.vue';
+import { getNoteSummary } from '@/scripts/get-note-summary';
import { notePage } from '@/filters/note';
import { userPage } from '@/filters/user';
import { i18n } from '@/i18n';
@@ -87,7 +88,7 @@ import { useTooltip } from '@/scripts/use-tooltip';
export default defineComponent({
components: {
- XReactionIcon, MkFollowButton
+ XReactionIcon, MkFollowButton,
},
props: {
@@ -116,7 +117,7 @@ export default defineComponent({
const readObserver = new IntersectionObserver((entries, observer) => {
if (!entries.some(entry => entry.isIntersecting)) return;
stream.send('readNotification', {
- id: props.notification.id
+ id: props.notification.id,
});
observer.disconnect();
});
diff --git a/packages/client/src/components/notifications.vue b/packages/client/src/components/notifications.vue
index dc900a670d..8eb569c369 100644
--- a/packages/client/src/components/notifications.vue
+++ b/packages/client/src/components/notifications.vue
@@ -19,8 +19,7 @@
From 09b749eb97cfec32b06e0a31f51064f32584ebc8 Mon Sep 17 00:00:00 2001
From: syuilo
Date: Sun, 5 Jun 2022 19:46:52 +0900
Subject: [PATCH 19/21] Update .mocharc.json
---
packages/backend/.mocharc.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/backend/.mocharc.json b/packages/backend/.mocharc.json
index 589522216d..87c571cfd6 100644
--- a/packages/backend/.mocharc.json
+++ b/packages/backend/.mocharc.json
@@ -5,6 +5,6 @@
"loader=./test/loader.js"
],
"slow": 1000,
- "timeout": 3000,
+ "timeout": 10000,
"exit": true
}
From d17298d3b5b5fb7377ad34fe7c2b8613bbf478de Mon Sep 17 00:00:00 2001
From: syuilo
Date: Sun, 5 Jun 2022 20:37:24 +0900
Subject: [PATCH 20/21] fix(test): make chart tests working
---
packages/backend/src/db/postgre.ts | 10 +-
.../backend/src/services/chart/entities.ts | 12 +++
packages/backend/test/chart.ts | 96 +++++++++----------
3 files changed, 65 insertions(+), 53 deletions(-)
diff --git a/packages/backend/src/db/postgre.ts b/packages/backend/src/db/postgre.ts
index 50a85d6267..298f6713ea 100644
--- a/packages/backend/src/db/postgre.ts
+++ b/packages/backend/src/db/postgre.ts
@@ -208,7 +208,15 @@ export const db = new DataSource({
migrations: ['../../migration/*.js'],
});
-export async function initDb() {
+export async function initDb(force = false) {
+ if (force) {
+ if (db.isInitialized) {
+ await db.destroy();
+ }
+ await db.initialize();
+ return;
+ }
+
if (db.isInitialized) {
// nop
} else {
diff --git a/packages/backend/src/services/chart/entities.ts b/packages/backend/src/services/chart/entities.ts
index 13e994cb65..a9eeabd639 100644
--- a/packages/backend/src/services/chart/entities.ts
+++ b/packages/backend/src/services/chart/entities.ts
@@ -11,6 +11,11 @@ import { entity as PerUserFollowingChart } from './charts/entities/per-user-foll
import { entity as PerUserDriveChart } from './charts/entities/per-user-drive.js';
import { entity as ApRequestChart } from './charts/entities/ap-request.js';
+import { entity as TestChart } from './charts/entities/test.js';
+import { entity as TestGroupedChart } from './charts/entities/test-grouped.js';
+import { entity as TestUniqueChart } from './charts/entities/test-unique.js';
+import { entity as TestIntersectionChart } from './charts/entities/test-intersection.js';
+
export const entities = [
FederationChart.hour, FederationChart.day,
NotesChart.hour, NotesChart.day,
@@ -24,4 +29,11 @@ export const entities = [
PerUserFollowingChart.hour, PerUserFollowingChart.day,
PerUserDriveChart.hour, PerUserDriveChart.day,
ApRequestChart.hour, ApRequestChart.day,
+
+ ...(process.env.NODE_ENV === 'test' ? [
+ TestChart.hour, TestChart.day,
+ TestGroupedChart.hour, TestGroupedChart.day,
+ TestUniqueChart.hour, TestUniqueChart.day,
+ TestIntersectionChart.hour, TestIntersectionChart.day,
+ ] : []),
];
diff --git a/packages/backend/test/chart.ts b/packages/backend/test/chart.ts
index 823e388a82..ac0844679f 100644
--- a/packages/backend/test/chart.ts
+++ b/packages/backend/test/chart.ts
@@ -6,26 +6,17 @@ import TestChart from '../src/services/chart/charts/test.js';
import TestGroupedChart from '../src/services/chart/charts/test-grouped.js';
import TestUniqueChart from '../src/services/chart/charts/test-unique.js';
import TestIntersectionChart from '../src/services/chart/charts/test-intersection.js';
-import * as _TestChart from '../src/services/chart/charts/entities/test.js';
-import * as _TestGroupedChart from '../src/services/chart/charts/entities/test-grouped.js';
-import * as _TestUniqueChart from '../src/services/chart/charts/entities/test-unique.js';
-import * as _TestIntersectionChart from '../src/services/chart/charts/entities/test-intersection.js';
-import { async, initTestDb } from './utils.js';
+import { initDb } from '../src/db/postgre.js';
describe('Chart', () => {
let testChart: TestChart;
let testGroupedChart: TestGroupedChart;
let testUniqueChart: TestUniqueChart;
let testIntersectionChart: TestIntersectionChart;
- let clock: lolex.Clock;
+ let clock: lolex.InstalledClock;
- beforeEach(async(async () => {
- await initTestDb(false, [
- _TestChart.entity.hour, _TestChart.entity.day,
- _TestGroupedChart.entity.hour, _TestGroupedChart.entity.day,
- _TestUniqueChart.entity.hour, _TestUniqueChart.entity.day,
- _TestIntersectionChart.entity.hour, _TestIntersectionChart.entity.day,
- ]);
+ beforeEach(async () => {
+ await initDb(true);
testChart = new TestChart();
testGroupedChart = new TestGroupedChart();
@@ -34,14 +25,15 @@ describe('Chart', () => {
clock = lolex.install({
now: new Date(Date.UTC(2000, 0, 1, 0, 0, 0)),
+ shouldClearNativeTimers: true,
});
- }));
+ });
- afterEach(async(async () => {
+ afterEach(() => {
clock.uninstall();
- }));
+ });
- it('Can updates', async(async () => {
+ it('Can updates', async () => {
await testChart.increment();
await testChart.save();
@@ -63,9 +55,9 @@ describe('Chart', () => {
total: [1, 0, 0],
},
});
- }));
+ });
- it('Can updates (dec)', async(async () => {
+ it('Can updates (dec)', async () => {
await testChart.decrement();
await testChart.save();
@@ -87,9 +79,9 @@ describe('Chart', () => {
total: [-1, 0, 0],
},
});
- }));
+ });
- it('Empty chart', async(async () => {
+ it('Empty chart', async () => {
const chartHours = await testChart.getChart('hour', 3, null);
const chartDays = await testChart.getChart('day', 3, null);
@@ -108,9 +100,9 @@ describe('Chart', () => {
total: [0, 0, 0],
},
});
- }));
+ });
- it('Can updates at multiple times at same time', async(async () => {
+ it('Can updates at multiple times at same time', async () => {
await testChart.increment();
await testChart.increment();
await testChart.increment();
@@ -134,9 +126,9 @@ describe('Chart', () => {
total: [3, 0, 0],
},
});
- }));
+ });
- it('複数回saveされてもデータの更新は一度だけ', async(async () => {
+ it('複数回saveされてもデータの更新は一度だけ', async () => {
await testChart.increment();
await testChart.save();
await testChart.save();
@@ -160,9 +152,9 @@ describe('Chart', () => {
total: [1, 0, 0],
},
});
- }));
+ });
- it('Can updates at different times', async(async () => {
+ it('Can updates at different times', async () => {
await testChart.increment();
await testChart.save();
@@ -189,11 +181,11 @@ describe('Chart', () => {
total: [2, 0, 0],
},
});
- }));
+ });
// 仕様上はこうなってほしいけど、実装は難しそうなのでskip
/*
- it('Can updates at different times without save', async(async () => {
+ it('Can updates at different times without save', async () => {
await testChart.increment();
clock.tick('01:00:00');
@@ -219,10 +211,10 @@ describe('Chart', () => {
total: [2, 0, 0]
},
});
- }));
+ });
*/
- it('Can padding', async(async () => {
+ it('Can padding', async () => {
await testChart.increment();
await testChart.save();
@@ -249,10 +241,10 @@ describe('Chart', () => {
total: [2, 0, 0],
},
});
- }));
+ });
// 要求された範囲にログがひとつもない場合でもパディングできる
- it('Can padding from past range', async(async () => {
+ it('Can padding from past range', async () => {
await testChart.increment();
await testChart.save();
@@ -276,11 +268,11 @@ describe('Chart', () => {
total: [1, 0, 0],
},
});
- }));
+ });
// 要求された範囲の最も古い箇所に位置するログが存在しない場合でもパディングできる
// Issue #3190
- it('Can padding from past range 2', async(async () => {
+ it('Can padding from past range 2', async () => {
await testChart.increment();
await testChart.save();
@@ -307,9 +299,9 @@ describe('Chart', () => {
total: [2, 0, 0],
},
});
- }));
+ });
- it('Can specify offset', async(async () => {
+ it('Can specify offset', async () => {
await testChart.increment();
await testChart.save();
@@ -336,9 +328,9 @@ describe('Chart', () => {
total: [2, 0, 0],
},
});
- }));
+ });
- it('Can specify offset (floor time)', async(async () => {
+ it('Can specify offset (floor time)', async () => {
clock.tick('00:30:00');
await testChart.increment();
@@ -367,10 +359,10 @@ describe('Chart', () => {
total: [2, 0, 0],
},
});
- }));
+ });
describe('Grouped', () => {
- it('Can updates', async(async () => {
+ it('Can updates', async () => {
await testGroupedChart.increment('alice');
await testGroupedChart.save();
@@ -410,11 +402,11 @@ describe('Chart', () => {
total: [0, 0, 0],
},
});
- }));
+ });
});
describe('Unique increment', () => {
- it('Can updates', async(async () => {
+ it('Can updates', async () => {
await testUniqueChart.uniqueIncrement('alice');
await testUniqueChart.uniqueIncrement('alice');
await testUniqueChart.uniqueIncrement('bob');
@@ -430,10 +422,10 @@ describe('Chart', () => {
assert.deepStrictEqual(chartDays, {
foo: [2, 0, 0],
});
- }));
+ });
describe('Intersection', () => {
- it('条件が満たされていない場合はカウントされない', async(async () => {
+ it('条件が満たされていない場合はカウントされない', async () => {
await testIntersectionChart.addA('alice');
await testIntersectionChart.addA('bob');
await testIntersectionChart.addB('carol');
@@ -453,9 +445,9 @@ describe('Chart', () => {
b: [1, 0, 0],
aAndB: [0, 0, 0],
});
- }));
+ });
- it('条件が満たされている場合にカウントされる', async(async () => {
+ it('条件が満たされている場合にカウントされる', async () => {
await testIntersectionChart.addA('alice');
await testIntersectionChart.addA('bob');
await testIntersectionChart.addB('carol');
@@ -476,12 +468,12 @@ describe('Chart', () => {
b: [2, 0, 0],
aAndB: [1, 0, 0],
});
- }));
+ });
});
});
describe('Resync', () => {
- it('Can resync', async(async () => {
+ it('Can resync', async () => {
testChart.total = 1;
await testChart.resync();
@@ -504,9 +496,9 @@ describe('Chart', () => {
total: [1, 0, 0],
},
});
- }));
+ });
- it('Can resync (2)', async(async () => {
+ it('Can resync (2)', async () => {
await testChart.increment();
await testChart.save();
@@ -534,6 +526,6 @@ describe('Chart', () => {
total: [100, 0, 0],
},
});
- }));
+ });
});
});
From aea2f01ef7909885cf20df9bc2d27bb77863b35b Mon Sep 17 00:00:00 2001
From: syuilo
Date: Mon, 6 Jun 2022 21:01:00 +0900
Subject: [PATCH 21/21] Update .node-version
---
.node-version | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.node-version b/.node-version
index c9b6b29e00..7fd023741b 100644
--- a/.node-version
+++ b/.node-version
@@ -1 +1 @@
-v16.0.0
+v16.15.0