/*
* Copyright 2015 ThoughtWorks, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.thoughtworks.go.server.service;
import com.thoughtworks.go.domain.GoVersion;
import com.thoughtworks.go.domain.VersionInfo;
import com.thoughtworks.go.server.dao.VersionInfoDao;
import com.thoughtworks.go.server.util.ServerVersion;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
public class ServerVersionInfoBuilderTest {
private ServerVersion serverVersion;
private VersionInfoDao versionInfoDao;
private ServerVersionInfoBuilder builder;
@Before
public void setUp() {
serverVersion = mock(ServerVersion.class);
versionInfoDao = mock(VersionInfoDao.class);
builder = new ServerVersionInfoBuilder(versionInfoDao, serverVersion);
}
@Test
public void shouldGetVersionInfoForGOServerIfExists(){
VersionInfo goVersionInfo = new VersionInfo("go_server", new GoVersion("1.2.3-1"));
when(versionInfoDao.findByComponentName("go_server")).thenReturn(goVersionInfo);
when(serverVersion.version()).thenReturn("1.2.3-1");
VersionInfo versionInfo = builder.getServerVersionInfo();
assertThat(versionInfo.getComponentName(), is(goVersionInfo.getComponentName()));
assertThat(versionInfo.getInstalledVersion(), is(goVersionInfo.getInstalledVersion()));
}
@Test
public void shouldCreateVersionInfoForGOServerIfDoesNotExist(){
when(versionInfoDao.findByComponentName("go_server")).thenReturn(null);
when(serverVersion.version()).thenReturn("1.2.3-1");
VersionInfo versionInfo = builder.getServerVersionInfo();
verify(versionInfoDao).saveOrUpdate(isA(VersionInfo.class));
assertThat(versionInfo.getComponentName(), is("go_server"));
assertThat(versionInfo.getInstalledVersion().toString(), is("1.2.3-1"));
}
@Test
public void shouldUpdateTheVersionInfoIfInstalledVersionHasChanged(){
VersionInfo goVersionInfo = new VersionInfo("go_server", new GoVersion("1.2.3-1"));
when(versionInfoDao.findByComponentName("go_server")).thenReturn(goVersionInfo);
when(serverVersion.version()).thenReturn("5.6.7-8");
VersionInfo versionInfo = builder.getServerVersionInfo();
verify(versionInfoDao).saveOrUpdate(isA(VersionInfo.class));
assertThat(versionInfo.getComponentName(), is(goVersionInfo.getComponentName()));
assertThat(versionInfo.getInstalledVersion().toString(), is("5.6.7-8"));
}
@Test
public void shouldNotCreateAVersionInfoOnDevelopmentServer(){
when(versionInfoDao.findByComponentName("go_server")).thenReturn(null);
when(serverVersion.version()).thenReturn("N/A");
VersionInfo versionInfo = builder.getServerVersionInfo();
verify(versionInfoDao, never()).saveOrUpdate(isA(VersionInfo.class));
assertNull(versionInfo);
}
@Test
public void shouldNotUpdateTheVersionInfoIfUnableToParseTheInstalledVersion(){
VersionInfo goVersionInfo = new VersionInfo("go_server", new GoVersion("1.2.3-1"));
when(versionInfoDao.findByComponentName("go_server")).thenReturn(goVersionInfo);
when(serverVersion.version()).thenReturn("N/A");
VersionInfo versionInfo = builder.getServerVersionInfo();
verify(versionInfoDao, never()).saveOrUpdate(isA(VersionInfo.class));
assertThat(versionInfo.getComponentName(), is(goVersionInfo.getComponentName()));
assertThat(versionInfo.getInstalledVersion(), is(goVersionInfo.getInstalledVersion()));
}
}