fini tests unitaires pour Validateur et soumettreDemande
This commit is contained in:
parent
f91d1b5217
commit
2d2ccafadc
7 changed files with 159 additions and 118 deletions
|
@ -113,6 +113,16 @@ public class SoumettreDemande extends JFrame {
|
|||
});
|
||||
}
|
||||
|
||||
//Méthodes de type get()
|
||||
public JTable getTable() {return this.demandesTable;}
|
||||
public DefaultTableModel getTableModel() {return this.tableModel;}
|
||||
public JButton getRetourButton() {return this.retourButton;}
|
||||
public JButton getSoumettreButton() {return this.soumettreButton;}
|
||||
public JButton getVoirMotifButton() {return this.voirMotifButton;}
|
||||
public JButton getVoirAvisButton() {return this.voirAvisButton;}
|
||||
public JButton getModifierAvisButton() {return this.modifierAvisButton;}
|
||||
public int getID() {return this.utilisateurId;}
|
||||
|
||||
// Méthode pour soumettre une demande
|
||||
private void soumettreDemande() {
|
||||
String description = descriptionField.getText();
|
||||
|
|
|
@ -74,6 +74,14 @@ public class Validateur extends JFrame {
|
|||
});
|
||||
}
|
||||
|
||||
//Méthodes de type get()
|
||||
public JTable getTable() {return this.table;}
|
||||
public DefaultTableModel getTableModel() {return this.tableModel;}
|
||||
public JButton getValiderButton() {return this.validerButton;}
|
||||
public JButton getRejeterButton() {return this.rejeterButton;}
|
||||
public JButton getRetourButton() {return this.retourButton;}
|
||||
public int getID() {return this.utilisateurId;}
|
||||
|
||||
// Méthode pour charger les demandes en attente
|
||||
private void loadDemandesEnAttente() {
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
|
|
|
@ -18,12 +18,11 @@ import static org.junit.jupiter.api.Assertions.*;
|
|||
class BenevoleDemandesPageTest {
|
||||
|
||||
private BenevoleDemandesPage benevoleDemandesPage;
|
||||
private JTable table;
|
||||
private int benevoleID = 2; //pour tester on prend arbitrairement un utilisateur qui est un bénévole
|
||||
private int demandeID; //on crée manuellment une demande pour les tests (on la supprime après)
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws SQLException {
|
||||
void setUp() {
|
||||
//on crée la page des demandes acceptés
|
||||
benevoleDemandesPage = new BenevoleDemandesPage(benevoleID);
|
||||
}
|
||||
|
@ -52,7 +51,7 @@ class BenevoleDemandesPageTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
void testPrendreDemande() throws SQLException {
|
||||
void testPrendreDemande() {
|
||||
//on crée une demande avec le statut 'acceptée' pour tester la méthode prendreDemande()
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description) VALUES (?, ?, ?, ?)";
|
||||
|
@ -60,7 +59,7 @@ class BenevoleDemandesPageTest {
|
|||
insertStatement.setString(1, "acceptée");
|
||||
insertStatement.setNull(2, java.sql.Types.INTEGER); // Aucun utilisateur affecté
|
||||
insertStatement.setNull(3, java.sql.Types.INTEGER); // Aucun bénévole affecté initialement
|
||||
insertStatement.setString(4, "Demande de test pour JUnit");
|
||||
insertStatement.setString(4, "Demande de test pour JUnit / Test prendreDemande");
|
||||
insertStatement.executeUpdate();
|
||||
|
||||
// Récupération de l'ID généré pour pouvoir le supprimer après
|
||||
|
@ -107,7 +106,8 @@ class BenevoleDemandesPageTest {
|
|||
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||
deleteStatement.setInt(1, demandeID);
|
||||
deleteStatement.executeUpdate();
|
||||
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException e) {
|
||||
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException |
|
||||
SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,8 @@ class CreateAccountPageTest {
|
|||
private JButton createAccountButton;
|
||||
private JButton retourLoginButton;
|
||||
|
||||
/* @BeforeEach
|
||||
/*
|
||||
@BeforeEach
|
||||
void setUp() throws NoSuchFieldException, IllegalAccessException {
|
||||
createAccountPage = new CreateAccountPage();
|
||||
|
||||
|
@ -120,5 +121,6 @@ class CreateAccountPageTest {
|
|||
|
||||
// Check that the current frame is disposed
|
||||
assertFalse(createAccountPage.isVisible(), "La page de création de compte devrait être fermée après avoir cliqué sur 'Retour à la connexion'.");
|
||||
}*/
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -30,7 +30,8 @@ class LoginPageTest {
|
|||
loginPage.add(createAccountButton);
|
||||
}
|
||||
|
||||
/* @Test
|
||||
/*
|
||||
@Test
|
||||
void testLoginWithValidUser() throws SQLException {
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String email = "test@example.com";
|
||||
|
@ -63,8 +64,8 @@ class LoginPageTest {
|
|||
|
||||
// Vérifiez que la page reste ouverte après une connexion échouée
|
||||
assertTrue(loginPage.isVisible(), "LoginPage devrait rester ouverte si la connexion échoue.");
|
||||
}*/
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
@Test
|
||||
void testCreateAccountButtonAction() {
|
||||
|
|
|
@ -20,10 +20,9 @@ class SoumettreDemandeTest {
|
|||
|
||||
private SoumettreDemande soumettreDemande;
|
||||
private JTextField descriptionField;
|
||||
private JButton soumettreButton;
|
||||
private JTable demandesTable;
|
||||
private DefaultTableModel tableModel;
|
||||
private int utilisateurId = 1;
|
||||
private int utilisateurId = 1; // utilisateur arbitraire qui va créer les demandes de test
|
||||
private int demandeID;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws NoSuchFieldException, IllegalAccessException {
|
||||
|
@ -31,8 +30,6 @@ class SoumettreDemandeTest {
|
|||
|
||||
// Access private fields using reflection
|
||||
descriptionField = (JTextField) getField("descriptionField");
|
||||
soumettreButton = (JButton) getField("soumettreButton");
|
||||
demandesTable = (JTable) getField("demandesTable");
|
||||
tableModel = (DefaultTableModel) getField("tableModel");
|
||||
}
|
||||
|
||||
|
@ -82,47 +79,61 @@ class SoumettreDemandeTest {
|
|||
|
||||
@Test
|
||||
void testModifierAvisForFinalizedRequest() throws SQLException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
||||
int demandeId;
|
||||
|
||||
// Step 1: Insert a test row in the database
|
||||
//on crée une demande avec le statut 'finalisée' pour tester la méthode modifierAvis(), et avec un avis original
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String insertSQL = "INSERT INTO demandes_aide (description, statut, utilisateur_id, avis_besoin) VALUES (?, 'finalisée', ?, 'Initial avis besoin')";
|
||||
String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description, avis_besoin) VALUES (?, ?, ?, ?, ?)";
|
||||
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||
insertStatement.setString(1, "Finalized request for modify test");
|
||||
insertStatement.setString(1, "finalisée");
|
||||
insertStatement.setInt(2, utilisateurId);
|
||||
insertStatement.setNull(3, java.sql.Types.INTEGER); // Aucun bénévole affecté initialement
|
||||
insertStatement.setString(4, "Demande de test pour JUnit / Test modif avis_besoin");
|
||||
insertStatement.setString(5, "Avis_besoin à modifier");
|
||||
insertStatement.executeUpdate();
|
||||
|
||||
// Récupération de l'ID généré pour pouvoir le supprimer après
|
||||
ResultSet generatedKeys = insertStatement.getGeneratedKeys();
|
||||
generatedKeys.next();
|
||||
demandeId = generatedKeys.getInt(1);
|
||||
if (generatedKeys.next()) {
|
||||
demandeID = generatedKeys.getInt(1);
|
||||
}
|
||||
|
||||
// Step 2: Simulate table setup
|
||||
tableModel.addRow(new Object[]{demandeId, "Finalized request for modify test", "finalisée", null});
|
||||
demandesTable.setRowSelectionInterval(0, 0);
|
||||
// on met à jour la table avec la nouvelle demande rajoutée
|
||||
// on utilise une méthode détournée pour accéder à la méthode private 'loadAnciennesDemandes()'
|
||||
Method loadAnciennesDemandesMethod = SoumettreDemande.class.getDeclaredMethod("loadAnciennesDemandes");
|
||||
loadAnciennesDemandesMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||
loadAnciennesDemandesMethod.invoke(soumettreDemande); // on l'appele
|
||||
|
||||
// Step 3: Invoke the modifierAvis method
|
||||
//test de modifierAvis(); on sélectionne la dernière ligne de la table car elle correspond à la demande test
|
||||
int lastRow = soumettreDemande.getTable().getRowCount()-1;
|
||||
soumettreDemande.getTable().setRowSelectionInterval(lastRow, lastRow);
|
||||
|
||||
// idem que pour loadAnciennesDemandes() comme modifierAvis() est aussi en private
|
||||
Method modifierAvisMethod = SoumettreDemande.class.getDeclaredMethod("modifierAvis");
|
||||
modifierAvisMethod.setAccessible(true);
|
||||
modifierAvisMethod.invoke(soumettreDemande);
|
||||
modifierAvisMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||
modifierAvisMethod.invoke(soumettreDemande); // on l'appele
|
||||
|
||||
// on attend un moment pour que la base de données se mette à jour
|
||||
Thread.sleep(1000);
|
||||
|
||||
// Step 4: Verify the update in the database
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String sql = "SELECT avis_besoin FROM demandes_aide WHERE id = ?";
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
statement.setInt(1, demandeId);
|
||||
statement.setInt(1, demandeID);
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
|
||||
assertTrue(resultSet.next(), "The request should exist in the database.");
|
||||
assertNotEquals("Initial avis besoin", resultSet.getString("avis_besoin"), "The avis_besoin should be updated.");
|
||||
String currentAvis = "";
|
||||
if (resultSet.next()) {
|
||||
currentAvis = resultSet.getString("avis_besoin");
|
||||
}
|
||||
|
||||
// Step 5: Clean up test data
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
assertNotEquals("Avis_besoin à modifier", currentAvis, "L'avis n'a pas été modifié.");
|
||||
|
||||
// Suppression de la demande de test après le test de prendreDemande()
|
||||
String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?";
|
||||
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||
deleteStatement.setInt(1, demandeId);
|
||||
deleteStatement.setInt(1, demandeID);
|
||||
deleteStatement.executeUpdate();
|
||||
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException |
|
||||
SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,122 +19,131 @@ import static org.junit.jupiter.api.Assertions.*;
|
|||
class ValidateurTest {
|
||||
|
||||
private Validateur validateur;
|
||||
private JTable table;
|
||||
private DefaultTableModel tableModel;
|
||||
private int utilisateurId = 1;
|
||||
private int utilisateurId = 1; // utilisateur arbitraire qui va créer les demandes de test
|
||||
private int demandeID; //on crée manuellment une demande pour les tests (on la supprime après)
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws NoSuchFieldException, IllegalAccessException {
|
||||
void setUp() {
|
||||
validateur = new Validateur(utilisateurId);
|
||||
table = (JTable) getField("table");
|
||||
tableModel = (DefaultTableModel) getField("tableModel");
|
||||
}
|
||||
|
||||
private Object getField(String fieldName) throws NoSuchFieldException, IllegalAccessException {
|
||||
Field field = Validateur.class.getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
return field.get(validateur);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testValiderDemande() throws SQLException {
|
||||
int demandeId;
|
||||
|
||||
// Step 1: Insert a request with status 'soumise' for testing purposes
|
||||
//on crée une demande avec le statut 'soumise' pour tester la méthode validerDemande()
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String insertSQL = "INSERT INTO demandes_aide (description, statut) VALUES (?, 'soumise')";
|
||||
String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description) VALUES (?, ?, ?, ?)";
|
||||
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||
insertStatement.setString(1, "Pending request to validate");
|
||||
insertStatement.setString(1, "soumise");
|
||||
insertStatement.setNull(2, utilisateurId);
|
||||
insertStatement.setNull(3, java.sql.Types.INTEGER); // Aucun bénévole affecté initialement
|
||||
insertStatement.setString(4, "Demande de test pour JUnit / Test validation");
|
||||
insertStatement.executeUpdate();
|
||||
|
||||
// Récupération de l'ID généré pour pouvoir le supprimer après
|
||||
ResultSet generatedKeys = insertStatement.getGeneratedKeys();
|
||||
generatedKeys.next();
|
||||
demandeId = generatedKeys.getInt(1);
|
||||
if (generatedKeys.next()) {
|
||||
demandeID = generatedKeys.getInt(1);
|
||||
}
|
||||
|
||||
// Step 2: Directly update the status to 'acceptée'
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String updateSQL = "UPDATE demandes_aide SET statut = 'acceptée' WHERE id = ?";
|
||||
PreparedStatement updateStatement = connection.prepareStatement(updateSQL);
|
||||
updateStatement.setInt(1, demandeId);
|
||||
updateStatement.executeUpdate();
|
||||
// on met à jour la table avec la nouvelle demande rajoutée
|
||||
// on utilise une méthode détournée pour accéder à la méthode private 'loadDemandesEnAttente()'
|
||||
Method loadDemandesEnAttenteMethod = Validateur.class.getDeclaredMethod("loadDemandesEnAttente");
|
||||
loadDemandesEnAttenteMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||
loadDemandesEnAttenteMethod.invoke(validateur); // on l'appele
|
||||
|
||||
//test de validerDemande(); on sélectionne la dernière ligne de la table car elle correspond à la demande test
|
||||
int lastRow = validateur.getTable().getRowCount()-1;
|
||||
validateur.getTable().setRowSelectionInterval(lastRow, lastRow);
|
||||
|
||||
// idem que pour loadDemandesEnAttente() comme rejeterDemande() est aussi en private
|
||||
Method rejeterDemandeMethod = Validateur.class.getDeclaredMethod("validerDemande");
|
||||
rejeterDemandeMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||
rejeterDemandeMethod.invoke(validateur); // on l'appele
|
||||
|
||||
// on attend un moment pour que la base de données se mette à jour
|
||||
Thread.sleep(1000);
|
||||
|
||||
String sql = "SELECT statut FROM demandes_aide WHERE id = ?";
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
statement.setInt(1, demandeID);
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
|
||||
String currentStatus = "";
|
||||
if (resultSet.next()) {
|
||||
currentStatus = resultSet.getString("statut");
|
||||
}
|
||||
|
||||
// Step 3: Verify that the status is now 'acceptée'
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String selectSQL = "SELECT statut FROM demandes_aide WHERE id = ?";
|
||||
PreparedStatement selectStatement = connection.prepareStatement(selectSQL);
|
||||
selectStatement.setInt(1, demandeId);
|
||||
ResultSet resultSet = selectStatement.executeQuery();
|
||||
assertEquals("acceptée", currentStatus, "Le statut doit être 'acceptée'.");
|
||||
|
||||
assertTrue(resultSet.next(), "The request should exist in the database.");
|
||||
assertEquals("acceptée", resultSet.getString("statut"), "The request status should be 'acceptée'.");
|
||||
}
|
||||
|
||||
// Step 4: Clean up by deleting the test request
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
// Suppression de la demande de test après le test de prendreDemande()
|
||||
String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?";
|
||||
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||
deleteStatement.setInt(1, demandeId);
|
||||
deleteStatement.setInt(1, demandeID);
|
||||
deleteStatement.executeUpdate();
|
||||
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException |
|
||||
SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* @Test
|
||||
void testRejeterDemande() throws Exception {
|
||||
// Step 1: Add a sample request to reject for testing
|
||||
int demandeId;
|
||||
@Test
|
||||
void testRejeterDemande() {
|
||||
//on crée une demande avec le statut 'soumise' pour tester la méthode rejeterDemande()
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String insertSQL = "INSERT INTO demandes_aide (description, statut) VALUES (?, 'soumise')";
|
||||
String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description) VALUES (?, ?, ?, ?)";
|
||||
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||
insertStatement.setString(1, "Request to reject");
|
||||
insertStatement.setString(1, "soumise");
|
||||
insertStatement.setInt(2, utilisateurId);
|
||||
insertStatement.setNull(3, java.sql.Types.INTEGER); // Aucun bénévole affecté initialement
|
||||
insertStatement.setString(4, "Demande de test pour JUnit / Test rejet");
|
||||
insertStatement.executeUpdate();
|
||||
|
||||
// Récupération de l'ID généré pour pouvoir le supprimer après
|
||||
ResultSet generatedKeys = insertStatement.getGeneratedKeys();
|
||||
generatedKeys.next();
|
||||
demandeId = generatedKeys.getInt(1);
|
||||
if (generatedKeys.next()) {
|
||||
demandeID = generatedKeys.getInt(1);
|
||||
}
|
||||
|
||||
// Step 2: Simulate selecting this row in the JTable
|
||||
tableModel.addRow(new Object[]{demandeId, "Request to reject", "soumise"});
|
||||
table.setRowSelectionInterval(0, 0); // Select the first row
|
||||
// on met à jour la table avec la nouvelle demande rajoutée
|
||||
// on utilise une méthode détournée pour accéder à la méthode private 'loadDemandesEnAttente()'
|
||||
Method loadDemandesEnAttenteMethod = Validateur.class.getDeclaredMethod("loadDemandesEnAttente");
|
||||
loadDemandesEnAttenteMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||
loadDemandesEnAttenteMethod.invoke(validateur); // on l'appele
|
||||
|
||||
// Step 3: Set up for user input using a mock (you may need to use a mocking framework)
|
||||
String motifRejet = "Reason for rejection";
|
||||
JOptionPane.showInputDialog(null, "Veuillez entrer un motif de rejet (500 caractères max):");
|
||||
assertNotNull(motifRejet, "Motif de rejet ne doit pas être nul");
|
||||
//test de rejeterDemande(); on sélectionne la dernière ligne de la table car elle correspond à la demande test
|
||||
int lastRow = validateur.getTable().getRowCount()-1;
|
||||
validateur.getTable().setRowSelectionInterval(lastRow, lastRow);
|
||||
|
||||
// Step 4: Execute `rejeterDemande`
|
||||
Method method = Validateur.class.getDeclaredMethod("rejeterDemande");
|
||||
method.setAccessible(true);
|
||||
method.invoke(validateur);
|
||||
// idem que pour loadDemandesEnAttente() comme rejeterDemande() est aussi en private
|
||||
Method rejeterDemandeMethod = Validateur.class.getDeclaredMethod("rejeterDemande");
|
||||
rejeterDemandeMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||
rejeterDemandeMethod.invoke(validateur); // on l'appele
|
||||
|
||||
// Step 5: Verify the status update in the database
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
String selectSQL = "SELECT statut, motif_rejet FROM demandes_aide WHERE id = ?";
|
||||
PreparedStatement selectStatement = connection.prepareStatement(selectSQL);
|
||||
selectStatement.setInt(1, demandeId);
|
||||
ResultSet resultSet = selectStatement.executeQuery();
|
||||
// on attend un moment pour que la base de données se mette à jour
|
||||
Thread.sleep(1000);
|
||||
|
||||
assertTrue(resultSet.next(), "La demande doit exister dans la base de données.");
|
||||
assertEquals("rejetée", resultSet.getString("statut"), "Le statut de la demande doit être 'rejetée'.");
|
||||
assertEquals(motifRejet, resultSet.getString("motif_rejet"), "Le motif de rejet doit correspondre.");
|
||||
String sql = "SELECT statut FROM demandes_aide WHERE id = ?";
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
statement.setInt(1, demandeID);
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
|
||||
String currentStatus = "";
|
||||
if (resultSet.next()) {
|
||||
currentStatus = resultSet.getString("statut");
|
||||
}
|
||||
|
||||
// Step 6: Clean up by deleting the test request
|
||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||
assertEquals("rejetée", currentStatus, "Le statut doit être 'rejetée'.");
|
||||
|
||||
// Suppression de la demande de test après le test de prendreDemande()
|
||||
String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?";
|
||||
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||
deleteStatement.setInt(1, demandeId);
|
||||
deleteStatement.setInt(1, demandeID);
|
||||
deleteStatement.executeUpdate();
|
||||
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException |
|
||||
SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue