You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-09 00:22:08 +03:00
351 lines
12 KiB
TypeScript
351 lines
12 KiB
TypeScript
import { strict as assert } from 'assert';
|
|
import testUtils, { GLOBAL } from '../test-utils';
|
|
import { transformArguments } from './CREATE';
|
|
import { SchemaFieldTypes, SchemaTextFieldPhonetics, RedisSearchLanguages } from '.';
|
|
|
|
describe('CREATE', () => {
|
|
describe('transformArguments', () => {
|
|
it('simple', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}),
|
|
['FT.CREATE', 'index', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
describe('with fields', () => {
|
|
describe('TEXT', () => {
|
|
it('without options', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: SchemaFieldTypes.TEXT
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TEXT']
|
|
);
|
|
});
|
|
|
|
it('with NOSTEM', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TEXT,
|
|
NOSTEM: true
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TEXT', 'NOSTEM']
|
|
);
|
|
});
|
|
|
|
it('with WEIGHT', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TEXT,
|
|
WEIGHT: 1
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TEXT', 'WEIGHT', '1']
|
|
);
|
|
});
|
|
|
|
it('with PHONETIC', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TEXT,
|
|
PHONETIC: SchemaTextFieldPhonetics.DM_EN
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TEXT', 'PHONETIC', SchemaTextFieldPhonetics.DM_EN]
|
|
);
|
|
});
|
|
});
|
|
|
|
it('NUMERIC', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: SchemaFieldTypes.NUMERIC
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'NUMERIC']
|
|
);
|
|
});
|
|
|
|
it('GEO', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: SchemaFieldTypes.GEO
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'GEO']
|
|
);
|
|
});
|
|
|
|
describe('TAG', () => {
|
|
describe('without options', () => {
|
|
it('SchemaFieldTypes.TAG', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: SchemaFieldTypes.TAG
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TAG']
|
|
);
|
|
});
|
|
|
|
it('{ type: SchemaFieldTypes.TAG }', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TAG
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TAG']
|
|
);
|
|
});
|
|
});
|
|
|
|
it('with SEPERATOR', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TAG,
|
|
SEPERATOR: 'seperator'
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TAG', 'SEPERATOR', 'seperator']
|
|
);
|
|
});
|
|
|
|
|
|
|
|
it('with CASESENSITIVE', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TAG,
|
|
CASESENSITIVE: true
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TAG', 'CASESENSITIVE']
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('with generic options', () => {
|
|
it('with AS', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TEXT,
|
|
AS: 'as'
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'AS', 'as', 'TEXT']
|
|
);
|
|
});
|
|
|
|
describe('with SORTABLE', () => {
|
|
it('true', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TEXT,
|
|
SORTABLE: true
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TEXT', 'SORTABLE']
|
|
);
|
|
});
|
|
|
|
it('UNF', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TEXT,
|
|
SORTABLE: 'UNF'
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TEXT', 'SORTABLE', 'UNF']
|
|
);
|
|
});
|
|
});
|
|
|
|
it('with NOINDEX', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {
|
|
field: {
|
|
type: SchemaFieldTypes.TEXT,
|
|
NOINDEX: true
|
|
}
|
|
}),
|
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'TEXT', 'NOINDEX']
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('with ON', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
ON: 'HASH'
|
|
}),
|
|
['FT.CREATE', 'index', 'ON', 'HASH', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
describe('with PREFIX', () => {
|
|
it('string', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
PREFIX: 'prefix'
|
|
}),
|
|
['FT.CREATE', 'index', 'PREFIX', '1', 'prefix', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('Array', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
PREFIX: ['1', '2']
|
|
}),
|
|
['FT.CREATE', 'index', 'PREFIX', '2', '1', '2', 'SCHEMA']
|
|
);
|
|
});
|
|
});
|
|
|
|
it('with FILTER', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
FILTER: '@field != ""'
|
|
}),
|
|
['FT.CREATE', 'index', 'FILTER', '@field != ""', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with LANGUAGE', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
LANGUAGE: RedisSearchLanguages.ARABIC
|
|
}),
|
|
['FT.CREATE', 'index', 'LANGUAGE', RedisSearchLanguages.ARABIC, 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with LANGUAGE_FIELD', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
LANGUAGE_FIELD: '@field'
|
|
}),
|
|
['FT.CREATE', 'index', 'LANGUAGE_FIELD', '@field', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with SCORE', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
SCORE: 1
|
|
}),
|
|
['FT.CREATE', 'index', 'SCORE', '1', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with SCORE_FIELD', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
SCORE_FIELD: '@field'
|
|
}),
|
|
['FT.CREATE', 'index', 'SCORE_FIELD', '@field', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with MAXTEXTFIELDS', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
MAXTEXTFIELDS: true
|
|
}),
|
|
['FT.CREATE', 'index', 'MAXTEXTFIELDS', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with TEMPORARY', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
TEMPORARY: 1
|
|
}),
|
|
['FT.CREATE', 'index', 'TEMPORARY', '1', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with NOOFFSETS', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
NOOFFSETS: true
|
|
}),
|
|
['FT.CREATE', 'index', 'NOOFFSETS', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with NOHL', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
NOHL: true
|
|
}),
|
|
['FT.CREATE', 'index', 'NOHL', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with NOFIELDS', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
NOFIELDS: true
|
|
}),
|
|
['FT.CREATE', 'index', 'NOFIELDS', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with NOFREQS', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
NOFREQS: true
|
|
}),
|
|
['FT.CREATE', 'index', 'NOFREQS', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('with SKIPINITIALSCAN', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
SKIPINITIALSCAN: true
|
|
}),
|
|
['FT.CREATE', 'index', 'SKIPINITIALSCAN', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
describe('with STOPWORDS', () => {
|
|
it('string', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
STOPWORDS: 'stopword'
|
|
}),
|
|
['FT.CREATE', 'index', 'STOPWORDS', '1', 'stopword', 'SCHEMA']
|
|
);
|
|
});
|
|
|
|
it('Array', () => {
|
|
assert.deepEqual(
|
|
transformArguments('index', {}, {
|
|
STOPWORDS: ['1', '2']
|
|
}),
|
|
['FT.CREATE', 'index', 'STOPWORDS', '2', '1', '2', 'SCHEMA']
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
testUtils.testWithClient('client.ft.create', async client => {
|
|
assert.equal(
|
|
await client.ft.create('index', {
|
|
field: SchemaFieldTypes.TEXT // TODO: shouldn't be mandatory
|
|
}),
|
|
'OK'
|
|
);
|
|
}, GLOBAL.SERVERS.OPEN);
|
|
});
|