z_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package rest
  2. import (
  3. "log"
  4. "reflect"
  5. "testing"
  6. "git.ali33.ru/fcg-xvii/go-tools/json"
  7. )
  8. func TestFieldsDefault(t *testing.T) {
  9. type RR struct {
  10. ID int64 `rest:"default"`
  11. Name string `rest:"default"`
  12. GroupID int64
  13. }
  14. rr := RR{}
  15. fields := fieldsDefault(reflect.TypeOf(rr))
  16. expected := []any{"id", "name"}
  17. if len(fields) != len(expected) {
  18. t.Errorf("expected %v, real %v", expected, fields)
  19. }
  20. for i, val := range expected {
  21. if fields[i] != val {
  22. t.Errorf("expected %v, real %v", expected, fields)
  23. }
  24. }
  25. }
  26. func TestFielderName(t *testing.T) {
  27. name := "Name"
  28. if field, err := parseName(reflect.ValueOf(name)); field.Name != camelToSnake(name) || err != nil {
  29. if err != nil {
  30. t.Error(err)
  31. }
  32. t.Errorf("expected %v, real %v", camelToSnake(name), field.Name)
  33. }
  34. obj := json.Map{
  35. "name": "Object",
  36. "fields": []any{
  37. "okko",
  38. "cooler",
  39. },
  40. }
  41. field, err := parseName(reflect.ValueOf(obj))
  42. if err != nil {
  43. t.Error(err)
  44. }
  45. // check name
  46. if field.Name != "object" {
  47. t.Errorf("expected %v, real %v", "object", name)
  48. }
  49. // check fields
  50. for i, val := range []any{"okko", "cooler"} {
  51. if field.Names[i] != val {
  52. t.Errorf("expected %v, real %v", val, field.Names[i])
  53. }
  54. }
  55. }
  56. type RR struct {
  57. ID int64 `rest:"default"`
  58. Name string `rest:"default"`
  59. GroupID int64 `rest:"ignore"`
  60. Child *RR
  61. Nums []int64
  62. Childs []*RR
  63. MM json.Map
  64. }
  65. func (s *RR) RestFields(result json.Map, fields FieldList) {
  66. if _, check := fields.Field("group_id"); check {
  67. result["group_id"] = s.GroupID * 1000
  68. }
  69. }
  70. func TestFielderVal(t *testing.T) {
  71. rr := &RR{
  72. ID: 1,
  73. Name: "okko",
  74. GroupID: 2,
  75. MM: json.Map{
  76. "one": 1,
  77. "obj": &RR{
  78. ID: 1,
  79. Name: "mm-obj",
  80. },
  81. },
  82. Child: &RR{
  83. ID: 3,
  84. Name: "cooler",
  85. GroupID: 4,
  86. },
  87. Nums: []int64{1, 2, 3},
  88. Childs: []*RR{
  89. {
  90. ID: 5,
  91. Name: "okko1",
  92. GroupID: 6,
  93. },
  94. {
  95. ID: 7,
  96. Name: "cooler1",
  97. GroupID: 8,
  98. },
  99. },
  100. }
  101. val, err := fieldVal(
  102. reflect.ValueOf(rr),
  103. "",
  104. nil,
  105. "id",
  106. "name",
  107. "nums",
  108. "group_id",
  109. "mm",
  110. json.Map{
  111. "name": "childs",
  112. "fields": []any{"id", "name", "childs"},
  113. },
  114. json.Map{
  115. "name": "child",
  116. "fields": []any{"id"},
  117. },
  118. )
  119. if err != nil {
  120. t.Error(err, err.Args())
  121. }
  122. m := val.Interface().(json.Map)
  123. m.LogPretty()
  124. mVal, err := Fields(
  125. rr,
  126. nil,
  127. "id",
  128. "name",
  129. "nums",
  130. "mm",
  131. "group_id",
  132. json.Map{
  133. "name": "childs",
  134. "fields": []any{"id", "name", "childs"},
  135. },
  136. json.Map{
  137. "name": "child",
  138. "fields": []any{"id"},
  139. },
  140. )
  141. if err != nil {
  142. t.Error(err, err.Args())
  143. }
  144. log.Println("========================================")
  145. mVal.LogPretty()
  146. }