
Z7                 @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m Z m	 Z	 e j
 d  Z e j d  Z Gd d   d e j  Z Gd d	   d	 e j  Z Gd
 d   d e j  Z Gd d   d e j  Z Gd d   d e j  Z e d k r	e j   d S)zTests for josepy.json_util.    N)errors
interfaces	test_utilutilzcert.pemzcsr.pemc               @   sj   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d S)	FieldTestz!Tests for josepy.json_util.Field.c             C   sw   d d l  m } x` t j d d g d d g d d g  D]7 \ } } } |  j | d d | d | j |   q8 Wd  S)Nr   )FieldTFfoodefault	omitempty)josepy.json_utilr   	itertoolsproductZassertFalseZomit)selfr   r	   r
   value r   7/usr/lib/python3/dist-packages/josepy/json_util_test.pytest_no_omit_boolean   s
    	.zFieldTest.test_no_omit_booleanc             C   s   t  j   } d d   } d d   } d d l m } | d  } | j |  } |  j d | j |   | j |  } |  j d | j |   |  j d	 | j |   d  S)
Nc             S   s   d S)Ndr   )unused_valuer   r   r   decoder   s    z+FieldTest.test_descriptors.<locals>.decoderc             S   s   d S)Ner   )r   r   r   r   encoder    s    z+FieldTest.test_descriptors.<locals>.encoderr   )r   r   r   r   )	mock	MagicMockr   r   r   assertEqualencoder   decode)r   
mock_valuer   r   r   fieldr   r   r   test_descriptors   s    zFieldTest.test_descriptorsc             C   sk   Gd d   d t  j  } |   } d d l m } |  j | j |  | k  |  j d | j |   d  S)Nc               @   s.   e  Z d  Z d d   Z e d d    Z d S)z<FieldTest.test_default_encoder_is_partial.<locals>.MockFieldc             S   s   d S)Nr   r   )r   r   r   r   to_partial_json0   s    zLFieldTest.test_default_encoder_is_partial.<locals>.MockField.to_partial_jsonc             S   s   d  S)Nr   )clsjobjr   r   r   	from_json3   s    zFFieldTest.test_default_encoder_is_partial.<locals>.MockField.from_jsonN)__name__
__module____qualname__r    classmethodr#   r   r   r   r   	MockField.   s   r(   r   )r   r   )r   ZJSONDeSerializabler   r   
assertTruedefault_encoderZassertNotEqual)r   r(   Z
mock_fieldr   r   r   r   test_default_encoder_is_partial-   s
    	z)FieldTest.test_default_encoder_is_partialc             C   s<   t  j   } d d l m } |  j | j |  | k  d  S)Nr   )r   )r   r   r   r   r)   r*   )r   r   r   r   r   r    test_default_encoder_passthrough=   s    z*FieldTest.test_default_encoder_passthroughc             C   s6   d d l  m } |  j d | j d d d g   d  S)Nr   )r            )r-   r.   r/   )r   r   r   default_decoder)r   r   r   r   r   "test_default_decoder_list_to_tupleB   s    z,FieldTest.test_default_decoder_list_to_tuplec             C   s^   d d l  m } | j d d i  } |  j t | t j   |  j | t j d d   d  S)Nr   )r   xr.   )r   r   r0   r)   
isinstancer   Z
frozendictr   )r   r   objr   r   r   'test_default_decoder_dict_to_frozendictF   s    z1FieldTest.test_default_decoder_dict_to_frozendictc             C   s<   t  j   } d d l m } |  j | j |  | k  d  S)Nr   )r   )r   r   r   r   r)   r0   )r   r   r   r   r   r    test_default_decoder_passthroughL   s    z*FieldTest.test_default_decoder_passthroughN)r$   r%   r&   __doc__r   r   r+   r,   r1   r5   r6   r   r   r   r   r      s   r   c               @   sR   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d S)JSONObjectWithFieldsMetaTestz4Tests for josepy.json_util.JSONObjectWithFieldsMeta.c                s   d d l  m } d d l  m } | d    _ | d    _ t j |  G  f d d   d t   } Gd d	   d	 |  } G  f d
 d   d |  } |   _ |   _	 |   _
 d  S)Nr   )r   )JSONObjectWithFieldsMetaZBazZBaz2c                   s   e  Z d  Z d Z   j Z d S)z-JSONObjectWithFieldsMetaTest.setUp.<locals>.AbarN)r:   )r$   r%   r&   	__slots__r   bazr   )r   r   r   A]   s   r=   c               @   s   e  Z d  Z d S)z-JSONObjectWithFieldsMetaTest.setUp.<locals>.BN)r$   r%   r&   r   r   r   r   Bb   s   r>   c                   s   e  Z d  Z   j Z d S)z-JSONObjectWithFieldsMetaTest.setUp.<locals>.CN)r$   r%   r&   field2r<   r   )r   r   r   Ce   s   r@   )r   r   r9   r   r?   sixZadd_metaclassobjecta_clsb_clsc_cls)r   r   r9   r=   r>   r@   r   )r   r   setUpU   s    		z"JSONObjectWithFieldsMetaTest.setUpc             C   sB   |  j  d |  j i |  j j  |  j  d |  j i |  j j  d  S)Nr<   )r   r   rC   _fieldsrD   )r   r   r   r   test_fieldsl   s    z(JSONObjectWithFieldsMetaTest.test_fieldsc             C   s#   |  j  d |  j i |  j j  d  S)Nr<   )r   r?   rE   rG   )r   r   r   r   test_fields_inheritanceq   s    z4JSONObjectWithFieldsMetaTest.test_fields_inheritancec             C   s0   |  j  d |  j j  |  j  d |  j j  d  S)Nr:   r<   )zbarbaz)rJ   )r   rC   r;   rD   )r   r   r   r   
test_slotsu   s    z'JSONObjectWithFieldsMetaTest.test_slotsc             C   s0   |  j  d |  j j  |  j  f  |  j j  d  S)Nr:   )zbar)r   rC   Z_orig_slotsrD   )r   r   r   r   test_orig_slotsy   s    z,JSONObjectWithFieldsMetaTest.test_orig_slotsN)	r$   r%   r&   r7   rF   rH   rI   rK   rL   r   r   r   r   r8   R   s   r8   c               @   s   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d S)JSONObjectWithFieldsTestz0Tests for josepy.json_util.JSONObjectWithFields.c                sg   d d l  m } d d l  m   G  f d d   d |  } | |  _ | d d  d d d	 d
  |  _ d  S)Nr   )JSONObjectWithFields)r   c            	       s|   e  Z d  Z   d d d d d d   d d d   Z   d	  Z   d
  Z e j d d    Z e j d d    Z d S)z@JSONObjectWithFieldsTest.setUp.<locals>.MockJSONObjectWithFieldsr2   r
   Tr   c             S   s   |  d S)Nr.   r   )r2   r   r   r   <lambda>   s    zIJSONObjectWithFieldsTest.setUp.<locals>.MockJSONObjectWithFields.<lambda>r   c             S   s   |  d S)Nr.   r   )r2   r   r   r   rO      s    yZc             S   s   |  d k r t  j    |  S)Ni  )r   SerializationError)r   r   r   r   rP      s    zBJSONObjectWithFieldsTest.setUp.<locals>.MockJSONObjectWithFields.yc             S   s   |  d k r t  j    |  S)Ni  )r   DeserializationError)r   r   r   r   rP      s    N)r$   r%   r&   r2   rP   zr   r   r   )r   r   r   MockJSONObjectWithFields   s   rU   r2   rP   r.   rT   r/   )r   rN   r   rU   r   )r   rN   rU   r   )r   r   rF      s
    	zJSONObjectWithFieldsTest.setUpc             C   s)   |  j  |  j |  j d d d d   d  S)NrP   r.   rT   r/   )r   r   rU   )r   r   r   r   test_init_defaults   s    z+JSONObjectWithFieldsTest.test_init_defaultsc          	   C   s5   |  j  d |  j d d d d d d  j d   d  S)N
   r2      rP   r   rT   )r   rU   r   )r   r   r   r   test_encode   s    z$JSONObjectWithFieldsTest.test_encodec             C   s    |  j  t j |  j j d  d  S)Nr   )assertRaisesr   Errorr   r   )r   r   r   r   test_encode_wrong_field   s    z0JSONObjectWithFieldsTest.test_encode_wrong_fieldc             C   s/   |  j  t j |  j d d d d   j d  d  S)NrP   i  rT   )rZ   r   rR   rU   r   )r   r   r   r   +test_encode_serialization_error_passthrough   s    zDJSONObjectWithFieldsTest.test_encode_serialization_error_passthroughc             C   s)   |  j  |  j j   d d d d i  d  S)NrP   r.   rQ   r/   )r   r   fields_to_partial_json)r   r   r   r   'test_fields_to_partial_json_omits_empty   s    z@JSONObjectWithFieldsTest.test_fields_to_partial_json_omits_emptyc             C   s>   |  j  d d  d d d d i |  j j d d d d i   d  S)Nr2   rP   r.   rT   r/   rQ   )r   rU   fields_from_json)r   r   r   r   -test_fields_from_json_fills_default_for_empty   s    zFJSONObjectWithFieldsTest.test_fields_from_json_fills_default_for_emptyc             C   s   |  j  t j |  j j d d i  |  j  t j |  j j d d i  |  j  t j |  j j d d d d i  |  j  t j |  j j d d d d i  d  S)NrP   r   rQ   r2   )rZ   r   rS   rU   r`   )r   r   r   r   &test_fields_from_json_fails_on_missing   s    z?JSONObjectWithFieldsTest.test_fields_from_json_fails_on_missingc             C   sD   |  j  |  j d d d d d d  j   d d d d d d i  d  S)Nr2   r-   rP   r.   rT   r/   rQ   )r   rU   r    )r   r   r   r   #test_fields_to_partial_json_encoder   s    !z<JSONObjectWithFieldsTest.test_fields_to_partial_json_encoderc          	   C   sD   |  j  d d d d d d i |  j j d d d d d d i   d  S)Nr2   r.   rP   rT   r/      rQ   )r   rU   r`   )r   r   r   r   test_fields_from_json_decoder   s    	z6JSONObjectWithFieldsTest.test_fields_from_json_decoderc          	   C   s2   |  j  t j |  j d d d d d d  j  d  S)Nr2   r-   rP   i  rT   r/   )rZ   r   rR   rU   r    )r   r   r   r   -test_fields_to_partial_json_error_passthrough   s    zFJSONObjectWithFieldsTest.test_fields_to_partial_json_error_passthroughc          	   C   s2   |  j  t j |  j j d d d d d d i  d  S)Nr2   rd   rP   i  rQ   r/   )rZ   r   rS   rU   r#   )r   r   r   r   'test_fields_from_json_error_passthrough   s    	z@JSONObjectWithFieldsTest.test_fields_from_json_error_passthroughN)r$   r%   r&   r7   rF   rV   rY   r\   r]   r_   ra   rb   rc   re   rf   rg   r   r   r   r   rM      s   rM   c               @   s   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d S)DeEncodersTestc             C   s   d |  _  d |  _ d  S)Na  MIIB3jCCAYigAwIBAgICBTkwDQYJKoZIhvcNAQELBQAwdzELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE1pY2hpZ2FuMRIwEAYDVQQHDAlBbm4gQXJib3IxKzApBgNVBAoMIlVuaXZlcnNpdHkgb2YgTWljaGlnYW4gYW5kIHRoZSBFRkYxFDASBgNVBAMMC2V4YW1wbGUuY29tMB4XDTE0MTIxMTIyMzQ0NVoXDTE0MTIxODIyMzQ0NVowdzELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE1pY2hpZ2FuMRIwEAYDVQQHDAlBbm4gQXJib3IxKzApBgNVBAoMIlVuaXZlcnNpdHkgb2YgTWljaGlnYW4gYW5kIHRoZSBFRkYxFDASBgNVBAMMC2V4YW1wbGUuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKx1c7RR7R_drnBSQ_zfx1vQLHUbFLh1AQQQ5R8DZUXd36efNK79vukFhN9HFoHZiUvOjm0c-pVE6K-EdE_twuUCAwEAATANBgkqhkiG9w0BAQsFAANBAC24z0IdwIVKSlntksllvr6zJepBH5fMndfk3XJp10jT6VE-14KNtjh02a56GoraAvJAT5_H67E8GvJ_ocNnB_oa  MIIBXTCCAQcCAQAweTELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE1pY2hpZ2FuMRIwEAYDVQQHDAlBbm4gQXJib3IxDDAKBgNVBAoMA0VGRjEfMB0GA1UECwwWVW5pdmVyc2l0eSBvZiBNaWNoaWdhbjEUMBIGA1UEAwwLZXhhbXBsZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEArHVztFHtH92ucFJD_N_HW9AsdRsUuHUBBBDlHwNlRd3fp580rv2-6QWE30cWgdmJS86ObRz6lUTor4R0T-3C5QIDAQABoCkwJwYJKoZIhvcNAQkOMRowGDAWBgNVHREEDzANggtleGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAANBAHJH_O6BtC9aGzEVCMGOZ7z9iIRHWSzr9x_bOzn7hLwsbXPAgO1QxEwL-X-4g20Gn9XBE1N9W6HCIEut2d8wACg)b64_certb64_csr)r   r   r   r   rF      s    	zDeEncodersTest.setUpc             C   sI   d d l  m } | d  } |  j t | t j   |  j d |  d  S)Nr   )encode_b64jose   xeA)r   rk   r)   r3   rA   string_typesr   )r   rk   encodedr   r   r   test_encode_b64jose   s    z"DeEncodersTest.test_encode_b64josec             C   sI   d d l  m } | d  } |  j t | t j   |  j d |  d  S)Nr   )decode_b64joserm   rl   )r   rq   r)   r3   rA   binary_typer   )r   rq   decodedr   r   r   test_decode_b64jose   s    z"DeEncodersTest.test_decode_b64josec             C   s*   d d l  m } |  j t j | d  d  S)Nr   )rq   r2   )r   rq   rZ   r   rS   )r   rq   r   r   r   !test_decode_b64jose_padding_error  s    z0DeEncodersTest.test_decode_b64jose_padding_errorc             C   sh   d d l  m } |  j d | d d d  |  j t j | d d d |  j t j | d d d d  S)	Nr   )rq   s   fooZm9vsizer/   r.   rd   )r   rq   r   rZ   r   rS   )r   rq   r   r   r   test_decode_b64jose_size  s    z'DeEncodersTest.test_decode_b64jose_sizec             C   sz   d d l  m } |  j d | d d d d d  |  j d | d d d	 d d  |  j t j | d d d
 d d d  S)Nr   )rq   s   foorv   rw   r/   minimumTr.   rd   )r   rq   r   rZ   r   rS   )r   rq   r   r   r    test_decode_b64jose_minimum_size  s
    ""z/DeEncodersTest.test_decode_b64jose_minimum_sizec             C   sI   d d l  m } | d  } |  j d |  |  j t | t j   d  S)Nr   )encode_hex16s   foo666f6f)r   r{   r   r)   r3   rA   rn   )r   r{   ro   r   r   r   test_encode_hex16  s    z DeEncodersTest.test_encode_hex16c             C   sI   d d l  m } | d  } |  j d |  |  j t | t j   d  S)Nr   )decode_hex16r|   s   foo)r   r~   r   r)   r3   rA   rr   )r   r~   rs   r   r   r   test_decode_hex16  s    z DeEncodersTest.test_decode_hex16c             C   sz   d d l  m } |  j d | d d d d d  |  j d | d d d	 d d  |  j t j | d d d
 d d d  S)Nr   )r~   s   foor|   rw   r/   ry   Tr.   rd   )r   r~   r   rZ   r   rS   )r   r~   r   r   r   test_decode_hex16_minimum_size!  s
    ""z-DeEncodersTest.test_decode_hex16_minimum_sizec             C   s*   d d l  m } |  j t j | d  d  S)Nr   )r~   r2   )r   r~   rZ   r   rS   )r   r~   r   r   r   test_decode_hex16_odd_length(  s    z+DeEncodersTest.test_decode_hex16_odd_lengthc             C   s-   d d l  m } |  j |  j | t   d  S)Nr   )encode_cert)r   r   r   ri   CERT)r   r   r   r   r   test_encode_cert,  s    zDeEncodersTest.test_encode_certc             C   sb   d d l  m } | |  j  } |  j t | t j   |  j | t  |  j	 t
 j | d  d  S)Nr   )decode_cert )r   r   ri   r)   r3   r   ComparableX509r   r   rZ   r   rS   )r   r   Zcertr   r   r   test_decode_cert0  s
    zDeEncodersTest.test_decode_certc             C   s-   d d l  m } |  j |  j | t   d  S)Nr   )
encode_csr)r   r   r   rj   CSR)r   r   r   r   r   test_encode_csr7  s    zDeEncodersTest.test_encode_csrc             C   sb   d d l  m } | |  j  } |  j t | t j   |  j | t  |  j	 t
 j | d  d  S)Nr   )
decode_csrr   )r   r   rj   r)   r3   r   r   r   r   rZ   r   rS   )r   r   Zcsrr   r   r   test_decode_csr;  s
    zDeEncodersTest.test_decode_csrN)r$   r%   r&   rF   rp   rt   ru   rx   rz   r}   r   r   r   r   r   r   r   r   r   r   r   rh      s   rh   c               @   sX   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d S)TypedJSONObjectWithFieldsTestc             C   sd   d d l  m } Gd d   d |  } | j Gd d   d |   } | |  _ | d d  |  _ d  S)	Nr   )TypedJSONObjectWithFieldsc               @   s   e  Z d  Z i  Z d Z d S)zPTypedJSONObjectWithFieldsTest.setUp.<locals>.MockParentTypedJSONObjectWithFieldstypeN)r$   r%   r&   ZTYPESZtype_field_namer   r   r   r   #MockParentTypedJSONObjectWithFieldsK  s   r   c               @   s:   e  Z d  Z d Z d Z e d d    Z d d   Z d S)	zJTypedJSONObjectWithFieldsTest.setUp.<locals>.MockTypedJSONObjectWithFieldstestr   c             S   s   d | d i S)Nr   r   )r!   r"   r   r   r   r`   U  s    z[TypedJSONObjectWithFieldsTest.setUp.<locals>.MockTypedJSONObjectWithFields.fields_from_jsonc             S   s   d |  j  i S)Nr   )r   )r   r   r   r   r^   Y  s    zaTypedJSONObjectWithFieldsTest.setUp.<locals>.MockTypedJSONObjectWithFields.fields_to_partial_jsonN)zfoo)r$   r%   r&   typr;   r'   r`   r^   r   r   r   r   MockTypedJSONObjectWithFieldsO  s   r   r   r:   )r   r   register
parent_clsmsg)r   r   r   r   r   r   r   rF   E  s    	z#TypedJSONObjectWithFieldsTest.setUpc             C   s)   |  j  |  j j   d d d d i  d  S)Nr   r   r   r:   )r   r   r    )r   r   r   r   test_to_partial_json_  s    z2TypedJSONObjectWithFieldsTest.test_to_partial_jsonc             C   s=   x6 g  f  d d g D]" } |  j  t j |  j j |  q Wd  S)NrX   Zasd)rZ   r   rS   r   r#   )r   r   r   r   r   test_from_json_non_dict_failse  s    z;TypedJSONObjectWithFieldsTest.test_from_json_non_dict_failsc             C   s    |  j  t j |  j j i   d  S)N)rZ   r   rS   r   r#   )r   r   r   r   !test_from_json_dict_no_type_failsj  s    z?TypedJSONObjectWithFieldsTest.test_from_json_dict_no_type_failsc             C   s&   |  j  t j |  j j d d i  d  S)Nr   r:   )rZ   r   ZUnrecognizedTypeErrorr   r#   )r   r   r   r   !test_from_json_unknown_type_failsn  s    z?TypedJSONObjectWithFieldsTest.test_from_json_unknown_type_failsc             C   s2   |  j  d d i |  j j d d d d i   d  S)Nr   r:   r   r   )r   r   r#   )r   r   r   r   test_from_json_returns_objr  s    z8TypedJSONObjectWithFieldsTest.test_from_json_returns_objN)	r$   r%   r&   rF   r   r   r   r   r   r   r   r   r   r   C  s   r   __main__)r7   r   Zunittestr   rA   Zjosepyr   r   r   r   Zload_comparable_certr   Zload_comparable_csrr   ZTestCaser   r8   rM   rh   r   r$   mainr   r   r   r   <module>   s   "D-]g4