package telegram import ( "strconv" "testing" "github.com/stretchr/testify/assert" http "github.com/valyala/fasthttp" ) const ( testPhrase = "Hello, world!" testLink = "https://toby3d.me/" testID = 123456789 // testUsername = "toby3d" // testChannel = "toby3dRu" testCode = "hide me" ) var ( testPhotoSize = PhotoSize{ FileID: "cba", FileSize: 123, Width: 128, Height: 128, } testAnimation = Animation{ FileID: "abc", FileName: "animation", FileSize: 321, Thumb: &testPhotoSize, } testAudio = Audio{ Performer: "One-Aloner", Title: "(Not) your reality (Doki Doki Literature Club cover)", Thumb: &testPhotoSize, } ) func TestMarkdown(t *testing.T) { t.Run("bold", func(t *testing.T) { assert.Equal(t, "*"+testPhrase+"*", NewMarkdownBold(testPhrase)) }) t.Run("italic", func(t *testing.T) { assert.Equal(t, "_"+testPhrase+"_", NewMarkdownItalic(testPhrase)) }) t.Run("link", func(t *testing.T) { link := http.AcquireURI() defer http.ReleaseURI(link) link.Update(testLink) assert.Equal(t, "["+testPhrase+"]("+testLink+")", NewMarkdownURL(testPhrase, link)) }) t.Run("mention", func(t *testing.T) { assert.Equal(t, "["+testPhrase+"](tg://user/?id="+strconv.Itoa(testID)+")", NewMarkdownMention(testPhrase, testID)) }) t.Run("code", func(t *testing.T) { assert.Equal(t, "`"+testCode+"`", NewMarkdownCode(testCode)) }) t.Run("code block", func(t *testing.T) { assert.Equal(t, "```"+testCode+"```", NewMarkdownCodeBlock(testCode)) }) } func TestHTML(t *testing.T) { t.Run("bold", func(t *testing.T) { assert.Equal(t, ""+testPhrase+"", NewHTMLBold(testPhrase)) }) t.Run("italic", func(t *testing.T) { assert.Equal(t, ""+testPhrase+"", NewHTMLItalic(testPhrase)) }) t.Run("link", func(t *testing.T) { link := http.AcquireURI() defer http.ReleaseURI(link) link.Update(testLink) assert.Equal(t, ``+testPhrase+``, NewHTMLURL(testPhrase, link)) }) t.Run("mention", func(t *testing.T) { assert.Equal(t, ``+testPhrase+``, NewHTMLMention(testPhrase, testID)) }) t.Run("code", func(t *testing.T) { assert.Equal(t, ""+testCode+"", NewHTMLCode(testCode)) }) t.Run("code block", func(t *testing.T) { assert.Equal(t, "
"+testCode+"
", NewHTMLCodeBlock(testCode)) }) } func TestAnimation(t *testing.T) { t.Run("has thumb", func(t *testing.T) { t.Run("false", func(t *testing.T) { a := new(Animation) assert.False(t, a.HasThumb()) }) t.Run("true", func(t *testing.T) { assert.True(t, testAnimation.HasThumb()) }) }) t.Run("file", func(t *testing.T) { assert.NotNil(t, testAnimation.File()) }) } func TestAudio(t *testing.T) { t.Run("has performer", func(t *testing.T) { t.Run("false", func(t *testing.T) { a := new(Audio) assert.False(t, a.HasPerformer()) }) t.Run("true", func(t *testing.T) { assert.True(t, testAudio.HasPerformer()) }) }) t.Run("has title", func(t *testing.T) { t.Run("false", func(t *testing.T) { a := new(Audio) assert.False(t, a.HasTitle()) }) t.Run("true", func(t *testing.T) { assert.True(t, testAudio.HasTitle()) }) }) t.Run("has thumb", func(t *testing.T) { t.Run("false", func(t *testing.T) { a := new(Audio) assert.False(t, a.HasThumb()) }) t.Run("true", func(t *testing.T) { assert.True(t, testAudio.HasThumb()) }) }) t.Run("file", func(t *testing.T) { assert.NotNil(t, testAudio.File()) }) t.Run("full name", func(t *testing.T) { for _, tc := range []struct { message string audio *Audio separator string expResult string }{{ message: "empty", expResult: DefaultAudioTitle, }, { message: "separator only", separator: DefaultAudioSeparator, expResult: DefaultAudioTitle, }, { message: "title only", audio: &Audio{ Title: testAudio.Title, }, expResult: testAudio.Title, }, { message: "performer only", audio: &Audio{ Performer: testAudio.Performer, }, expResult: testAudio.Performer + DefaultAudioSeparator + DefaultAudioTitle, }, { message: "title & performer", audio: &Audio{ Performer: testAudio.Performer, Title: testAudio.Title, }, expResult: testAudio.Performer + DefaultAudioSeparator + testAudio.Title, }, { message: "title & separator", separator: " | ", audio: &Audio{ Title: testAudio.Title, }, expResult: testAudio.Title, }, { message: "performer & separator", separator: " | ", audio: &Audio{ Performer: testAudio.Performer, }, expResult: testAudio.Performer + " | " + DefaultAudioTitle, }, { message: "performer, title & separator", separator: " | ", audio: &Audio{ Performer: testAudio.Performer, Title: testAudio.Title, }, expResult: testAudio.Performer + " | " + testAudio.Title, }} { tc := tc t.Run(tc.message, func(t *testing.T) { assert.Equal(t, tc.expResult, tc.audio.FullName(tc.separator)) }) } }) }