/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* 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 org.seasar.extension.jdbc.gen.extension.svn;
import java.io.File;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.seasar.extension.jdbc.gen.event.GenDdlEvent;
import org.seasar.extension.jdbc.gen.internal.version.DdlVersionDirectoryImpl;
import org.seasar.extension.jdbc.gen.version.DdlVersionDirectory;
import org.seasar.framework.util.ResourceUtil;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNStatus;
import org.tmatesoft.svn.core.wc.SVNStatusClient;
import org.tmatesoft.svn.core.wc.SVNStatusType;
import org.tmatesoft.svn.core.wc.SVNWCClient;
import static junit.framework.Assert.*;
/**
* @author koichik
*/
public class GenDdlSvnProcessorTest {
static final String MIGRATE_PATH = "src/test/resources/org/seasar/extension/jdbc/gen/internal/version/migrate";
File projectDir;
DdlVersionDirectory currentVersion;
DdlVersionDirectory nextVersion;
/**
*
*/
@Before
public void setUp() {
projectDir = ResourceUtil.getBuildDir(getClass());
while (!projectDir.getName().equals("s2jdbc-gen")) {
projectDir = projectDir.getParentFile();
}
currentVersion = new DdlVersionDirectoryImpl(new File(projectDir,
MIGRATE_PATH), 20, "v000", null);
nextVersion = new DdlVersionDirectoryImpl(new File(projectDir,
MIGRATE_PATH), 30, "v000", null);
}
/**
*
*/
@After
public void tearDown() {
SVNClientManager cm = SVNClientManager.newInstance();
SVNWCClient wc = cm.getWCClient();
try {
wc.doDelete(nextVersion.asFile(), true, true, false);
} catch (SVNException ignore) {
}
}
/**
* @throws Exception
*/
@Test
@Ignore("This test fails under subversion 1.7 or higher")
public void test() throws Exception {
// ACT preCreateCurrentVersionDir
GenDdlEvent ev = new GenDdlEvent(this, currentVersion,
nextVersion);
GenDdlSvnProcessor svnProcessor = new GenDdlSvnProcessor();
svnProcessor.preCreateNextVersionDir(ev);
// ARRANGE
File nextVersionDir = nextVersion.asFile();
assertFalse(nextVersionDir.exists());
nextVersionDir.mkdir();
// ACT postCreateCurrentVersionDir
svnProcessor.postCreateNextVersionDir(ev);
// ASSERT
SVNClientManager cm = SVNClientManager.newInstance();
SVNStatusClient sc = cm.getStatusClient();
SVNStatus st = sc.doStatus(nextVersionDir, false);
assertNotNull(st);
assertSame(SVNStatusType.STATUS_ADDED, st.getContentsStatus());
// ACT preCreateTargetFile
ev = new GenDdlEvent(this, currentVersion, nextVersion,
"create");
svnProcessor.preCreateTargetFile(ev);
// ARRANGE
File dir = nextVersion.getCreateDirectory().asFile();
dir.mkdir();
// ACT postCreateTargetFile
svnProcessor.postCreateTargetFile(ev);
// ASSERT
st = sc.doStatus(dir, false);
assertNotNull(st);
assertSame(SVNStatusType.STATUS_ADDED, st.getContentsStatus());
// ACT preCreateTargetFile
ev = new GenDdlEvent(this, currentVersion, nextVersion,
"create/aaa.txt");
svnProcessor.preCreateTargetFile(ev);
// ASSERT
File target = new File(nextVersionDir, "create/aaa.txt");
assertTrue(target.exists());
st = sc.doStatus(target, false);
assertNotNull(st);
assertSame(SVNStatusType.STATUS_ADDED, st.getContentsStatus());
// ACT postCreateTargetFile
svnProcessor.postCreateTargetFile(ev);
// ACT preRemoveCurrentVersionDir
ev = new GenDdlEvent(this, currentVersion, nextVersion);
svnProcessor.preRemoveNextVersionDir(ev);
// ASSERT
st = sc.doStatus(nextVersionDir, false);
assertNotNull(st);
assertSame(SVNStatusType.STATUS_UNVERSIONED, st.getContentsStatus());
// ACT postRemoveCurrentVersionDir
svnProcessor.postRemoveNextVersionDir(ev);
}
}