fork of indigo with slightly nicer lexgen
at main 2.6 kB view raw
1package search 2 3import ( 4 "context" 5 "testing" 6 7 "github.com/bluesky-social/indigo/atproto/identity" 8 "github.com/bluesky-social/indigo/atproto/syntax" 9 10 "github.com/stretchr/testify/assert" 11) 12 13func TestParseQuery(t *testing.T) { 14 ctx := context.Background() 15 assert := assert.New(t) 16 dir := identity.NewMockDirectory() 17 ident := identity.Identity{ 18 Handle: syntax.Handle("known.example.com"), 19 DID: syntax.DID("did:plc:abc222"), 20 } 21 dir.Insert(ident) 22 23 var p PostSearchParams 24 25 p = ParsePostQuery(ctx, &dir, "", nil) 26 assert.Equal("*", p.Query) 27 assert.Empty(p.Filters()) 28 29 q1 := "some +test \"with phrase\" -ok" 30 p = ParsePostQuery(ctx, &dir, q1, nil) 31 assert.Equal(q1, p.Query) 32 assert.Empty(p.Filters()) 33 34 q2 := "missing from:missing.example.com" 35 p = ParsePostQuery(ctx, &dir, q2, nil) 36 assert.Equal("missing", p.Query) 37 assert.Empty(p.Filters()) 38 39 q3 := "known from:known.example.com" 40 p = ParsePostQuery(ctx, &dir, q3, nil) 41 assert.Equal("known", p.Query) 42 assert.NotNil(p.Author) 43 if p.Author != nil { 44 assert.Equal("did:plc:abc222", p.Author.String()) 45 } 46 47 q4 := "from:known.example.com" 48 p = ParsePostQuery(ctx, &dir, q4, nil) 49 assert.Equal("*", p.Query) 50 assert.Equal(1, len(p.Filters())) 51 52 q5 := `from:known.example.com "multi word phrase" coolio blorg` 53 p = ParsePostQuery(ctx, &dir, q5, nil) 54 assert.Equal(`"multi word phrase" coolio blorg`, p.Query) 55 assert.NotNil(p.Author) 56 if p.Author != nil { 57 assert.Equal("did:plc:abc222", p.Author.String()) 58 } 59 assert.Equal(1, len(p.Filters())) 60 61 q6 := `from:known.example.com #cool_tag some other stuff` 62 p = ParsePostQuery(ctx, &dir, q6, nil) 63 assert.Equal(`some other stuff`, p.Query) 64 assert.NotNil(p.Author) 65 if p.Author != nil { 66 assert.Equal("did:plc:abc222", p.Author.String()) 67 } 68 assert.Equal([]string{"cool_tag"}, p.Tags) 69 assert.Equal(2, len(p.Filters())) 70 71 q7 := "known from:@known.example.com" 72 p = ParsePostQuery(ctx, &dir, q7, nil) 73 assert.Equal("known", p.Query) 74 assert.NotNil(p.Author) 75 if p.Author != nil { 76 assert.Equal("did:plc:abc222", p.Author.String()) 77 } 78 assert.Equal(1, len(p.Filters())) 79 80 q8 := "known from:me" 81 p = ParsePostQuery(ctx, &dir, q8, &ident.DID) 82 assert.Equal("known", p.Query) 83 assert.NotNil(p.Author) 84 if p.Author != nil { 85 assert.Equal("did:plc:abc222", p.Author.String()) 86 } 87 assert.Equal(1, len(p.Filters())) 88 89 q9 := "did:plc:abc222" 90 p = ParsePostQuery(ctx, &dir, q9, nil) 91 assert.Equal("*", p.Query) 92 assert.Equal(1, len(p.Filters())) 93 if p.Author != nil { 94 assert.Equal("did:plc:abc222", p.Author.String()) 95 } 96 97 // TODO: more parsing tests: bare handles, to:, since:, until:, URL, domain:, lang 98}