github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_delete_test.go (about)

     1  // Unless explicitly stated otherwise all files in this repository are licensed
     2  // under the MIT License.
     3  // This product includes software developed at Guance Cloud (https://www.guance.com/).
     4  // Copyright 2021-present Guance, Inc.
     5  
     6  package funcs
     7  
     8  import (
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/GuanceCloud/cliutils/pipeline/ptinput"
    13  	"github.com/GuanceCloud/cliutils/point"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestDelete(t *testing.T) {
    18  	cases := []struct {
    19  		name, pl, in string
    20  		expected     interface{}
    21  		fail         bool
    22  		outkey       string
    23  	}{
    24  		{
    25  			name: "delete_map",
    26  			pl: `
    27  			a=load_json(_)
    28  			 delete(a["a"][-1], "b")
    29  			 add_key(a)`,
    30  			in:       `{"a":[1, {"b":2}]}`,
    31  			expected: "{\"a\":[1,{}]}",
    32  			outkey:   "a",
    33  		},
    34  		{
    35  			pl: `j_map = load_json(_)
    36  
    37  			delete(j_map["b"][-1], "c")
    38  			
    39  			delete(j_map, "a")
    40  			
    41  			add_key("j_map", j_map)`,
    42  			in:       `{"a": "b", "b":[0, {"c": "d"}], "e": 1}`,
    43  			expected: "{\"b\":[0,{}],\"e\":1}",
    44  			outkey:   "j_map",
    45  		},
    46  		{
    47  			name: "delete_map",
    48  			pl: `
    49  			a=load_json(_)
    50  			 delete(a, "a")
    51  			 add_key(a)`,
    52  			in:       `{"a":[1, {"b":2}]}`,
    53  			expected: "{}",
    54  			outkey:   "a",
    55  		},
    56  		{
    57  			name: "delete_map",
    58  			pl: `
    59  			a=load_json(_)
    60  			 delete(a["a"], "b")
    61  			 add_key(a)`,
    62  			in:       `{"a":[1, {"b":2}]}`,
    63  			expected: "{\"a\":[1,{\"b\":2}]}",
    64  			outkey:   "a",
    65  		},
    66  		{
    67  			name: "delete_map",
    68  			pl: `
    69  			a=load_json(_)
    70  			 delete(b, "b")
    71  			 add_key(a)`,
    72  			in:       `{"a":[1, {"b":2}]}`,
    73  			expected: "{\"a\":[1,{\"b\":2}]}",
    74  			outkey:   "a",
    75  		},
    76  		{
    77  			name: "delete_map",
    78  			pl: `
    79  			a=load_json(_)
    80  			 delete(a["a"][-7], "b")
    81  			 add_key(a)`,
    82  			in:       `{"a":[1, {"b":2}]}`,
    83  			expected: "{\"a\":[1,{\"b\":2}]}",
    84  			outkey:   "a",
    85  		},
    86  		{
    87  			name: "delete_map",
    88  			pl: `
    89  			a=load_json(_)
    90  			 delete(b, x)
    91  			 add_key(a)`,
    92  			in:       `{"a":[1, {"b":2}]}`,
    93  			expected: "{\"a\":[1,{\"b\":2}]}",
    94  			outkey:   "a",
    95  			fail:     true,
    96  		},
    97  	}
    98  
    99  	for idx, tc := range cases {
   100  		t.Run(tc.name, func(t *testing.T) {
   101  			runner, err := NewTestingRunner(tc.pl)
   102  			if err != nil {
   103  				if tc.fail {
   104  					t.Logf("[%d]expect error: %s", idx, err)
   105  				} else {
   106  					t.Errorf("[%d] failed: %s", idx, err)
   107  				}
   108  				return
   109  			}
   110  			pt := ptinput.NewPlPoint(
   111  				point.Logging, "test", nil, map[string]any{"message": tc.in}, time.Now())
   112  			errR := runScript(runner, pt)
   113  			if errR != nil {
   114  				t.Fatal(*errR)
   115  			}
   116  
   117  			v, _, e := pt.Get(tc.outkey)
   118  
   119  			assert.NoError(t, e)
   120  			assert.Equal(t, tc.expected, v)
   121  			t.Logf("[%d] PASS", idx)
   122  		})
   123  	}
   124  }