github.com/prebid/prebid-server@v0.275.0/util/jsonutil/jsonutil_test.go (about) 1 package jsonutil 2 3 import ( 4 "github.com/stretchr/testify/assert" 5 "strings" 6 "testing" 7 ) 8 9 func TestDropElement(t *testing.T) { 10 11 tests := []struct { 12 description string 13 input []byte 14 elementToRemove []string 15 output []byte 16 errorExpected bool 17 errorContains string 18 }{ 19 { 20 description: "Drop Single Element After Another Element", 21 input: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {"test": 1,"consented_providers": [1608,765,492]}}`), 22 elementToRemove: []string{"consented_providers"}, 23 output: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {"test": 1}}`), 24 errorExpected: false, 25 errorContains: "", 26 }, 27 { 28 description: "Drop Single Element Before Another Element", 29 input: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {"consented_providers": [1608,765,492],"test": 1}}`), 30 elementToRemove: []string{"consented_providers"}, 31 output: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {"test": 1}}`), 32 errorExpected: false, 33 errorContains: "", 34 }, 35 { 36 description: "Drop Single Element", 37 input: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {"consented_providers": [1545,2563,1411]}}`), 38 elementToRemove: []string{"consented_providers"}, 39 output: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {}}`), 40 errorExpected: false, 41 errorContains: "", 42 }, 43 { 44 description: "Drop Single Element string", 45 input: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {"consented_providers": "test"}}`), 46 elementToRemove: []string{"consented_providers"}, 47 output: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {}}`), 48 errorExpected: false, 49 errorContains: "", 50 }, 51 { 52 description: "Drop Parent Element Between Two Elements", 53 input: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {"consented_providers": [1608,765,492], "test": 1},"test": 123}`), 54 elementToRemove: []string{"consented_providers_settings"}, 55 output: []byte(`{"consent": "TESTCONSENT","test": 123}`), 56 errorExpected: false, 57 errorContains: "", 58 }, 59 { 60 description: "Drop Parent Element Before Element", 61 input: []byte(`{"consented_providers_settings": {"consented_providers": [1608,765,492], "test": 1},"test": 123}`), 62 elementToRemove: []string{"consented_providers_settings"}, 63 output: []byte(`{"test": 123}`), 64 errorExpected: false, 65 errorContains: "", 66 }, 67 { 68 description: "Drop Parent Element After Element", 69 input: []byte(`{"consent": "TESTCONSENT","consented_providers_settings": {"consented_providers": [1608,765,492], "test": 1}}`), 70 elementToRemove: []string{"consented_providers_settings"}, 71 output: []byte(`{"consent": "TESTCONSENT"}`), 72 errorExpected: false, 73 errorContains: "", 74 }, 75 { 76 description: "Drop Parent Element Only", 77 input: []byte(`{"consented_providers_settings": {"consented_providers": [1608,765,492], "test": 1}}`), 78 elementToRemove: []string{"consented_providers_settings"}, 79 output: []byte(`{}`), 80 errorExpected: false, 81 errorContains: "", 82 }, 83 { 84 description: "Drop Parent Element List", 85 input: []byte(`{"consented_providers_settings":{"consented_providers":[1608,765,492],"test":1},"data": [{"test1":5},{"test2": [1,2,3]}]}`), 86 elementToRemove: []string{"data"}, 87 output: []byte(`{"consented_providers_settings":{"consented_providers":[1608,765,492],"test":1}}`), 88 errorExpected: false, 89 errorContains: "", 90 }, 91 { 92 description: "Drop Element That Doesn't Exist", 93 input: []byte(`{"consented_providers_settings": {"consented_providers": [1608,765,492], "test": 1}}`), 94 elementToRemove: []string{"test2"}, 95 output: []byte(`{"consented_providers_settings": {"consented_providers": [1608,765,492], "test": 1}}`), 96 errorExpected: false, 97 errorContains: "", 98 }, 99 { 100 description: "Drop Nested Element Single Occurrence", 101 input: []byte(`{"consented_providers_settings":{"consented_providers":[1608,765,492],"test":1},"data": [{"test1":5},{"test2": [1,2,3]}]}`), 102 elementToRemove: []string{"consented_providers_settings", "test"}, 103 output: []byte(`{"consented_providers_settings":{"consented_providers":[1608,765,492]},"data": [{"test1":5},{"test2": [1,2,3]}]}`), 104 errorExpected: false, 105 errorContains: "", 106 }, 107 { 108 description: "Drop Nested Element Multiple Occurrence", 109 input: []byte(`{"consented_providers_settings":{"consented_providers":[1608,765,492],"test":1},"data": [{"test":5},{"test": [1,2,3]}]}`), 110 elementToRemove: []string{"consented_providers_settings", "test"}, 111 output: []byte(`{"consented_providers_settings":{"consented_providers":[1608,765,492]},"data": [{"test":5},{"test": [1,2,3]}]}`), 112 errorExpected: false, 113 errorContains: "", 114 }, 115 { 116 description: "Drop Nested Element Multiple Occurrence Skip Path", 117 input: []byte(`{"consented_providers_settings":{"consented_providers":[1608,765,492],"data": {"amp":1, "test": 25}}}`), 118 elementToRemove: []string{"consented_providers_settings", "test"}, 119 output: []byte(`{"consented_providers_settings":{"consented_providers":[1608,765,492],"data": {"amp":1}}}`), 120 errorExpected: false, 121 errorContains: "", 122 }, 123 { 124 description: "Drop Nested Structure Single Occurrence", 125 input: []byte(`{"consented_providers":{"providers":[1608,765,492],"test":{"nested":true}},"data": [{"test":5},{"test": [1,2,3]}]}`), 126 elementToRemove: []string{"consented_providers", "test"}, 127 output: []byte(`{"consented_providers":{"providers":[1608,765,492]},"data": [{"test":5},{"test": [1,2,3]}]}`), 128 errorExpected: false, 129 errorContains: "", 130 }, 131 { 132 description: "Drop Nested Structure Single Occurrence Deep Nested", 133 input: []byte(`{"consented_providers":{"providers":[1608,765,492],"test":{"nested":true, "nested2": {"test6": 123}}},"data": [{"test":5},{"test": [1,2,3]}]}`), 134 elementToRemove: []string{"consented_providers", "test6"}, 135 output: []byte(`{"consented_providers":{"providers":[1608,765,492],"test":{"nested":true, "nested2": {}}},"data": [{"test":5},{"test": [1,2,3]}]}`), 136 errorExpected: false, 137 errorContains: "", 138 }, 139 { 140 description: "Drop Nested Structure Single Occurrence Deep Nested Full Path", 141 input: []byte(`{"consented_providers":{"providers":[1608,765,492],"test":{"nested":true,"nested2": {"test6": 123}}},"data": [{"test":5},{"test": [1,2,3]}]}`), 142 elementToRemove: []string{"consented_providers", "test", "nested"}, 143 output: []byte(`{"consented_providers":{"providers":[1608,765,492],"test":{"nested2": {"test6": 123}}},"data": [{"test":5},{"test": [1,2,3]}]}`), 144 errorExpected: false, 145 errorContains: "", 146 }, 147 { 148 description: "Drop Nested Structure Doesn't Exist", 149 input: []byte(`{"consented_providers":{"providers":[1608,765,492]},"test":{"nested":true}},"data": [{"test":5},{"test": [1,2,3]}]}`), 150 elementToRemove: []string{"consented_providers", "test2"}, 151 output: []byte(`{"consented_providers":{"providers":[1608,765,492]},"test":{"nested":true}},"data": [{"test":5},{"test": [1,2,3]}]}`), 152 errorExpected: false, 153 errorContains: "", 154 }, 155 //Errors 156 { 157 description: "Error Decode", 158 input: []byte(`{"consented_providers_settings": {"consented_providers": ["123",1,,1365,5678,1545,2563,1411], "test": 1}}`), 159 elementToRemove: []string{"consented_providers"}, 160 output: []byte(``), 161 errorExpected: true, 162 errorContains: "looking for beginning of value", 163 }, 164 { 165 description: "Error Malformed", 166 input: []byte(`{consented_providers_settings: {"consented_providers": [1365,5678,1545,2563,1411], "test": 1}}`), 167 elementToRemove: []string{"consented_providers"}, 168 output: []byte(``), 169 errorExpected: true, 170 errorContains: "invalid character", 171 }, 172 } 173 174 for _, tt := range tests { 175 res, err := DropElement(tt.input, tt.elementToRemove...) 176 177 if tt.errorExpected { 178 assert.Error(t, err, "Error should not be nil") 179 assert.True(t, strings.Contains(err.Error(), tt.errorContains)) 180 } else { 181 assert.NoError(t, err, "Error should be nil") 182 assert.Equal(t, tt.output, res, "Result is incorrect") 183 } 184 } 185 }