@@ -583,6 +583,204 @@ public function test_decode_token() {
583
583
$ this ->assertEquals ( $ validate_token ->get_error_code (), 'rest_authentication_token_error ' );
584
584
}
585
585
586
+ /**
587
+ * Test validate().
588
+ *
589
+ * @covers ::validate()
590
+ * @since 0.1
591
+ */
592
+ public function test_validate () {
593
+ $ user_data = array (
594
+ 'role ' => 'administrator ' ,
595
+ 'user_login ' => 'testuser ' ,
596
+ 'user_pass ' => 'testpassword ' ,
597
+ 'user_email ' =>
'[email protected] ' ,
598
+ );
599
+
600
+ $ user_id = $ this ->factory ->user ->create ( $ user_data );
601
+
602
+ $ jwt = json_decode (
603
+ wp_json_encode (
604
+ array (
605
+ 'iss ' => get_bloginfo ( 'url ' ),
606
+ 'exp ' => time () + WEEK_IN_SECONDS ,
607
+ 'data ' => array (
608
+ 'user ' => array (
609
+ 'id ' => $ user_id ,
610
+ 'type ' => 'wp_user ' ,
611
+ 'user_login ' => 'testuser ' ,
612
+ 'user_email ' =>
'[email protected] ' ,
613
+ ),
614
+ ),
615
+ )
616
+ )
617
+ );
618
+
619
+ // Invalid HTTP Authorization Header.
620
+ $ mock = $ this ->getMockBuilder ( get_class ( $ this ->token ) )
621
+ ->setMethods (
622
+ array (
623
+ 'get_auth_header ' ,
624
+ )
625
+ )
626
+ ->getMock ();
627
+ $ mock ->method ( 'get_auth_header ' )->willReturn ( new WP_Error () );
628
+
629
+ $ validate = $ mock ->validate ();
630
+ $ this ->assertEquals ( 'rest_authentication_invalid_bearer_token ' , $ validate ['code ' ] );
631
+ $ this ->assertEquals ( 403 , $ validate ['data ' ]['status ' ] );
632
+
633
+ // Invalid Bearer token.
634
+ $ mock = $ this ->getMockBuilder ( get_class ( $ this ->token ) )
635
+ ->setMethods (
636
+ array (
637
+ 'get_auth_header ' ,
638
+ 'get_token ' ,
639
+ )
640
+ )
641
+ ->getMock ();
642
+ $ mock ->method ( 'get_auth_header ' )->willReturn ( true );
643
+ $ mock ->method ( 'get_token ' )->willReturn ( new WP_Error () );
644
+
645
+ $ validate = $ mock ->validate ();
646
+ $ this ->assertEquals ( 'rest_authentication_invalid_bearer_token ' , $ validate ['code ' ] );
647
+ $ this ->assertEquals ( 403 , $ validate ['data ' ]['status ' ] );
648
+
649
+ // Invalid Bearer token.
650
+ $ mock = $ this ->getMockBuilder ( get_class ( $ this ->token ) )
651
+ ->setMethods (
652
+ array (
653
+ 'get_auth_header ' ,
654
+ 'get_token ' ,
655
+ 'decode_token ' ,
656
+ )
657
+ )
658
+ ->getMock ();
659
+ $ mock ->method ( 'get_auth_header ' )->willReturn ( true );
660
+ $ mock ->method ( 'get_token ' )->willReturn ( true );
661
+ $ mock ->method ( 'decode_token ' )->willReturn ( new WP_Error () );
662
+
663
+ $ validate = $ mock ->validate ();
664
+ $ this ->assertEquals ( 'rest_authentication_invalid_bearer_token ' , $ validate ['code ' ] );
665
+ $ this ->assertEquals ( 403 , $ validate ['data ' ]['status ' ] );
666
+
667
+ // Invalid token issuer.
668
+ $ mock = $ this ->getMockBuilder ( get_class ( $ this ->token ) )
669
+ ->setMethods (
670
+ array (
671
+ 'get_auth_header ' ,
672
+ 'get_token ' ,
673
+ 'decode_token ' ,
674
+ 'validate_issuer ' ,
675
+ )
676
+ )
677
+ ->getMock ();
678
+ $ mock ->method ( 'get_auth_header ' )->willReturn ( true );
679
+ $ mock ->method ( 'get_token ' )->willReturn ( true );
680
+ $ mock ->method ( 'decode_token ' )->willReturn ( $ jwt );
681
+ $ mock ->method ( 'validate_issuer ' )->willReturn ( new WP_Error () );
682
+
683
+ $ validate = $ mock ->validate ();
684
+ $ this ->assertEquals ( 'rest_authentication_invalid_bearer_token ' , $ validate ['code ' ] );
685
+ $ this ->assertEquals ( 403 , $ validate ['data ' ]['status ' ] );
686
+
687
+ // Invalid token user.
688
+ $ mock = $ this ->getMockBuilder ( get_class ( $ this ->token ) )
689
+ ->setMethods (
690
+ array (
691
+ 'get_auth_header ' ,
692
+ 'get_token ' ,
693
+ 'decode_token ' ,
694
+ 'validate_issuer ' ,
695
+ 'validate_user ' ,
696
+ )
697
+ )
698
+ ->getMock ();
699
+ $ mock ->method ( 'get_auth_header ' )->willReturn ( true );
700
+ $ mock ->method ( 'get_token ' )->willReturn ( true );
701
+ $ mock ->method ( 'decode_token ' )->willReturn ( $ jwt );
702
+ $ mock ->method ( 'validate_issuer ' )->willReturn ( true );
703
+ $ mock ->method ( 'validate_user ' )->willReturn ( new WP_Error () );
704
+
705
+ $ validate = $ mock ->validate ();
706
+ $ this ->assertEquals ( 'rest_authentication_invalid_bearer_token ' , $ validate ['code ' ] );
707
+ $ this ->assertEquals ( 403 , $ validate ['data ' ]['status ' ] );
708
+
709
+ // Token has expired.
710
+ $ mock = $ this ->getMockBuilder ( get_class ( $ this ->token ) )
711
+ ->setMethods (
712
+ array (
713
+ 'get_auth_header ' ,
714
+ 'get_token ' ,
715
+ 'decode_token ' ,
716
+ 'validate_issuer ' ,
717
+ 'validate_user ' ,
718
+ 'validate_expiration ' ,
719
+ )
720
+ )
721
+ ->getMock ();
722
+ $ mock ->method ( 'get_auth_header ' )->willReturn ( true );
723
+ $ mock ->method ( 'get_token ' )->willReturn ( true );
724
+ $ mock ->method ( 'decode_token ' )->willReturn ( $ jwt );
725
+ $ mock ->method ( 'validate_issuer ' )->willReturn ( true );
726
+ $ mock ->method ( 'validate_user ' )->willReturn ( true );
727
+ $ mock ->method ( 'validate_expiration ' )->willReturn ( new WP_Error () );
728
+
729
+ $ validate = $ mock ->validate ();
730
+ $ this ->assertEquals ( 'rest_authentication_expired_bearer_token ' , $ validate ['code ' ] );
731
+ $ this ->assertEquals ( 403 , $ validate ['data ' ]['status ' ] );
732
+
733
+ // Valid Access Token.
734
+ $ mock = $ this ->getMockBuilder ( get_class ( $ this ->token ) )
735
+ ->setMethods (
736
+ array (
737
+ 'get_auth_header ' ,
738
+ 'get_token ' ,
739
+ 'decode_token ' ,
740
+ 'validate_issuer ' ,
741
+ 'validate_user ' ,
742
+ 'validate_expiration ' ,
743
+ )
744
+ )
745
+ ->getMock ();
746
+ $ mock ->method ( 'get_auth_header ' )->willReturn ( true );
747
+ $ mock ->method ( 'get_token ' )->willReturn ( true );
748
+ $ mock ->method ( 'decode_token ' )->willReturn ( $ jwt );
749
+ $ mock ->method ( 'validate_issuer ' )->willReturn ( true );
750
+ $ mock ->method ( 'validate_user ' )->willReturn ( true );
751
+ $ mock ->method ( 'validate_expiration ' )->willReturn ( true );
752
+
753
+ $ validate = $ mock ->validate ();
754
+ $ this ->assertEquals ( 'rest_authentication_valid_access_token ' , $ validate ['code ' ] );
755
+ $ this ->assertEquals ( 200 , $ validate ['data ' ]['status ' ] );
756
+
757
+ $ jwt ->data ->user ->token_type = 'refresh ' ;
758
+
759
+ // Valid Refresh Token.
760
+ $ mock = $ this ->getMockBuilder ( get_class ( $ this ->token ) )
761
+ ->setMethods (
762
+ array (
763
+ 'get_auth_header ' ,
764
+ 'get_token ' ,
765
+ 'decode_token ' ,
766
+ 'validate_issuer ' ,
767
+ 'validate_user ' ,
768
+ 'validate_expiration ' ,
769
+ )
770
+ )
771
+ ->getMock ();
772
+ $ mock ->method ( 'get_auth_header ' )->willReturn ( true );
773
+ $ mock ->method ( 'get_token ' )->willReturn ( true );
774
+ $ mock ->method ( 'decode_token ' )->willReturn ( $ jwt );
775
+ $ mock ->method ( 'validate_issuer ' )->willReturn ( true );
776
+ $ mock ->method ( 'validate_user ' )->willReturn ( true );
777
+ $ mock ->method ( 'validate_expiration ' )->willReturn ( true );
778
+
779
+ $ validate = $ mock ->validate ();
780
+ $ this ->assertEquals ( 'rest_authentication_valid_refresh_token ' , $ validate ['code ' ] );
781
+ $ this ->assertEquals ( 200 , $ validate ['data ' ]['status ' ] );
782
+ }
783
+
586
784
/**
587
785
* Test validate_token().
588
786
*
0 commit comments