github.com/cloudwego/dynamicgo@v0.2.6-0.20240519101509-707f41b6b834/thrift/annotation/key_mapping_test.go (about)

     1  /**
     2   * Copyright 2023 CloudWeGo Authors.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package annotation
    18  
    19  import (
    20  	"context"
    21  	"testing"
    22  
    23  	"github.com/cloudwego/dynamicgo/thrift"
    24  	"github.com/stretchr/testify/require"
    25  )
    26  
    27  func TestAgwKey(t *testing.T) {
    28  	path := "a/b/main.thrift"
    29  	content := `
    30  	namespace go kitex.test.server
    31  	struct Base {
    32  		1: required string required_field
    33  		999: required string test1 (agw.key="test2")
    34  		3: string pass 
    35  	}
    36  
    37  	service InboxService {
    38  		string ExampleMethod(1: Base req)
    39  	}
    40  	`
    41  	includes := map[string]string{
    42  		path: content,
    43  	}
    44  	p, err := thrift.NewDescritorFromContent(context.Background(), path, content, includes, true)
    45  	if err != nil {
    46  		t.Fatal(err)
    47  	}
    48  	req := p.Functions()["ExampleMethod"].Request().Struct().Fields()[0].Type()
    49  	require.Equal(t, "test2", req.Struct().FieldById(999).Alias())
    50  }
    51  
    52  func TestNameCase(t *testing.T) {
    53  	path := "a/b/main.thrift"
    54  	content := `
    55  	namespace go kitex.test.server
    56  
    57  	struct Base1 {
    58  		1: string InnerBase (agw.to_snake="false")
    59  		2: string Msg 
    60  		3: string logID (agw.to_lower_camel_case="false")
    61  		4: string req_list 
    62  	}
    63  
    64  	struct Base2 {
    65  		1: string InnerBase (agw.to_snake="false")
    66  		2: string Msg 
    67  		3: string logID
    68  		4: string req_list (agw.to_lower_camel_case="true")
    69  	} (agw.to_snake="False")
    70  
    71  	struct Base3 {
    72  		1: string InnerBase 
    73  		2: string Msg 
    74  		3: string logID
    75  		4: string req_list
    76  	}
    77  
    78  	struct Base4 {
    79  		1: string InnerBase (agw.to_snake="true")
    80  		2: string Msg (agw.to_lower_camel_case="false")
    81  		3: string logID
    82  		4: string req_list 
    83  	} (agw.to_snake="falsE")
    84  
    85  	service ExampleService {
    86  		Base2 ExampleMethod1(1: Base1 req) (agw.to_snake="True")
    87  		Base4 ExampleMethod2(1: Base3 req) (agw.to_lower_camel_case="True")
    88  		Base4 ExampleMethod3(1: Base3 req) (agw.to_snake="True")
    89  	} 
    90  	`
    91  	includes := map[string]string{
    92  		path: content,
    93  	}
    94  
    95  	p, err := thrift.Options{}.NewDescriptorFromContentWithMethod(context.Background(), path, content, includes, true, "ExampleMethod1", "ExampleMethod2")
    96  	require.NoError(t, err)
    97  
    98  	base1 := p.Functions()["ExampleMethod1"].Request().Struct().Fields()[0].Type()
    99  	require.Equal(t, "InnerBase", base1.Struct().FieldById(1).Alias())
   100  	require.Equal(t, "msg", base1.Struct().FieldById(2).Alias())
   101  	require.Equal(t, "log_id", base1.Struct().FieldById(3).Alias())
   102  	require.Equal(t, "req_list", base1.Struct().FieldById(4).Alias())
   103  
   104  	base2 := p.Functions()["ExampleMethod1"].Response().Struct().Fields()[0].Type()
   105  	require.Equal(t, "InnerBase", base2.Struct().FieldById(1).Alias())
   106  	require.Equal(t, "Msg", base2.Struct().FieldById(2).Alias())
   107  	require.Equal(t, "logID", base2.Struct().FieldById(3).Alias())
   108  	require.Equal(t, "reqList", base2.Struct().FieldById(4).Alias())
   109  
   110  	base3 := p.Functions()["ExampleMethod2"].Request().Struct().Fields()[0].Type()
   111  	require.Equal(t, "innerBase", base3.Struct().FieldById(1).Alias())
   112  	require.Equal(t, "msg", base3.Struct().FieldById(2).Alias())
   113  	require.Equal(t, "logID", base3.Struct().FieldById(3).Alias())
   114  	require.Equal(t, "reqList", base3.Struct().FieldById(4).Alias())
   115  
   116  	base4 := p.Functions()["ExampleMethod2"].Response().Struct().Fields()[0].Type()
   117  	require.Equal(t, "inner_base", base4.Struct().FieldById(1).Alias())
   118  	require.Equal(t, "Msg", base4.Struct().FieldById(2).Alias())
   119  	require.Equal(t, "logID", base4.Struct().FieldById(3).Alias())
   120  	require.Equal(t, "reqList", base4.Struct().FieldById(4).Alias())
   121  
   122  	p, err = thrift.Options{}.NewDescriptorFromContentWithMethod(context.Background(), path, content, includes, true, "ExampleMethod3")
   123  	require.NoError(t, err)
   124  	base3 = p.Functions()["ExampleMethod3"].Request().Struct().Fields()[0].Type()
   125  	require.Equal(t, "inner_base", base3.Struct().FieldById(1).Alias())
   126  	require.Equal(t, "msg", base3.Struct().FieldById(2).Alias())
   127  	require.Equal(t, "log_id", base3.Struct().FieldById(3).Alias())
   128  	require.Equal(t, "req_list", base3.Struct().FieldById(4).Alias())
   129  
   130  	base4 = p.Functions()["ExampleMethod3"].Response().Struct().Fields()[0].Type()
   131  	require.Equal(t, "inner_base", base4.Struct().FieldById(1).Alias())
   132  	require.Equal(t, "Msg", base4.Struct().FieldById(2).Alias())
   133  	require.Equal(t, "logID", base4.Struct().FieldById(3).Alias())
   134  	require.Equal(t, "req_list", base4.Struct().FieldById(4).Alias())
   135  }