package sagan.tools.support;
import sagan.tools.Architecture;
import sagan.tools.DownloadLink;
import sagan.tools.EclipseDownloads;
import sagan.tools.EclipsePlatform;
import sagan.tools.EclipseRelease;
import sagan.tools.EclipseVersion;
import sagan.tools.ToolSuiteDownloads;
import sagan.tools.ToolSuitePlatform;
import sagan.tools.UpdateSiteArchive;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.ui.ExtendedModelMap;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class ToolsControllerTests {
private ToolsController controller;
private ExtendedModelMap model = new ExtendedModelMap();
@Mock
private ToolsService service;
@Before
public void setUp() throws Exception {
controller = new ToolsController(service);
}
@Test
public void stsIndexHasDownloadLinks() throws Exception {
Map<String, ToolSuitePlatform> platforms = new HashMap<>();
List<DownloadLink> downloadLinks = Collections.singletonList(new DownloadLink(
"http://example.com/download.dmg", "dmg", "323MB", "mac", "64"));
List<Architecture> architectures = Collections.singletonList(new Architecture(
"Mac OS X (Cocoa, 64bit)", downloadLinks));
List<EclipseVersion> eclipseVersions = Collections
.singletonList(new EclipseVersion("1.2", architectures));
ToolSuitePlatform windows = new ToolSuitePlatform("windows", eclipseVersions);
platforms.put("windows", windows);
List<UpdateSiteArchive> archives = Collections.emptyList();
ToolSuiteDownloads toolSuite = new ToolSuiteDownloads("STS", "3.1.2.RELEASE",
"http://static.springsource.org/sts/nan/v312/NewAndNoteworthy.html", platforms, archives);
when(service.getStsGaDownloads()).thenReturn(toolSuite);
controller.stsIndex(model);
@SuppressWarnings("unchecked")
Set<DownloadLink> actual = (Set<DownloadLink>) model.get("downloadLinks");
assertThat(actual, equalTo(toolSuite.getPreferredDownloadLinks()));
assertThat((String) model.get("version"), equalTo("3.1.2.RELEASE"));
}
@Test
public void ggtsIndexHasDownloadLinks() throws Exception {
Map<String, ToolSuitePlatform> platforms = new HashMap<>();
List<DownloadLink> downloadLinks = Collections.singletonList(new DownloadLink(
"http://example.com/download.dmg", "dmg", "323MB", "mac", "64"));
List<Architecture> architectures = Collections.singletonList(new Architecture(
"Mac OS X (Cocoa, 64bit)", downloadLinks));
List<EclipseVersion> eclipseVersions = Collections
.singletonList(new EclipseVersion("1.2", architectures));
ToolSuitePlatform windows = new ToolSuitePlatform("windows", eclipseVersions);
platforms.put("windows", windows);
List<UpdateSiteArchive> archives = Collections.emptyList();
ToolSuiteDownloads toolSuite = new ToolSuiteDownloads("GGTS", "3.1.2.RELEASE",
"http://static.springsource.org/sts/nan/v312/NewAndNoteworthy.html", platforms, archives);
when(service.getGgtsGaDownloads()).thenReturn(toolSuite);
controller.ggtsIndex(model);
@SuppressWarnings("unchecked")
Set<DownloadLink> actual = (Set<DownloadLink>) model.get("downloadLinks");
assertThat(actual, equalTo(toolSuite.getPreferredDownloadLinks()));
assertThat((String) model.get("version"), equalTo("3.1.2.RELEASE"));
}
@SuppressWarnings("unchecked")
@Test
public void allEclipseDownloadsAddsDownloadsToModel() throws Exception {
Map<String, EclipsePlatform> platforms = new HashMap<>();
EclipsePlatform windows = new EclipsePlatform("windows", Collections.<EclipseRelease> emptyList());
platforms.put("windows", windows);
EclipsePlatform mac = new EclipsePlatform("mac", Collections.<EclipseRelease> emptyList());
platforms.put("mac", mac);
EclipsePlatform linux = new EclipsePlatform("linux", Collections.<EclipseRelease> emptyList());
platforms.put("linux", linux);
EclipseDownloads eclipseDownloads = new EclipseDownloads(platforms);
when(service.getEclipseDownloads()).thenReturn(eclipseDownloads);
controller.eclipseIndex(model);
assertThat((List<EclipsePlatform>) model.get("platforms"), contains(windows, mac, linux));
}
}