/*******************************************************************************
 * Copyright (c) 2018 Bachmann electronic GmbH and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *     Bachmann electronic GmbH - initial API and implementation
 *******************************************************************************/

package org.eclipse.ease.modules.platform.build;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.junit.Before;
import org.junit.Test;

/**
 * Test Class for the {@link BuildModule}
 */
public class BuildModuleTest {

	private BuildModule fModule;
	private IWorkspaceRoot fRoot;
	private IProject fProject;

	@Before
	public void setup() {
		fProject = mock(IProject.class);
		fRoot = mock(IWorkspaceRoot.class);
		fModule = new BuildModule(fRoot);
		when(fRoot.getProject("MyProject")).thenReturn(fProject);
	}

	@Test
	public void buildDoesCallProjectsBuildMethodIfProjectExists() throws CoreException {
		when(fProject.isAccessible()).thenReturn(true);
		fModule.build("MyProject", BuildModule.CLEAN_BUILD);
		verify(fProject, times(1)).build(eq(IncrementalProjectBuilder.CLEAN_BUILD), any(NullProgressMonitor.class));
	}

	@Test
	public void buildDoesNotCallProjectsBuildMethodIfProjectNotExists() throws CoreException {
		when(fProject.isAccessible()).thenReturn(false);
		fModule.build("MyProject", BuildModule.CLEAN_BUILD);
		verify(fProject, never()).build(eq(IncrementalProjectBuilder.CLEAN_BUILD), any(NullProgressMonitor.class));
	}

}
