80 lines
2.0 KiB
Go
80 lines
2.0 KiB
Go
|
package protocol
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"sync"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/stretchr/testify/suite"
|
||
|
|
||
|
"github.com/status-im/status-go/eth-node/types"
|
||
|
"github.com/status-im/status-go/protocol/tt"
|
||
|
)
|
||
|
|
||
|
type MessengerCommunityForMobileTestingTestSuite struct {
|
||
|
MessengerBaseTestSuite
|
||
|
}
|
||
|
|
||
|
func TestMessengerCommunityForMobileTesting(t *testing.T) {
|
||
|
suite.Run(t, new(MessengerCommunityForMobileTestingTestSuite))
|
||
|
}
|
||
|
|
||
|
func (s *MessengerCommunityForMobileTestingTestSuite) SetupTest() {
|
||
|
s.MessengerBaseTestSuite.SetupTest()
|
||
|
}
|
||
|
|
||
|
func (s *MessengerCommunityForMobileTestingTestSuite) TearDownTest() {
|
||
|
s.MessengerBaseTestSuite.TearDownTest()
|
||
|
}
|
||
|
|
||
|
func (s *MessengerCommunityForMobileTestingTestSuite) TestCreateClosedCommunity() {
|
||
|
var wg sync.WaitGroup
|
||
|
wg.Add(1)
|
||
|
// simulate invoking `HandleCommunityDescription`
|
||
|
go func() {
|
||
|
err := tt.RetryWithBackOff(func() error {
|
||
|
r, err := s.m.RetrieveAll()
|
||
|
s.Require().NoError(err)
|
||
|
if len(r.Communities()) > 0 {
|
||
|
return nil
|
||
|
}
|
||
|
return errors.New("not receive enough messages relate to community")
|
||
|
})
|
||
|
wg.Done()
|
||
|
s.Require().NoError(err)
|
||
|
}()
|
||
|
|
||
|
wg.Add(1)
|
||
|
var communityID types.HexBytes
|
||
|
// simulate frontend(mobile) invoking `CreateClosedCommunity`
|
||
|
go func() {
|
||
|
response, err := s.m.CreateClosedCommunity()
|
||
|
s.Require().NoError(err)
|
||
|
s.Require().Len(response.Communities(), 1)
|
||
|
s.Require().Len(response.Communities()[0].Categories(), 2)
|
||
|
s.Require().Len(response.Chats(), 4)
|
||
|
s.Require().Len(response.Communities()[0].Description().Chats, 4)
|
||
|
communityID = response.Communities()[0].ID()
|
||
|
wg.Done()
|
||
|
}()
|
||
|
|
||
|
timeout := time.After(20 * time.Second)
|
||
|
done := make(chan bool)
|
||
|
go func() {
|
||
|
wg.Wait()
|
||
|
close(done)
|
||
|
}()
|
||
|
|
||
|
select {
|
||
|
case <-timeout:
|
||
|
s.Fail("TestCreateClosedCommunity timed out")
|
||
|
case <-done:
|
||
|
// validate concurrent updating community result
|
||
|
lastCommunity, err := s.m.GetCommunityByID(communityID)
|
||
|
s.Require().NoError(err)
|
||
|
s.Require().Len(lastCommunity.Categories(), 2)
|
||
|
s.Require().Len(lastCommunity.Description().Chats, 4)
|
||
|
}
|
||
|
}
|