| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- package pingo
- import (
- "strings"
- "testing"
- tea "charm.land/bubbletea/v2"
- "github.com/stretchr/testify/assert"
- )
- func spawnTestModel(addresses []string, points []float64, width, height, cHeight int) Peak {
- testModel := InitialPeakBubble(addresses, cHeight, width, height)
- for i := range testModel.Addresses {
- testModel.Addresses[i].Results = points
- }
- return testModel
- }
- func Test_InitialPeakBubble(t *testing.T) {
- addresses := []string{"127.0.0.1", "cantresolvethisever"}
- chartHeight := 10
- model := InitialPeakBubble(addresses, 80, 24, chartHeight)
- // assert.Implements(t, new(tea.Model), model)
- assert.Equal(t, chartHeight, model.ChartHeight)
- assert.Equal(t, 80, model.Width)
- assert.Equal(t, 24, model.Height)
- assert.Equal(t, 2, len(model.Addresses))
- for i, address := range model.Addresses {
- assert.Equal(t, 80, address.MaxResults)
- assert.Equal(t, addresses[i], address.Address)
- }
- }
- func Test_Model_Update_handle_pollMsg(t *testing.T) {
- testModel := spawnTestModel(
- []string{"127.0.0.1"}, []float64{}, 0, 20, 10)
- batch := testModel.Poll()
- msg := batch().(pollResultMsg)
- assert.IsType(t, *new(pollResultMsg), msg)
- assert.Equal(t, 1, len(msg.results))
- assert.InDelta(t, 1, msg.results[0], 10)
- assert.Nil(t, msg.err)
- assert.Equal(t, 0, msg.index)
- model, batch := testModel.Update(msg)
- assert.IsType(t, *new(tea.Cmd), batch)
- assert.Equal(t, msg.results, model.Addresses[0].Results)
- }
- func Test_Model_View(t *testing.T) {
- testModel := spawnTestModel(
- []string{"127.0.0.1", "cantresolvethisever"}, []float64{1.0, 2.0, 3.0}, 20, 20, 10)
- result := testModel.View()
- assert.IsType(t, *new(tea.View), result)
- }
- func Test_Model_View_init_state(t *testing.T) {
- testModel := spawnTestModel(
- []string{"127.0.0.1", "cantresolvethisever"}, []float64{}, 40, 20, 10)
- result := testModel.View().Content
- assert.IsType(t, *new(string), result)
- assert.True(t, strings.Contains(result, "127.0.0.1"))
- assert.True(t, strings.Contains(result, "cantresolvethisever"))
- assert.False(t, strings.Contains(result, "pingo"))
- assert.False(t, strings.Contains(result, "j/k: up/down"))
- for line := range strings.SplitSeq(result, "\n") {
- if strings.Contains(line, "127.0.0.1") || strings.Contains(line, "cantresolvethisever") {
- assert.True(t, strings.Contains(line, "loading..."))
- }
- }
- }
- func Test_Model_View_connection_unstable(t *testing.T) {
- testModel := spawnTestModel([]string{"doesntmatter"}, []float64{-1}, 200, 200, 200)
- result := testModel.View().Content
- assert.IsType(t, *new(string), result)
- assert.True(t, strings.Contains(result, "connection unstable"), result)
- }
- func Test_Model_View_has_charts(t *testing.T) {
- testModel := spawnTestModel(
- []string{"127.0.0.1", "cantresolvethisever"}, make([]float64, 20), 200, 200, 200)
- result := testModel.View().Content
- assert.IsType(t, *new(string), result)
- assert.True(t, strings.Contains(result, "127.0.0.1"))
- assert.True(t, strings.Contains(result, "cantresolvethisever"))
- assert.False(t, strings.Contains(result, "pingo"))
- assert.False(t, strings.Contains(result, "j/k: up/down"))
- lines := strings.Split(result, "\n")
- for i, line := range lines {
- if strings.Contains(line, "127.0.0.1") || strings.Contains(line, "cantresolvethisever") {
- assert.False(t, strings.Contains(line, "loading..."))
- assert.True(t, strings.Contains(lines[i+1], "│")) // assert has chart seperator character
- }
- }
- }
- func Test_Model_View_has_big_chart(t *testing.T) {
- testModel := spawnTestModel(
- []string{"127.0.0.1"}, make([]float64, 20), 20, 20, 200)
- result := testModel.View().Content
- assert.IsType(t, *new(string), result)
- assert.IsType(t, *new(string), result)
- assert.True(t, strings.Contains(result, "127.0.0.1"))
- assert.True(t, strings.Contains(result, "127.0.0.1"), result)
- lines := strings.Split(result, "\n")
- assert.True(t, strings.Contains(lines[1], "127.0.0.1"), lines[1])
- assert.False(t, strings.Contains(lines[1], "loading..."))
- assert.True(t, strings.Contains(lines[20], "0│"), result)
- }
- func Test_Model_View_has_big_charts(t *testing.T) {
- testModel := spawnTestModel(
- []string{"127.0.0.1", "cantresolvethisever"}, make([]float64, 20), 20, 20, 200)
- result := testModel.View().Content
- assert.IsType(t, *new(string), result)
- assert.True(t, strings.Contains(result, "127.0.0.1"))
- assert.True(t, strings.Contains(result, "cantresolvethisever"))
- assert.False(t, strings.Contains(result, "pingo"))
- assert.False(t, strings.Contains(result, "j/k: up/down"))
- lines := strings.Split(result, "\n")
- for i, line := range lines {
- if strings.Contains(line, "127.0.0.1") || strings.Contains(line, "cantresolvethisever") {
- assert.False(t, strings.Contains(line, "loading..."))
- assert.True(t, strings.Contains(lines[i+19], "0│"), lines[i+19]) // assert bottom of chart is where we expect it to be
- }
- }
- }
- func Test_Model_cmd_Poll(t *testing.T) {
- addresses := []string{"127.0.0.1", "cantresolvethisever"}
- chartHeight := 10
- model := InitialPeakBubble(addresses, chartHeight, 80, 24)
- batch := model.Poll()
- msgs := []tea.Cmd(batch().(tea.BatchMsg)) // type assert for legibility
- for i, cmd := range msgs {
- msg := cmd()
- assert.IsType(t, *new(pollResultMsg), msg)
- result := msg.(pollResultMsg)
- switch i {
- case 0:
- assert.Equal(t, 1, len(result.results))
- assert.InDelta(t, 1, result.results[0], 10)
- assert.Nil(t, result.err)
- assert.Equal(t, 0, result.index)
- case 1:
- assert.Equal(t, 1, len(result.results))
- assert.Equal(t, float64(-1), result.results[0])
- assert.NotNil(t, result.err.Error())
- assert.Equal(t, 1, result.index)
- }
- }
- }
|