-
Notifications
You must be signed in to change notification settings - Fork 110
/
ConfiguredScriptConventionFixture.cs
91 lines (76 loc) · 3.7 KB
/
ConfiguredScriptConventionFixture.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System.IO;
using System.Text;
using Calamari.Deployment;
using Calamari.Deployment.Conventions;
using Calamari.Integration.FileSystem;
using Calamari.Integration.Processes;
using Calamari.Integration.Scripting;
using NSubstitute;
using NUnit.Framework;
namespace Calamari.Tests.Fixtures.Conventions
{
[TestFixture]
public class ConfiguredScriptConventionFixture
{
ICalamariFileSystem fileSystem;
IScriptEngine scriptEngine;
ICommandLineRunner commandLineRunner;
RunningDeployment deployment;
CalamariVariableDictionary variables;
const string stagingDirectory = "c:\\applications\\acme\\1.0.0";
[SetUp]
public void SetUp()
{
fileSystem = Substitute.For<ICalamariFileSystem>();
scriptEngine = Substitute.For<IScriptEngine>();
commandLineRunner = Substitute.For<ICommandLineRunner>();
scriptEngine.GetSupportedExtensions().Returns(new string[] { "ps1" });
variables = new CalamariVariableDictionary();
variables.Set(SpecialVariables.Package.EnabledFeatures, SpecialVariables.Features.CustomScripts);
deployment = new RunningDeployment("C:\\packages", variables) { StagingDirectory = stagingDirectory };
}
[Test]
public void ShouldRunScriptAtAppropriateStage()
{
const string stage = DeploymentStages.PostDeploy;
const string scriptBody = "lorem ipsum blah blah blah";
var scriptName = ConfiguredScriptConvention.GetScriptName(stage, "ps1");
var scriptPath = Path.Combine(stagingDirectory, scriptName);
variables.Set(scriptName, scriptBody);
var convention = CreateConvention(stage);
scriptEngine.Execute(scriptPath, variables, commandLineRunner).Returns(new CommandResult("", 0));
convention.Install(deployment);
fileSystem.Received().OverwriteFile(scriptPath, scriptBody, Encoding.UTF8);
scriptEngine.Received().Execute(scriptPath, variables, commandLineRunner);
}
[Test]
public void ShouldRemoveScriptFileAfterRunning()
{
const string stage = DeploymentStages.PostDeploy;
var scriptName = ConfiguredScriptConvention.GetScriptName(stage, "ps1");
var scriptPath = Path.Combine(stagingDirectory, scriptName);
variables.Set(scriptName, "blah blah");
var convention = CreateConvention(stage);
scriptEngine.Execute(scriptPath, variables, commandLineRunner).Returns(new CommandResult("", 0));
convention.Install(deployment);
fileSystem.Received().DeleteFile(scriptPath, Arg.Any<FailureOptions>());
}
[Test]
public void ShouldNotRemoveCustomPostDeployScriptFileAfterRunningIfSpecialVariableIsSet()
{
deployment.Variables.Set(SpecialVariables.DeleteScriptsOnCleanup, false.ToString());
const string stage = DeploymentStages.PostDeploy;
var scriptName = ConfiguredScriptConvention.GetScriptName(stage, "ps1");
var scriptPath = Path.Combine(stagingDirectory, scriptName);
variables.Set(scriptName, "blah blah");
var convention = CreateConvention(stage);
scriptEngine.Execute(scriptPath, variables, commandLineRunner).Returns(new CommandResult("", 0));
convention.Install(deployment);
fileSystem.DidNotReceive().DeleteFile(scriptPath, Arg.Any<FailureOptions>());
}
private ConfiguredScriptConvention CreateConvention(string deployStage)
{
return new ConfiguredScriptConvention(deployStage, scriptEngine, fileSystem, commandLineRunner);
}
}
}