public void CRUD_ProjectFiles_Successfully() { var fakeFile = new ProjectFile { Name = "Hello.cs", Code = HttpUtility.HtmlEncode("Hello, world!") }; var realFile = new ProjectFile { Name = "main.cs", Code = HttpUtility.HtmlEncode(File.ReadAllText("../../../Algorithm.CSharp/BasicTemplateAlgorithm.cs")) }; var secondRealFile = new ProjectFile() { Name = "lol.cs", Code = HttpUtility.HtmlEncode(File.ReadAllText("../../../Algorithm.CSharp/BubbleAlgorithm.cs")) }; // Create a new project and make sure there are no files var project = _api.CreateProject($"Test project - {DateTime.Now.ToStringInvariant()}", Language.CSharp); Assert.IsTrue(project.Success); Assert.IsTrue(project.Projects.First().ProjectId > 0); // Add random file var randomAdd = _api.AddProjectFile(project.Projects.First().ProjectId, fakeFile.Name, fakeFile.Code); Assert.IsTrue(randomAdd.Success); Assert.IsTrue(randomAdd.Files.First().Code == fakeFile.Code); Assert.IsTrue(randomAdd.Files.First().Name == fakeFile.Name); // Update names of file var updatedName = _api.UpdateProjectFileName(project.Projects.First().ProjectId, randomAdd.Files.First().Name, realFile.Name); Assert.IsTrue(updatedName.Success); // Replace content of file var updateContents = _api.UpdateProjectFileContent(project.Projects.First().ProjectId, realFile.Name, realFile.Code); Assert.IsTrue(updateContents.Success); // Read single file var readFile = _api.ReadProjectFile(project.Projects.First().ProjectId, realFile.Name); Assert.IsTrue(readFile.Success); Assert.IsTrue(readFile.Files.First().Code == realFile.Code); Assert.IsTrue(readFile.Files.First().Name == realFile.Name); // Add a second file var secondFile = _api.AddProjectFile(project.Projects.First().ProjectId, secondRealFile.Name, secondRealFile.Code); Assert.IsTrue(secondFile.Success); Assert.IsTrue(secondFile.Files.First().Code == secondRealFile.Code); Assert.IsTrue(secondFile.Files.First().Name == secondRealFile.Name); // Read multiple files var readFiles = _api.ReadProjectFiles(project.Projects.First().ProjectId); Assert.IsTrue(readFiles.Success); Assert.IsTrue(readFiles.Files.Count == 2); // Delete the second file var deleteFile = _api.DeleteProjectFile(project.Projects.First().ProjectId, secondRealFile.Name); Assert.IsTrue(deleteFile.Success); // Read files var readFilesAgain = _api.ReadProjectFiles(project.Projects.First().ProjectId); Assert.IsTrue(readFilesAgain.Success); Assert.IsTrue(readFilesAgain.Files.Count == 1); Assert.IsTrue(readFilesAgain.Files.First().Name == realFile.Name); // Delete the project var deleteProject = _api.DeleteProject(project.Projects.First().ProjectId); Assert.IsTrue(deleteProject.Success); }