/*
 *     Copyright (C) 2015 ASIP Santé
 */

package fr.asipsante.mss.clientcxfmss;

import fr.asip.mss.msg.services.ErreurFonctionnelleException;
import fr.asip.mss.msg.services.ErreurTechniqueException;
import fr.asip.mss.msg.services.FolderService;
import fr.asip.mss.msg.services.ListFoldersInput;
import fr.asip.mss.msg.services.ListFoldersOutput;
import fr.asip.mss.msg.services.impl.FolderServiceImplService;
import fr.asipsante.mss.connectkit.paos.DirectAuthSaml2Driver;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Le test se configure depuis le fichier src/test/resources/mss.properties.
 * Les propriétés contenues définissent le PS à utiliser pour le test.
 * Pour configurer le test, sélectionner une identité de PS de test, puis saisir les paramètres correspondants 
 * dans le fichier mss.properties.
 * 
 * @author Admin
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:pkcs11Config-formation.xml"})
public class ClientTestPKCS11MssFolder {
    
    /** Constantes qui définissent les noms des clefs de configuration du test
            (cf fichier src/test/resources/mss.properties)
     */
    private static final String ID_NAT_PS_CLEF = "ps.id.nat";
    private static final String EMAIL_PS_CLEF = "ps.email";
    private static final String BASE_URL="mss.base.url";
    
    /** Variables de configuration chargées depuis le fichier properties */
    private String idNatPs;
    private String emailPs;
    private String baseUrl;
    
    private FolderService testee;
    
    @Autowired
    private DirectAuthSaml2Driver saml2Driver;
    
    @Before
    public void setUp() throws MalformedURLException, IOException {
        Properties prop=new Properties();
        prop.load(getClass().getResourceAsStream("/mss.properties"));
        baseUrl=prop.getProperty(BASE_URL);
        idNatPs=prop.getProperty(ID_NAT_PS_CLEF);
        emailPs=prop.getProperty(EMAIL_PS_CLEF);
        FolderServiceImplService serviceImpl=new FolderServiceImplService(new URL(baseUrl + "/mss-msg-services/services/Folder/soap/v1?wsdl"));
        testee=serviceImpl.getFolderServiceImplPort();
    }
    
    @After
    public void tearDown() {
        testee=null;
    }

    @Test
    public void comptageRepertoiresPremierNiveau() throws ErreurTechniqueException,ErreurFonctionnelleException{
        /* Injection du paramètre d'authentification */
        saml2Driver.setIdNat(idNatPs);
        
        /* Paramétrage de la requête. */
        ListFoldersInput query=new ListFoldersInput();
        query.setEmail(emailPs);
        ListFoldersOutput resp=testee.listFolders(query);
        System.out.println("Response: "+resp.getFolders().size()+" folders");
    }
}
