public void GivenXmlWithSingleProject__WhenCallingParse__ShouldReturnArrayWithMatchingProject() { const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> <eaw-ci:BuildConfiguration ConfigVersion=""1.0.0"" xmlns:eaw-ci=""eaw-ci"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <Projects> <Project Id=""TestProject""> <Jobs> <Job Id=""idvalue1""> <Tasks> </Tasks> </Job> </Jobs> </Project> </Projects> </eaw-ci:BuildConfiguration>"; _mockFileData.TextContents = xml; const string projectName = "TestProject"; BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Project = new ProjectStub() }; XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub); IEnumerable <IProject> projects = sut.Parse(Path); ProjectStub actual = projects.ToList()[0] as ProjectStub; string actualName = actual?.Name; AssertProjectNameEquals(projectName, actualName); }
public void GivenJobWithMultipleTasks__WhenCallingParse__JobShouldHaveAllTasks() { const string lua = @" local p = project('test') local j = p:add_job('test-job') j:add_tasks { run_process('echo'), copy('a', 'b') } "; _mockFileData.TextContents = lua; JobStub jobStub = new JobStub(); ITask[] expectedTasks = { new TaskDummy(), new TaskDummy() }; BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Job = jobStub, TaskBuilder = new IteratingTaskBuilderStub { Tasks = expectedTasks.ToList() } }; MakeSutAndParse(factoryStub); List <ITask> actualTasks = jobStub.Tasks; CollectionAssert.AreEqual(expectedTasks, actualTasks); }
GivenProjectWithJobAndTaskReferenceToNonExistingGlobalTask__WhenCallingParse__ShouldThrowInvalidOperationException() { const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> <eaw-ci:BuildConfiguration ConfigVersion=""1.0.0"" xmlns:eaw-ci=""eaw-ci"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <GlobalTasks> </GlobalTasks> <Projects> <Project Id=""idvalue1""> <Jobs> <Job Id=""idvalue2"" Name=""TestJob""> <Tasks> <TaskReference ReferenceId=""TestTask"" /> </Tasks> </Job> </Jobs> </Project> </Projects> </eaw-ci:BuildConfiguration>"; _mockFileData.TextContents = xml; BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub(); XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub); sut.Parse(Path); }
public void GivenConfigWithProjectRunProcessTaskWithSettings__WhenParsing__TaskShouldBeConfiguredCorrectly() { const string lua = @" local p = project('test') local j = p:add_job('test-job') j:add_task(run_process('echo'): arguments('Hello World'): working_directory('sub/dir'): allowed_to_fail(true) ) "; _mockFileData.TextContents = lua; TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object> { { "ExecutablePath", "echo" }, { "Arguments", "Hello World" }, { "WorkingDirectory", "sub/dir" }, { "AllowedToFail", true } }); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { TaskBuilder = taskBuilderMock }; MakeSutAndParse(factoryStub); taskBuilderMock.Verify(); }
GivenConfigWithCreateSteamWorkshopItemTask_WithoutTags__WhenParsing__TaskShouldBeConfiguredWithGivenSettings() { const string lua = @" local p = project('test') local j = p:add_job('test-job') j:add_task(create_steam_workshop_item { app_id = 32470, title = 'my-test-item', description_file = 'path/to/description', item_folder = 'path/to/folder', visibility = visibility.private, language = 'English' }) "; _mockFileData.TextContents = lua; TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object> { { "AppId", (uint)32470 }, { "Title", "my-test-item" }, { "DescriptionFilePath", "path/to/description" }, { "ItemFolderPath", "path/to/folder" }, { "Visibility", WorkshopItemVisibility.Private }, { "Language", "English" } }); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { TaskBuilder = taskBuilderMock }; MakeSutAndParse(factoryStub); taskBuilderMock.Verify(); }
public void GivenConfigWithProjectWithJobAndUpdateSteamWorkshopItemTask__WhenParsing__JobShouldHaveTask() { const string lua = @" local p = project('test') local j = p:add_job('test-job') j:add_task(update_steam_workshop_item { app_id = 32470, title = 'my-test-item', description_file = 'path/to/description', item_folder = 'path/to/folder', visibility = visibility.private, language = 'English' }) "; _mockFileData.TextContents = lua; JobStub jobStub = new JobStub(); TaskDummy taskDummy = new TaskDummy(); BuildComponentFactoryStub factoryStub = MakeBuildComponentFactoryStub(jobStub, taskDummy); MakeSutAndParse(factoryStub); ITask actualTask = jobStub.Tasks.First(); Assert.AreEqual(taskDummy, actualTask); }
public void GivenConfigWithCopyTaskWithSettings__WhenParsing__TaskShouldBeConfiguredCorrectly() { const string lua = @" local p = project('test') local j = p:add_job('test-job') j:add_task(copy('a', 'b'): overwrite(true): pattern('*.xml'): recursive(true)) "; _mockFileData.TextContents = lua; TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object> { { "CopyFromPath", "a" }, { "CopyToPath", "b" }, { "AlwaysOverwrite", true }, { "CopyFileByPattern", "*.xml" }, { "CopySubfolders", true } }); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { TaskBuilder = taskBuilderMock }; MakeSutAndParse(factoryStub); taskBuilderMock.Verify(); }
GivenConfigWithUpdateSteamWorkshopItemTask_WithTags__WhenParsing__TaskShouldBeConfiguredWithGivenTags() { const string lua = @" local p = project('test') local j = p:add_job('test-job') j:add_task(update_steam_workshop_item { app_id = 32470, item_id = 1234, title = 'my-test-item', description_file = 'path/to/description', item_folder = 'path/to/folder', visibility = visibility.private, language = 'English', tags = {'EAW', 'FOC'} }) "; _mockFileData.TextContents = lua; TaskBuilderSpy taskBuilderMock = new TaskBuilderSpy(); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { TaskBuilder = taskBuilderMock }; MakeSutAndParse(factoryStub); object actual = taskBuilderMock["Tags"]; Assert.IsInstanceOfType(actual, typeof(IEnumerable <string>)); CollectionAssert.AreEquivalent(ExpectedTags, ((IEnumerable <string>)actual).ToArray()); }
public void WhenCallingLink__ShouldReturnLuaCopyTask() { BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub(); EawCiLuaEnvironment sut = new EawCiLuaEnvironment(factoryStub, _luaParser); ILuaTask actual = sut.Link(string.Empty, string.Empty); Assert.IsInstanceOfType(actual, typeof(LuaCopyTask)); }
public void GivenLuaProjectWithName__WhenGettingProject__ProjectShouldHaveName() { BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub(); LuaProject sut = new LuaProject("TestProject", factoryStub); string actual = sut.Project.Name; Assert.AreEqual("TestProject", actual); }
public void GivenProjectWithJobAndTwoTasks__WhenCallingParse__ShouldAddBothTasksToJob() { const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> <eaw-ci:BuildConfiguration ConfigVersion=""1.0.0"" xmlns:eaw-ci=""eaw-ci"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <Projects> <Project Id=""idvalue0""> <Jobs> <Job Id=""idvalue1"" Name=""TestJob""> <Tasks> <Task Id=""idvalue2"" Name=""FirstTask"" xsi:type=""eaw-ci:Copy""> <CopyFromPath>path/to/first/source</CopyFromPath> <CopyToPath>path/to/first/dest</CopyToPath> <CopySubfolders>true</CopySubfolders> <CopyFileByPattern>*</CopyFileByPattern> <AlwaysOverwrite>false</AlwaysOverwrite> </Task> <Task Id=""idvalue3"" Name=""SecondTask"" xsi:type=""eaw-ci:Copy""> <CopyFromPath>path/to/second/source</CopyFromPath> <CopyToPath>path/to/second/dest</CopyToPath> <CopySubfolders>true</CopySubfolders> <CopyFileByPattern>*</CopyFileByPattern> <AlwaysOverwrite>false</AlwaysOverwrite> </Task> </Tasks> </Job> </Jobs> </Project> </Projects> </eaw-ci:BuildConfiguration>"; _mockFileData.TextContents = xml; JobStub jobStub = new JobStub(); TaskDummy firstTask = new TaskDummy(); TaskDummy secondTask = new TaskDummy(); IteratingTaskBuilderStub taskBuilderStub = new IteratingTaskBuilderStub(); taskBuilderStub.Tasks.Add(firstTask); taskBuilderStub.Tasks.Add(secondTask); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Job = jobStub, TaskBuilder = taskBuilderStub }; XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub); sut.Parse(Path); AssertJobHasExpectedTask(jobStub, firstTask); AssertJobHasExpectedTask(jobStub, secondTask); }
public void GivenConfigWithProjectAndDifferentName__WhenParsing__ShouldReturnProject() { const string lua = "project('another-project')"; _mockFileData.TextContents = lua; BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub(); IEnumerable <IProject> projects = MakeSutAndParse(factoryStub); IProject actual = projects.First(); Assert.AreEqual("another-project", actual.Name); }
private static BuildComponentFactoryStub MakeBuildComponentFactoryStub(JobDummy job, TaskDummy task = null) { BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Project = new ProjectStub(), Job = job, TaskBuilder = new TaskBuilderStub { Task = task ?? new TaskDummy() } }; return(factoryStub); }
public void GivenLuaProject__WhenAddingJob__ShouldReturnLuaJob() { JobStub jobStub = new JobStub(); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Project = new ProjectStub(), Job = jobStub }; LuaProject sut = new LuaProject("TestProject", factoryStub); LuaJob actual = sut.add_job("test-job"); Assert.IsInstanceOfType(actual, typeof(LuaJob)); }
public void GivenProjectWithJobAndCopyTask__WhenCallingParse__ShouldConfigureTaskWithBuilder() { const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> <eaw-ci:BuildConfiguration ConfigVersion=""1.0.0"" xmlns:eaw-ci=""eaw-ci"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <Projects> <Project Id=""idvalue0""> <Jobs> <Job Id=""idvalue1"" Name=""TestJob""> <Tasks> <Task Id=""TestTask"" Name=""TestTask"" xsi:type=""eaw-ci:Copy""> <CopyFromPath>path/to/source</CopyFromPath> <CopyToPath>path/to/dest</CopyToPath> <CopySubfolders>true</CopySubfolders> <CopyFileByPattern>*</CopyFileByPattern> <AlwaysOverwrite>false</AlwaysOverwrite> </Task> </Tasks> </Job> </Jobs> </Project> </Projects> </eaw-ci:BuildConfiguration>"; _mockFileData.TextContents = xml; TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object> { { "Id", "TestTask" }, { "Name", "TestTask" }, { "CopyFromPath", "path/to/source" }, { "CopyToPath", "path/to/dest" }, { "CopySubfolders", true }, { "CopyFileByPattern", "*" }, { "AlwaysOverwrite", false } }); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { TaskBuilder = taskBuilderMock }; XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub); sut.Parse(Path); taskBuilderMock.Verify(); }
public void GivenGlobalCopyTaskAndReferenceInProjectJob__WhenCallingParse__ShouldAddTaskToJob() { const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> <eaw-ci:BuildConfiguration ConfigVersion=""1.0.0"" xmlns:eaw-ci=""eaw-ci"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <GlobalTasks> <TaskDefinition Id=""TestTask"" xsi:type=""eaw-ci:Copy""> <CopyFromPath>path/to/source</CopyFromPath> <CopyToPath>path/to/dest</CopyToPath> <CopySubfolders>true</CopySubfolders> <CopyFileByPattern>*</CopyFileByPattern> <AlwaysOverwrite>false</AlwaysOverwrite> </TaskDefinition> </GlobalTasks> <Projects> <Project Id=""idvalue1""> <Jobs> <Job Id=""idvalue2"" Name=""TestJob""> <Tasks> <TaskReference ReferenceId=""TestTask"" /> </Tasks> </Job> </Jobs> </Project> </Projects> </eaw-ci:BuildConfiguration>"; _mockFileData.TextContents = xml; JobStub jobStub = new JobStub(); TaskBuilderStub taskBuilderStub = new TaskBuilderStub(); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Job = jobStub, TaskBuilder = taskBuilderStub }; XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub); sut.Parse(Path); AssertJobHasExpectedTask(jobStub, taskBuilderStub.Task); }
public void GivenLuaProjectWithJob__WhenGettingProject__ProjectShouldHaveJob() { JobStub jobStub = new JobStub(); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Project = new ProjectStub(), Job = jobStub }; LuaProject sut = new LuaProject("TestProject", factoryStub); sut.add_job("test-job"); ProjectStub actual = sut.Project as ProjectStub; IJob actualJob = actual?.Jobs.First(); Assert.AreSame(jobStub, actualJob); Assert.AreEqual("test-job", actualJob?.Name); }
public void GivenConfigWithProjectAndJob__WhenParsing__ProjectShouldHaveJob() { const string lua = @" local p = project('test') p:add_job('test-job') "; _mockFileData.TextContents = lua; JobStub jobStub = new JobStub(); BuildComponentFactoryStub factoryStub = MakeBuildComponentFactoryStub(jobStub); IEnumerable <IProject> projects = MakeSutAndParse(factoryStub); ProjectStub actual = projects.First() as ProjectStub; IJob actualJob = actual?.Jobs.First(); Assert.AreSame(jobStub, actualJob); Assert.AreEqual("test-job", actualJob?.Name); }
public void GivenConfigWithProjectWithJobAndCopyTask__WhenParsing__JobShouldHaveTask() { const string lua = @" local p = project('test') local j = p:add_job('test-job') j:add_task(copy('a', 'b')) "; _mockFileData.TextContents = lua; JobStub jobStub = new JobStub(); TaskDummy taskDummy = new TaskDummy(); BuildComponentFactoryStub factoryStub = MakeBuildComponentFactoryStub(jobStub, taskDummy); MakeSutAndParse(factoryStub); ITask actualTask = jobStub.Tasks.First(); Assert.AreEqual(taskDummy, actualTask); }
GivenXmlWithWrongConfigVersion__WhenCallingParse__ShouldThrowException() { const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> <eaw-ci:BuildConfiguration ConfigVersion=""1.0.1"" xmlns:eaw-ci=""eaw-ci"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <Projects> <Project Id=""idvalue0"" Name=""TestProject""> <Jobs> <Job Id=""idvalue1""> <Tasks> <Task Id=""idvalue2"" xsi:type=""eaw-ci:AbstractTaskType""/> </Tasks> </Job> </Jobs> </Project> </Projects> </eaw-ci:BuildConfiguration>"; _mockFileData.TextContents = xml; const string exceptionMessage = "The value of the 'ConfigVersion' attribute does not equal its fixed value."; BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Project = new ProjectStub() }; XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub); try { sut.Parse(Path); } catch (Exception e) { Assert.AreEqual(typeof(InvalidOperationException), e.GetType()); Assert.AreEqual(typeof(XmlSchemaValidationException), e.InnerException.GetType()); Assert.AreEqual(exceptionMessage, e.InnerException.Message); } }
public void GivenConfigWithCleanTask__WhenParsing__TaskShouldBeConfiguredCorrectly() { const string lua = @" local p = project('test') local j = p:add_job('test-job') j:add_task(clean('path')) "; _mockFileData.TextContents = lua; TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object> { { "Path", "path" } }); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { TaskBuilder = taskBuilderMock }; MakeSutAndParse(factoryStub); taskBuilderMock.Verify(); }
public void GivenXmlWithSingleProjectAndJob__WhenCallingParse__ProjectShouldHaveMatchingJob() { const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> <eaw-ci:BuildConfiguration ConfigVersion=""1.0.0"" xmlns:eaw-ci=""eaw-ci"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <Projects> <Project Id=""idvalue0""> <Jobs> <Job Id=""idvalue1"" Name=""TestJob""> <Tasks> </Tasks> </Job> </Jobs> </Project> </Projects> </eaw-ci:BuildConfiguration>"; _mockFileData.TextContents = xml; const string jobName = "TestJob"; BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Project = new ProjectStub(), Job = new JobStub() }; XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub); IEnumerable <IProject> projects = sut.Parse(Path); ProjectStub actualProject = (ProjectStub)projects.ToList()[0]; IJob actualJob = actualProject.Jobs[0]; AssertJobNameEquals(jobName, actualJob); }
GivenTwoGlobalTasksAndReferenceToSecondInProjectJob__WhenCallingParse__ShouldBuildSecondGlobalTask() { const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> <eaw-ci:BuildConfiguration ConfigVersion=""1.0.0"" xmlns:eaw-ci=""eaw-ci"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""> <GlobalTasks> <TaskDefinition Id=""TestTask"" xsi:type=""eaw-ci:Copy""> <CopyFromPath>invalid</CopyFromPath> <CopyToPath>invalid</CopyToPath> <CopySubfolders>false</CopySubfolders> <CopyFileByPattern>*</CopyFileByPattern> <AlwaysOverwrite>false</AlwaysOverwrite> </TaskDefinition> <TaskDefinition Id=""ExpectedTask"" Name=""ExpectedTask"" xsi:type=""eaw-ci:Copy""> <CopyFromPath>path/to/source</CopyFromPath> <CopyToPath>path/to/dest</CopyToPath> <CopySubfolders>true</CopySubfolders> <CopyFileByPattern>*</CopyFileByPattern> <AlwaysOverwrite>false</AlwaysOverwrite> </TaskDefinition> </GlobalTasks> <Projects> <Project Id=""idvalue1""> <Jobs> <Job Id=""idvalue2"" Name=""TestJob""> <Tasks> <TaskReference ReferenceId=""ExpectedTask"" /> </Tasks> </Job> </Jobs> </Project> </Projects> </eaw-ci:BuildConfiguration>"; _mockFileData.TextContents = xml; JobStub jobStub = new JobStub(); TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object> { { "Id", "ExpectedTask" }, { "Name", "ExpectedTask" }, { "CopyFromPath", "path/to/source" }, { "CopyToPath", "path/to/dest" }, { "CopySubfolders", true }, { "CopyFileByPattern", "*" }, { "AlwaysOverwrite", false } }); BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub { Job = jobStub, TaskBuilder = taskBuilderMock }; XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub); sut.Parse(Path); taskBuilderMock.Verify(); }