o «ÞhÓDã@süddlZddlmmZddlZddlmZddlm Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZe jZe jZe jZe jZe j Z dNdd „Z!d d „Z"ej#d d „ƒZ$ej#dd„ƒZ%ej#dd„ƒZ&dd„Z'dd„Z(dd„Z)dd„Z*dd„Z+dd„Z,dd„Z-d d!„Z.d"d#„Z/d$d%„Z0d&d'„Z1d(d)„Z2d*d+„Z3d,d-„Z4d.d/„Z5d0d1„Z6d2d3„Z7d4d5„Z8d6d7„Z9d8d9„Z:d:d;„Z;dd?„Z=d@dA„Z>dBdC„Z?dDdE„Z@dFdG„ZAdHdI„ZBdJdK„ZCdLdM„ZDdS)OéN)Úapp)ÚConfig)ÚServiceAccountCredentials)Úbuild)Ú HttpErrorécCsd tjtjtj|d¡S)NÚ)Úk)ÚjoinÚrandomÚchoicesÚstringÚ ascii_lettersÚdigits)Ún©rú9/home/cmiss/Jenkins/workspace/SPARC-API/tests/test_api.pyÚ random_strsrcCsL| ¡jtdd ¡}|dD]}|d}|ddkr!|dSqtdƒ‚) z(Lookup the sheetId for the 'Events' tab.z!sheets(properties(sheetId,title)))Ú spreadsheetIdÚfieldsÚsheetsÚ propertiesÚtitleÚEventsÚsheetIdzEvents sheet not found)Ú spreadsheetsÚgetÚEVENTS_SPREADS_IDÚexecuteÚ ValueError)ZsvcÚmetaÚsÚpropsrrrÚget_events_sheet_idsþý   ÿr#cCsdtjd<t ¡S)NTZTESTING)rÚconfigZ test_clientrrrrÚclient's r%cCót tt¡}tdd|dS)NrZv4©Z credentials)rÚfrom_json_keyfile_nameÚKEY_PATHÚ SPREADS_SCOPEr©ZcredsrrrÚsheets_service-ó þr,cCr&)NÚdriveÚv3r')rr(r)Ú DRIVE_SCOPErr+rrrÚ drive_service5r-r1c Có.d}| d|›d¡}|j}d}||k}|sJt d|fd||f¡dt ¡vs+t |¡r0t |¡ndt |¡t |¡dœ}d d |i}tt  |¡ƒ‚d}}}d }|j }||v} | st d | fd ||f¡t |¡dt ¡vstt |¡ryt |¡ndt |¡dœ}d d |i}tt  |¡ƒ‚d}} }dS)Nz0217/files/derivative/brainstem_pig_metadata.jsonú /s3-resource/ú'?s3BucketName=prd-sparc-discover50-use1éÈ©ú==©z3%(py2)s {%(py2)s = %(py0)s.status_code } == %(py5)sÚr©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7smedulla©Úin©z,%(py1)s in %(py5)s {%(py5)s = %(py3)s.data }©Úpy1Úpy3r=© rÚ status_codeÚ @pytest_arÚ_call_reprcompareÚ @py_builtinsÚlocalsÚ_should_repr_global_nameÚ _safereprÚAssertionErrorÚ_format_explanationÚdata© r%Z small_s3_filer9Ú @py_assert1Ú @py_assert4Ú @py_assert3Ú @py_format6Ú @py_format8Ú @py_assert0Ú @py_assert2rrrÚ#test_direct_download_url_small_file>óŠŽrYc Cr2)Nz3307%2Ffiles%2Fderivative%2Fhuman_body_metadata.jsonr3r4r5r6r8r9r:r>r?scolonr@rBrCrF) r%Z new_s3_filer9rRrSrTrUrVrWrXrrrÚ(test_direct_download_url_new_bucket_fileErZr[c Cr2)Nz795/files/derivative%2FcolonHuman_Layout1_thumbnail.jpegr3r4r5r6r8r9r:r>r?sÿØÿr@rBrCrFrQrrrÚ"test_direct_download_url_thumbnailMrZr\cCs¤d}| d|›d¡}|j}d}||k}|sJt d|fd||f¡dt ¡vs+t |¡r0t |¡ndt |¡t |¡dœ}d d |i}tt  |¡ƒ‚d}}}dS) Nz95/files/?encodeBase64=truer3r4r5)ú!=)z3%(py2)s {%(py2)s = %(py0)s.status_code } != %(py5)sr9r:r>r?© rrGrHrIrJrKrLrMrNrO)r%Zincorrect_pathr9rRrSrTrUrVrrrÚ#test_direct_download_incorrect_pathTsŽr_cCó˜| d¡}|j}d}||k}|sDt d|fd||f¡dt ¡vs%t |¡r*t |¡ndt |¡t |¡dœ}dd|i}tt  |¡ƒ‚d}}}dS) Nr3é”r6r8r9r:r>r?r^©r%r9rRrSrTrUrVrrrÚtest_direct_download_empty_pathZs Žrcc Csbd}| d|›¡}|j}d}||k}|sIt d|fd||f¡dt ¡vs*t |¡r/t |¡ndt |¡t |¡dœ}dd |i}tt  |¡ƒ‚d}}}d }|j }|ƒ} | j } | ƒ} || v} | s£t d | fd || f¡t |¡dt ¡vs|t |¡rt |¡ndt |¡t | ¡t | ¡t | ¡d œ} dd| i}tt  |¡ƒ‚d}} }} } } dS)NzW61%2Ffiles%2Fprimary%2Fsub-44%2Fsam-1%2Fmicroscopy%2Fsub-44sam-1C44-1Slide2p2MT_10x.nd2r3ir6r8r9r:r>r?zFile too big to downloadr@)z|%(py1)s in %(py11)s {%(py11)s = %(py9)s {%(py9)s = %(py7)s {%(py7)s = %(py5)s {%(py5)s = %(py3)s.get_data }() }.decode }() })rDrEr=r?Úpy9Zpy11zassert %(py13)sZpy13) rrGrHrIrJrKrLrMrNrOÚget_dataÚdecode)r%Z large_s3_filer9rRrSrTrUrVrWÚ @py_assert6Z @py_assert8Z @py_assert10rXZ @py_format12Z @py_format14rrrÚ#test_direct_download_url_large_file`sŠÄrhc CsÀd}d}| d|›¡}|j}d}||k}|sKt d|fd||f¡dt ¡vs,t |¡r1t |¡ndt |¡t |¡dœ}d d |i}tt  |¡ƒ‚d}}}|  ¡d } | |k} | st d| fd | |f¡t | ¡d t ¡vsvt |¡r{t |¡nd dœ} dd| i}tt  |¡ƒ‚d} } | dd›¡}|j}d}||k}|sØt d|fd||f¡dt ¡vs¹t |¡r¾t |¡ndt |¡t |¡dœ}d d |i}tt  |¡ƒ‚d}}}dS)NiÙznih-data-portal@blackfynn.comz/get_owner_email/r5r6r8r9r:r>r?Úemail)z%(py1)s == %(py3)sÚportal_user_email©rDrEúassert %(py5)sr=é?Bra© rrGrHrIrJrKrLrMrNrOÚget_json) r%Zportal_user_idrjr9rRrSrTrUrVrWrXÚ @py_format4rrrÚtest_get_owner_emailhsŠ€ŽrqcCs<d}| dd›¡}|j}d}||k}|sIt d|fd||f¡dt ¡vs*t |¡r/t |¡ndt |¡t |¡dœ}d d |i}tt  |¡ƒ‚d}}}| d|›¡}|j}d }||k}|s–t d|fd||f¡dt ¡vswt |¡r|t |¡ndt |¡t |¡dœ}d d |i}tt  |¡ƒ‚d}}}dS) NZ OT2OD025340z /project/rmrar6r8r9r:r>r?r5r^)r%Zportal_project_idr9rRrSrTrUrVrrrÚtest_get_datasets_by_projectus ŠŽrrc Csnddddidgdddd d d œdd d d œgd œd ddddœddgddggddœddd d d œidœdœdddigddœddddœgd¢gd ¢gd!dœd"œdd#d$œgi}|jd%id&}|j}d'}||k}|s—t d(|fd)||f¡d*t ¡vsxt |¡r}t |¡nd*t |¡t |¡d+œ}d,d-|i}tt  |¡ƒ‚d}}}|jd%|d&}|j}d.}||k}|sãt d(|fd)||f¡d*t ¡vsÄt |¡rÉt |¡nd*t |¡t |¡d+œ}d,d-|i}tt  |¡ƒ‚d}}}d/}|j }|ƒ} || v} | s2t d0| fd1|| f¡t |¡d*t ¡vst |¡rt |¡nd*t |¡t | ¡d2œ}d3d4|i} tt  | ¡ƒ‚d}} }} |jd5|  ¡d&}|j}d.}||k}|s…t d(|fd)||f¡d*t ¡vsft |¡rkt |¡nd*t |¡t |¡d+œ}d,d-|i}tt  |¡ƒ‚d}}}|  ¡} d}|| v} | sÊt d0| fd6|| f¡t |¡d7t ¡vs³t | ¡r¸t | ¡nd7d8œ} d9d:| i}tt  |¡ƒ‚d}} | d}t |ƒ}d;} || k}|st d(|fd<|| f¡d=t ¡vsöt t ¡rût t ¡nd=t |¡t |¡t | ¡d>œ}d3d4|i} tt  | ¡ƒ‚d}}}} | dd?d@}d}||k} | sUt d(| fdA||f¡t |¡t |¡dBœ}dCdD|i}tt  |¡ƒ‚d}} }| ddEd@}d}||k} | st d(| fdA||f¡t |¡t |¡dBœ}dCdD|i}tt  |¡ƒ‚d}} }|jdFd/dGid&}|j}d'}||k}|sàt d(|fd)||f¡d*t ¡vsÁt |¡rÆt |¡nd*t |¡t |¡d+œ}d,d-|i}tt  |¡ƒ‚d}}}|jdFid&}|j}d'}||k}|s/t d(|fd)||f¡d*t ¡vst |¡rt |¡nd*t |¡t |¡d+œ}d,d-|i}tt  |¡ƒ‚d}}}dS)HNÚstateZ placeholder1ÚidZ123zhttps://doi.org/caxddZasdacZ connectivityz body properiêzUBERON:0013702)ÚlabelrtZmodels)ÚevidenceÚcommentÚtypeÚsourceÚtargetZ intermediatesZsafsfaZFeatureTzDrawn annotation)ZdrawnrugàØ¡m L(ÀgèFóøu)ÀgÈ:^M6Àgà_À;·ÀZ LineString)Z coordinatesrxz 1002)rtrxrÚgeometryZ connection)ÚresourceÚitemÚbodyÚfeatureZ placeholder2z__annotation/LineStringZCreate)rvrw)g€hÔ%@gàÿÜ @gI@)g ²!"@gÀ`Æ*@g`™8ÀZMultiLineString)rtrr{Z __annotation)r|r}r~rÚgroupZregionz/annotation/getshareid©Újsonér6r8r9r:r>r?r5Úuuidr@©zG%(py1)s in %(py7)s {%(py7)s = %(py5)s {%(py5)s = %(py3)s.get_json }() }©rDrEr=r?úassert %(py9)srdz/annotation/getstate©z%(py1)s in %(py3)sÚ returned_datarkrlr=é)z0%(py4)s {%(py4)s = %(py0)s(%(py2)s) } == %(py7)sÚlen)r;r<Úpy4r?rr|©z%(py1)s == %(py4)s©rDrŒúassert %(py6)sÚpy6éú /map/getstateÚ1234567) ÚpostrGrHrIrJrKrLrMrNrOror‹)r%Ú test_datar9rRrSrTrUrVrWrgrXÚ @py_format10r‰rpÚ @py_assert5Ú @py_format5Ú @py_format7rrrÚ&test_annotation_get_share_id_and_state€sb  ûþû÷÷þûþ óë&ŠŠ¢~¦tt”ršcCó&ddddœi}|jdid}|j}d}||k}|sMt d|fd ||f¡d t ¡vs.t |¡r3t |¡nd t |¡t |¡d œ}d d |i}tt  |¡ƒ‚d}}}|jd|d}|j}d}||k}|s™t d|fd ||f¡d t ¡vszt |¡rt |¡nd t |¡t |¡d œ}d d |i}tt  |¡ƒ‚d}}}d}|j }|ƒ} || v} | såt d| fd|| f¡t |¡d t ¡vsÆt |¡rËt |¡nd t |¡t | ¡dœ}dd|i} tt  | ¡ƒ‚d}} }} |jd|  ¡d}|j}d}||k}|s8t d|fd ||f¡d t ¡vst |¡rt |¡nd t |¡t |¡d œ}d d |i}tt  |¡ƒ‚d}}}|  ¡} d}|| v} | s}t d| fd|| f¡t |¡dt ¡vsft | ¡rkt | ¡nddœ} dd| i}tt  |¡ƒ‚d}} | dd}d}||k} | s³t d| fd||f¡t |¡t |¡dœ}dd|i}tt  |¡ƒ‚d}} }| dd }d}||k} | sët d| fd||f¡t |¡t |¡dœ}dd|i}tt  |¡ƒ‚d}} }|jddd!id}|j}d}||k}|sr?r5r„r@r…r†r‡rdr’rˆr‰rkrlr=rxrrŽrrrœr“© r”rGrHrIrJrKrLrMrNrOro)r%r•r9rRrSrTrUrVrWrgrXr–r‰rpr˜r™rrrÚtest_map_get_share_id_and_state¾ó ŠŠœ~pp”ržcCr›)"Nrsg¤p= ×£(@gq= ×£pÍ?)ÚfarÚnearz/scaffold/getshareidrrƒr6r8r9r:r>r?r5r„r@r…r†r‡rdz/scaffold/getstaterˆr‰rkrlr=r rrŽrrr¡r“r)r%ZtestDatar9rRrSrTrUrVrWrgrXr–r‰rpr˜r™rrrÚ$test_scaffold_get_share_id_and_state×rŸr¢cCr`) Nz9/hubspot_contact_properties/hubspot_webhook_test@test.comr5r6r8r9r:r>r?r^rbrrrÚtest_get_hubspot_contactïó Žr£c s’dtƒ›‰dtdƒ›}ˆ›d}d}t |¡|f}|jdˆ||dœd}|j}d } || k} | set d | fd || f¡d t ¡vsFt  |¡rKt  |¡nd t  |¡t  | ¡d œ} dd| i} t t  | ¡ƒ‚d}} } |  ¡} | dry| ddnd‰| ¡ ¡jtdd ¡}| dg¡}|s²t d¡dddt ¡vs¢t  |¡r§t  |¡ndi}t t  |¡ƒ‚t‡fdd„t|ddDƒdƒ}d}||u}|st d|fd||f¡dt ¡vsàt  |¡råt  |¡ndt  |¡d œ}t d!ˆ›d"¡d#d$|i} t t  | ¡ƒ‚d}}t|ƒ}d%d&d'|d(|d|d)œiigi}| ¡jt|d* ¡ˆrÅd+t›d,ˆ›d-}| ¡j|d.d/d/d0 ¡}| d1g¡}‡fd2d3„|Dƒ}|szt d4ˆ›d5¡ddd6t ¡vsjt  |¡rot  |¡nd6i}t t  |¡ƒ‚|D]J}z| ¡j|d7d/d8d/id9 ¡Wq|tyÄ}z&d:}|s·t d;|›¡d<d=t  |¡i}t t  |¡ƒ‚d}WYd}~q|d}~wwdSdS)>Nztest-zdesc-é z.txts"Test file content for Drive uploadz/tasks)rÚ descriptionÚ attachment©rPéÉr6r8Úrespr:r>r?Zattachment_filenamerr)rÚrangeÚvalueszNo rows found in Events sheetz >assert %(py0)sr;Úrowsc3s$|] \}}|dˆkr|VqdS)rNr)Ú.0ÚiÚrow)rrrÚ s€"z%test_tasks_appends..r‘)Ústart©úis not©z%(py0)s is not %(py3)sÚ row_index©r;rEzTest row with title 'z ' not foundz >assert %(py5)sr=ÚrequestsZdeleteDimensionr«ZROWS)rZ dimensionZ startIndexZendIndex)rr~ú'z' in parents and name='z' and trashed = falsezfiles(id, name, driveId)T)ÚqrÚsupportsAllDrivesZincludeItemsFromAllDrivesÚfilescsg|] }|dˆkr|‘qS)Únamer)r®Úf)Úuploaded_filenamerrÚ 4sz&test_tasks_appends..zNo file named 'z' found in Drive folderÚ matched_filesrtZtrashed)ZfileIdr»r~Fz Failed to delete uploaded file: z >assert %(py1)srD)rÚioÚBytesIOr”rGrHrIrJrKrLrMrNrOrorr¬rrrÚ_format_assertmsgÚnextÚ enumerater#Z batchUpdateÚEVENTS_ATTACHMENTS_FOLDERr¼ÚlistÚupdater)r%r,r1r¦ÚfilenameZ file_contentsZ fake_filerªrRrSrTrUrVZ json_respZget_respr­Z @py_format1r¶rXrpZsheet_idZdelete_requestÚqueryZ files_respr¼rÁr¾ÚerWZ @py_format2r)rr¿rÚtest_tasks_appendsósŽ   ýŠ þý HþŒüÿÿÿÿþüû Vý L€ÿì rÍc CsÆd}d}d}|›|›}ddddœ}|j||dd id }|j}d }||k} | s[t d | fd ||f¡dt ¡vsr?) r”rGrHrIrJrKrLrMrNrO) r%Ú http_methodÚendpointÚbase_urlÚfull_urlÚ mock_bodyrÔrRrSrTrUrVrrrÚtest_subscribe_to_newsletterAs  ÿýŽrÚcCs0d}d}d}|›|›}dddœg}tt ¡ƒ}tj|dd}|›|›|›|›}tjtj d ¡| d ¡t j d   ¡} t   | ¡ ¡} |j||d d | t|ƒd œd} | j} d} | | k}|st d|fd| | f¡dt ¡vsqt | ¡rvt | ¡ndt | ¡t | ¡dœ}dd|i}tt |¡ƒ‚d} }} dS)NrÎz/hubspot_webhookrÏzcontact.propertyChangeZ 83944215465)ZsubscriptionTypeZobjectId)ú,ú:)Ú separatorszutf-8)ÚkeyÚmsgZ digestmodrÒr/)rÑzX-HubSpot-Signature-VersionzX-Hubspot-Signature-v3zX-HubSpot-Request-Timestamp)rPrÓr5r6r8rÔr:r>r?)ÚintÚtimer‚ÚdumpsÚhmacÚnewrZHUBSPOT_CLIENT_SECRETÚencodeÚhashlibZsha256ÚdigestÚbase64Ú b64encoderfr”ÚstrrGrHrIrJrKrLrMrNrO)r%rÕrÖr×rØrÙZvalid_timestampZraw_jsonZ data_to_signÚ signatureZmock_signaturerÔrRrSrTrUrVrrrÚtest_hubspot_webhookPs4    ýüüýŽ rìc Có| d¡}|j}d}||k}|sDt d|fd||f¡dt ¡vs%t |¡r*t |¡ndt |¡t |¡dœ}dd|i}tt  |¡ƒ‚d}}}|  ¡}d }||v} | s†t d | fd ||f¡t |¡d t ¡vsot |¡rtt |¡nd d œ} dd| i}tt  |¡ƒ‚d}} dS)Nz/get_osparc_datar5r6r8r9r:r>r?Z file_viewersr@rˆÚ osparc_datarkrlr=rn) r%r9rRrSrTrUrVrîrWrXrprrrÚtest_osparc_viewerstó Š|rïcCr`) Nz/sim/dataset/0rar6r8r9r:r>r?r^rbrrrÚtest_sim_dataset{r¤rñc Cs|jdddid}|j}d}||k}|sHt d|fd||f¡dt ¡vs)t |¡r.t |¡ndt |¡t |¡d œ}d d |i}tt  |¡ƒ‚d}}}|  ¡}|d }d }||k} | st d| fd||f¡t |¡t |¡dœ} dd| i} tt  | ¡ƒ‚d}} }dS)Nz/onto_term_lookupÚtermz-http://purl.obolibrary.org/obo/NCBITaxon_9606)Z query_stringr5r6r8r9r:r>r?ruZHumanrrŽrrrn) r%r9rRrSrTrUrVZ json_datarWrXr˜r™rrrÚtest_onto_term_lookup€sŠnrócCr`) Nz/simulation_ui_file/137rar6r8r9r:r>r?r^rbrrrÚ$test_non_existing_simulation_ui_file‡r¤rôc Có| d¡}|j}d}||k}|sDt d|fd||f¡dt ¡vs%t |¡r*t |¡ndt |¡t |¡dœ}dd|i}tt  |¡ƒ‚d}}}|  ¡d d d d }d }||k}|st d|fd||f¡t |¡t |¡dœ} dd| i} tt  | ¡ƒ‚d}}}dS)Nz/simulation_ui_file/135r5r6r8r9r:r>r?Ú simulationÚsolversrr½zsimcore/services/comp/opencorrrŽrrrn© r%r9rRrSrTrUrVrWrXr˜r™rrrÚ%test_simulation_ui_file_old_s3_bucketŒó Š~rùc Crõ)Nz/simulation_ui_file/308r5r6r8r9r:r>r?rör÷rr½z*simcore/services/comp/kember-cardiac-modelrrŽrrrnrørrrÚ%test_simulation_ui_file_new_s3_bucket’rúrûcCóÊ| d¡}|j}d}||k}|sDt d|fd||f¡dt ¡vs%t |¡r*t |¡ndt |¡t |¡dœ}dd|i}tt  |¡ƒ‚d}}}|  ¡}d }||v} | s†t d | fd ||f¡t |¡d t ¡vsot |¡rtt |¡nd d œ} dd| i}tt  |¡ƒ‚d}} |d }t |ƒ}|t k} | sÝt d| fd|t f¡dt ¡vs­t t ¡r²t t ¡ndt |¡t |¡dt ¡vsÆt t ¡rËt t ¡nddœ} dd| i} tt  | ¡ƒ‚d}}} dS)Nz"/get_featured_datasets_identifiersr5r6r8r9r:r>r?Z identifiersr@rˆr‚rkrlr=©z0%(py4)s {%(py4)s = %(py0)s(%(py2)s) } == %(py6)srxrÈ©r;r<rŒrúassert %(py8)sÚpy8© rrGrHrIrJrKrLrMrNrOrorxrÈ©r%r9rRrSrTrUrVr‚rWrXrpr—r™Ú @py_format9rrrÚtest_get_featured_datasets˜ó Šx¶rc Cs| d¡}|j}d}||v}|sDt d|fd||f¡dt ¡vs%t |¡r*t |¡ndt |¡t |¡dœ}dd|i}tt  |¡ƒ‚d}}}|  ¡}d }||v} | s†t d| fd ||f¡t |¡d t ¡vsot |¡rtt |¡nd d œ} d d| i}tt  |¡ƒ‚d}} dS)Nz/total_protocol_views)r5éÊr@)z3%(py2)s {%(py2)s = %(py0)s.status_code } in %(py5)sr9r:r>r?Z total_viewsrˆr‚rkrlr=rn© r%r9rRrSrTrUrVr‚rWrXrprrrÚtest_get_protocol_viewsŸrðrc Crí)Nz/total_dataset_citationsr5r6r8r9r:r>r?Ztotal_citationsr@rˆr‚rkrlr=rnrrrrÚ test_get_total_dataset_citations¥rðr cCrü)Nz/reva/subject-idsr5r6r8r9r:r>r?Úidsr@rˆr‚rkrlr=rýrxrÈrþrÿrrrrrrÚtest_get_reva_subject_ids«rr cCrü)Nz/reva/tracing-files/sub-SR005r5r6r8r9r:r>r?r¼r@rˆr‚rkrlr=rýrxrÈrþrÿrrrrrrÚtest_get_reva_tracing_files²rr cCrü)Nz/reva/micro-ct-files/sub-SR005r5r6r8r9r:r>r?r¼r@rˆr‚rkrlr=rýrxrÈrþrÿrrrrrrÚtest_get_reva_micro_ct_files¹rr cCrü)Nz*/reva/anatomical-landmarks-files/sub-SR005r5r6r8r9r:r>r?Zfoldersr@rˆr‚rkrlr=rýrxrÈrþrÿrrrrrrÚtest_get_reva_landmarks_filesÀrrcCsJ|jdddddœd}| ¡}|j}d}||k}|sNt d|fd ||f¡d t ¡vs/t |¡r4t |¡nd t |¡t |¡d œ}d d |i}t t  |¡ƒ‚d}}}|d}d}||k} | sƒt d| fd||f¡t |¡t |¡dœ} dd| i} t t  | ¡ƒ‚d}} }|d} d} | | u}|sÅt d|fd| | f¡dt ¡vsªt | ¡r¯t | ¡ndt | ¡dœ} dd| i}t t  |¡ƒ‚d}} dt j ›ddœ}t j| |ddid}|j}d }||k}|st d|fd ||f¡d!t ¡vsþt |¡rt |¡nd!t |¡t |¡d œ}d d |i}t t  |¡ƒ‚d}}}dS)"Nz /create_issueztest-sparc-api-issue-creationz†This is a test generated from the sparc-api test suite. This ticket should be automatically closed, but if it is not then please do soÚtest)rr~rxr¨r©r6r8Úcreate_responser:r>r?ÚstatusÚsuccessrrŽrrÚ issue_api_urlr³rµr·rlr=ztoken zapplication/vnd.github+json)Ú AuthorizationZAcceptrsÚclosed)rÓr‚r5Úclose_response)r”rorGrHrIrJrKrLrMrNrOrZSPARC_TECH_LEADS_GITHUB_TOKENr¸Úpatch)r%rZcreate_response_jsonrRrSrTrUrVrWrXr˜r™rrprÓrrrrÚtest_create_issueÇs& ýŠjx þý’rc CsÌ|jddddddddœd }| ¡}d }|j}||k}d }||k}|r%|s_t d ||fd |||f¡t |¡dt ¡vs@t |¡rEt |¡ndt |¡t |¡dœ}dd|i} t t  | ¡ƒ‚d}}}}}dD]j} |j } | | ƒ} d}| |u} | sÍt d| fd| |f¡dt ¡vs‘t |¡r–t |¡ndt | ¡dt ¡vs¦t | ¡r«t | ¡ndt | ¡t |¡dœ}t  | ›d¡dd|i} t t  | ¡ƒ‚d} } } }qk|d}|d}ddt jdœ}t j›d|›}tj||d }|j} | s#t  d!¡d"d#t ¡vst |¡rt |¡nd#t | ¡d$œ}t t  |¡ƒ‚d} t j›d%|›}tj||d }|j} | sbt  d&¡d"d't ¡vsMt |¡rRt |¡nd't | ¡d$œ}t t  |¡ƒ‚d} dS)(Nz/submit_data_inquiryztest-sparc-api-deal-creationzŠThis is a test generated from the sparc-api test suite. This deal/note should be automatically deleted, but if it is not then please do soZresearchÚTestZUserz test-api-email@do-not-delete.com)rr~rxZ firstnameZlastnamerir¨r5i,)ú<=ú<)z3%(py1)s <= %(py6)s {%(py6)s = %(py4)s.status_code }z2%(py6)s {%(py6)s = %(py4)s.status_code } < %(py8)sÚrequest_response)rDrŒrrzassert %(py10)sZpy10)Z contact_idÚdeal_idÚnote_idr³)zM%(py5)s {%(py5)s = %(py2)s {%(py2)s = %(py0)s.get }(%(py3)s) } is not %(py8)sÚrequest_response_jsonrÞ)r;r<rEr=rz is missing or Nonez >assert %(py10)srrrÒzBearer )rÑrz/objects/deals/)rÓzFailed to delete test dealz( >assert %(py2)s {%(py2)s = %(py0)s.ok }Údelete_deal_response)r;r<z/objects/notes/zFailed to delete test noteÚdelete_note_response)r”rorGrHrIrMrJrKrLrNrOrrÄrZHUBSPOT_API_TOKENZHUBSPOT_V3_APIr¸ÚdeleteÚok)r%rrrWr—rXZ @py_assert7rTrZ @py_format11rÞrRrSrgrrrÓZdelete_deal_urlr Ú @py_format3Zdelete_note_urlr!rrrÚtest_submit_data_inquiryãs. ú ®Òþ`dr%)r)EÚbuiltinsrJÚ_pytest.assertion.rewriteÚ assertionÚrewriterHÚpytestrZ app.configrrÂr¸r r rárãrærèr‚Zoauth2client.service_accountrZgoogleapiclient.discoveryrZgoogleapiclient.errorsrZGOOGLE_API_SPREADS_SCOPEr*ZGOOGLE_API_DRIVE_SCOPEr0ZGOOGLE_API_GA_KEY_PATHr)rrÇrr#Úfixturer%r,r1rYr[r\r_rcrhrqrrršržr¢r£rÍrÚrìrïrñrórôrùrûrrr r r r rrr%rrrrÚsv"           >N$