Files
git-tfs/GitTfsTest/Core/TfsWorkspaceTests.cs
T
Jonas Boesch 86bc1a4b77 Fixed code that failed test WorkspaceTests.Policy_failed_and_Force_with_an_OverrideReason.
- Updated test calls.
- Removed duplicate versions of Checkin and EvaluateCheckin without author.
2013-03-26 15:59:48 +01:00

242 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using Rhino.Mocks;
using Sep.Git.Tfs.Commands;
using Sep.Git.Tfs.Core;
using Sep.Git.Tfs.Core.TfsInterop;
using Xunit;
namespace Sep.Git.Tfs.Test.Core
{
public class TfsWorkspaceTests
{
[Fact]
public void Nothing_to_checkin()
{
IWorkspace workspace = MockRepository.GenerateStub<IWorkspace>();
string localDirectory = string.Empty;
TextWriter writer = new StringWriter();
TfsChangesetInfo contextVersion = MockRepository.GenerateStub<TfsChangesetInfo>();
IGitTfsRemote remote = MockRepository.GenerateStub<IGitTfsRemote>();
CheckinOptions checkinOptions = new CheckinOptions();
ITfsHelper tfsHelper = MockRepository.GenerateStub<ITfsHelper>();
CheckinPolicyEvaluator policyEvaluator = new CheckinPolicyEvaluator();
TfsWorkspace tfsWorkspace = new TfsWorkspace(workspace, localDirectory, writer, contextVersion, remote, checkinOptions, tfsHelper, policyEvaluator);
workspace.Stub(w => w.GetPendingChanges()).Return(null);
var ex = Assert.Throws<GitTfsException>(() =>
{
var result = tfsWorkspace.Checkin(checkinOptions);
});
Assert.Equal("Nothing to checkin!", ex.Message);
}
[Fact]
public void Checkin_failed()
{
IWorkspace workspace = MockRepository.GenerateStub<IWorkspace>();
string localDirectory = string.Empty;
TextWriter writer = new StringWriter();
TfsChangesetInfo contextVersion = MockRepository.GenerateStub<TfsChangesetInfo>();
IGitTfsRemote remote = MockRepository.GenerateStub<IGitTfsRemote>();
CheckinOptions checkinOptions = new CheckinOptions();
ITfsHelper tfsHelper = MockRepository.GenerateStub<ITfsHelper>();
CheckinPolicyEvaluator policyEvaluator = new CheckinPolicyEvaluator();
TfsWorkspace tfsWorkspace = new TfsWorkspace(workspace, localDirectory, writer, contextVersion, remote, checkinOptions, tfsHelper, policyEvaluator);
IPendingChange pendingChange = MockRepository.GenerateStub<IPendingChange>();
IPendingChange[] allPendingChanges = new IPendingChange[] { pendingChange };
workspace.Stub(w => w.GetPendingChanges()).Return(allPendingChanges);
ICheckinEvaluationResult checkinEvaluationResult =
new StubbedCheckinEvaluationResult();
workspace.Stub(w => w.EvaluateCheckin(
Arg<TfsCheckinEvaluationOptions>.Is.Anything,
Arg<IPendingChange[]>.Is.Anything,
Arg<IPendingChange[]>.Is.Anything,
Arg<string>.Is.Anything,
Arg<string>.Is.Anything,
Arg<ICheckinNote>.Is.Anything,
Arg<IEnumerable<IWorkItemCheckinInfo>>.Is.Anything))
.Return(checkinEvaluationResult);
workspace.Expect(w => w.Checkin(
Arg<IPendingChange[]>.Is.Anything,
Arg<string>.Is.Anything,
Arg<string>.Is.Anything,
Arg<ICheckinNote>.Is.Anything,
Arg<IEnumerable<IWorkItemCheckinInfo>>.Is.Anything,
Arg<TfsPolicyOverrideInfo>.Is.Anything,
Arg<bool>.Is.Anything))
.Return(0);
var ex = Assert.Throws<GitTfsException>(() =>
{
var result = tfsWorkspace.Checkin(checkinOptions);
});
Assert.Equal("Checkin failed!", ex.Message);
}
[Fact]
public void Policy_failed()
{
IWorkspace workspace = MockRepository.GenerateStub<IWorkspace>();
string localDirectory = string.Empty;
TextWriter writer = new StringWriter();
TfsChangesetInfo contextVersion = MockRepository.GenerateStub<TfsChangesetInfo>();
IGitTfsRemote remote = MockRepository.GenerateStub<IGitTfsRemote>();
CheckinOptions checkinOptions = new CheckinOptions();
ITfsHelper tfsHelper = MockRepository.GenerateStub<ITfsHelper>();
CheckinPolicyEvaluator policyEvaluator = new CheckinPolicyEvaluator();
TfsWorkspace tfsWorkspace = new TfsWorkspace(workspace, localDirectory, writer, contextVersion, remote, checkinOptions, tfsHelper, policyEvaluator);
IPendingChange pendingChange = MockRepository.GenerateStub<IPendingChange>();
IPendingChange[] allPendingChanges = new IPendingChange[] { pendingChange };
workspace.Stub(w => w.GetPendingChanges()).Return(allPendingChanges);
ICheckinEvaluationResult checkinEvaluationResult =
new StubbedCheckinEvaluationResult()
.WithPoilicyFailure("No work items associated.");
workspace.Stub(w => w.EvaluateCheckin(
Arg<TfsCheckinEvaluationOptions>.Is.Anything,
Arg<IPendingChange[]>.Is.Anything,
Arg<IPendingChange[]>.Is.Anything,
Arg<string>.Is.Anything,
Arg<string>.Is.Anything,
Arg<ICheckinNote>.Is.Anything,
Arg<IEnumerable<IWorkItemCheckinInfo>>.Is.Anything))
.Return(checkinEvaluationResult);
workspace.Expect(w => w.Checkin(
Arg<IPendingChange[]>.Is.Anything,
Arg<string>.Is.Anything,
Arg<string>.Is.Anything,
Arg<ICheckinNote>.Is.Anything,
Arg<IEnumerable<IWorkItemCheckinInfo>>.Is.Anything,
Arg<TfsPolicyOverrideInfo>.Is.Anything,
Arg<bool>.Is.Anything))
.Return(0);
var ex = Assert.Throws<GitTfsException>(() =>
{
var result = tfsWorkspace.Checkin(checkinOptions);
});
Assert.Equal("No changes checked in.", ex.Message);
Assert.Contains("[ERROR] Policy: No work items associated.", writer.ToString());
}
[Fact]
public void Policy_failed_and_Force_without_an_OverrideReason()
{
IWorkspace workspace = MockRepository.GenerateStub<IWorkspace>();
string localDirectory = string.Empty;
TextWriter writer = new StringWriter();
TfsChangesetInfo contextVersion = MockRepository.GenerateStub<TfsChangesetInfo>();
IGitTfsRemote remote = MockRepository.GenerateStub<IGitTfsRemote>();
CheckinOptions checkinOptions = new CheckinOptions();
ITfsHelper tfsHelper = MockRepository.GenerateStub<ITfsHelper>();
CheckinPolicyEvaluator policyEvaluator = new CheckinPolicyEvaluator();
TfsWorkspace tfsWorkspace = new TfsWorkspace(workspace, localDirectory, writer, contextVersion, remote, checkinOptions, tfsHelper, policyEvaluator);
IPendingChange pendingChange = MockRepository.GenerateStub<IPendingChange>();
IPendingChange[] allPendingChanges = new IPendingChange[] { pendingChange };
workspace.Stub(w => w.GetPendingChanges()).Return(allPendingChanges);
ICheckinEvaluationResult checkinEvaluationResult =
new StubbedCheckinEvaluationResult()
.WithPoilicyFailure("No work items associated.");
checkinOptions.Force = true;
workspace.Stub(w => w.EvaluateCheckin(
Arg<TfsCheckinEvaluationOptions>.Is.Anything,
Arg<IPendingChange[]>.Is.Anything,
Arg<IPendingChange[]>.Is.Anything,
Arg<string>.Is.Anything,
Arg<string>.Is.Anything,
Arg<ICheckinNote>.Is.Anything,
Arg<IEnumerable<IWorkItemCheckinInfo>>.Is.Anything))
.Return(checkinEvaluationResult);
workspace.Expect(w => w.Checkin(
Arg<IPendingChange[]>.Is.Anything,
Arg<string>.Is.Anything,
Arg<string>.Is.Anything,
Arg<ICheckinNote>.Is.Anything,
Arg<IEnumerable<IWorkItemCheckinInfo>>.Is.Anything,
Arg<TfsPolicyOverrideInfo>.Is.Anything,
Arg<bool>.Is.Anything))
.Return(0);
var ex = Assert.Throws<GitTfsException>(() =>
{
var result = tfsWorkspace.Checkin(checkinOptions);
});
Assert.Equal("A reason must be supplied (-f REASON) to override the policy violations.", ex.Message);
Assert.Contains("[ERROR] Policy: No work items associated.", writer.ToString());
}
[Fact]
public void Policy_failed_and_Force_with_an_OverrideReason()
{
IWorkspace workspace = MockRepository.GenerateStub<IWorkspace>();
string localDirectory = string.Empty;
TextWriter writer = new StringWriter();
TfsChangesetInfo contextVersion = MockRepository.GenerateStub<TfsChangesetInfo>();
IGitTfsRemote remote = MockRepository.GenerateStub<IGitTfsRemote>();
CheckinOptions checkinOptions = new CheckinOptions();
ITfsHelper tfsHelper = MockRepository.GenerateStub<ITfsHelper>();
CheckinPolicyEvaluator policyEvaluator = new CheckinPolicyEvaluator();
TfsWorkspace tfsWorkspace = new TfsWorkspace(workspace, localDirectory, writer, contextVersion, remote, checkinOptions, tfsHelper, policyEvaluator);
IPendingChange pendingChange = MockRepository.GenerateStub<IPendingChange>();
IPendingChange[] allPendingChanges = new IPendingChange[] { pendingChange };
workspace.Stub(w => w.GetPendingChanges()).Return(allPendingChanges);
ICheckinEvaluationResult checkinEvaluationResult =
new StubbedCheckinEvaluationResult()
.WithPoilicyFailure("No work items associated.");
checkinOptions.Force = true;
checkinOptions.OverrideReason = "no work items";
workspace.Stub(w => w.EvaluateCheckin(
Arg<TfsCheckinEvaluationOptions>.Is.Anything,
Arg<IPendingChange[]>.Is.Anything,
Arg<IPendingChange[]>.Is.Anything,
Arg<string>.Is.Anything,
Arg<string>.Is.Anything,
Arg<ICheckinNote>.Is.Anything,
Arg<IEnumerable<IWorkItemCheckinInfo>>.Is.Anything))
.Return(checkinEvaluationResult);
workspace.Expect(w => w.Checkin(
Arg<IPendingChange[]>.Is.Anything,
Arg<string>.Is.Anything,
Arg<string>.Is.Anything,
Arg<ICheckinNote>.Is.Anything,
Arg<IEnumerable<IWorkItemCheckinInfo>>.Is.Anything,
Arg<TfsPolicyOverrideInfo>.Is.Anything,
Arg<bool>.Is.Anything))
.Return(1);
var result = tfsWorkspace.Checkin(checkinOptions);
Assert.Contains("[OVERRIDDEN] Policy: No work items associated.", writer.ToString());
}
}
}