@@ -377,6 +377,318 @@ class ParseRoleTests: XCTestCase {
377
377
XCTAssertEqual ( decoded2, expected2)
378
378
}
379
379
380
+ func testRoleAddOperationSaveSynchronous( ) throws {
381
+ var acl = ParseACL ( )
382
+ acl. publicWrite = false
383
+ acl. publicRead = true
384
+
385
+ var role = try Role < User > ( name: " Administrator " , acl: acl)
386
+ role. createdAt = Date ( )
387
+ role. updatedAt = Date ( )
388
+ XCTAssertNil ( role. roles) // Shouldn't produce a relation without an objectId.
389
+ role. objectId = " yolo "
390
+ guard let roles = role. roles else {
391
+ XCTFail ( " Should have unwrapped " )
392
+ return
393
+ }
394
+
395
+ var newRole = try Role < User > ( name: " Moderator " , acl: acl)
396
+ newRole. objectId = " heel "
397
+ let operation = try roles. add ( [ newRole] )
398
+
399
+ var serverResponse = role
400
+ serverResponse. createdAt = nil
401
+ serverResponse. updatedAt = Date ( )
402
+
403
+ let encoded : Data !
404
+ do {
405
+ encoded = try ParseCoding . jsonEncoder ( ) . encode ( serverResponse)
406
+ //Get dates in correct format from ParseDecoding strategy
407
+ serverResponse = try serverResponse. getDecoder ( ) . decode ( Role< User> . self , from: encoded)
408
+ } catch {
409
+ XCTFail ( " Should encode/decode. Error \( error) " )
410
+ return
411
+ }
412
+
413
+ MockURLProtocol . mockRequests { _ in
414
+ return MockURLResponse ( data: encoded, statusCode: 200 , delay: 0.0 )
415
+ }
416
+
417
+ let updatedRole = try operation. save ( )
418
+ XCTAssertEqual ( updatedRole. updatedAt, serverResponse. updatedAt)
419
+ XCTAssertTrue ( updatedRole. hasSameObjectId ( as: serverResponse) )
420
+ }
421
+
422
+ func testRoleAddOperationSaveSynchronousError( ) throws {
423
+ var acl = ParseACL ( )
424
+ acl. publicWrite = false
425
+ acl. publicRead = true
426
+
427
+ var role = try Role < User > ( name: " Administrator " , acl: acl)
428
+ role. createdAt = Date ( )
429
+ role. updatedAt = Date ( )
430
+ XCTAssertNil ( role. roles) // Shouldn't produce a relation without an objectId.
431
+ role. objectId = " yolo "
432
+ guard let roles = role. roles else {
433
+ XCTFail ( " Should have unwrapped " )
434
+ return
435
+ }
436
+
437
+ var newRole = try Role < User > ( name: " Moderator " , acl: acl)
438
+ newRole. objectId = " heel "
439
+ var operation = try roles. add ( [ newRole] )
440
+ operation. target. objectId = nil
441
+
442
+ do {
443
+ _ = try operation. save ( )
444
+ XCTFail ( " Should have failed " )
445
+ } catch {
446
+ XCTAssertTrue ( error. containedIn ( [ . missingObjectId] ) )
447
+ }
448
+ }
449
+
450
+ func testRoleAddOperationSaveSynchronousCustomObjectId( ) throws {
451
+ var acl = ParseACL ( )
452
+ acl. publicWrite = false
453
+ acl. publicRead = true
454
+
455
+ ParseSwift . configuration. isAllowingCustomObjectIds = true
456
+ var role = try Role < User > ( name: " Administrator " , acl: acl)
457
+ role. createdAt = Date ( )
458
+ role. updatedAt = Date ( )
459
+ XCTAssertNil ( role. roles) // Shouldn't produce a relation without an objectId.
460
+ role. objectId = " yolo "
461
+ guard let roles = role. roles else {
462
+ XCTFail ( " Should have unwrapped " )
463
+ return
464
+ }
465
+
466
+ var newRole = try Role < User > ( name: " Moderator " , acl: acl)
467
+ newRole. objectId = " heel "
468
+ let operation = try roles. add ( [ newRole] )
469
+
470
+ var serverResponse = role
471
+ serverResponse. createdAt = nil
472
+ serverResponse. updatedAt = Date ( )
473
+
474
+ let encoded : Data !
475
+ do {
476
+ encoded = try ParseCoding . jsonEncoder ( ) . encode ( serverResponse)
477
+ //Get dates in correct format from ParseDecoding strategy
478
+ serverResponse = try serverResponse. getDecoder ( ) . decode ( Role< User> . self , from: encoded)
479
+ } catch {
480
+ XCTFail ( " Should encode/decode. Error \( error) " )
481
+ return
482
+ }
483
+
484
+ MockURLProtocol . mockRequests { _ in
485
+ return MockURLResponse ( data: encoded, statusCode: 200 , delay: 0.0 )
486
+ }
487
+
488
+ let updatedRole = try operation. save ( )
489
+ XCTAssertEqual ( updatedRole. updatedAt, serverResponse. updatedAt)
490
+ XCTAssertTrue ( updatedRole. hasSameObjectId ( as: serverResponse) )
491
+ }
492
+
493
+ func testRoleAddOperationSaveSynchronousCustomObjectIdError( ) throws {
494
+ var acl = ParseACL ( )
495
+ acl. publicWrite = false
496
+ acl. publicRead = true
497
+
498
+ ParseSwift . configuration. isAllowingCustomObjectIds = true
499
+ var role = try Role < User > ( name: " Administrator " , acl: acl)
500
+ role. createdAt = Date ( )
501
+ role. updatedAt = Date ( )
502
+ XCTAssertNil ( role. roles) // Shouldn't produce a relation without an objectId.
503
+ role. objectId = " yolo "
504
+ guard let roles = role. roles else {
505
+ XCTFail ( " Should have unwrapped " )
506
+ return
507
+ }
508
+
509
+ var newRole = try Role < User > ( name: " Moderator " , acl: acl)
510
+ newRole. objectId = " heel "
511
+ var operation = try roles. add ( [ newRole] )
512
+ operation. target. objectId = nil
513
+
514
+ do {
515
+ _ = try operation. save ( )
516
+ XCTFail ( " Should have failed " )
517
+ } catch {
518
+ XCTAssertTrue ( error. containedIn ( [ . missingObjectId] ) )
519
+ }
520
+ }
521
+
522
+ func testRoleAddOperationSaveAsynchronous( ) throws {
523
+ var acl = ParseACL ( )
524
+ acl. publicWrite = false
525
+ acl. publicRead = true
526
+
527
+ var role = try Role < User > ( name: " Administrator " , acl: acl)
528
+ role. createdAt = Date ( )
529
+ role. updatedAt = Date ( )
530
+ XCTAssertNil ( role. roles) // Shouldn't produce a relation without an objectId.
531
+ role. objectId = " yolo "
532
+ guard let roles = role. roles else {
533
+ XCTFail ( " Should have unwrapped " )
534
+ return
535
+ }
536
+
537
+ var newRole = try Role < User > ( name: " Moderator " , acl: acl)
538
+ newRole. objectId = " heel "
539
+ let operation = try roles. add ( [ newRole] )
540
+
541
+ var serverResponse = role
542
+ serverResponse. createdAt = nil
543
+ serverResponse. updatedAt = Date ( )
544
+
545
+ let encoded : Data !
546
+ do {
547
+ encoded = try ParseCoding . jsonEncoder ( ) . encode ( serverResponse)
548
+ //Get dates in correct format from ParseDecoding strategy
549
+ serverResponse = try serverResponse. getDecoder ( ) . decode ( Role< User> . self , from: encoded)
550
+ } catch {
551
+ XCTFail ( " Should encode/decode. Error \( error) " )
552
+ return
553
+ }
554
+
555
+ MockURLProtocol . mockRequests { _ in
556
+ return MockURLResponse ( data: encoded, statusCode: 200 , delay: 0.0 )
557
+ }
558
+
559
+ let expectation1 = XCTestExpectation ( description: " Save object1 " )
560
+ operation. save { result in
561
+ switch result {
562
+ case . success( let updatedRole) :
563
+ XCTAssertEqual ( updatedRole. updatedAt, serverResponse. updatedAt)
564
+ XCTAssertTrue ( updatedRole. hasSameObjectId ( as: serverResponse) )
565
+ case . failure( let error) :
566
+ XCTFail ( error. localizedDescription)
567
+ }
568
+ expectation1. fulfill ( )
569
+ }
570
+ wait ( for: [ expectation1] , timeout: 20.0 )
571
+ }
572
+
573
+ func testRoleAddOperationSaveAsynchronousError( ) throws {
574
+ var acl = ParseACL ( )
575
+ acl. publicWrite = false
576
+ acl. publicRead = true
577
+
578
+ ParseSwift . configuration. isAllowingCustomObjectIds = true
579
+ var role = try Role < User > ( name: " Administrator " , acl: acl)
580
+ role. createdAt = Date ( )
581
+ role. updatedAt = Date ( )
582
+ XCTAssertNil ( role. roles) // Shouldn't produce a relation without an objectId.
583
+ role. objectId = " yolo "
584
+ guard let roles = role. roles else {
585
+ XCTFail ( " Should have unwrapped " )
586
+ return
587
+ }
588
+
589
+ var newRole = try Role < User > ( name: " Moderator " , acl: acl)
590
+ newRole. objectId = " heel "
591
+ var operation = try roles. add ( [ newRole] )
592
+ operation. target. objectId = nil
593
+
594
+ let expectation1 = XCTestExpectation ( description: " Save object1 " )
595
+ operation. save { result in
596
+ switch result {
597
+ case . success:
598
+ XCTFail ( " Should have failed " )
599
+ case . failure( let error) :
600
+ XCTAssertEqual ( error. code, . missingObjectId)
601
+ }
602
+ expectation1. fulfill ( )
603
+ }
604
+ wait ( for: [ expectation1] , timeout: 20.0 )
605
+ }
606
+
607
+ func testRoleAddOperationSaveAsynchronousCustomObjectId( ) throws {
608
+ var acl = ParseACL ( )
609
+ acl. publicWrite = false
610
+ acl. publicRead = true
611
+
612
+ ParseSwift . configuration. isAllowingCustomObjectIds = true
613
+ var role = try Role < User > ( name: " Administrator " , acl: acl)
614
+ role. createdAt = Date ( )
615
+ role. updatedAt = Date ( )
616
+ XCTAssertNil ( role. roles) // Shouldn't produce a relation without an objectId.
617
+ role. objectId = " yolo "
618
+ guard let roles = role. roles else {
619
+ XCTFail ( " Should have unwrapped " )
620
+ return
621
+ }
622
+
623
+ var newRole = try Role < User > ( name: " Moderator " , acl: acl)
624
+ newRole. objectId = " heel "
625
+ let operation = try roles. add ( [ newRole] )
626
+
627
+ var serverResponse = role
628
+ serverResponse. createdAt = nil
629
+ serverResponse. updatedAt = Date ( )
630
+
631
+ let encoded : Data !
632
+ do {
633
+ encoded = try ParseCoding . jsonEncoder ( ) . encode ( serverResponse)
634
+ //Get dates in correct format from ParseDecoding strategy
635
+ serverResponse = try serverResponse. getDecoder ( ) . decode ( Role< User> . self , from: encoded)
636
+ } catch {
637
+ XCTFail ( " Should encode/decode. Error \( error) " )
638
+ return
639
+ }
640
+
641
+ MockURLProtocol . mockRequests { _ in
642
+ return MockURLResponse ( data: encoded, statusCode: 200 , delay: 0.0 )
643
+ }
644
+
645
+ let expectation1 = XCTestExpectation ( description: " Save object1 " )
646
+ operation. save { result in
647
+ switch result {
648
+ case . success( let updatedRole) :
649
+ XCTAssertEqual ( updatedRole. updatedAt, serverResponse. updatedAt)
650
+ XCTAssertTrue ( updatedRole. hasSameObjectId ( as: serverResponse) )
651
+ case . failure( let error) :
652
+ XCTFail ( error. localizedDescription)
653
+ }
654
+ expectation1. fulfill ( )
655
+ }
656
+ wait ( for: [ expectation1] , timeout: 20.0 )
657
+ }
658
+
659
+ func testRoleAddOperationSaveAsynchronousCustomObjectIdError( ) throws {
660
+ var acl = ParseACL ( )
661
+ acl. publicWrite = false
662
+ acl. publicRead = true
663
+
664
+ var role = try Role < User > ( name: " Administrator " , acl: acl)
665
+ role. createdAt = Date ( )
666
+ role. updatedAt = Date ( )
667
+ XCTAssertNil ( role. roles) // Shouldn't produce a relation without an objectId.
668
+ role. objectId = " yolo "
669
+ guard let roles = role. roles else {
670
+ XCTFail ( " Should have unwrapped " )
671
+ return
672
+ }
673
+
674
+ var newRole = try Role < User > ( name: " Moderator " , acl: acl)
675
+ newRole. objectId = " heel "
676
+ var operation = try roles. add ( [ newRole] )
677
+ operation. target. objectId = nil
678
+
679
+ let expectation1 = XCTestExpectation ( description: " Save object1 " )
680
+ operation. save { result in
681
+ switch result {
682
+ case . success:
683
+ XCTFail ( " Should have failed " )
684
+ case . failure( let error) :
685
+ XCTAssertEqual ( error. code, . missingObjectId)
686
+ }
687
+ expectation1. fulfill ( )
688
+ }
689
+ wait ( for: [ expectation1] , timeout: 20.0 )
690
+ }
691
+
380
692
func testRoleAddOperationNoKey( ) throws {
381
693
var acl = ParseACL ( )
382
694
acl. publicWrite = false
0 commit comments