/*
 *     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.OTPAuthSaml2Driver;
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 static org.junit.Assert.*;
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;

/**
 * Démonstration d'un appel avec authentification par canal OTP.
 * Le test se configure depuis le fichier src/test/resources/mss.properties.
 * Les propriétés contenues définissent le PS et le canal OTP à 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:otpConfig-formation.xml"})
public class ClientTestOTPMssFolder {
    
    /** Constantes définissant les noms des clefs de configuration du test
            (cf fichier src/test/resources/mss.properties)
     */
	private static final String BASE_URL="mss.base.url";
    private static final String MOT_PASSE_CANAL_OTP_CLEF = "otp.canal.password";
    private static final String ID_CANAL_OTP_CLEF = "otp.canal.id";
    private static final String ID_NAT_PS_CLEF = "ps.id.nat";
    private static final String EMAIL_PS_CLEF = "ps.email";
    
    /** Variables de configuration chargées depuis le fichier properties */
    private String idNatPs;
    private String emailPs;
    private String idCanalOTP;
    private String motPasseCanalOTP;
    private String baseUrl;
    
    private FolderService testee;
    
    @Autowired
    private OTPAuthSaml2Driver otpDriver;
    
    @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);
        idCanalOTP=prop.getProperty(ID_CANAL_OTP_CLEF);
        motPasseCanalOTP=prop.getProperty(MOT_PASSE_CANAL_OTP_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 des paramètres d'authentification du canal OTP. */
        otpDriver.setIdNatPS(idNatPs);
        otpDriver.setIdCanal(idCanalOTP);
        otpDriver.setOptCanalPassword(motPasseCanalOTP);
        
        /* 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");
    }
}
