})
}
+func TestWhatsAppLinkedPairRequestKeepsFirstConnectionRetries(t *testing.T) {
+ synctest.Test(t, func(t *testing.T) {
+ test := whatsappRetryTest(t)
+ test.fake.connectErr = errors.New("network unavailable")
+ test.start(t)
+ synctest.Wait()
+
+ answers := make(chan string, 1)
+ test.whatsapp.Command("pair 15550001111", func(text string) {
+ answers <- text
+ })
+ require.Equal(t, "WhatsApp is linked already. Run /whatsapp unlink first.", <-answers)
+ synctest.Wait()
+ test.fake.mutex.Lock()
+ test.fake.connectErr = nil
+ test.fake.mutex.Unlock()
+ time.Sleep(whatsappRetryDelay)
+ synctest.Wait()
+ require.Len(t, test.fake.Connections(), 2)
+ require.True(t, test.fake.Emit(&events.Connected{}))
+ require.True(t, test.fake.Emit(&events.OfflineSyncCompleted{}))
+ require.Contains(t, test.whatsapp.Status(), "linked and connected since")
+ time.Sleep(whatsappRetryLimit)
+ synctest.Wait()
+ require.Len(t, test.fake.Connections(), 2)
+ require.Equal(t, "first connect failed, retrying: network unavailable\nconnected again after 2s\n", test.logs.String())
+ })
+}
+
func TestWhatsAppFirstConnectionRetriesStopForLinkChanges(t *testing.T) {
testCases := []struct {
name string
{
name: "unlink",
stop: func(test *WhatsAppRetryTest) {
- test.whatsapp.Command("unlink", func(text string) {})
+ test.whatsapp.Command("unlink", func(_ string) {
+ })
},
},
{
test.fake.Emit(&events.LoggedOut{})
},
},
- {
- name: "pair command",
- stop: func(test *WhatsAppRetryTest) {
- test.whatsapp.Command("pair 15550001111", func(text string) {})
- },
- },
{
name: "permanent disconnect",
stop: func(test *WhatsAppRetryTest) {
test.fake.connectErr = errors.New("network unavailable")
test.start(t)
synctest.Wait()
- test.whatsapp.Command("unlink", func(text string) {})
+ test.whatsapp.Command("unlink", func(_ string) {
+ })
synctest.Wait()
require.False(t, test.whatsapp.isLinked())
test.fake.mutex.Lock()
test.fake.connectErr = nil
test.fake.mutex.Unlock()
- test.whatsapp.Command("pair 15550001111", func(text string) {})
+ test.whatsapp.Command("pair 15550001111", func(_ string) {
+ })
items := <-test.fake.pairings
items <- whatsmeow.QRChannelItem{Event: whatsmeow.QRChannelEventCode}
synctest.Wait()
}{
{
name: "no session file",
- session: func(t *testing.T, dir string) {
+ session: func(_ *testing.T, _ string) {
},
},
{