a
    ù!f|  ã                   @   s`   d dl Z G dd„ de jƒZG dd„ de jƒZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZdS )é    Nc                   @   s>  e Zd Zdd„ ZdOd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"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dDdE„ Z$dFdG„ Z%dHdI„ Z&dJdK„ Z'dLdM„ Z(dNS )PÚTestConnectionc                 C   s   ddl m} |S )Nr   )Ú
Connection)Úgcloud.datastore.connectionr   )Úselfr   © r   úa/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/datastore/test_connection.pyÚ_getTargetClass   s    zTestConnection._getTargetClasséÒ  c                 C   s4   ddl m} d}|d ur"||f7 }||d|iŽ ¡ S )Nr   )ÚKey)ÚKindÚproject)Zgcloud.datastore.keyr
   Zto_protobuf)r   r   Úid_r
   Z	path_argsr   r   r   Ú_make_key_pb   s
    
zTestConnection._make_key_pbc                 C   s$   ddl m} | ¡ }||j ¡ _|S )Nr   ©Ú	query_pb2)Úgcloud.datastore._generatedr   ZQueryÚkindÚaddÚname)r   r   r   Úpbr   r   r   Ú_make_query_pb    s    zTestConnection._make_query_pbc                 O   s   |   ¡ |i |¤ŽS ©N)r   )r   ÚargsÚkwr   r   r   Ú_makeOne&   s    zTestConnection._makeOnec                 C   sN   |   |d |¡ |   |d d¡ |   |d d d¡ |   |d d |j¡ d S )NÚuriÚmethodÚPOSTÚheadersúContent-Typeúapplication/x-protobufú
User-Agent)ÚassertEqualÚ
USER_AGENT)r   Zcalled_withÚURIÚconnr   r   r   Ú_verifyProtobufCall)   s    ÿÿz"TestConnection._verifyProtobufCallc                 C   s$   |   ¡ }|  ¡ }|  |j|j¡ d S r   )r   r   r"   Úapi_base_urlÚAPI_BASE_URL)r   Úklassr%   r   r   r   Útest_default_url1   s    zTestConnection.test_default_urlc                 C   s   dd l }ddlm} ddlm} ddlm} d}||i}|||d |  ¡ }W d   ƒ n1 sb0    Y  |  |j	|¡ |  
|j	|d ¡ d S )Nr   ©Ú_Monkey©r(   ©ÚGCD_HOSTZ	CURR_HOST©Úenvironz
/datastore)ÚosÚgcloud._testingr,   Úgcloud.connectionr(   Úgcloud.environment_varsr/   r   ÚassertNotEqualr'   r"   )r   r2   r,   r(   r/   ÚHOSTÚfake_environr%   r   r   r   Útest_custom_url_from_env6   s    &z'TestConnection.test_custom_url_from_envc                 C   s>   ddl m} tƒ }| j|d}|  |j|¡ |  |j|¡ d S )Nr   r-   ©r'   )r4   r(   Úobjectr   r6   r'   r"   )r   r(   r7   r%   r   r   r   Ú test_custom_url_from_constructorE   s
    z/TestConnection.test_custom_url_from_constructorc           	      C   s¦   dd l }ddlm} ddlm} ddlm} tƒ }tƒ }||i}|||d | j|d}W d   ƒ n1 sn0    Y  |  	|j
|¡ |  	|j
|¡ |  |j
|¡ d S )Nr   r+   r-   r.   r0   r:   )r2   r3   r,   r4   r(   r5   r/   r;   r   r6   r'   r"   )	r   r2   r,   r(   r/   ZHOST1ZHOST2r8   r%   r   r   r   Ú#test_custom_url_constructor_and_envM   s    *z2TestConnection.test_custom_url_constructor_and_envc                 C   s   |   ¡ }|  |jd ¡ d S r   )r   r"   Úcredentials)r   r%   r   r   r   Útest_ctor_defaults^   s    z!TestConnection.test_ctor_defaultsc                 C   s4   G dd„ dt ƒ}|ƒ }|  |¡}|  |j|u ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z0TestConnection.test_ctor_explicit.<locals>.Credsc                 S   s   dS ©NFr   ©r   r   r   r   Úcreate_scoped_requirede   s    zGTestConnection.test_ctor_explicit.<locals>.Creds.create_scoped_requiredN)Ú__name__Ú
__module__Ú__qualname__rB   r   r   r   r   ÚCredsc   s   rF   )r;   r   Ú
assertTruer>   )r   rF   Úcredsr%   r   r   r   Útest_ctor_explicitb   s    
z!TestConnection.test_ctor_explicitc                 C   s(   |   ¡ }tƒ  |_}|  |j|u ¡ d S r   )r   r;   Ú_httprG   Úhttp)r   r%   rK   r   r   r   Útest_http_w_existingl   s    z#TestConnection.test_http_w_existingc                 C   s(   dd l }|  ¡ }|  t|j|jƒ¡ d S )Nr   )Úhttplib2r   rG   Ú
isinstancerK   ÚHttp)r   rM   r%   r   r   r   Útest_http_wo_credsq   s    z!TestConnection.test_http_wo_credsc                    sZ   dd l }tƒ ‰ G ‡ fdd„dtƒ}|ƒ }|  |¡}|  |jˆ u ¡ |  t|j|jƒ¡ d S )Nr   c                       s    e Zd Z‡ fdd„Zdd„ ZdS )z/TestConnection.test_http_w_creds.<locals>.Credsc                    s
   || _ ˆ S r   )Ú_called_with)r   rK   ©Z
authorizedr   r   Ú	authorize~   s    z9TestConnection.test_http_w_creds.<locals>.Creds.authorizec                 S   s   dS r@   r   rA   r   r   r   rB   ‚   s    zFTestConnection.test_http_w_creds.<locals>.Creds.create_scoped_requiredN)rC   rD   rE   rS   rB   r   rR   r   r   rF   |   s   rF   )rM   r;   r   rG   rK   rN   rQ   rO   )r   rM   rF   rH   r%   r   rR   r   Útest_http_w_credsw   s    	
z TestConnection.test_http_w_credsc                 C   s‚   d}d}d}|   ¡ }d |j|jd|d | g¡}tddid	ƒ }|_|  | |||¡d	¡ |  |j	||¡ |  |j	d
 |¡ d S )NÚPROJECTÚMETHODs   DATAú/Úprojectsú:ÚstatusÚ200ÚCONTENTÚbody)
r   Újoinr'   ÚAPI_VERSIONrO   rJ   r"   Ú_requestr&   rQ   )r   rU   rV   ÚDATAr%   r$   rK   r   r   r   Útest__request_w_200Š   s    
üz"TestConnection.test__request_w_200c           
      C   s¦   ddl m} ddlm} | ¡ }d|_d|_d}d}d}|  ¡ }td	d
i| 	¡ ƒ|_
|  |¡}| |||¡ W d   ƒ n1 s‚0    Y  d}	|  t|jƒ|	¡ d S )Nr   )Ú
BadRequest)Ú
status_pb2zEntity value is indexed.é	   rU   rV   ra   rZ   Z400z400 Entity value is indexed.)Zgcloud.exceptionsrc   Z
google.rpcrd   ÚStatusÚmessageÚcoder   rO   ÚSerializeToStringrJ   ÚassertRaisesr`   r"   ÚstrÚ	exception)
r   rc   rd   ÚerrorrU   rV   ra   r%   ÚeZexpected_messager   r   r   Útest__request_not_200š   s    ,z$TestConnection.test__request_not_200c           	         sÀ   G ‡ fdd„dt ƒ}G dd„ dt ƒ}d‰ d}d}|  ¡ }d |j|jd	|d
 | g¡}tddidƒ }|_| |||ƒ |¡}|  t	||ƒ¡ |  
|jd¡ |  |j||¡ |  
|jd ˆ ¡ d S )Nc                       s   e Zd Z‡ fdd„ZdS )z'TestConnection.test__rpc.<locals>.ReqPBc                    s   ˆ S r   r   rA   ©ZREQPBr   r   ri   °   s    z9TestConnection.test__rpc.<locals>.ReqPB.SerializeToStringN)rC   rD   rE   ri   r   rp   r   r   ÚReqPB®   s   rq   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )z'TestConnection.test__rpc.<locals>.RspPBc                 S   s
   || _ d S r   )Ú_pb)r   r   r   r   r   Ú__init__µ   s    z0TestConnection.test__rpc.<locals>.RspPB.__init__c                 S   s   | |ƒS r   r   )Úclsr   r   r   r   Ú
FromString¸   s    z2TestConnection.test__rpc.<locals>.RspPB.FromStringN)rC   rD   rE   rs   Úclassmethodru   r   r   r   r   ÚRspPB³   s   rw   s   REQPBrU   rV   rW   rX   rY   rZ   r[   r\   r]   )r;   r   r^   r'   r_   rO   rJ   Z_rpcrG   rN   r"   rr   r&   rQ   )	r   rq   rw   rU   rV   r%   r$   rK   Úresponser   rp   r   Ú	test__rpc¬   s$    	
üzTestConnection.test__rpcc                 C   sF   d}d}|   ¡ }d |j|jd|d | g¡}|  | ||¡|¡ d S )NrU   rV   rW   rX   rY   )r   r^   r'   r_   r"   Úbuild_api_url)r   rU   rV   r%   r$   r   r   r   Ú)test_build_api_url_w_default_base_versionÍ   s    
üz8TestConnection.test_build_api_url_w_default_base_versionc                 C   sN   d}d}d}d}|   ¡ }d ||d|d | g¡}|  | ||||¡|¡ d S )Nzhttp://example.com/z	3.1415926rU   rV   rW   rX   rY   )r   r^   r"   rz   )r   ZBASEZVERrU   rV   r%   r$   r   r   r   Ú*test_build_api_url_w_explicit_base_versionÙ   s    
üÿz9TestConnection.test_build_api_url_w_explicit_base_versionc                 C   sü   ddl m} d}|  |¡}| ¡ }|  ¡ }d |j|jd|d g¡}tddi| 	¡ ƒ }|_
| ||g¡\}}	}
|  t|ƒd¡ |  t|	ƒd¡ |  t|
ƒd¡ |j}|  |||¡ |j}|ƒ }| |d	 ¡ t|jƒ}|  t|ƒd
¡ |  ||d ¡ d S )Nr   ©Údatastore_pb2rU   rW   rX   ú:lookuprZ   r[   r]   é   ©r   r~   r   ÚLookupResponser   r^   r'   r_   rO   ri   rJ   Úlookupr"   ÚlenrQ   r&   ÚLookupRequestÚParseFromStringÚlistÚkeys©r   r~   rU   Úkey_pbÚrsp_pbr%   r$   rK   ÚfoundÚmissingÚdeferredÚcwÚrq_classÚrequestrˆ   r   r   r   Ú%test_lookup_single_key_empty_responseè   s0    
ü
z4TestConnection.test_lookup_single_key_empty_responsec                 C   s$  ddl m} d}|  |¡}| ¡ }|  ¡ }d |j|jd|d g¡}tddi| 	¡ ƒ }|_
|j||gd	d
\}}	}
|  t|ƒd¡ |  t|	ƒd¡ |  t|
ƒd¡ |j}|  |||¡ |j}|ƒ }| |d ¡ t|jƒ}|  t|ƒd¡ |  ||d ¡ |  |jj|jj¡ |  |jjd¡ d S )Nr   r}   rU   rW   rX   r   rZ   r[   T©Úeventualr]   r€   ó    )r   r~   r   r‚   r   r^   r'   r_   rO   ri   rJ   rƒ   r"   r„   rQ   r&   r…   r†   r‡   rˆ   Úread_optionsÚread_consistencyÚReadOptionsÚEVENTUALÚtransactionr‰   r   r   r   Ú0test_lookup_single_key_empty_response_w_eventual  s<    
ü
ÿ

ÿz?TestConnection.test_lookup_single_key_empty_response_w_eventualc                 C   s6   d}d}|   |¡}|  ¡ }| jt|j||d|d d S )NrU   ó   TRANSACTIONT©r”   Útransaction_id)r   r   rj   Ú
ValueErrorrƒ   )r   rU   ÚTRANSACTIONrŠ   r%   r   r   r   Ú@test_lookup_single_key_empty_response_w_eventual_and_transaction"  s    
ÿzOTestConnection.test_lookup_single_key_empty_response_w_eventual_and_transactionc                 C   s  ddl m} d}d}|  |¡}| ¡ }|  ¡ }d |j|jd|d g¡}tdd	i| 	¡ ƒ }|_
|j||g|d
\}	}
}|  t|	ƒd¡ |  t|
ƒd¡ |  t|ƒd¡ |j}|  |||¡ |j}|ƒ }| |d ¡ t|jƒ}|  t|ƒd¡ |  ||d ¡ |  |jj|¡ d S )Nr   r}   rU   rœ   rW   rX   r   rZ   r[   ©rž   r]   r€   )r   r~   r   r‚   r   r^   r'   r_   rO   ri   rJ   rƒ   r"   r„   rQ   r&   r…   r†   r‡   rˆ   r–   rš   )r   r~   rU   r    rŠ   r‹   r%   r$   rK   rŒ   r   rŽ   r   r   r‘   rˆ   r   r   r   Ú3test_lookup_single_key_empty_response_w_transaction*  s8    
ü
ÿ
zBTestConnection.test_lookup_single_key_empty_response_w_transactionc                 C   sH  ddl m} ddl m} d}|  |¡}| ¡ }| ¡ }|j |¡ |jj	|d |  
¡ }d |j|jd|d g¡}td	d
i| ¡ ƒ }	|_| ||g¡\\}
}}|  t|ƒd¡ |  t|ƒd¡ |  |
jjd jd¡ |  |
jjd jd¡ |	j}|  |||¡ |j}|ƒ }| |d ¡ t|jƒ}|  t|ƒd¡ |  ||d ¡ d S )Nr   r}   ©Ú
entity_pb2rU   ©ÚentityrW   rX   r   rZ   r[   r   r	   r]   r€   )r   r~   r¥   r   r‚   ÚEntityÚkeyÚCopyFromrŒ   r   r   r^   r'   r_   rO   ri   rJ   rƒ   r"   r„   Úpathr   ÚidrQ   r&   r…   r†   r‡   rˆ   )r   r~   r¥   rU   rŠ   r‹   r§   r%   r$   rK   rŒ   r   rŽ   r   r   r‘   rˆ   r   r   r   Ú(test_lookup_single_key_nonempty_responseH  s:    
ü
z7TestConnection.test_lookup_single_key_nonempty_responsec                 C   s  ddl m} d}|  |¡}| j|dd}| ¡ }|  ¡ }d |j|jd|d g¡}td	d
i| 	¡ ƒ }|_
| |||g¡\}	}
}|  t|	ƒd¡ |  t|
ƒd¡ |  t|ƒd¡ |j}|  |||¡ |j}|ƒ }| |d ¡ t|jƒ}|  t|ƒd¡ |  ||d ¡ |  ||d ¡ d S )Nr   r}   rU   é)	  ©r   rW   rX   r   rZ   r[   r]   é   r€   r   )r   r~   rU   Úkey_pb1Úkey_pb2r‹   r%   r$   rK   rŒ   r   rŽ   r   r   r‘   rˆ   r   r   r   Ú(test_lookup_multiple_keys_empty_responseh  s4    
ü
z7TestConnection.test_lookup_multiple_keys_empty_responsec                 C   sR  ddl m} d}|  |¡}| j|dd}| ¡ }|j ¡ }|jj |¡ |j ¡ }|jj |¡ |  	¡ }d 
|j|jd|d g¡}	td	d
i| ¡ ƒ }
|_| |||g¡\}}}|  |g ¡ |  t|ƒd¡ |  dd„ |D ƒ||g¡ |
j}|  ||	|¡ |j}|ƒ }| |d ¡ t|jƒ}|  t|ƒd¡ |  ||d ¡ |  ||d ¡ d S )Nr   r}   rU   r®   r¯   rW   rX   r   rZ   r[   c                 S   s   g | ]
}|j ‘qS r   ©r©   )Ú.0Úmissedr   r   r   Ú
<listcomp>›  r•   zFTestConnection.test_lookup_multiple_keys_w_missing.<locals>.<listcomp>r]   r°   r€   )r   r~   r   r‚   r   r   r§   r©   rª   r   r^   r'   r_   rO   ri   rJ   rƒ   r"   r„   rQ   r&   r…   r†   r‡   rˆ   )r   r~   rU   r±   r²   r‹   Zer_1Zer_2r%   r$   rK   Úresultr   rŽ   r   r   r‘   rˆ   r   r   r   Ú#test_lookup_multiple_keys_w_missing…  s@    


üÿ
z2TestConnection.test_lookup_multiple_keys_w_missingc                 C   sŒ  ddl m} d}|  |¡}| j|dd}| ¡ }|j ¡  |¡ |j ¡  |¡ |  ¡ }d |j	|j
d|d g¡}td	d
i| ¡ ƒ }|_| |||g¡\}	}
}|  |	g ¡ |  t|
ƒd¡ |  dd„ |D ƒ||g¡ |j}|  |||¡ |  |d |¡ |  |d d¡ |  |d d d¡ |  |d d |j¡ |j}|ƒ }| |d ¡ t|jƒ}|  t|ƒd¡ |  ||d ¡ |  ||d ¡ d S )Nr   r}   rU   r®   r¯   rW   rX   r   rZ   r[   c                 S   s   g | ]}|‘qS r   r   )rµ   Zdef_keyr   r   r   r·   »  r•   zGTestConnection.test_lookup_multiple_keys_w_deferred.<locals>.<listcomp>r   r   r   r   r   r    r!   r]   r°   r€   )r   r~   r   r‚   rŽ   r   rª   r   r^   r'   r_   rO   ri   rJ   rƒ   r"   r„   rQ   r&   r#   r…   r†   r‡   rˆ   )r   r~   rU   r±   r²   r‹   r%   r$   rK   r¸   r   rŽ   r   r   r‘   rˆ   r   r   r   Ú$test_lookup_multiple_keys_w_deferred§  sD    
üÿ
z3TestConnection.test_lookup_multiple_keys_w_deferredc                 C   sN  ddl m} ddl m} d}d}d}|  |¡}| ¡ }||j_|jj}||j_	|j
j|j_|  ¡ }	d |	j|	jd|d	 g¡}
td
di| ¡ ƒ }|	_|	j||dd\}}}}|  |g ¡ |  ||¡ |  |¡ |  |d¡ |j}|  ||
|	¡ |j}|ƒ }| |d ¡ |  |jjd¡ |  |j|¡ |  |jj|j j!¡ |  |jj"d¡ d S )Nr   r}   r   rU   ÚNonesuchó    rW   rX   ú	:runQueryrZ   r[   Tr“   r]   Ú r•   )#r   r~   r   r   ÚRunQueryResponseÚbatchÚ
end_cursorÚQueryResultBatchÚNO_MORE_RESULTSÚmore_resultsÚEntityResultÚFULLÚentity_result_typer   r^   r'   r_   rO   ri   rJ   Ú	run_queryr"   rG   rQ   r&   ÚRunQueryRequestr†   Úpartition_idÚnamespace_idÚqueryr–   r—   r˜   r™   rš   ©r   r~   r   rU   ÚKINDÚCURSORÚq_pbr‹   Úno_morer%   r$   rK   ÚpbsÚendÚmoreÚskippedr   r   r‘   r   r   r   Ú(test_run_query_w_eventual_no_transactionË  sJ    
üÿ

ÿz7TestConnection.test_run_query_w_eventual_no_transactionc                 C   sR  ddl m} ddl m} d}d}d}d}|  |¡}| ¡ }||j_|jj}	|	|j_	|j
j|j_|  ¡ }
d |
j|
jd	|d
 g¡}tddi| ¡ ƒ }|
_|
j|||d\}}}}|  |g ¡ |  ||¡ |  |¡ |  |d¡ |j}|  |||
¡ |j}|ƒ }| |d ¡ |  |jjd¡ |  |j|¡ |  |jj|j j!¡ |  |jj"|¡ d S )Nr   r}   r   rU   r»   r¼   rœ   rW   rX   r½   rZ   r[   r¢   r]   r¾   )#r   r~   r   r   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   r   r^   r'   r_   rO   ri   rJ   rÈ   r"   rG   rQ   r&   rÉ   r†   rÊ   rË   rÌ   r–   r—   r˜   ZREAD_CONSISTENCY_UNSPECIFIEDrš   )r   r~   r   rU   rÎ   rÏ   r    rÐ   r‹   rÑ   r%   r$   rK   rÒ   rÓ   rÔ   rÕ   r   r   r‘   r   r   r   Ú(test_run_query_wo_eventual_w_transactionñ  sN    
üÿ
þz7TestConnection.test_run_query_wo_eventual_w_transactionc                 C   s‚   ddl m} ddl m} d}d}d}d}|  |¡}| ¡ }||j_|jj}	|	|j_	|j
j|j_|  ¡ }
| jt|
j||d|d	 d S )
Nr   r}   r   rU   r»   r¼   rœ   Tr   )r   r~   r   r   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   r   rj   rŸ   rÈ   )r   r~   r   rU   rÎ   rÏ   r    rÐ   r‹   rÑ   r%   r   r   r   Ú)test_run_query_w_eventual_and_transaction  s     
ÿz8TestConnection.test_run_query_w_eventual_and_transactionc                 C   s&  ddl m} ddl m} d}d}d}|  |¡}| ¡ }||j_|jj}||j_	|j
j|j_|  ¡ }	d |	j|	jd|d	 g¡}
td
di| ¡ ƒ }|	_|	 ||¡\}}}}|  |g ¡ |  ||¡ |  |¡ |  |d¡ |j}|  ||
|	¡ |j}|ƒ }| |d ¡ |  |jjd¡ |  |j|¡ d S )Nr   r}   r   rU   r»   r¼   rW   rX   r½   rZ   r[   r]   r¾   )r   r~   r   r   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   r   r^   r'   r_   rO   ri   rJ   rÈ   r"   rG   rQ   r&   rÉ   r†   rÊ   rË   rÌ   rÍ   r   r   r   Ú(test_run_query_wo_namespace_empty_result+  s>    
ü
z7TestConnection.test_run_query_wo_namespace_empty_resultc                 C   s  ddl m} ddl m} d}d}| ¡ }|  |¡}| ¡ }|jjj|d d|j_	d|j_
|  ¡ }d	 |j|jd
|d g¡}	tddi| ¡ ƒ }
|_| ||d¡d }|  t|ƒd¡ |
j}|  ||	|¡ |j}|ƒ }| |d ¡ |  |jjd¡ |  |j|¡ d S )Nr   r}   r¤   rU   r   r¦   r€   é   rW   rX   r½   rZ   r[   ZNSr]   )r   r~   r¥   r¨   r   r¿   rÀ   Zentity_resultsr   rÇ   rÄ   r   r^   r'   r_   rO   ri   rJ   rÈ   r"   r„   rQ   r&   rÉ   r†   rÊ   rË   rÌ   )r   r~   r¥   rU   rÎ   r§   rÐ   r‹   r%   r$   rK   rÒ   r   r   r‘   r   r   r   Ú*test_run_query_w_namespace_nonempty_resultM  s6    
üz9TestConnection.test_run_query_w_namespace_nonempty_resultc                 C   s    ddl m} d}d}| ¡ }||_|  ¡ }d |j|jd|d g¡}tdd	i| 	¡ ƒ }|_
|  | |¡|¡ |j}|  |||¡ |j}	|	ƒ }
|
 |d
 ¡ d S )Nr   r}   rU   rœ   rW   rX   z:beginTransactionrZ   r[   r]   )r   r~   ZBeginTransactionResponserš   r   r^   r'   r_   rO   ri   rJ   r"   Zbegin_transactionrQ   r&   ZBeginTransactionRequestr†   ©r   r~   rU   r    r‹   r%   r$   rK   r   r   r‘   r   r   r   Útest_begin_transactionk  s&    üz%TestConnection.test_begin_transactionc                    s†  ddl m} ddlm} ddlm} ddlm} d}|  |¡}| 	¡ }| 
¡ }|j ¡ }	|	j}
|
j |¡ ||
dƒ}d|_|  ¡ }d	 |j|jd
|d g¡}tddi| ¡ ƒ }|_tƒ ‰g ‰ ‡ ‡fdd„}|||d | ||d ¡}W d   ƒ n1 sü0    Y  |  |ˆu ¡ |j}|  |||¡ |j
}|ƒ }| |d ¡ |  |jd¡ |  t |jƒ|	g¡ |  |j!|j"¡ |  ˆ |g¡ d S )Nr   r+   r}   ©Ú
connection©Ú_new_value_pbrU   ÚfooÚFoorW   rX   ú:commitrZ   r[   c                    s   ˆ   | ¡ ˆS r   ©Úappend©rx   ©Z_parsedZexpected_resultr   r   Ú
mock_parse  s    
z=TestConnection.test_commit_wo_transaction.<locals>.mock_parse©Ú_parse_commit_responser]   r•   )#r3   r,   r   r~   Úgcloud.datastorerß   Úgcloud.datastore.helpersrá   r   ÚCommitResponseÚCommitRequestÚ	mutationsr   Úupsertr©   rª   Ústring_valuer   r^   r'   r_   rO   ri   rJ   r;   ÚcommitrG   rQ   r&   r†   r"   rš   r‡   ÚmodeZNON_TRANSACTIONAL©r   r,   r~   ZMUTrá   rU   rŠ   r‹   Zreq_pbZmutationÚinsertZvalue_pbr%   r$   rK   ré   r¸   r   r   r‘   r   rè   r   Útest_commit_wo_transaction  sH    


ü,z)TestConnection.test_commit_wo_transactionc                    s†  ddl m} ddlm} ddlm} ddlm} d}|  |¡}| 	¡ }| 
¡ }|j ¡ }	|	j}
|
j |¡ ||
dƒ}d|_|  ¡ }d	 |j|jd
|d g¡}tddi| ¡ ƒ }|_tƒ ‰g ‰ ‡ ‡fdd„}|||d | ||d¡}W d   ƒ n1 sü0    Y  |  |ˆu ¡ |j}|  |||¡ |j
}|ƒ }| |d ¡ |  |jd¡ |  t |jƒ|	g¡ |  |j!|j"¡ |  ˆ |g¡ d S )Nr   r+   r}   rÞ   rà   rU   râ   rã   rW   rX   rä   rZ   r[   c                    s   ˆ   | ¡ ˆS r   rå   rç   rè   r   r   ré   Ë  s    
z<TestConnection.test_commit_w_transaction.<locals>.mock_parserê   ó   xactr]   )#r3   r,   r   r~   rì   rß   rí   rá   r   rî   rï   rð   r   rñ   r©   rª   rò   r   r^   r'   r_   rO   ri   rJ   r;   ró   rG   rQ   r&   r†   r"   rš   r‡   rô   ZTRANSACTIONALrõ   r   rè   r   Útest_commit_w_transaction¯  sH    


ü,z(TestConnection.test_commit_w_transactionc                 C   sª   ddl m} d}d}| ¡ }|  ¡ }d |j|jd|d g¡}tdd	i| ¡ ƒ }|_	|  
| ||¡d ¡ |j}|  |||¡ |j}	|	ƒ }
|
 |d
 ¡ |  
|
j|¡ d S )Nr   r}   rU   rø   rW   rX   z	:rollbackrZ   r[   r]   )r   r~   ZRollbackResponser   r^   r'   r_   rO   ri   rJ   r"   ÚrollbackrQ   r&   ZRollbackRequestr†   rš   rÜ   r   r   r   Útest_rollback_okÝ  s&    üzTestConnection.test_rollback_okc           
      C   sª   ddl m} d}| ¡ }|  ¡ }d |j|jd|d g¡}tddi| ¡ ƒ }|_	|  
| |g ¡g ¡ |j}|  |||¡ |j}|ƒ }	|	 |d	 ¡ |  
t|	jƒg ¡ d S )
Nr   r}   rU   rW   rX   ú:allocateIdsrZ   r[   r]   )r   r~   ÚAllocateIdsResponser   r^   r'   r_   rO   ri   rJ   r"   Úallocate_idsrQ   r&   ÚAllocateIdsRequestr†   r‡   rˆ   )
r   r~   rU   r‹   r%   r$   rK   r   r   r‘   r   r   r   Útest_allocate_ids_emptyó  s$    üz&TestConnection.test_allocate_ids_emptyc                 C   s.  ddl m} d}| j|d d| j|d dg}|  |¡| j|ddg}| ¡ }|j ¡  |d ¡ |j ¡  |d ¡ |  ¡ }d |j	|j
d|d	 g¡}td
di| ¡ ƒ }|_|  | ||¡|¡ |j}	|  |	||¡ |j}
|
ƒ }| |	d ¡ |  t|jƒt|ƒ¡ t||jƒD ]\}}|  ||¡ qd S )Nr   r}   rU   r¯   r®   r€   rW   rX   rü   rZ   r[   r]   )r   r~   r   rý   rˆ   r   rª   r   r^   r'   r_   rO   ri   rJ   r"   rþ   rQ   r&   rÿ   r†   r„   Úzip)r   r~   rU   Zbefore_key_pbsZafter_key_pbsr‹   r%   r$   rK   r   r   r‘   Z
key_beforeZ	key_afterr   r   r   Útest_allocate_ids_non_empty  s<    þþüÿz*TestConnection.test_allocate_ids_non_emptyN)r	   ))rC   rD   rE   r   r   r   r   r&   r*   r9   r<   r=   r?   rI   rL   rP   rT   rb   ro   ry   r{   r|   r’   r›   r¡   r£   r­   r³   r¹   rº   rÖ   r×   rØ   rÙ   rÛ   rÝ   r÷   rù   rû   r   r  r   r   r   r   r      sL   

! "$&("..r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTest__parse_commit_responsec                 C   s   ddl m} ||ƒS )Nr   rê   )r   rë   )r   Zcommit_response_pbrë   r   r   r   Ú_callFUT-  s    z$Test__parse_commit_response._callFUTc                    sŠ   ddl m‰  ddl m} d}|j|jjdddgd|j|jjd	d
dgdg}ˆ j‡ fdd„|D ƒ|d}|  |¡}|  |||f¡ d S )Nr   r}   r¤   i9  rã   r	   )r   r¬   )r«   ZBarZbaz)r   r   c                    s   g | ]}ˆ j |d ‘qS )r´   )ZMutationResult)rµ   r©   r}   r   r   r·   I  s   z7Test__parse_commit_response.test_it.<locals>.<listcomp>)Zmutation_resultsÚindex_updates)r   r~   r¥   r
   ZPathElementrî   r  r"   )r   r¥   r  rˆ   rx   r¸   r   r}   r   Útest_it1  s4    þÿÿþÿÿ÷
ÿü
z#Test__parse_commit_response.test_itN)rC   rD   rE   r  r  r   r   r   r   r  +  s   r  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )rO   Nc                 C   s    ddl m} ||ƒ| _|| _d S )Nr   )ÚResponse)rM   r  Ú	_responseÚ_content)r   r   Úcontentr  r   r   r   rs   V  s    
zHttp.__init__c                 K   s   || _ | j| jfS r   )rQ   r  r	  )r   r   r   r   r   r‘   [  s    zHttp.request)rC   rD   rE   rQ   rs   r‘   r   r   r   r   rO   R  s   rO   c                   @   s   e Zd Zdd„ ZdS )Ú_PathElementProtoc                 C   s
   || _ d S r   )r¬   )r   Z_idr   r   r   rs   b  s    z_PathElementProto.__init__N©rC   rD   rE   rs   r   r   r   r   r  `  s   r  c                   @   s   e Zd Zdd„ ZdS )Ú	_KeyProtoc                 C   s   t |ƒg| _d S r   )r  r«   )r   r   r   r   r   rs   h  s    z_KeyProto.__init__Nr  r   r   r   r   r  f  s   r  )Z	unittest2ZTestCaser   r  r;   rO   r  r  r   r   r   r   Ú<module>   s         '