diff --git a/packages/geoip/lib.ts b/packages/geoip/lib.ts
index fe6e3fbd3..20f270b4e 100644
--- a/packages/geoip/lib.ts
+++ b/packages/geoip/lib.ts
@@ -14,7 +14,7 @@ export interface Result {
display: string
}
-function lookup(ip: string, locale: string) {
+export function lookup(ip: string, locale: string): any {
const res: any = reader.get(ip);
if (!res) return {};
const ret: Result = { display: '' };
@@ -25,11 +25,13 @@ function lookup(ip: string, locale: string) {
|| (res.country || res.registered_country).names.en;
}
if (res.city) ret.city = res.city.names[locale] || res.city.names.en;
- ret.display = `${ret.continent} ${ret.country} ${ret.city}`;
+ ret.display = `${ret.continent} ${ret.country}${ret.city ? ` ${ret.city}` : ''}`;
return ret;
}
-global.Hydro.lib.geoip = exports = {
- provider: 'MaxMind',
+export const provider = 'MaxMind';
+
+global.Hydro.lib.geoip = {
+ provider,
lookup,
};
diff --git a/packages/geoip/package.json b/packages/geoip/package.json
index e5b4f7f64..3104ed5d6 100644
--- a/packages/geoip/package.json
+++ b/packages/geoip/package.json
@@ -1,6 +1,6 @@
{
"name": "@hydrooj/geoip",
- "version": "1.1.7",
+ "version": "1.1.8",
"main": "package.json",
"repository": "git@github.com:hydro-dev/Hydro.git",
"author": "undefined ",
diff --git a/packages/geoip/test/lib.spec.ts b/packages/geoip/test/lib.spec.ts
new file mode 100644
index 000000000..2e9f2681d
--- /dev/null
+++ b/packages/geoip/test/lib.spec.ts
@@ -0,0 +1,9 @@
+jest.mock('hydrooj/src/loader');
+import * as lib from '@hydrooj/geoip/lib';
+
+describe('geoip', () => {
+ test('MD5', () => {
+ expect(lib.lookup('127.0.0.1', 'zh_CN')).toStrictEqual({});
+ expect(lib.lookup('1.1.1.1', 'zh-CN').display).toStrictEqual('大洋洲 澳大利亚');
+ });
+});
diff --git a/packages/hydrooj/src/model/domain.ts b/packages/hydrooj/src/model/domain.ts
index 2ecef837b..905432a25 100644
--- a/packages/hydrooj/src/model/domain.ts
+++ b/packages/hydrooj/src/model/domain.ts
@@ -55,7 +55,7 @@ export function edit(domainId: string, $set: any) {
return coll.updateOne({ _id: domainId }, { $set });
}
-export async function inc(domainId: string, field: any, n: number): Promise {
+export async function inc(domainId: string, field: keyof DomainDoc, n: number): Promise {
const res = await coll.findOneAndUpdate(
{ _id: domainId },
// FIXME
diff --git a/packages/hydrooj/test/db.ts b/packages/hydrooj/test/db.ts
index 4cc20d434..319b29a76 100644
--- a/packages/hydrooj/test/db.ts
+++ b/packages/hydrooj/test/db.ts
@@ -1,5 +1,4 @@
-import 'hydrooj/src/utils';
-
+import 'hydrooj';
jest.mock('hydrooj/src/service/db');
export async function connect() {
@@ -13,8 +12,10 @@ export async function connect() {
export async function dispose() {
const db = require('hydrooj/src/service/db');
- await db.getClient().close();
- await db.getClient2().close();
- await db.getDb().close();
- await db.getDb2().close();
+ await Promise.all([
+ db.getClient().close(),
+ db.getClient2().close(),
+ db.getDb().close(),
+ db.getDb2().close(),
+ ]);
}
diff --git a/packages/hydrooj/test/lib.crypto.spec.ts b/packages/hydrooj/test/lib.crypto.spec.ts
index 526ad49e3..cec6a2cef 100644
--- a/packages/hydrooj/test/lib.crypto.spec.ts
+++ b/packages/hydrooj/test/lib.crypto.spec.ts
@@ -1,8 +1,8 @@
import 'hydrooj';
+import 'hydrooj/src/utils';
import md5 from 'hydrooj/src/lib/md5';
import sha1 from 'hydrooj/src/lib/sha1';
import pwhash from 'hydrooj/src/lib/hash.hydro';
-import 'hydrooj/src/utils';
describe('crypto', () => {
const content1 = 'twd2akioi';
diff --git a/packages/hydrooj/tsconfig.json b/packages/hydrooj/tsconfig.json
index 76a66de32..b7bb74453 100644
--- a/packages/hydrooj/tsconfig.json
+++ b/packages/hydrooj/tsconfig.json
@@ -16,6 +16,7 @@
"src"
],
"exclude": [
+ "__mocks__",
"bin",
"dist"
]