Add OWSAttachmentInfoSerializationTest
This commit is contained in:
parent
1ad5804cd9
commit
b6598a0248
@ -853,6 +853,7 @@
|
||||
667AF9DE2B4C5824008AEE5D /* PersistableGroupUpdateItem+CVComponentSystemMessageAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667AF9DD2B4C5824008AEE5D /* PersistableGroupUpdateItem+CVComponentSystemMessageAction.swift */; };
|
||||
667AF9E02B4C6377008AEE5D /* TSInfoMessage+LegacyPersistablegroupUpdateItemTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667AF9DF2B4C6377008AEE5D /* TSInfoMessage+LegacyPersistablegroupUpdateItemTest.swift */; };
|
||||
667AF9E22B4DC5EE008AEE5D /* GroupUpdateSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667AF9E12B4DC5EE008AEE5D /* GroupUpdateSource.swift */; };
|
||||
667BBAD92BAA5F84006AB9DE /* OWSAttachmentInfoSerializationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667BBAD72BAA5F70006AB9DE /* OWSAttachmentInfoSerializationTest.swift */; };
|
||||
667E90D028E799D1005FE603 /* ConnectionsEducationSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667E90CF28E799D1005FE603 /* ConnectionsEducationSheetViewController.swift */; };
|
||||
667EDE6428F8D6B7001FB487 /* YYAnimatedImage+Duration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667EDE6328F8D6B7001FB487 /* YYAnimatedImage+Duration.swift */; };
|
||||
667EDE6628FA0372001FB487 /* StoryBadgeCountManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667EDE6528FA0372001FB487 /* StoryBadgeCountManager.swift */; };
|
||||
@ -3662,6 +3663,7 @@
|
||||
667AF9DD2B4C5824008AEE5D /* PersistableGroupUpdateItem+CVComponentSystemMessageAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PersistableGroupUpdateItem+CVComponentSystemMessageAction.swift"; sourceTree = "<group>"; };
|
||||
667AF9DF2B4C6377008AEE5D /* TSInfoMessage+LegacyPersistablegroupUpdateItemTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TSInfoMessage+LegacyPersistablegroupUpdateItemTest.swift"; sourceTree = "<group>"; };
|
||||
667AF9E12B4DC5EE008AEE5D /* GroupUpdateSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupUpdateSource.swift; sourceTree = "<group>"; };
|
||||
667BBAD72BAA5F70006AB9DE /* OWSAttachmentInfoSerializationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OWSAttachmentInfoSerializationTest.swift; sourceTree = "<group>"; };
|
||||
667E90CF28E799D1005FE603 /* ConnectionsEducationSheetViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectionsEducationSheetViewController.swift; sourceTree = "<group>"; };
|
||||
667EDE6328F8D6B7001FB487 /* YYAnimatedImage+Duration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YYAnimatedImage+Duration.swift"; sourceTree = "<group>"; };
|
||||
667EDE6528FA0372001FB487 /* StoryBadgeCountManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryBadgeCountManager.swift; sourceTree = "<group>"; };
|
||||
@ -7300,6 +7302,14 @@
|
||||
path = V2;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
667BBAD62BAA5F5F006AB9DE /* Quotes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
667BBAD72BAA5F70006AB9DE /* OWSAttachmentInfoSerializationTest.swift */,
|
||||
);
|
||||
path = Quotes;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
6691E7EA2996E61D0032A68A /* KeyBackupService */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -9520,6 +9530,7 @@
|
||||
C182C4BC29E45D64007F7A7C /* Edit */,
|
||||
F942621F289B1B5500460798 /* Interactions */,
|
||||
669FAE192B7AC8E5009EE2FE /* LinkPreview */,
|
||||
667BBAD62BAA5F5F006AB9DE /* Quotes */,
|
||||
F988DC11289DC8DE003B4B82 /* Reactions */,
|
||||
F9426222289B1B5500460798 /* Stickers */,
|
||||
F9426233289B1B5500460798 /* DeliveryReceiptContextTests.swift */,
|
||||
@ -14146,6 +14157,7 @@
|
||||
D925C7BB2B7BEC0F00AC73B0 /* OutgoingCallLogEventSyncMessageTest.swift in Sources */,
|
||||
D9D3216A2A8AC9B0004FC110 /* OutgoingGroupCallUpdateMessageTest.swift in Sources */,
|
||||
F96BB60729A528BD001C18DF /* OWS2FAManagerTest.swift in Sources */,
|
||||
667BBAD92BAA5F84006AB9DE /* OWSAttachmentInfoSerializationTest.swift in Sources */,
|
||||
D9708B5C29E4CCCB004306FA /* OWSDeviceManagerTest.swift in Sources */,
|
||||
F942623B289B1B5500460798 /* OWSDeviceProvisionerTest.swift in Sources */,
|
||||
D9B95A9829E8906200D7CB95 /* OWSDeviceTest.swift in Sources */,
|
||||
|
||||
@ -68,7 +68,7 @@ typedef NS_ENUM(NSUInteger, OWSAttachmentInfoReference) {
|
||||
|
||||
- (instancetype)initWithAttachmentId:(NSString *_Nullable)attachmentId
|
||||
ofType:(OWSAttachmentInfoReference)attachmentType
|
||||
contentType:(NSString *)contentType
|
||||
contentType:(NSString *_Nullable)contentType
|
||||
sourceFilename:(NSString *_Nullable)sourceFilename;
|
||||
@end
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (instancetype)initWithAttachmentId:(NSString *_Nullable)attachmentId
|
||||
ofType:(OWSAttachmentInfoReference)attachmentType
|
||||
contentType:(NSString *)contentType
|
||||
contentType:(NSString *_Nullable)contentType
|
||||
sourceFilename:(NSString *_Nullable)sourceFilename
|
||||
{
|
||||
self = [super init];
|
||||
|
||||
@ -0,0 +1,113 @@
|
||||
//
|
||||
// Copyright 2024 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
//
|
||||
|
||||
@testable import SignalServiceKit
|
||||
import XCTest
|
||||
|
||||
class OWSAttachmentInfoSerializationTest: XCTestCase {
|
||||
|
||||
// MARK: - Hardcoded constant data
|
||||
|
||||
enum HardcodedDataTestMode {
|
||||
case runTest
|
||||
case printStrings
|
||||
|
||||
/// Toggle this to use ``testHardcodedJsonDataDecodes()`` to print
|
||||
/// hardcoded strings, for example when adding new constants.
|
||||
static let mode: Self = .runTest
|
||||
}
|
||||
|
||||
func testHardcodedArchiverDataDecodes() {
|
||||
switch HardcodedDataTestMode.mode {
|
||||
case .printStrings:
|
||||
for (idx, (constant, _)) in OWSAttachmentInfo.constants.enumerated() {
|
||||
let serializedArchiver = try! NSKeyedArchiver.archivedData(
|
||||
withRootObject: constant,
|
||||
requiringSecureCoding: false
|
||||
)
|
||||
print("\(Self.self) constant \(idx) keyed archiver: \(serializedArchiver.base64EncodedString())")
|
||||
}
|
||||
|
||||
case .runTest:
|
||||
for (idx, (constant, archiverData)) in OWSAttachmentInfo.constants.enumerated() {
|
||||
do {
|
||||
let deserialized = try NSKeyedUnarchiver.unarchivedObject(
|
||||
ofClass: OWSAttachmentInfo.self,
|
||||
from: archiverData,
|
||||
requiringSecureCoding: false
|
||||
)!
|
||||
try deserialized.validate(against: constant)
|
||||
} catch ValidatableModelError.failedToValidate {
|
||||
XCTFail("Failed to validate NSKeyedArchiver-decoded model for constant \(idx)")
|
||||
} catch {
|
||||
XCTFail("Unexpected error for constant \(idx)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension OWSAttachmentInfo {
|
||||
static let constants: [(OWSAttachmentInfo, base64NSArchiverData: Data)] = [
|
||||
(
|
||||
OWSAttachmentInfo(
|
||||
attachmentId: "1234",
|
||||
ofType: .original,
|
||||
contentType: "jpeg",
|
||||
sourceFilename: "somefile.jpg"
|
||||
),
|
||||
Data(base64Encoded: "YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGpCwwbHB0eHyAhVSRudWxs1w0ODxAREhMUFRYXGBkaViRjbGFzc11zY2hlbWFWZXJzaW9uXxAPcmF3QXR0YWNobWVudElkXnNvdXJjZUZpbGVuYW1lXxAPTVRMTW9kZWxWZXJzaW9uW2NvbnRlbnRUeXBlXmF0dGFjaG1lbnRUeXBlgAiABYAEgAOAAoAGgAcQAFxzb21lZmlsZS5qcGdUMTIzNBABVGpwZWcQAtIiIyQlWiRjbGFzc25hbWVYJGNsYXNzZXNfEBFPV1NBdHRhY2htZW50SW5mb6MmJyhfEBFPV1NBdHRhY2htZW50SW5mb1hNVExNb2RlbFhOU09iamVjdAAIABEAGgAkACkAMgA3AEkATABRAFMAXQBjAHIAeQCHAJkAqAC6AMYA1QDXANkA2wDdAN8A4QDjAOUA8gD3APkA/gEAAQUBEAEZAS0BMQFFAU4AAAAAAAACAQAAAAAAAAApAAAAAAAAAAAAAAAAAAABVw==")!
|
||||
),
|
||||
(
|
||||
OWSAttachmentInfo(
|
||||
attachmentId: "1234",
|
||||
ofType: .originalForSend,
|
||||
contentType: nil,
|
||||
sourceFilename: nil
|
||||
),
|
||||
Data(base64Encoded: "YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXGBkaVSRudWxs1Q0ODxAREhMUEhZdc2NoZW1hVmVyc2lvbl8QD3Jhd0F0dGFjaG1lbnRJZF8QD01UTE1vZGVsVmVyc2lvbl5hdHRhY2htZW50VHlwZVYkY2xhc3OABIADgAKABIAFEABUMTIzNBAB0hscHR5aJGNsYXNzbmFtZVgkY2xhc3Nlc18QEU9XU0F0dGFjaG1lbnRJbmZvox8gIV8QEU9XU0F0dGFjaG1lbnRJbmZvWE1UTE1vZGVsWE5TT2JqZWN0AAgAEQAaACQAKQAyADcASQBMAFEAUwBaAGAAawB5AIsAnQCsALMAtQC3ALkAuwC9AL8AxADGAMsA1gDfAPMA9wELARQAAAAAAAACAQAAAAAAAAAiAAAAAAAAAAAAAAAAAAABHQ==")!
|
||||
),
|
||||
(
|
||||
OWSAttachmentInfo(
|
||||
attachmentId: nil,
|
||||
ofType: .V2,
|
||||
contentType: "mp4",
|
||||
sourceFilename: "file.mp4"
|
||||
),
|
||||
Data(base64Encoded: "YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGoCwwZGhscHR5VJG51bGzWDQ4PEBESExQVFhcYXnNvdXJjZUZpbGVuYW1lViRjbGFzc11zY2hlbWFWZXJzaW9uXxAPTVRMTW9kZWxWZXJzaW9uW2NvbnRlbnRUeXBlXmF0dGFjaG1lbnRUeXBlgAOAB4AEgAKABYAGEABYZmlsZS5tcDQQAVNtcDQQBdIfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNfEBFPV1NBdHRhY2htZW50SW5mb6MjJCVfEBFPV1NBdHRhY2htZW50SW5mb1hNVExNb2RlbFhOU09iamVjdAAIABEAGgAkACkAMgA3AEkATABRAFMAXABiAG8AfgCFAJMApQCxAMAAwgDEAMYAyADKAMwAzgDXANkA3QDfAOQA7wD4AQwBEAEkAS0AAAAAAAACAQAAAAAAAAAmAAAAAAAAAAAAAAAAAAABNg==")!
|
||||
),
|
||||
(
|
||||
OWSAttachmentInfo(
|
||||
attachmentId: nil,
|
||||
ofType: .V2,
|
||||
contentType: nil,
|
||||
sourceFilename: nil
|
||||
),
|
||||
Data(base64Encoded: "YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwVFhcYVSRudWxs1A0ODxAREhMUXXNjaGVtYVZlcnNpb25fEA9NVExNb2RlbFZlcnNpb25eYXR0YWNobWVudFR5cGVWJGNsYXNzgAOAAoAEgAUQABABEAXSGRobHFokY2xhc3NuYW1lWCRjbGFzc2VzXxART1dTQXR0YWNobWVudEluZm+jHR4fXxART1dTQXR0YWNobWVudEluZm9YTVRMTW9kZWxYTlNPYmplY3QACAARABoAJAApADIANwBJAEwAUQBTAFoAYABpAHcAiQCYAJ8AoQCjAKUApwCpAKsArQCyAL0AxgDaAN4A8gD7AAAAAAAAAgEAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAQQ=")!
|
||||
),
|
||||
(
|
||||
OWSAttachmentInfo(
|
||||
attachmentId: nil,
|
||||
ofType: .unset,
|
||||
contentType: "png",
|
||||
sourceFilename: "image.png"
|
||||
),
|
||||
Data(base64Encoded: "YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGnCwwZGhscHVUkbnVsbNYNDg8QERITFBUWFxZec291cmNlRmlsZW5hbWVWJGNsYXNzXXNjaGVtYVZlcnNpb25fEA9NVExNb2RlbFZlcnNpb25bY29udGVudFR5cGVeYXR0YWNobWVudFR5cGWAA4AGgASAAoAFgAIQAFlpbWFnZS5wbmcQAVNwbmfSHh8gIVokY2xhc3NuYW1lWCRjbGFzc2VzXxART1dTQXR0YWNobWVudEluZm+jIiMkXxART1dTQXR0YWNobWVudEluZm9YTVRMTW9kZWxYTlNPYmplY3QACAARABoAJAApADIANwBJAEwAUQBTAFsAYQBuAH0AhACSAKQAsAC/AMEAwwDFAMcAyQDLAM0A1wDZAN0A4gDtAPYBCgEOASIBKwAAAAAAAAIBAAAAAAAAACUAAAAAAAAAAAAAAAAAAAE0")!
|
||||
)
|
||||
]
|
||||
|
||||
func validate(against: OWSAttachmentInfo) throws {
|
||||
guard
|
||||
// Note that "rawAttachmentId" deserialized by mantle converts
|
||||
// nil to empty string; use the derived "attachmentId" instead.
|
||||
attachmentId == against.attachmentId,
|
||||
attachmentType == against.attachmentType,
|
||||
contentType == against.contentType,
|
||||
sourceFilename == against.sourceFilename
|
||||
else {
|
||||
throw ValidatableModelError.failedToValidate
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user