mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import {
2 getMentionAt,
3 insertMentionAt,
4} from '../../../src/lib/strings/mention-manip'
5
6describe('getMentionAt', () => {
7 type Case = [string, number, string | undefined]
8 const cases: Case[] = [
9 ['hello @alice goodbye', 0, undefined],
10 ['hello @alice goodbye', 1, undefined],
11 ['hello @alice goodbye', 2, undefined],
12 ['hello @alice goodbye', 3, undefined],
13 ['hello @alice goodbye', 4, undefined],
14 ['hello @alice goodbye', 5, undefined],
15 ['hello @alice goodbye', 6, 'alice'],
16 ['hello @alice goodbye', 7, 'alice'],
17 ['hello @alice goodbye', 8, 'alice'],
18 ['hello @alice goodbye', 9, 'alice'],
19 ['hello @alice goodbye', 10, 'alice'],
20 ['hello @alice goodbye', 11, 'alice'],
21 ['hello @alice goodbye', 12, 'alice'],
22 ['hello @alice goodbye', 13, undefined],
23 ['hello @alice goodbye', 14, undefined],
24 ['@alice', 0, 'alice'],
25 ['@alice hello', 0, 'alice'],
26 ['@alice hello', 1, 'alice'],
27 ['@alice hello', 2, 'alice'],
28 ['@alice hello', 3, 'alice'],
29 ['@alice hello', 4, 'alice'],
30 ['@alice hello', 5, 'alice'],
31 ['@alice hello', 6, 'alice'],
32 ['@alice hello', 7, undefined],
33 ['alice@alice', 0, undefined],
34 ['alice@alice', 6, undefined],
35 ]
36
37 it.each(cases)(
38 'given input string %p and cursor position %p, returns %p',
39 (str, cursorPos, expected) => {
40 const output = getMentionAt(str, cursorPos)
41 expect(output?.value).toEqual(expected)
42 },
43 )
44})
45
46describe('insertMentionAt', () => {
47 type Case = [string, number, string]
48 const cases: Case[] = [
49 ['hello @alice goodbye', 0, 'hello @alice goodbye'],
50 ['hello @alice goodbye', 1, 'hello @alice goodbye'],
51 ['hello @alice goodbye', 2, 'hello @alice goodbye'],
52 ['hello @alice goodbye', 3, 'hello @alice goodbye'],
53 ['hello @alice goodbye', 4, 'hello @alice goodbye'],
54 ['hello @alice goodbye', 5, 'hello @alice goodbye'],
55 ['hello @alice goodbye', 6, 'hello @alice.com goodbye'],
56 ['hello @alice goodbye', 7, 'hello @alice.com goodbye'],
57 ['hello @alice goodbye', 8, 'hello @alice.com goodbye'],
58 ['hello @alice goodbye', 9, 'hello @alice.com goodbye'],
59 ['hello @alice goodbye', 10, 'hello @alice.com goodbye'],
60 ['hello @alice goodbye', 11, 'hello @alice.com goodbye'],
61 ['hello @alice goodbye', 12, 'hello @alice.com goodbye'],
62 ['hello @alice goodbye', 13, 'hello @alice goodbye'],
63 ['hello @alice goodbye', 14, 'hello @alice goodbye'],
64 ['@alice', 0, '@alice.com '],
65 ['@alice hello', 0, '@alice.com hello'],
66 ['@alice hello', 1, '@alice.com hello'],
67 ['@alice hello', 2, '@alice.com hello'],
68 ['@alice hello', 3, '@alice.com hello'],
69 ['@alice hello', 4, '@alice.com hello'],
70 ['@alice hello', 5, '@alice.com hello'],
71 ['@alice hello', 6, '@alice.com hello'],
72 ['@alice hello', 7, '@alice hello'],
73 ['alice@alice', 0, 'alice@alice'],
74 ['alice@alice', 6, 'alice@alice'],
75 ]
76
77 it.each(cases)(
78 'given input string %p and cursor position %p, returns %p',
79 (str, cursorPos, expected) => {
80 const output = insertMentionAt(str, cursorPos, 'alice.com')
81 expect(output).toEqual(expected)
82 },
83 )
84})