2929import os
3030import zipfile
3131from tempfile import TemporaryDirectory
32+ from unittest .mock import patch
3233
34+ from requests_toolbelt .multipart import decoder
3335from servicex_codegen import create_app
3436from servicex_codegen .code_generator import (GenerateCodeException ,
3537 GeneratedFileResult )
@@ -51,7 +53,7 @@ def check_zip_file(zip_data: bytes, expected_file_count):
5153
5254
5355class TestPostOperation :
54- def test_post_good_query (self , mocker ):
56+ def test_post_good_query_with_params (self , mocker ):
5557 """Produce code for a simple good query"""
5658
5759 with TemporaryDirectory () as tempdir , \
@@ -68,11 +70,79 @@ def test_post_good_query(self, mocker):
6870 }
6971 app = create_app (config , provided_translator = mock_ast_translator )
7072 client = app .test_client ()
73+
74+ print (app .config )
75+
76+ select_stmt = "(call ResultTTree (call Select (call SelectMany (call EventDataset (list 'localds://did_01')" # noqa: E501
77+
78+ response = client .post ("/servicex/generated-code" , json = {
79+ "transformer_image" : "sslhep/servicex_func_adl_xaod_transformer" ,
80+ "transformer_tag" : "develop" ,
81+ "code" : select_stmt
82+ })
83+
84+ boundary = str (response .data [2 :34 ], 'utf-8' )
85+ content_type = f"multipart/form-data; boundary={ boundary } "
86+ decoder_parts = decoder .MultipartDecoder (response .data , content_type )
87+
88+ transformer_image = str (decoder_parts .parts [0 ].content , 'utf-8' )
89+ transformer_tag = str (decoder_parts .parts [1 ].content , 'utf-8' )
90+ zip_file = decoder_parts .parts [2 ].content
91+
92+ print ("Transformer Image: " , transformer_image )
93+ print ("Transformer Tag: " , transformer_tag )
94+ print ("Zip File: " , zip_file )
95+
96+ assert response .status_code == 200
97+ check_zip_file (zip_file , 2 )
98+ # Capture the temporary directory that was generated
99+ cache_dir = mock_ast_translator .generate_code .call_args [1 ]['cache_path' ]
100+ mock_ast_translator .generate_code .assert_called_with (select_stmt ,
101+ cache_path = cache_dir )
102+
103+ def test_post_good_query_without_params (self , mocker ):
104+ """Produce code for a simple good query"""
105+
106+ with TemporaryDirectory () as tempdir , \
107+ open (os .path .join (tempdir , "baz.txt" ), 'w' ),\
108+ open (os .path .join (tempdir , "foo.txt" ), 'w' ):
109+
110+ mock_ast_translator = mocker .Mock ()
111+ mock_ast_translator .generate_code = mocker .Mock (
112+ return_value = GeneratedFileResult (hash = "1234" , output_dir = tempdir )
113+ )
114+
115+ config = {
116+ 'TARGET_BACKEND' : 'uproot' ,
117+ 'DEFAULT_TRANSFORMER_IMAGE' : 'sslhep/servicex_func_adl_xaod_transformer' ,
118+ 'DEFAULT_TRANSFORMER_TAG' : 'develop'
119+ }
120+
121+ app = create_app (config , provided_translator = mock_ast_translator )
122+ client = app .test_client ()
123+
124+ print (app .config )
125+
71126 select_stmt = "(call ResultTTree (call Select (call SelectMany (call EventDataset (list 'localds://did_01')" # noqa: E501
72127
73- response = client .post ("/servicex/generated-code" , data = select_stmt )
128+ response = client .post ("/servicex/generated-code" , json = {
129+ "code" : select_stmt
130+ })
131+
132+ boundary = str (response .data [2 :34 ], 'utf-8' )
133+ content_type = f"multipart/form-data; boundary={ boundary } "
134+ decoder_parts = decoder .MultipartDecoder (response .data , content_type )
135+
136+ transformer_image = str (decoder_parts .parts [0 ].content , 'utf-8' )
137+ transformer_tag = str (decoder_parts .parts [1 ].content , 'utf-8' )
138+ zip_file = decoder_parts .parts [2 ].content
139+
140+ print ("Transformer Image: " , transformer_image )
141+ print ("Transformer Tag: " , transformer_tag )
142+ print ("Zip File: " , zip_file )
143+
74144 assert response .status_code == 200
75- check_zip_file (response . data , 2 )
145+ check_zip_file (zip_file , 2 )
76146 # Capture the temporary directory that was generated
77147 cache_dir = mock_ast_translator .generate_code .call_args [1 ]['cache_path' ]
78148 mock_ast_translator .generate_code .assert_called_with (select_stmt ,
0 commit comments