import os import numpy as np from app.parsers import parse_stl_file, parse_3mf_file, generate_thumbnail, generate_generic_thumbnail TEST_DIR = os.path.dirname(os.path.abspath(__file__)) PROJECT_DIR = os.path.dirname(TEST_DIR) def test_parse_ascii_stl(): path = os.path.join(PROJECT_DIR, 'test_cube.stl') if not os.path.exists(path): # Create a simple ASCII STL for testing with open(path, 'w') as f: f.write("""solid cube facet normal 0 0 -1 outer loop vertex 0 0 0 vertex 10 0 0 vertex 10 10 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 0 0 0 vertex 10 10 0 vertex 0 10 0 endloop endfacet facet normal 0 0 1 outer loop vertex 0 0 10 vertex 10 10 10 vertex 10 0 10 endloop endfacet facet normal 0 0 1 outer loop vertex 0 0 10 vertex 0 10 10 vertex 10 10 10 endloop endfacet facet normal -1 0 0 outer loop vertex 0 0 0 vertex 0 10 10 vertex 0 0 10 endloop endfacet facet normal -1 0 0 outer loop vertex 0 0 0 vertex 0 10 0 vertex 0 10 10 endloop endfacet facet normal 1 0 0 outer loop vertex 10 0 0 vertex 10 0 10 vertex 10 10 10 endloop endfacet facet normal 1 0 0 outer loop vertex 10 0 0 vertex 10 10 10 vertex 10 10 0 endloop endfacet facet normal 0 -1 0 outer loop vertex 0 0 0 vertex 0 0 10 vertex 10 0 10 endloop endfacet facet normal 0 -1 0 outer loop vertex 0 0 0 vertex 10 0 10 vertex 10 0 0 endloop endfacet facet normal 0 1 0 outer loop vertex 0 10 0 vertex 10 10 0 vertex 10 10 10 endloop endfacet facet normal 0 1 0 outer loop vertex 0 10 0 vertex 10 10 10 vertex 0 10 10 endloop endfacet endsolid cube """) result = parse_stl_file(path) assert result['faces'] == 12 assert abs(result['width'] - 10.0) < 0.1 assert abs(result['height'] - 10.0) < 0.1 assert abs(result['depth'] - 10.0) < 0.1 assert len(result['vertices']) == 36 # 12 triangles * 3 vertices def test_generate_thumbnail(): path = os.path.join(PROJECT_DIR, 'test_cube.stl') result = parse_stl_file(path) out_path = os.path.join(PROJECT_DIR, 'test_thumb.png') generate_thumbnail(result['vertices'], out_path, size=128) assert os.path.exists(out_path) os.remove(out_path) def test_generate_generic_thumbnail(): out_path = os.path.join(PROJECT_DIR, 'test_generic.png') generate_generic_thumbnail(out_path, size=128, label='3MF') assert os.path.exists(out_path) os.remove(out_path)