001package org.apache.maven.scm.provider.jazz.command.status;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import org.apache.maven.scm.ScmFile;
023import org.apache.maven.scm.ScmFileStatus;
024import org.apache.maven.scm.log.DefaultLog;
025import org.apache.maven.scm.provider.jazz.JazzScmTestCase;
026import org.apache.maven.scm.provider.jazz.repository.JazzScmProviderRepository;
027import org.codehaus.plexus.util.cli.Commandline;
028
029import java.util.List;
030
031/**
032 * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
033 */
034public class JazzStatusCommandTest
035    extends JazzScmTestCase
036{
037    private JazzScmProviderRepository repo;
038
039    private JazzStatusConsumer statusConsumer;
040
041    protected void setUp()
042        throws Exception
043    {
044        super.setUp();
045        repo = getScmProviderRepository();
046        statusConsumer = new JazzStatusConsumer( repo, new DefaultLog() );
047    }
048
049    public void testCreateStatusCommand()
050        throws Exception
051    {
052        Commandline cmd = new JazzStatusCommand().createStatusCommand( repo, getScmFileSet() ).getCommandline();
053        String expected = "scm status --username myUserName --password myPassword --wide";
054        assertCommandLine( expected, getWorkingDirectory(), cmd );
055    }
056
057    public void testConsumer()
058    {
059        statusConsumer.consumeLine(
060            "Workspace: (1000) \"Dave's Repository Workspace\" <-> (1001) \"SCM Plugin Stream\"" );
061        statusConsumer.consumeLine( "  Component: (1002) \"SCM Plugins\"" );
062        statusConsumer.consumeLine( "    Baseline: (1003) 1 \"Initial Baseline\"" );
063        statusConsumer.consumeLine( "    Unresolved:" );
064        statusConsumer.consumeLine(
065            "      d- /status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProvider.java" );
066        statusConsumer.consumeLine(
067            "      a- /status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProviderRenamed.java" );
068        statusConsumer.consumeLine(
069            "      d- /status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/DeletedFile.java" );
070        statusConsumer.consumeLine(
071            "      a- /status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/AddedFile.java" );
072        statusConsumer.consumeLine(
073            "      -c /status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/ModifiedFile.java" );
074        statusConsumer.consumeLine( "    Outgoing:" );
075        statusConsumer.consumeLine( "      Change sets:" );
076        statusConsumer.consumeLine( "        (1008) --@ <No comment>" );
077        statusConsumer.consumeLine( "" );
078
079        // Test the additional collected data, Workspace, Component, Baseline.
080        assertEquals( "Workspace is incorrect!", "Dave's Repository Workspace", repo.getWorkspace() );
081        assertEquals( "Workspace Alias is incorrect!", 1000, repo.getWorkspaceAlias() );
082        assertEquals( "Flow Target is incorrect!", "SCM Plugin Stream", repo.getFlowTarget() );
083        assertEquals( "Flow Target Alias is incorrect!", 1001, repo.getFlowTargetAlias() );
084        assertEquals( "Component is incorrect!", "SCM Plugins", repo.getComponent() );
085        assertEquals( "Baseline is incorrect!", "Initial Baseline", repo.getBaseline() );
086
087        // Test the stream parsing and isPushChanges bits.
088        assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
089
090        // Test the ScmFile and ScmFileStatus bits.
091        List<ScmFile> changedFiles = statusConsumer.getChangedFiles();
092        assertNotNull( changedFiles );
093        assertEquals( 5, changedFiles.size() );
094        assertTrue( changedFiles.contains(
095            new ScmFile( "/status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProvider.java",
096                         ScmFileStatus.DELETED ) ) );
097        assertTrue( changedFiles.contains( new ScmFile(
098            "/status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProviderRenamed.java",
099            ScmFileStatus.ADDED ) ) );
100        assertTrue( changedFiles.contains(
101            new ScmFile( "/status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/DeletedFile.java",
102                         ScmFileStatus.DELETED ) ) );
103        assertTrue( changedFiles.contains(
104            new ScmFile( "/status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/AddedFile.java",
105                         ScmFileStatus.ADDED ) ) );
106        assertTrue( changedFiles.contains(
107            new ScmFile( "/status-test-project/src/main/java/org/apache/maven/scm/provider/jazz/ModifiedFile.java",
108                         ScmFileStatus.MODIFIED ) ) );
109    }
110
111    public void testConsumerWithStream()
112    {
113        statusConsumer.consumeLine( "Workspace: (1156) \"GPDBWorkspace\" <-> (1157) \"GPDBStream\"" );
114        statusConsumer.consumeLine( "  Component: (1158) \"GPDB\" <-> (1157) \"GPDBStream\"" );
115        statusConsumer.consumeLine( "    Baseline: (1159) 1 \"Initial Baseline\"" );
116
117        // Test the additional collected data, Workspace, Component, Baseline.
118        assertEquals( "Workspace is incorrect!", "GPDBWorkspace", repo.getWorkspace() );
119        assertEquals( "Workspace Alias is incorrect!", 1156, repo.getWorkspaceAlias() );
120        assertEquals( "Flow Target is incorrect!", "GPDBStream", repo.getFlowTarget() );
121        assertEquals( "Flow Target Alias is incorrect!", 1157, repo.getFlowTargetAlias() );
122        assertEquals( "Component is incorrect!", "GPDB", repo.getComponent() );
123        assertEquals( "Baseline is incorrect!", "Initial Baseline", repo.getBaseline() );
124
125        // Test the stream parsing and isPushChanges bits.
126        assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
127        repo.setPushChanges( false );
128        assertFalse( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
129        repo.setPushChanges( true );
130        assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
131    }
132
133    public void testConsumerWithOutStream()
134    {
135        statusConsumer.consumeLine( "Workspace: (1156) \"GPDBWorkspace\" <-> (1156) \"GPDBWorkspace\"" );
136        statusConsumer.consumeLine( "  Component: (1158) \"GPDB\"" );
137        statusConsumer.consumeLine( "    Baseline: (1159) 1 \"Initial Baseline\"" );
138
139        // Test the additional collected data, Workspace, Component, Baseline.
140        assertEquals( "Workspace is incorrect!", "GPDBWorkspace", repo.getWorkspace() );
141        assertEquals( "Workspace Alias is incorrect!", 1156, repo.getWorkspaceAlias() );
142        assertEquals( "Flow Target is incorrect!", "GPDBWorkspace", repo.getFlowTarget() );
143        assertEquals( "Flow Target Alias is incorrect!", 1156, repo.getFlowTargetAlias() );
144        assertEquals( "Component is incorrect!", "GPDB", repo.getComponent() );
145        assertEquals( "Baseline is incorrect!", "Initial Baseline", repo.getBaseline() );
146
147        // Test the stream parsing and isPushChanges bits.
148        assertFalse( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
149        repo.setPushChanges( false );
150        assertFalse( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
151        repo.setPushChanges( true );
152        assertFalse( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
153    }
154
155    public void testConsumerWithAdditionalInfo()
156    {
157        statusConsumer.consumeLine(
158            "Workspace: (1000) \"MavenStream Workspace\" <-> (1005) \"MavenStream Workspace\"" );
159        statusConsumer.consumeLine(
160            "  Component: (1002) \"FireDragon\" <-> (1005) \"MavenR3Stream Workspace\" (outgoing addition)" );
161        statusConsumer.consumeLine( "    Baseline: (1003) 1 \"Initial Baseline\"" );
162        statusConsumer.consumeLine( "    Unresolved:" );
163        statusConsumer.consumeLine( "      a-- /FireDragon/.project" );
164
165        // Test the additional collected data, Workspace, Component, Baseline.
166        assertEquals( "Workspace is incorrect!", "MavenStream Workspace", repo.getWorkspace() );
167        assertEquals( "Workspace Alias is incorrect!", 1000, repo.getWorkspaceAlias() );
168        assertEquals( "Flow Target is incorrect!", "MavenStream Workspace", repo.getFlowTarget() );
169        assertEquals( "Flow Target Alias is incorrect!", 1005, repo.getFlowTargetAlias() );
170        assertEquals( "Component is incorrect!", "FireDragon", repo.getComponent() );
171        assertEquals( "Baseline is incorrect!", "Initial Baseline", repo.getBaseline() );
172    }
173}