private void Perform_CreateCompileBackTest_Tests(string projectName, Language language, string algorithmName, string code) { //Test create a new project successfully var project = _api.CreateProject(projectName, language); Assert.IsTrue(project.Success); Assert.IsTrue(project.Projects.First().ProjectId > 0); Assert.IsTrue(project.Projects.First().Name == projectName); // Make sure the project just created is now present var projects = _api.ListProjects(); Assert.IsTrue(projects.Success); Assert.IsTrue(projects.Projects.Any(p => p.ProjectId == project.Projects.First().ProjectId)); // Test read back the project we just created var readProject = _api.ReadProject(project.Projects.First().ProjectId); Assert.IsTrue(readProject.Success); Assert.IsTrue(readProject.Projects.First().Name == projectName); // Test set a project file for the project var file = new ProjectFile { Name = algorithmName, Code = code }; var addProjectFile = _api.AddProjectFile(project.Projects.First().ProjectId, file.Name, file.Code); Assert.IsTrue(addProjectFile.Success); // Download the project again to validate its got the new file var verifyRead = _api.ReadProject(project.Projects.First().ProjectId); Assert.IsTrue(verifyRead.Success); // Compile the project we've created var compileCreate = _api.CreateCompile(project.Projects.First().ProjectId); Assert.IsTrue(compileCreate.Success); Assert.IsTrue(compileCreate.State == CompileState.InQueue); // Read out the compile var compileSuccess = WaitForCompilerResponse(project.Projects.First().ProjectId, compileCreate.CompileId); Assert.IsTrue(compileSuccess.Success); Assert.IsTrue(compileSuccess.State == CompileState.BuildSuccess); // Update the file, create a build error, test we get build error file.Code += "[Jibberish at end of the file to cause a build error]"; _api.UpdateProjectFileContent(project.Projects.First().ProjectId, file.Name, file.Code); var compileError = _api.CreateCompile(project.Projects.First().ProjectId); compileError = WaitForCompilerResponse(project.Projects.First().ProjectId, compileError.CompileId); Assert.IsTrue(compileError.Success); // Successfully processed rest request. Assert.IsTrue(compileError.State == CompileState.BuildError); //Resulting in build fail. // Using our successful compile; launch a backtest! var backtestName = $"{DateTime.Now.ToStringInvariant("u")} API Backtest"; var backtest = _api.CreateBacktest(project.Projects.First().ProjectId, compileSuccess.CompileId, backtestName); Assert.IsTrue(backtest.Success); // Now read the backtest and wait for it to complete var backtestRead = WaitForBacktestCompletion(project.Projects.First().ProjectId, backtest.BacktestId); Assert.IsTrue(backtestRead.Success); Assert.IsTrue(backtestRead.Progress == 1); Assert.IsTrue(backtestRead.Name == backtestName); Assert.IsTrue(backtestRead.Result.Statistics["Total Trades"] == "1"); // Verify we have the backtest in our project var listBacktests = _api.ListBacktests(project.Projects.First().ProjectId); Assert.IsTrue(listBacktests.Success); Assert.IsTrue(listBacktests.Backtests.Count >= 1); Assert.IsTrue(listBacktests.Backtests[0].Name == backtestName); // Update the backtest name and test its been updated backtestName += "-Amendment"; var renameBacktest = _api.UpdateBacktest(project.Projects.First().ProjectId, backtest.BacktestId, backtestName); Assert.IsTrue(renameBacktest.Success); backtestRead = _api.ReadBacktest(project.Projects.First().ProjectId, backtest.BacktestId); Assert.IsTrue(backtestRead.Name == backtestName); //Update the note and make sure its been updated: var newNote = DateTime.Now.ToStringInvariant("u"); var noteBacktest = _api.UpdateBacktest(project.Projects.First().ProjectId, backtest.BacktestId, note: newNote); Assert.IsTrue(noteBacktest.Success); backtestRead = _api.ReadBacktest(project.Projects.First().ProjectId, backtest.BacktestId); Assert.IsTrue(backtestRead.Note == newNote); // Delete the backtest we just created var deleteBacktest = _api.DeleteBacktest(project.Projects.First().ProjectId, backtest.BacktestId); Assert.IsTrue(deleteBacktest.Success); // Test delete the project we just created var deleteProject = _api.DeleteProject(project.Projects.First().ProjectId); Assert.IsTrue(deleteProject.Success); }