From 7624bcf13eb4aae1882f889c151ef3eb577d5979 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 28 Feb 2020 11:00:52 -0300 Subject: [PATCH] Fix unit tests. --- .../util/FTS/GRDBFullTextSearcherTest.swift | 5 +++ .../test/util/GroupAndContactStreamTest.swift | 43 +++++++++++++++++-- .../util/YDBToGRDBMigrationModelTest.swift | 12 +++++- .../ConversationSync/OWSGroupsOutputStream.m | 4 +- 4 files changed, 56 insertions(+), 8 deletions(-) diff --git a/Signal/test/util/FTS/GRDBFullTextSearcherTest.swift b/Signal/test/util/FTS/GRDBFullTextSearcherTest.swift index b966cfd788..89a5e36fe2 100644 --- a/Signal/test/util/FTS/GRDBFullTextSearcherTest.swift +++ b/Signal/test/util/FTS/GRDBFullTextSearcherTest.swift @@ -113,6 +113,11 @@ class GRDBFullTextSearcherTest: SignalBaseTest { // Replace this singleton. SSKEnvironment.shared.contactsManager = GRDBFullTextSearcherContactsManager() + // ensure local client has necessary "registered" state + let localE164Identifier = "+13235551234" + let localUUID = UUID() + tsAccountManager.registerForTests(withLocalNumber: localE164Identifier, uuid: localUUID) + self.write { transaction in let bookClubGroupThread = try! GroupManager.createGroupForTests(members: [aliceRecipient, bobRecipient], name: "Book Club", diff --git a/Signal/test/util/GroupAndContactStreamTest.swift b/Signal/test/util/GroupAndContactStreamTest.swift index 722c9742c7..da056fbc45 100644 --- a/Signal/test/util/GroupAndContactStreamTest.swift +++ b/Signal/test/util/GroupAndContactStreamTest.swift @@ -8,6 +8,25 @@ import Contacts class GroupAndContactStreamTest: SignalBaseTest { + // MARK: - Dependencies + + private var tsAccountManager: TSAccountManager { + return TSAccountManager.sharedInstance() + } + + // MARK: - Test Life Cycle + + override func setUp() { + super.setUp() + + // ensure local client has necessary "registered" state + let localE164Identifier = "+13235551234" + let localUUID = UUID() + tsAccountManager.registerForTests(withLocalNumber: localE164Identifier, uuid: localUUID) + } + + // MARK: - + let outputContactSyncData = "IQoMKzEzMjMxMTExMTExEgdBbGljZS0xIgRibHVlQABYADkSB0FsaWNlLTIiBGJsdWVAAEokMzFDRTE0MTItOUEyOC00RTZGLUI0RUUtMjIyMjIyMjIyMjIyWABHCgwrMTMyMTMzMzMzMzMSB0FsaWNlLTMiBGJsdWVAAEokMUQ0QUIwNDUtODhGQi00QzRFLTlGNkEtMzMzMzMzMzMzMzMzWAA=" func test_writeContactSync() throws { @@ -88,8 +107,17 @@ class GroupAndContactStreamTest: SignalBaseTest { } } - let outputGroupSyncData = "pwEKEHNddRc9sZVW92G7XH8DdEgaDCsxMzIxMzIxNDMyMRoMKzEzMjEzMjE0MzIzMAA6BWJyb3duSg4SDCsxMzIxMzIxNDMyMUo0CiQxRDRBQjA0NS04OEZCLTRDNEUtOUY2QS1GOTIxMTI0QkQ1MjkSDCsxMzIxMzIxNDMyM0omCiQzMUNFMTQxMi05QTI4LTRFNkYtQjRFRS1BMjVDMzE3OUQwODVYAJABChBzbbYXPbGVVvdhu1x/A3RIEglCb29rIENsdWIaDCsxMzIxMzIxNDMyMRoMKzE1NTUzMjE0MzIzMAA6CWJsdWVfZ3JleUoOEgwrMTMyMTMyMTQzMjFKNAokNTU1NTU1NTUtODhGQi00QzRFLTlGNkEtRjkyMTEyNEJENTI5EgwrMTU1NTMyMTQzMjNQAVgBiwEKEHN99xc9sZVW92G7XH8DdEgSCUNvb2sgQmx1YhoMKzEzMjEzMjEzMzMzGgwrMTU1NTMyMTIyMjIwADoEYmx1ZUoOEgwrMTMyMTMyMTMzMzNKNAokNTU1NTU1NTUtODhGQi00QzRFLTlGNkEtMjIyMjIyMjIyMjIyEgwrMTU1NTMyMTIyMjJQAFgB" + let outputGroupSyncData = "uQEKEHNddRc9sZVW92G7XH8DdEgaDCsxMzIxMzIxNDMyMRoMKzEzMjEzMjE0MzIzIg4KCWltYWdlL3BuZxCjATAAOgVicm93bkoOEgwrMTMyMTMyMTQzMjFKNAokMUQ0QUIwNDUtODhGQi00QzRFLTlGNkEtRjkyMTEyNEJENTI5EgwrMTMyMTMyMTQzMjNKJgokMzFDRTE0MTItOUEyOC00RTZGLUI0RUUtQTI1QzMxNzlEMDg1UAJYAIlQTkcNChoKAAAADUlIRFIAAAABAAAAAQgGAAAAHxXEiQAAAAFzUkdCAK7OHOkAAABEZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAAGgAwAEAAAAAQAAAAEAAAAA+SKd/gAAAA1JREFUCB1j+M/A8B8ABQAB/8gPYhYAAAAASUVORK5CYIKgAQoQc222Fz2xlVb3YbtcfwN0SBIJQm9vayBDbHViGgwrMTMyMTMyMTQzMjEaDCsxNTU1MzIxNDMyMyIOCglpbWFnZS9wbmcQowEwADoJYmx1ZV9ncmV5Sg4SDCsxMzIxMzIxNDMyMUo0CiQ1NTU1NTU1NS04OEZCLTRDNEUtOUY2QS1GOTIxMTI0QkQ1MjkSDCsxNTU1MzIxNDMyM1ABWAGJUE5HDQoaCgAAAA1JSERSAAAAAQAAAAEIBgAAAB8VxIkAAAABc1JHQgCuzhzpAAAARGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAABoAMABAAAAAEAAAABAAAAAPkinf4AAAANSURBVAgdY2Bg+P8fAAMCAf+n4VSlAAAAAElFTkSuQmCCmwEKEHN99xc9sZVW92G7XH8DdEgSCUNvb2sgQmx1YhoMKzEzMjEzMjEzMzMzGgwrMTU1NTMyMTIyMjIiDgoJaW1hZ2UvcG5nEKMBMAA6BGJsdWVKDhIMKzEzMjEzMjEzMzMzSjQKJDU1NTU1NTU1LTg4RkItNEM0RS05RjZBLTIyMjIyMjIyMjIyMhIMKzE1NTUzMjEyMjIyUABYAYlQTkcNChoKAAAADUlIRFIAAAABAAAAAQgGAAAAHxXEiQAAAAFzUkdCAK7OHOkAAABEZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAAGgAwAEAAAAAQAAAAEAAAAA+SKd/gAAAA1JREFUCB1jYPjP8B8ABAEB/zB9GO4AAAAASUVORK5CYII=" + + let groupImageData1 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAAaADAAQAAAABAAAAAQAAAAD5Ip3+AAAADUlEQVQIHWP4z8DwHwAFAAH/yA9iFgAAAABJRU5ErkJggg==" + let groupImageData2 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAAaADAAQAAAABAAAAAQAAAAD5Ip3+AAAADUlEQVQIHWNgYPj/HwADAgH/p+FUpQAAAABJRU5ErkJggg==" + let groupImageData3 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAAaADAAQAAAABAAAAAQAAAAD5Ip3+AAAADUlEQVQIHWNg+M/wHwAEAQH/MH0Y7gAAAABJRU5ErkJggg==" + func test_writeGroupSync() throws { + let groupAvatarData1 = Data(base64Encoded: groupImageData1)! + let groupAvatarData2 = Data(base64Encoded: groupImageData2)! + let groupAvatarData3 = Data(base64Encoded: groupImageData3)! + let group1: TSGroupThread = { let groupId = Data(base64Encoded: "c111Fz2xlVb3YbtcfwN0SA==")! let groupMembers: [SignalServiceAddress] = [ @@ -101,6 +129,7 @@ class GroupAndContactStreamTest: SignalBaseTest { var thread: TSGroupThread! write { transaction in thread = try! GroupManager.createGroupForTests(members: groupMembers, + avatarData: groupAvatarData1, groupId: groupId, transaction: transaction) thread.updateConversationColorName(.burlap, transaction: transaction) @@ -119,6 +148,7 @@ class GroupAndContactStreamTest: SignalBaseTest { write { thread = try! GroupManager.createGroupForTests(members: groupMembers, name: "Book Club", + avatarData: groupAvatarData2, groupId: groupId, transaction: $0) thread.shouldThreadBeVisible = true @@ -140,6 +170,7 @@ class GroupAndContactStreamTest: SignalBaseTest { write { transaction in thread = try! GroupManager.createGroupForTests(members: groupMembers, name: "Cook Blub", + avatarData: groupAvatarData3, groupId: groupId, transaction: transaction) thread.shouldThreadBeVisible = true @@ -161,6 +192,10 @@ class GroupAndContactStreamTest: SignalBaseTest { } func test_readGroupSync() throws { + let groupAvatarData1 = Data(base64Encoded: groupImageData1)! + let groupAvatarData2 = Data(base64Encoded: groupImageData2)! + let groupAvatarData3 = Data(base64Encoded: groupImageData3)! + var groups: [GroupDetails] = [] let data = Data(base64Encoded: outputGroupSyncData)! @@ -193,7 +228,7 @@ class GroupAndContactStreamTest: SignalBaseTest { XCTAssertEqual(group.conversationColorName, ConversationColorName.burlap.rawValue) XCTAssertEqual(group.isBlocked, false) XCTAssertEqual(group.expireTimer, 0) - XCTAssertEqual(group.avatarData, nil) + XCTAssertEqual(group.avatarData, groupAvatarData1) XCTAssertEqual(false, group.isArchived) XCTAssertNil(group.inboxSortOrder) } @@ -209,7 +244,7 @@ class GroupAndContactStreamTest: SignalBaseTest { XCTAssertEqual(group.conversationColorName, ConversationColorName.taupe.rawValue) XCTAssertEqual(group.isBlocked, false) XCTAssertEqual(group.expireTimer, 0) - XCTAssertEqual(group.avatarData, nil) + XCTAssertEqual(group.avatarData, groupAvatarData2) XCTAssertEqual(true, group.isArchived) XCTAssertEqual(1, group.inboxSortOrder) } @@ -225,7 +260,7 @@ class GroupAndContactStreamTest: SignalBaseTest { XCTAssertEqual(group.conversationColorName, ConversationColorName.blue.rawValue) XCTAssertEqual(group.isBlocked, false) XCTAssertEqual(group.expireTimer, 0) - XCTAssertEqual(group.avatarData, nil) + XCTAssertEqual(group.avatarData, groupAvatarData3) XCTAssertEqual(true, group.isArchived) XCTAssertEqual(0, group.inboxSortOrder) } diff --git a/Signal/test/util/YDBToGRDBMigrationModelTest.swift b/Signal/test/util/YDBToGRDBMigrationModelTest.swift index 6ed4178cd8..654ca7d8cc 100644 --- a/Signal/test/util/YDBToGRDBMigrationModelTest.swift +++ b/Signal/test/util/YDBToGRDBMigrationModelTest.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2019 Open Whisper Systems. All rights reserved. +// Copyright (c) 2020 Open Whisper Systems. All rights reserved. // import XCTest @@ -35,11 +35,19 @@ class YDBToGRDBMigrationModelTest: SignalBaseTest { return SSKEnvironment.shared.storageCoordinator } + private var tsAccountManager: TSAccountManager { + return TSAccountManager.sharedInstance() + } + // MARK: - override func setUp() { super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. + + // ensure local client has necessary "registered" state + let localE164Identifier = "+13235551234" + let localUUID = UUID() + tsAccountManager.registerForTests(withLocalNumber: localE164Identifier, uuid: localUUID) } override func tearDown() { diff --git a/SignalServiceKit/src/Devices/ConversationSync/OWSGroupsOutputStream.m b/SignalServiceKit/src/Devices/ConversationSync/OWSGroupsOutputStream.m index 390846b458..72da9b434f 100644 --- a/SignalServiceKit/src/Devices/ConversationSync/OWSGroupsOutputStream.m +++ b/SignalServiceKit/src/Devices/ConversationSync/OWSGroupsOutputStream.m @@ -32,7 +32,7 @@ NS_ASSUME_NONNULL_BEGIN NSMutableArray *membersE164 = [NSMutableArray new]; NSMutableArray *members = [NSMutableArray new]; - for (SignalServiceAddress *address in group.groupMembers) { + for (SignalServiceAddress *address in [GroupMembership normalize:group.groupMembers]) { // We currently include an independent group member list // of just the phone numbers to support older pre-UUID // clients. Eventually we probably want to remove this. @@ -70,7 +70,7 @@ NS_ASSUME_NONNULL_BEGIN // TODO setActive based on soft delete? - NSData *groupAvatarData; + NSData *_Nullable groupAvatarData = nil; if (group.groupAvatarData.length > 0) { SSKProtoGroupDetailsAvatarBuilder *avatarBuilder = [SSKProtoGroupDetailsAvatar builder];