yaml_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package yaml
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestPatch(t *testing.T) {
  7. b := []byte(`# prefix`)
  8. // 1. Add first
  9. b, err := Patch(b, "camera1", "url1", "streams")
  10. require.Nil(t, err)
  11. require.Equal(t, `# prefix
  12. streams:
  13. camera1: url1
  14. `, string(b))
  15. // 2. Add second
  16. b, err = Patch(b, "camera2", []string{"url2", "url3"}, "streams")
  17. require.Nil(t, err)
  18. require.Equal(t, `# prefix
  19. streams:
  20. camera1: url1
  21. camera2:
  22. - url2
  23. - url3
  24. `, string(b))
  25. // 3. Replace first
  26. b, err = Patch(b, "camera1", "url4", "streams")
  27. require.Nil(t, err)
  28. require.Equal(t, `# prefix
  29. streams:
  30. camera1: url4
  31. camera2:
  32. - url2
  33. - url3
  34. `, string(b))
  35. // 4. Replace second
  36. b, err = Patch(b, "camera2", "url5", "streams")
  37. require.Nil(t, err)
  38. require.Equal(t, `# prefix
  39. streams:
  40. camera1: url4
  41. camera2: url5
  42. `, string(b))
  43. // 5. Delete first
  44. b, err = Patch(b, "camera1", nil, "streams")
  45. require.Nil(t, err)
  46. require.Equal(t, `# prefix
  47. streams:
  48. camera2: url5
  49. `, string(b))
  50. }
  51. func TestPatchParings(t *testing.T) {
  52. b := []byte(`homekit:
  53. camera1:
  54. pin: 123-45-678
  55. streams:
  56. camera1: url1
  57. `)
  58. // 1. Add new key
  59. pairings := []string{"client1", "client2"}
  60. b, err := Patch(b, "pairings", pairings, "homekit", "camera1")
  61. require.Nil(t, err)
  62. require.Equal(t, `homekit:
  63. camera1:
  64. pin: 123-45-678
  65. pairings:
  66. - client1
  67. - client2
  68. streams:
  69. camera1: url1
  70. `, string(b))
  71. }
  72. func TestPatch2(t *testing.T) {
  73. b := []byte(`streams:
  74. camera1:
  75. - url1
  76. - url2
  77. `)
  78. b, err := Patch(b, "camera2", "url3", "streams")
  79. require.Nil(t, err)
  80. require.Equal(t, `streams:
  81. camera1:
  82. - url1
  83. - url2
  84. camera2: url3
  85. `, string(b))
  86. }
  87. func TestNoNewLineEnd1(t *testing.T) {
  88. b := []byte(`streams:
  89. camera1: url4
  90. camera2:
  91. - url2
  92. - url3`)
  93. b, err := Patch(b, "camera2", "url5", "streams")
  94. require.Nil(t, err)
  95. require.Equal(t, `streams:
  96. camera1: url4
  97. camera2: url5
  98. `, string(b))
  99. }
  100. func TestNoNewLineEnd2(t *testing.T) {
  101. b := []byte(`streams:
  102. camera1: url1
  103. homekit:
  104. camera1:
  105. pin: 123-45-678`)
  106. // 1. Add new key
  107. pairings := []string{"client1", "client2"}
  108. b, err := Patch(b, "pairings", pairings, "homekit", "camera1")
  109. require.Nil(t, err)
  110. require.Equal(t, `streams:
  111. camera1: url1
  112. homekit:
  113. camera1:
  114. pin: 123-45-678
  115. pairings:
  116. - client1
  117. - client2
  118. `, string(b))
  119. }