@@ -993,6 +993,70 @@ final class MigrationTests: XCTestCase {
993993 let newOrderKey = try XCTUnwrap ( migratedOrder. value ( forKey: " chargeID " ) as? String )
994994 XCTAssertEqual ( newOrderKey, orderValue)
995995 }
996+
997+ func test_migrating_from_63_to_64_enables_creating_new_WCPayCharge_withCardPaymentDetails( ) throws {
998+ // Given
999+ let sourceContainer = try startPersistentContainer ( " Model 63 " )
1000+ let sourceContext = sourceContainer. viewContext
1001+
1002+ try sourceContext. save ( )
1003+
1004+ // When
1005+ let targetContainer = try migrate ( sourceContainer, to: " Model 64 " )
1006+
1007+ // Then
1008+ let targetContext = targetContainer. viewContext
1009+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCardPaymentDetails " ) , 0 )
1010+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCharge " ) , 0 )
1011+
1012+ // Creates nested cardPresent objects
1013+ let payment = insertWCPayCardPaymentDetails ( to: targetContext)
1014+
1015+ // Creates an `WCPayCharge`
1016+ let wcPayCharge = insertWCPayCharge ( to: targetContext)
1017+ wcPayCharge. setValue ( payment, forKey: " cardDetails " )
1018+
1019+
1020+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCardPaymentDetails " ) , 1 )
1021+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCharge " ) , 1 )
1022+ XCTAssertEqual ( try XCTUnwrap ( targetContext. firstObject ( ofType: WCPayCharge . self) ) , wcPayCharge)
1023+ XCTAssertEqual ( wcPayCharge. value ( forKey: " cardDetails " ) as? WCPayCardPaymentDetails , payment)
1024+ }
1025+
1026+ func test_migrating_from_63_to_64_enables_creating_new_WCPayCharge_withCardPresentPaymentDetails( ) throws {
1027+ // Given
1028+ let sourceContainer = try startPersistentContainer ( " Model 63 " )
1029+ let sourceContext = sourceContainer. viewContext
1030+
1031+ try sourceContext. save ( )
1032+
1033+ // When
1034+ let targetContainer = try migrate ( sourceContainer, to: " Model 64 " )
1035+
1036+ // Then
1037+ let targetContext = targetContainer. viewContext
1038+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCardPresentReceiptDetails " ) , 0 )
1039+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCardPresentPaymentDetails " ) , 0 )
1040+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCharge " ) , 0 )
1041+
1042+ // Creates nested cardPresent objects
1043+ let receipt = insertWCPayCardPresentReceiptDetails ( to: targetContext)
1044+ let payment = insertWCPayCardPresentPaymentDetails ( to: targetContext)
1045+
1046+ payment. setValue ( receipt, forKey: " receipt " )
1047+
1048+ // Creates an `WCPayCharge`
1049+ let wcPayCharge = insertWCPayCharge ( to: targetContext)
1050+ wcPayCharge. setValue ( payment, forKey: " cardPresentDetails " )
1051+
1052+
1053+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCardPresentReceiptDetails " ) , 1 )
1054+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCardPresentPaymentDetails " ) , 1 )
1055+ XCTAssertEqual ( try targetContext. count ( entityName: " WCPayCharge " ) , 1 )
1056+ XCTAssertEqual ( try XCTUnwrap ( targetContext. firstObject ( ofType: WCPayCharge . self) ) , wcPayCharge)
1057+ XCTAssertEqual ( wcPayCharge. value ( forKey: " cardPresentDetails " ) as? WCPayCardPresentPaymentDetails , payment)
1058+ XCTAssertEqual ( payment. value ( forKey: " receipt " ) as? WCPayCardPresentReceiptDetails , receipt)
1059+ }
9961060}
9971061
9981062// MARK: - Persistent Store Setup and Migrations
@@ -1425,4 +1489,51 @@ private extension MigrationTests {
14251489 " siteID " : 1372
14261490 ] )
14271491 }
1492+
1493+ @discardableResult
1494+ func insertWCPayCharge( to context: NSManagedObjectContext ) -> NSManagedObject {
1495+ context. insert ( entityName: " WCPayCharge " , properties: [
1496+ " siteID " : 1234 ,
1497+ " id " : " ch_idhash " ,
1498+ " amount " : 12 ,
1499+ " amountCaptured " : 12 ,
1500+ " amountRefunded " : 3 ,
1501+ " authorizationCode " : nil ,
1502+ " captured " : true ,
1503+ " created " : Date ( ) ,
1504+ " currency " : " usd " ,
1505+ " paid " : true ,
1506+ " paymentIntentID " : nil ,
1507+ " paymentMethodID " : " pm_idhash " ,
1508+ " refunded " : false ,
1509+ " status " : " succeeded "
1510+ ] )
1511+ }
1512+
1513+ @discardableResult
1514+ func insertWCPayCardPresentReceiptDetails( to context: NSManagedObjectContext ) -> NSManagedObject {
1515+ context. insert ( entityName: " WCPayCardPresentReceiptDetails " , properties: [
1516+ " accountType " : " credit " ,
1517+ " applicationPreferredName " : " Stripe Credit " ,
1518+ " dedicatedFileName " : " 293AAABBBCCCCC2 "
1519+ ] )
1520+ }
1521+
1522+ @discardableResult
1523+ func insertWCPayCardPresentPaymentDetails( to context: NSManagedObjectContext ) -> NSManagedObject {
1524+ context. insert ( entityName: " WCPayCardPresentPaymentDetails " , properties: [
1525+ " brand " : " amex " ,
1526+ " last4 " : " 1932 " ,
1527+ " funding " : " credit "
1528+ ] )
1529+ }
1530+
1531+ @discardableResult
1532+ func insertWCPayCardPaymentDetails( to context: NSManagedObjectContext ) -> NSManagedObject {
1533+ context. insert ( entityName: " WCPayCardPaymentDetails " , properties: [
1534+ " brand " : " visa " ,
1535+ " last4 " : " 2096 " ,
1536+ " funding " : " debit "
1537+ ] )
1538+ }
14281539}
0 commit comments