/**
 * Copyright (c) 2006-2012 EBM WebSourcing, 2007 Capgemini Sud, 2012-2022 Linagora
 * 
 * This program/library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 2.1 of the License, or (at your
 * option) any later version.
 * 
 * This program/library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
 * for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program/library; If not, see http://www.gnu.org/licenses/
 * for the GNU Lesser General Public License version 2.1.
 */
package org.ow2.petals.plugin.jbiplugin;

import static org.junit.Assert.fail;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.junit.Test;
import org.ow2.petals.plugin.jbiplugin.mock.ArtifactMock;
import org.ow2.petals.plugin.jbiplugin.mock.ArtifactRepositoryMock;

/**
 * Test the jbi maven plugin.
 * @author ddesjardins - EBM WebSourcing
 */
public class JBIPluginMojoTest {

    @Test
    public void testExecute() throws MojoExecutionException {
        String baseDir = this.getClass().getResource(".").toString();
        baseDir = baseDir.substring(0, baseDir.indexOf("target"));
        baseDir = baseDir.substring(baseDir.indexOf(":") + 1);
        baseDir = baseDir.replaceAll("%20", " ");
        JBIPackageMojo plugin = new JBIPackageMojo();
        plugin.jbiDirectory = new File(baseDir + "src" + File.separator + "test" + File.separator
                + "resources" + File.separator + "jbi");

        ArtifactRepositoryMock artifactRepositoryMock = new ArtifactRepositoryMock();
        artifactRepositoryMock.setBaseDir(baseDir + "src" + File.separator + "test"
                + File.separator + "resources" + File.separator + "repository");
        plugin.localRepository = artifactRepositoryMock;

        MavenProject project = new MavenProject();
        project.setArtifact(new ArtifactMock());
        List<Dependency> dependencies = new ArrayList<Dependency>();
        Dependency dependency = new Dependency();
        dependency.setArtifactId("test");
        dependency.setGroupId("test");
        dependency.setVersion("1.0");
        dependencies.add(dependency);

        project.setDependencies(dependencies);
        plugin.toExcludes = "";
        plugin.project = project;
        plugin.outputDirectory = new File(baseDir + "target");
        plugin.jbiName = "test";

        plugin.artifactJar = new File(baseDir + "src" + File.separator + "test" + File.separator
                + "resources" + File.separator + "component.jar");

        try {
            plugin.execute();
        } catch (MojoFailureException e) {
            fail(e.getMessage());
        }
    }

    @Test
    public void testExecuteWithSubDep() throws MojoExecutionException {
        String baseDir = new File(".").getAbsolutePath();
        baseDir = baseDir.substring(0, baseDir.length() - 1);
        JBIPackageMojo plugin = new JBIPackageMojo();
        plugin.jbiDirectory = new File(baseDir + "src" + File.separator + "test" + File.separator
                + "resources" + File.separator + "jbi");

        ArtifactRepositoryMock artifactRepositoryMock = new ArtifactRepositoryMock();
        artifactRepositoryMock.setBaseDir(baseDir + "src" + File.separator + "test"
                + File.separator + "resources" + File.separator + "repository");
        plugin.localRepository = artifactRepositoryMock;

        MavenProject project = new MavenProject();
        project.setArtifact(new ArtifactMock());
        List<Dependency> dependencies = new ArrayList<Dependency>();
        Dependency dependency = new Dependency();
        dependency.setArtifactId("test");
        dependency.setGroupId("test");
        dependency.setVersion("1.0");
        dependencies.add(dependency);

        project.setDependencies(dependencies);
        plugin.project = project;
        plugin.toExcludes = "";
        plugin.outputDirectory = new File(baseDir + "target");
        plugin.jbiName = "test";

        plugin.artifactJar = new File(baseDir + "src" + File.separator + "test" + File.separator
                + "resources" + File.separator + "component.jar");

        try {
            plugin.execute();
        } catch (MojoFailureException e) {
            fail(e.getMessage());
        }
    }

    @Test
    public void testExecuteUpdateJBI() throws MojoExecutionException {
        String baseDir = new File(".").getAbsolutePath();
        baseDir = baseDir.substring(0, baseDir.length() - 1);
        JBIPackageMojo plugin = new JBIPackageMojo();
        plugin.jbiDirectory = new File(baseDir + "src" + File.separator + "test" + File.separator
                + "resources" + File.separator + "jbi");

        ArtifactRepositoryMock artifactRepositoryMock = new ArtifactRepositoryMock();
        artifactRepositoryMock.setBaseDir(baseDir + "src" + File.separator + "test"
                + File.separator + "resources" + File.separator + "repository");
        plugin.localRepository = artifactRepositoryMock;

        MavenProject project = new MavenProject();
        project.setArtifact(new ArtifactMock());
        List<Dependency> dependencies = new ArrayList<Dependency>();
        Dependency dependency = new Dependency();
        dependency.setArtifactId("test");
        dependency.setGroupId("test");
        dependency.setVersion("1.0");
        dependencies.add(dependency);

        project.setDependencies(dependencies);
        plugin.project = project;
        plugin.toExcludes = "";
        plugin.updateJBIXml = true;
        plugin.outputDirectory = new File(baseDir + "target");
        plugin.jbiName = "test";

        plugin.artifactJar = new File(baseDir + "src" + File.separator + "test" + File.separator
                + "resources" + File.separator + "component.jar");

        try {
            plugin.execute();
        } catch (MojoFailureException e) {
            fail(e.getMessage());
        }
    }

}
