forked from jinzhu/copier
-
Notifications
You must be signed in to change notification settings - Fork 0
/
copier_tags_test.go
106 lines (92 loc) · 1.95 KB
/
copier_tags_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package copier_test
import (
"testing"
"github.com/jinzhu/copier"
)
type EmployeeTags struct {
Name string `copier:"must"`
DOB string
Address string
ID int `copier:"-"`
}
type User1 struct {
Name string
DOB string
Address string
ID int
}
type User2 struct {
DOB string
Address string
ID int
}
func TestCopyTagIgnore(t *testing.T) {
employee := EmployeeTags{ID: 100}
user := User1{Name: "Dexter Ledesma", DOB: "1 November, 1970", Address: "21 Jump Street", ID: 12345}
copier.Copy(&employee, user)
if employee.ID == user.ID {
t.Error("Was not expected to copy IDs")
}
if employee.ID != 100 {
t.Error("Original ID was overwritten")
}
}
func TestCopyTagMust(t *testing.T) {
employee := &EmployeeTags{}
user := &User2{DOB: "1 January 1970"}
defer func() {
if r := recover(); r == nil {
t.Error("Expected a panic.")
}
}()
copier.Copy(employee, user)
}
func TestCopyTagFieldName(t *testing.T) {
t.Run("another name field copy", func(t *testing.T) {
type SrcTags struct {
FieldA string
FieldB string `copier:"Field2"`
FieldC string `copier:"FieldTagMatch"`
}
type DestTags struct {
Field1 string `copier:"FieldA"`
Field2 string
Field3 string `copier:"FieldTagMatch"`
}
dst := &DestTags{}
src := &SrcTags{
FieldA: "FieldA->Field1",
FieldB: "FieldB->Field2",
FieldC: "FieldC->Field3",
}
err := copier.Copy(dst, src)
if err != nil {
t.Fatal(err)
}
if dst.Field1 != src.FieldA {
t.Error("Field1 no copy")
}
if dst.Field2 != src.FieldB {
t.Error("Field2 no copy")
}
if dst.Field3 != src.FieldC {
t.Error("Field3 no copy")
}
})
t.Run("validate error flag name", func(t *testing.T) {
type SrcTags struct {
field string
}
type DestTags struct {
Field1 string `copier:"field"`
}
dst := &DestTags{}
src := &SrcTags{
field: "field->Field1",
}
err := copier.Copy(dst, src)
if err == nil {
t.Fatal("must validate error")
}
})
}