Files
2026-08-09 05:33:21 +08:00

89 lines
2.5 KiB
Go

package device
import (
"context"
"errors"
"strings"
"testing"
"vocat/internal/modem"
)
func TestReadPhoneNumberFallsBackToOwnNumbersAndRestoresPhonebook(t *testing.T) {
client := &transcriptClient{steps: []clientStep{
{command: "AT+CNUM", response: okResponse()},
{command: "AT+CPBS?", response: okResponse(`+CPBS: "SM",0,250`)},
{command: `AT+CPBS="ON"`, response: okResponse()},
{command: "AT+CPBR=?", response: okResponse("+CPBR: (1-3),40,20")},
{command: "AT+CPBR=1", response: okResponse(`+CPBR: 1,"",129,""`)},
{
command: "AT+CPBR=2",
response: okResponse(`+CPBR: 2,"+44 7700 900123",145,"Own"`),
},
{
command: `AT+CPBS="SM"`,
err: errors.New("restore failed"),
},
}}
manager, err := NewManager(Options{})
if err != nil {
t.Fatal(err)
}
phone, warnings := manager.readPhoneNumber(context.Background(), client)
if phone.Number != "+447700900123" || phone.Source != PhoneSourceOwnNumber {
t.Fatalf("phone = %#v", phone)
}
if len(warnings) != 1 || !strings.Contains(warnings[0], "restore phonebook") {
t.Fatalf("warnings = %#v", warnings)
}
client.assertDone(t)
}
func TestReadPhoneNumberFallsBackToEFMSISDN(t *testing.T) {
record := strings.Repeat("FF", 18) +
"0791447700091032FFFFFFFFFFFF"
client := &transcriptClient{steps: []clientStep{
{command: "AT+CNUM", response: okResponse()},
{command: "AT+CPBS?", response: okResponse(`+CPBS: "SM",0,250`)},
{
command: `AT+CPBS="ON"`,
err: errors.New("Own Numbers unavailable"),
},
{
command: "AT+CRSM=192,28480,0,0,0",
err: errors.New("zero-length GET RESPONSE unsupported"),
},
{
command: "AT+CRSM=192,28480,0,0,15",
response: okResponse(`+CRSM: 144,0,"62198205422100200283026F408A01"`),
},
{
command: "AT+CRSM=178,28480,1,4,32",
response: okResponse(`+CRSM: 144,0,"` + record + `"`),
},
}}
manager, err := NewManager(Options{})
if err != nil {
t.Fatal(err)
}
phone, warnings := manager.readPhoneNumber(context.Background(), client)
if phone.Number != "+447700900123" || phone.Source != PhoneSourceEFMSISDN {
t.Fatalf("phone = %#v; warnings = %#v", phone, warnings)
}
client.assertDone(t)
}
func TestPhoneNumberIsNeverDerivedFromSubscriberIdentifiers(t *testing.T) {
if got := parsePhoneResponse(
modem.Response{Lines: []string{"+CNUM: ,,,"}},
"+CNUM:",
); got != "" {
t.Fatalf("empty CNUM parsed as %q", got)
}
if got := normalizePhoneNumber("460001234567890/89860012345678901234"); got != "" {
t.Fatalf("invalid combined subscriber identifiers parsed as %q", got)
}
}