public void SplitsAndJoinsEmpty()
        {
            var initial = new GroupMembership()
            {
                Destination = new AzureADGroup {
                    ObjectId = Guid.NewGuid()
                },
                SyncJobPartitionKey = Guid.NewGuid().ToString(),
                SyncJobRowKey       = Guid.NewGuid().ToString(),
            };

            var split = initial.Split();

            Assert.AreEqual(1, split.Length);
            Assert.AreEqual(0, split.Single().SourceMembers.Count);
            Assert.AreEqual(initial.Destination, split.Single().Destination);
            Assert.AreEqual(initial.SyncJobRowKey, split.Single().SyncJobRowKey);
            Assert.AreEqual(initial.SyncJobPartitionKey, split.Single().SyncJobPartitionKey);
            Assert.IsTrue(split.Single().IsLastMessage);

            var rejoined = GroupMembership.Merge(split);

            Assert.AreEqual(0, rejoined.SourceMembers.Count);
            Assert.AreEqual(initial.Destination, rejoined.Destination);
            Assert.AreEqual(initial.SyncJobRowKey, rejoined.SyncJobRowKey);
            Assert.AreEqual(initial.SyncJobPartitionKey, rejoined.SyncJobPartitionKey);
            CollectionAssert.AreEqual(initial.SourceMembers, rejoined.SourceMembers);
        }
        public async Task SendMembership(GroupMembership groupMembership, string sentFrom = "")
        {
            if (groupMembership.SyncJobPartitionKey == null)
            {
                throw new ArgumentNullException("SyncJobPartitionKey must be set.");
            }
            if (groupMembership.SyncJobRowKey == null)
            {
                throw new ArgumentNullException("SyncJobRowKey must be set.");
            }

            foreach (var message in groupMembership.Split().Select(x => new Message
            {
                Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(x)),
                SessionId = groupMembership.Destination.ObjectId.ToString(),
                ContentType = "application/json",
                Label = sentFrom
            }))
            {
                await _queueClient.SendAsync(message);
            }
        }