api_test.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package app
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. )
  6. func Test_ipynbSanitizer(t *testing.T) {
  7. p := ipynbSanitizer()
  8. tests := []struct {
  9. name string
  10. input string
  11. want string
  12. }{
  13. {
  14. name: "allow 'class' and 'data-prompt-number' attributes",
  15. input: `
  16. <div class="nb-notebook">
  17. <div class="nb-worksheet">
  18. <div class="nb-cell nb-markdown-cell">Hello world</div>
  19. <div class="nb-cell nb-code-cell">
  20. <div class="nb-input" data-prompt-number="4">
  21. </div>
  22. </div>
  23. </div>
  24. </div>
  25. `,
  26. want: `
  27. <div class="nb-notebook">
  28. <div class="nb-worksheet">
  29. <div class="nb-cell nb-markdown-cell">Hello world</div>
  30. <div class="nb-cell nb-code-cell">
  31. <div class="nb-input" data-prompt-number="4">
  32. </div>
  33. </div>
  34. </div>
  35. </div>
  36. `,
  37. },
  38. {
  39. name: "allow base64 encoded images",
  40. input: `
  41. <div class="nb-output" data-prompt-number="4">
  42. <img class="nb-image-output" src="data:image/png;base64,iVBORw0KGgoA"/>
  43. </div>
  44. `,
  45. want: `
  46. <div class="nb-output" data-prompt-number="4">
  47. <img class="nb-image-output" src="data:image/png;base64,iVBORw0KGgoA"/>
  48. </div>
  49. `,
  50. },
  51. {
  52. name: "prevent XSS",
  53. input: `
  54. <div class="nb-output" data-prompt-number="10">
  55. <div class="nb-html-output">
  56. <style>
  57. .output {
  58. align-items: center;
  59. background: #00ff00;
  60. }
  61. </style>
  62. <script>
  63. function test() {
  64. alert("test");
  65. }
  66. $(document).ready(test);
  67. </script>
  68. </div>
  69. </div>
  70. `,
  71. want: `
  72. <div class="nb-output" data-prompt-number="10">
  73. <div class="nb-html-output">
  74. </div>
  75. </div>
  76. `,
  77. },
  78. }
  79. for _, test := range tests {
  80. t.Run(test.name, func(t *testing.T) {
  81. assert.Equal(t, test.want, p.Sanitize(test.input))
  82. })
  83. }
  84. }