Skip to content

Commit e225811

Browse files
committed
Add test demonstrating issue #27
Transformer name is lost somehow.
1 parent 8c9414b commit e225811

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

Sources/ManagedModels/SchemaCompatibility/NSAttributeDescription+Data.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ extension CoreData.NSAttributeDescription: SchemaProperty {
8484
ValueTransformer
8585
.setValueTransformer(transformer, forName: .init(name))
8686
}
87+
assert(ValueTransformer.valueTransformerNames().contains(.init(name)))
8788
valueTransformerName = name
89+
assert(valueTransformerName != nil)
8890
}
8991
setValueClassName(for: codableType)
9092
return
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
//
2+
// Created by Helge Heß.
3+
// Copyright © 2024 ZeeZide GmbH.
4+
//
5+
6+
import XCTest
7+
import Foundation
8+
import CoreData
9+
@testable import ManagedModels
10+
11+
final class CodablePropertiesTests: XCTestCase {
12+
13+
private lazy var container = try? ModelContainer(
14+
for: Fixtures.CodablePropertiesSchema.managedObjectModel,
15+
configurations: ModelConfiguration(isStoredInMemoryOnly: true)
16+
)
17+
18+
func testEntityName() throws {
19+
let entityType = Fixtures.CodablePropertiesSchema.StoredAccess.self
20+
XCTAssertEqual(entityType.entity().name, "StoredAccess")
21+
}
22+
23+
func testPropertySetup() throws {
24+
let valueType = Fixtures.CodablePropertiesSchema.AccessSIP.self
25+
let attribute = CoreData.NSAttributeDescription(
26+
name: "sip",
27+
valueType: valueType,
28+
defaultValue: nil
29+
)
30+
XCTAssertEqual(attribute.name, "sip")
31+
32+
let transformerName = try XCTUnwrap(
33+
ValueTransformer.valueTransformerNames().first(where: {
34+
$0.rawValue.range(of: "CodableBox11TransformerVOO17ManagedModelTests8")
35+
!= nil
36+
})
37+
)
38+
let transformer = try XCTUnwrap(ValueTransformer(forName: transformerName))
39+
_ = transformer // to clear unused-wraning
40+
41+
XCTAssertTrue(attribute.valueType ==
42+
CodableBox<Fixtures.CodablePropertiesSchema.AccessSIP>.self)
43+
XCTAssertNotNil(attribute.valueTransformerName)
44+
XCTAssertEqual(attribute.valueTransformerName, transformerName.rawValue)
45+
}
46+
47+
func testCodablePropertyEntity() throws {
48+
let entity = try XCTUnwrap(
49+
container?.managedObjectModel.entitiesByName["StoredAccess"]
50+
)
51+
52+
// Creating the entity should have registered the transformer for the
53+
// CodableBox.
54+
let transformerName = try XCTUnwrap(
55+
ValueTransformer.valueTransformerNames().first(where: {
56+
$0.rawValue.range(of: "CodableBox11TransformerVOO17ManagedModelTests8")
57+
!= nil
58+
})
59+
)
60+
let transformer = try XCTUnwrap(ValueTransformer(forName: transformerName))
61+
_ = transformer // to clear unused-wraning
62+
63+
let attribute = try XCTUnwrap(entity.attributesByName["sip"])
64+
XCTAssertEqual(attribute.name, "sip")
65+
XCTAssertTrue(attribute.valueType ==
66+
CodableBox<Fixtures.CodablePropertiesSchema.AccessSIP>.self)
67+
XCTAssertNotNil(attribute.valueTransformerName)
68+
XCTAssertEqual(attribute.valueTransformerName, transformerName.rawValue)
69+
}
70+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// Created by Helge Heß.
3+
// Copyright © 2024 ZeeZide GmbH.
4+
//
5+
6+
import ManagedModels
7+
8+
extension Fixtures {
9+
// https://github.com/Data-swift/ManagedModels/issues/27
10+
11+
enum CodablePropertiesSchema: VersionedSchema {
12+
static var models : [ any PersistentModel.Type ] = [
13+
StoredAccess.self
14+
]
15+
16+
public static let versionIdentifier = Schema.Version(0, 1, 0)
17+
18+
@Model
19+
final class StoredAccess: NSManagedObject {
20+
var token : String
21+
var expires : Date
22+
var sip : AccessSIP
23+
}
24+
25+
struct AccessSIP: Codable {
26+
var username : String
27+
var password : String
28+
var realm : String
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)