@@ -30,14 +30,21 @@ def test_deprecated_extension():
3030def test_tiler_factory ():
3131 """Test factory with options."""
3232 """Test TilerFactory class."""
33+ md = TilerFactory ()
34+ assert len (md .router .routes ) == 19
35+
36+ with pytest .warns (UserWarning ):
37+ md = TilerFactory (
38+ # /preview, /preview.{format}, /preview/{width}x{height}.{format}
39+ add_preview = True ,
40+ )
41+ assert len (md .router .routes ) == 22
42+
3343 md = TilerFactory (
34- add_viewer = False ,
35- add_part = False ,
44+ router_prefix = "/md" ,
45+ # /dataset, /dataset/dict, /dataset/keys
3646 extensions = [DatasetMetadataExtension ()],
3747 )
38- assert len (md .router .routes ) == 16
39-
40- md = TilerFactory (router_prefix = "/md" , extensions = [DatasetMetadataExtension ()])
4148 assert len (md .router .routes ) == 22
4249
4350 app = FastAPI ()
@@ -377,3 +384,56 @@ def test_zarr_group(group, app):
377384 params = {"url" : zarr_pyramid , "variable" : "dataset" , "group" : str (group )},
378385 )
379386 assert resp .json ()["values" ] == [group * 2 + 1 ]
387+
388+
389+ @pytest .mark .parametrize (
390+ "filename" ,
391+ [dataset_2d_nc , dataset_3d_nc , dataset_3d_zarr ],
392+ )
393+ def test_preview (filename ):
394+ """App fixture."""
395+ with pytest .warns (UserWarning ):
396+ md = TilerFactory (add_preview = True )
397+
398+ app = FastAPI ()
399+ app .include_router (md .router )
400+ with TestClient (app ) as client :
401+ resp = client .get (
402+ "/preview" ,
403+ params = {
404+ "url" : filename ,
405+ "variable" : "dataset" ,
406+ "rescale" : "0,500" ,
407+ "bidx" : 1 ,
408+ },
409+ )
410+ assert resp .status_code == 200
411+ assert resp .headers ["content-type" ] == "image/jpeg"
412+
413+ resp = client .get (
414+ "/preview.png" ,
415+ params = {
416+ "url" : filename ,
417+ "variable" : "dataset" ,
418+ "rescale" : "0,500" ,
419+ "bidx" : 1 ,
420+ },
421+ )
422+ assert resp .status_code == 200
423+ assert resp .headers ["content-type" ] == "image/png"
424+
425+ resp = client .get (
426+ "/preview/1024x1024.png" ,
427+ params = {
428+ "url" : filename ,
429+ "variable" : "dataset" ,
430+ "rescale" : "0,500" ,
431+ "bidx" : 1 ,
432+ },
433+ )
434+ assert resp .status_code == 200
435+ assert resp .headers ["content-type" ] == "image/png"
436+ with MemoryFile (resp .content ) as mem :
437+ with mem .open () as dst :
438+ assert dst .width == 1024
439+ assert dst .height == 1024
0 commit comments