summaryrefslogtreecommitdiff
path: root/packages/backend
diff options
context:
space:
mode:
authorたーびん <tar.bin.master@gmail.com>2023-05-05 08:48:14 +0900
committerGitHub <noreply@github.com>2023-05-05 08:48:14 +0900
commit8dab46470eb501e2ed4be12d0f6010210614441d (patch)
tree2bf942057e31ad9535704c5bfa922e46540bab13 /packages/backend
parent:art: (diff)
downloadsharkey-8dab46470eb501e2ed4be12d0f6010210614441d.tar.gz
sharkey-8dab46470eb501e2ed4be12d0f6010210614441d.tar.bz2
sharkey-8dab46470eb501e2ed4be12d0f6010210614441d.zip
fix #10666 チャンネル検索ですべてのチャンネルの取得/表示ができるようにする (#10667)
* Update CHANGELOG.md * fix : able to search all channels * add chennel/search test * update Changelog --------- Co-authored-by: tamaina <tamaina@hotmail.co.jp> Co-authored-by: syuilo <Syuilotan@yahoo.co.jp> Co-authored-by: atsuchan <83960488+atsu1125@users.noreply.github.com> Co-authored-by: Masaya Suzuki <15100604+massongit@users.noreply.github.com> Co-authored-by: Kagami Sascha Rosylight <saschanaz@outlook.com> Co-authored-by: taiy <53635909+taiyme@users.noreply.github.com> Co-authored-by: xianon <xianon@hotmail.co.jp> Co-authored-by: kabo2468 <28654659+kabo2468@users.noreply.github.com> Co-authored-by: YS <47836716+yszkst@users.noreply.github.com> Co-authored-by: Khsmty <me@khsmty.com> Co-authored-by: Soni L <EnderMoneyMod@gmail.com> Co-authored-by: mei23 <m@m544.net> Co-authored-by: daima3629 <52790780+daima3629@users.noreply.github.com> Co-authored-by: Windymelt <1113940+windymelt@users.noreply.github.com> Co-authored-by: Ebise Lutica <7106976+EbiseLutica@users.noreply.github.com>
Diffstat (limited to 'packages/backend')
-rw-r--r--packages/backend/src/server/api/endpoints/channels/search.ts16
-rw-r--r--packages/backend/test/e2e/endpoints.ts94
2 files changed, 103 insertions, 7 deletions
diff --git a/packages/backend/src/server/api/endpoints/channels/search.ts b/packages/backend/src/server/api/endpoints/channels/search.ts
index a954ba224c..900723ff8a 100644
--- a/packages/backend/src/server/api/endpoints/channels/search.ts
+++ b/packages/backend/src/server/api/endpoints/channels/search.ts
@@ -48,13 +48,15 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
super(meta, paramDef, async (ps, me) => {
const query = this.queryService.makePaginationQuery(this.channelsRepository.createQueryBuilder('channel'), ps.sinceId, ps.untilId);
- if (ps.type === 'nameAndDescription') {
- query.andWhere(new Brackets(qb => { qb
- .where('channel.name ILIKE :q', { q: `%${ sqlLikeEscape(ps.query) }%` })
- .orWhere('channel.description ILIKE :q', { q: `%${ sqlLikeEscape(ps.query) }%` });
- }));
- } else {
- query.andWhere('channel.name ILIKE :q', { q: `%${ sqlLikeEscape(ps.query) }%` });
+ if (ps.query !== '') {
+ if (ps.type === 'nameAndDescription') {
+ query.andWhere(new Brackets(qb => { qb
+ .where('channel.name ILIKE :q', { q: `%${ sqlLikeEscape(ps.query) }%` })
+ .orWhere('channel.description ILIKE :q', { q: `%${ sqlLikeEscape(ps.query) }%` });
+ }));
+ } else {
+ query.andWhere('channel.name ILIKE :q', { q: `%${ sqlLikeEscape(ps.query) }%` });
+ }
}
const channels = await query
diff --git a/packages/backend/test/e2e/endpoints.ts b/packages/backend/test/e2e/endpoints.ts
index 6898435084..f885209b7f 100644
--- a/packages/backend/test/e2e/endpoints.ts
+++ b/packages/backend/test/e2e/endpoints.ts
@@ -403,6 +403,100 @@ describe('Endpoints', () => {
});
});
+ describe('channels/search', () => {
+ test('空白検索で一覧を取得できる', async () => {
+ await api('/channels/create', {
+ name: 'aaa',
+ description: 'bbb',
+ }, bob);
+ await api('/channels/create', {
+ name: 'ccc1',
+ description: 'ddd1',
+ }, bob);
+ await api('/channels/create', {
+ name: 'ccc2',
+ description: 'ddd2',
+ }, bob);
+
+ const res = await api('/channels/search', {
+ query: '',
+ }, bob);
+
+ assert.strictEqual(res.status, 200);
+ assert.strictEqual(typeof res.body === 'object' && Array.isArray(res.body), true);
+ assert.strictEqual(res.body.length, 3);
+ });
+ test('名前のみの検索で名前を検索できる', async () => {
+ const res = await api('/channels/search', {
+ query: 'aaa',
+ type: 'nameOnly',
+ }, bob);
+
+ assert.strictEqual(res.status, 200);
+ assert.strictEqual(typeof res.body === 'object' && Array.isArray(res.body), true);
+ assert.strictEqual(res.body.length, 1);
+ assert.strictEqual(res.body[0].name, 'aaa');
+ });
+ test('名前のみの検索で名前を複数検索できる', async () => {
+ const res = await api('/channels/search', {
+ query: 'ccc',
+ type: 'nameOnly',
+ }, bob);
+
+ assert.strictEqual(res.status, 200);
+ assert.strictEqual(typeof res.body === 'object' && Array.isArray(res.body), true);
+ assert.strictEqual(res.body.length, 2);
+ });
+ test('名前のみの検索で説明は検索できない', async () => {
+ const res = await api('/channels/search', {
+ query: 'bbb',
+ type: 'nameOnly',
+ }, bob);
+
+ assert.strictEqual(res.status, 200);
+ assert.strictEqual(typeof res.body === 'object' && Array.isArray(res.body), true);
+ assert.strictEqual(res.body.length, 0);
+ });
+ test('名前と説明の検索で名前を検索できる', async () => {
+ const res = await api('/channels/search', {
+ query: 'ccc1',
+ }, bob);
+
+ assert.strictEqual(res.status, 200);
+ assert.strictEqual(typeof res.body === 'object' && Array.isArray(res.body), true);
+ assert.strictEqual(res.body.length, 1);
+ assert.strictEqual(res.body[0].name, 'ccc1');
+ });
+ test('名前と説明での検索で説明を検索できる', async () => {
+ const res = await api('/channels/search', {
+ query: 'ddd1',
+ }, bob);
+
+ assert.strictEqual(res.status, 200);
+ assert.strictEqual(typeof res.body === 'object' && Array.isArray(res.body), true);
+ assert.strictEqual(res.body.length, 1);
+ assert.strictEqual(res.body[0].name, 'ccc1');
+ });
+ test('名前と説明の検索で名前を複数検索できる', async () => {
+ const res = await api('/channels/search', {
+ query: 'ccc',
+ }, bob);
+
+ assert.strictEqual(res.status, 200);
+ assert.strictEqual(typeof res.body === 'object' && Array.isArray(res.body), true);
+ assert.strictEqual(res.body.length, 2);
+ });
+ test('名前と説明での検索で説明を複数検索できる', async () => {
+ const res = await api('/channels/search', {
+ query: 'ddd',
+ }, bob);
+
+ assert.strictEqual(res.status, 200);
+ assert.strictEqual(typeof res.body === 'object' && Array.isArray(res.body), true);
+ assert.strictEqual(res.body.length, 2);
+ });
+ });
+
describe('drive', () => {
test('ドライブ情報を取得できる', async () => {
await uploadFile(alice, {