IDKHowToCodeFr/tinyml-backend
1
1import pytest2import numpy as np3import os4import sys5from unittest.mock import patch, MagicMock6 7sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../backend')))8from ensemble import EnsembleModel9 10@patch('joblib.load')11@patch('os.path.exists')12def test_ensemble_initialization(mock_exists, mock_load):13 mock_exists.return_value = True14 15 mock_model = MagicMock()16 mock_load.return_value = mock_model17 18 ensemble = EnsembleModel()19 20 assert len(ensemble.models) == len(ensemble.model_names)21 assert 'rf' in ensemble.models22 assert 'logreg' in ensemble.models23 24@patch('joblib.load')25@patch('os.path.exists')26def test_ensemble_prediction(mock_exists, mock_load):27 mock_exists.return_value = True28 29 mock_model = MagicMock()30 mock_model.predict_proba.return_value = np.array([[0.2, 0.8]])31 32 mock_label_encoder = MagicMock()33 mock_label_encoder.inverse_transform.side_effect = lambda x: [f"Class_{i}" for i in x]34 35 def side_effect(path):36 if 'label_encoder' in path:37 return mock_label_encoder38 return mock_model39 40 mock_load.side_effect = side_effect41 42 ensemble = EnsembleModel()43 X_dummy = np.array([[1.0, 2.0, 3.0, 4.0, 5.0, 1.0]])44 final_pred, confidence, individual_preds, class_probs, weights, individual_conf = ensemble.predict(X_dummy)45 46 assert confidence == 0.847 assert final_pred == "Class_1"48 assert "Class_0" in class_probs49 assert class_probs["Class_1"] == 0.850 