108 lines
2.6 KiB
Go
108 lines
2.6 KiB
Go
package ui_test
|
|
|
|
import (
|
|
"errors"
|
|
"net/netip"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/Ullaakut/cameradar/v6"
|
|
"github.com/Ullaakut/cameradar/v6/internal/ui"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFormatSummary(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
streams []cameradar.Stream
|
|
err error
|
|
wantContains []string
|
|
wantNotContains []string
|
|
orderedPairs [][2]string
|
|
}{
|
|
{
|
|
name: "empty",
|
|
streams: nil,
|
|
wantContains: []string{
|
|
"Accessible streams: 0",
|
|
"• None",
|
|
},
|
|
wantNotContains: []string{
|
|
"Other discovered streams",
|
|
"Error:",
|
|
},
|
|
},
|
|
{
|
|
name: "mixed streams with error",
|
|
streams: []cameradar.Stream{
|
|
{
|
|
Device: "Model B",
|
|
Address: netip.MustParseAddr("10.0.0.2"),
|
|
Port: 554,
|
|
Available: true,
|
|
AuthenticationType: cameradar.AuthNone,
|
|
},
|
|
{
|
|
Device: "Model A",
|
|
Address: netip.MustParseAddr("10.0.0.1"),
|
|
Port: 8554,
|
|
Available: true,
|
|
Routes: []string{"stream1", "stream2"},
|
|
RouteFound: true,
|
|
CredentialsFound: true,
|
|
Username: "user",
|
|
Password: "pass",
|
|
AuthenticationType: cameradar.AuthBasic,
|
|
},
|
|
{
|
|
Address: netip.MustParseAddr("10.0.0.3"),
|
|
Port: 554,
|
|
Available: false,
|
|
AuthenticationType: cameradar.AuthDigest,
|
|
},
|
|
},
|
|
err: errors.New("boom"),
|
|
wantContains: []string{
|
|
"Accessible streams: 2",
|
|
"Other discovered streams: 1",
|
|
"• 10.0.0.1:8554 (Model A)",
|
|
"• 10.0.0.2:554 (Model B)",
|
|
"• 10.0.0.3:554",
|
|
"Authentication: basic",
|
|
"Authentication: none",
|
|
"Authentication: digest",
|
|
"Routes: stream1, stream2",
|
|
"Credentials: user:pass",
|
|
"RTSP URL: rtsp://user:pass@10.0.0.1:8554/stream1",
|
|
"Admin panel: http://10.0.0.1/",
|
|
"Admin panel: http://10.0.0.2/",
|
|
},
|
|
wantNotContains: []string{
|
|
"RTSP URL: rtsp://10.0.0.2",
|
|
"Error:",
|
|
},
|
|
orderedPairs: [][2]string{
|
|
{"• 10.0.0.1:8554", "• 10.0.0.2:554"},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
got := ui.FormatSummary(test.streams, test.err)
|
|
|
|
for _, expected := range test.wantContains {
|
|
assert.Contains(t, got, expected)
|
|
}
|
|
for _, unexpected := range test.wantNotContains {
|
|
assert.NotContains(t, got, unexpected)
|
|
}
|
|
for _, pair := range test.orderedPairs {
|
|
first := strings.Index(got, pair[0])
|
|
second := strings.Index(got, pair[1])
|
|
assert.True(t, first >= 0 && second >= 0 && first < second)
|
|
}
|
|
})
|
|
}
|
|
}
|