org.seedstack.seed.mail.internal.JavaMailPluginTest.java Source code

Java tutorial

Introduction

Here is the source code for org.seedstack.seed.mail.internal.JavaMailPluginTest.java

Source

/**
 * Copyright (c) 2013-2015 by The SeedStack authors. All rights reserved.
 *
 * This file is part of SeedStack, An enterprise-oriented full development stack.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */
package org.seedstack.seed.mail.internal;

import com.google.common.collect.Lists;
import org.seedstack.seed.core.api.Application;
import org.seedstack.seed.core.internal.application.ApplicationPlugin;
import io.nuun.kernel.api.Plugin;
import io.nuun.kernel.api.plugin.PluginException;
import io.nuun.kernel.api.plugin.context.Context;
import io.nuun.kernel.api.plugin.context.InitContext;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.MapConfiguration;
import org.assertj.core.api.Condition;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

import javax.mail.Session;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Properties;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class JavaMailPluginTest {

    private static JavaMailPlugin mailPlugin;
    @Mock
    private Context context;

    @Mock
    private InitContext initContext;

    @Mock
    private Plugin plugin;

    @Mock
    private ApplicationPlugin applicationPlugin;

    @Mock
    private Configuration configuration;

    @Mock
    private Application application;

    @BeforeClass
    public static void setUp() throws Exception {
        mailPlugin = new JavaMailPlugin();
    }

    @Test(expected = PluginException.class)
    public void test_fail_if_configuration_is_absent() {
        mailPlugin.failIfConfigurationIsAbsent(null);
    }

    @Test
    public void test_get_plugin_configuration() {
        configureMocks();
        when(applicationPlugin.getApplication().getConfiguration())
                .thenReturn(new MapConfiguration(new HashMap<String, Object>() {
                    {
                        put("smtp", Session.getInstance(new Properties()));
                    }
                }));
        final Configuration pluginConfiguration = mailPlugin.getPluginConfiguration(applicationPlugin);
        assertThat(pluginConfiguration).isNotNull();
    }

    @Test
    public void test_init() throws Exception {
        mailPlugin.init(initContext());
    }

    @Test
    public void test_Required_Plugins() throws Exception {
        final Collection<Class<? extends Plugin>> plugins = mailPlugin.requiredPlugins();
        assertThat(plugins).isNotNull();
        assertThat(plugins).isNotEmpty();
        assertThat(plugins).hasSize(1);
        assertThat(plugins).has(new Condition<Iterable<? extends Class<? extends Plugin>>>() {
            @Override
            public boolean matches(Iterable<? extends Class<? extends Plugin>> classes) {
                return classes.iterator().next() != null;
            }
        });
    }

    private void configureMocks() {
        when(applicationPlugin.getApplication()).thenReturn(application);
        when(configuration.getList(anyString())).thenReturn(Lists.newArrayList());
        when(configuration.subset(anyString())).thenReturn(configuration);
    }

    @SuppressWarnings("unchecked")
    private InitContext initContext() {
        configureMocks();

        when(applicationPlugin.getApplication().getConfiguration()).thenReturn(configuration);
        when(plugin.requiredPlugins()).thenReturn(new ArrayList<Class<? extends Plugin>>() {
            {
                add(ApplicationPlugin.class);
            }
        });

        Collection pluginsRequired = new ArrayList<Plugin>();
        pluginsRequired.add(applicationPlugin);
        when(initContext.pluginsRequired()).thenReturn(pluginsRequired);

        return initContext;
    }
}