RenameCasingTests.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using Tests.EndToEnd.Infra;
  2. using Xunit.Abstractions;
  3. namespace Tests.EndToEnd;
  4. // Reproduces https://github.com/Timmoth/RackPeek/issues/328 (case D):
  5. // a case-only rename such as `rpk servers rename Srv01 srv01` is rejected with
  6. // "Conflict: Server resource 'srv01' already exists", because the existence
  7. // check matches the resource against itself. Agreed behaviour on the issue is
  8. // that a case-only rename should proceed as a re-casing, while renaming onto a
  9. // case variant of a *different* resource stays a conflict.
  10. [Collection("Yaml CLI tests")]
  11. public class RenameCasingTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
  12. : IClassFixture<TempYamlCliFixture> {
  13. private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {
  14. outputHelper.WriteLine($"rpk {string.Join(" ", args)}");
  15. var output = await YamlCliTestHost.RunAsync(
  16. args,
  17. fs.Root,
  18. outputHelper,
  19. "config.yaml");
  20. outputHelper.WriteLine(output);
  21. var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
  22. return (output, yaml);
  23. }
  24. [Fact]
  25. public async Task case_only_rename_recases_the_resource() {
  26. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  27. await ExecuteAsync("servers", "add", "Srv01");
  28. (var output, var yaml) = await ExecuteAsync("servers", "rename", "Srv01", "srv01");
  29. Assert.Equal("Server 'Srv01' renamed to 'srv01'.\n", output);
  30. Assert.Contains("name: srv01", yaml);
  31. Assert.DoesNotContain("name: Srv01", yaml);
  32. }
  33. [Fact]
  34. public async Task case_only_rename_updates_dependants_and_connections() {
  35. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  36. await ExecuteAsync("servers", "add", "Srv01");
  37. await ExecuteAsync("systems", "add", "vm01", "--runs-on", "Srv01");
  38. (var output, var yaml) = await ExecuteAsync("servers", "rename", "Srv01", "srv01");
  39. Assert.Equal("Server 'Srv01' renamed to 'srv01'.\n", output);
  40. Assert.Contains("- srv01", yaml);
  41. Assert.DoesNotContain("- Srv01", yaml);
  42. }
  43. [Fact]
  44. public async Task rename_onto_a_case_variant_of_another_resource_is_still_a_conflict() {
  45. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  46. await ExecuteAsync("servers", "add", "Srv01");
  47. await ExecuteAsync("servers", "add", "srv02");
  48. (var output, var yaml) = await ExecuteAsync("servers", "rename", "srv02", "SRV01");
  49. Assert.Contains("already exists", output, StringComparison.OrdinalIgnoreCase);
  50. Assert.Contains("name: Srv01", yaml);
  51. Assert.Contains("name: srv02", yaml);
  52. }
  53. }