@@ -583,6 +583,204 @@ public function test_decode_token() {
583583 $ this ->assertEquals ( $ validate_token ->get_error_code (), 'rest_authentication_token_error ' );
584584 }
585585
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 ' => 'testuser@sample.org ' ,
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 ' => 'testuser@sample.org ' ,
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+
586784 /**
587785 * Test validate_token().
588786 *
0 commit comments