tdl/test/chat_ls_test.go
2023-08-21 13:19:40 +08:00

112 lines
2.5 KiB
Go

package test
import (
"encoding/json"
"strings"
"github.com/iyear/tdl/app/chat"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("Test tdl chat ls", FlakeAttempts(3), func() {
BeforeEach(func() {
args = []string{"chat", "ls"}
})
expectTable := func() {
lines := strings.Split(output, "\n")
By("check header")
Expect(len(lines)).To(BeNumerically(">=", 2))
Expect(lines[0]).To(MatchRegexp("ID\\s+Type\\s+VisibleName\\s+Username\\s+Topics"))
}
When("use output flag", func() {
It("with default", func() {
exec(cmd, args, true)
expectTable()
})
It("with table", func() {
exec(cmd, append(args, "--output", "table"), true)
expectTable()
})
It("with json", func() {
exec(cmd, append(args, "--output", "json"), true)
Expect(json.Valid([]byte(output))).To(BeTrue())
})
})
When("use filter flag", func() {
BeforeEach(func() {
args = append(args, "--output", "json", "--filter")
})
readDialogs := func() []*chat.Dialog {
dialogs := make([]*chat.Dialog, 0)
Expect(json.Unmarshal([]byte(output), &dialogs)).To(Succeed())
return dialogs
}
It("to display available fields", func() {
exec(cmd, append(args, "-"), true)
Expect(len(strings.Split(output, "\n"))).To(BeNumerically(">=", 2))
})
It("to filter id", func() {
exec(cmd, append(args, "ID>2200000000"), true)
for _, dialog := range readDialogs() {
Expect(dialog.ID).To(BeNumerically(">", 2200000000))
}
})
It("to filter type", func() {
exec(cmd, append(args, "Type contains 'private'"), true)
for _, dialog := range readDialogs() {
Expect(dialog.Type).To(Equal("private"))
}
})
It("to filter visible name", func() {
exec(cmd, append(args, "VisibleName contains 'Telegram'"), true)
for _, dialog := range readDialogs() {
Expect(dialog.VisibleName).To(ContainSubstring("Telegram"))
}
})
It("to filter username", func() {
exec(cmd, append(args, "Username contains 'telegram'"), true)
for _, dialog := range readDialogs() {
Expect(dialog.Username).To(ContainSubstring("telegram"))
}
})
It("to filter topics", func() {
exec(cmd, append(args, "len(Topics)>0"), true)
for _, dialog := range readDialogs() {
Expect(len(dialog.Topics)).To(BeNumerically(">", 0))
}
})
It("to filter multiple fields", func() {
exec(cmd, append(args, "ID>2200000000 && len(Topics)>0"), true)
for _, dialog := range readDialogs() {
Expect(dialog.ID).To(BeNumerically(">", 2200000000))
Expect(len(dialog.Topics)).To(BeNumerically(">", 0))
}
})
})
})