github.com/condensat/bank-core@v0.1.0/database/query/withdrawtarget_test.go (about) 1 // Copyright 2020 Condensat Tech. All rights reserved. 2 // Use of this source code is governed by a MIT 3 // license that can be found in the LICENSE file. 4 5 package query 6 7 import ( 8 "reflect" 9 "testing" 10 11 "github.com/condensat/bank-core/database/model" 12 "github.com/condensat/bank-core/database/query/tests" 13 ) 14 15 func TestAddWithdrawTarget(t *testing.T) { 16 const databaseName = "TestAddWithdrawTarget" 17 t.Parallel() 18 19 db := tests.Setup(databaseName, WithdrawModel()) 20 defer tests.Teardown(db, databaseName) 21 22 data := createTestAccountStateData(db) 23 a1 := data.Accounts[0] 24 a2 := data.Accounts[2] 25 26 ref, _ := AddWithdraw(db, a1.ID, a2.ID, 0.1, model.BatchModeNormal, "{}") 27 28 type args struct { 29 withdrawID model.WithdrawID 30 dataType model.WithdrawTargetType 31 data model.WithdrawTargetData 32 } 33 tests := []struct { 34 name string 35 args args 36 want model.WithdrawTarget 37 wantErr bool 38 }{ 39 {"default", args{}, model.WithdrawTarget{}, true}, 40 {"invalid_type", args{ref.ID, "", "{}"}, model.WithdrawTarget{}, true}, 41 42 {"valid_data", args{ref.ID, model.WithdrawTargetOnChain, ""}, createWithdrawTarget(ref.ID, model.WithdrawTargetOnChain, "{}"), false}, 43 {"valid", args{ref.ID, model.WithdrawTargetOnChain, "{}"}, createWithdrawTarget(ref.ID, model.WithdrawTargetOnChain, "{}"), false}, 44 } 45 for _, tt := range tests { 46 tt := tt // capture range variable 47 t.Run(tt.name, func(t *testing.T) { 48 got, err := AddWithdrawTarget(db, tt.args.withdrawID, tt.args.dataType, tt.args.data) 49 if (err != nil) != tt.wantErr { 50 t.Errorf("AddWithdrawTarget() error = %v, wantErr %v", err, tt.wantErr) 51 return 52 } 53 54 tt.want.ID = got.ID 55 if !reflect.DeepEqual(got, tt.want) { 56 t.Errorf("AddWithdrawTarget() = %v, want %v", got, tt.want) 57 } 58 }) 59 } 60 } 61 62 func TestGetWithdrawTarget(t *testing.T) { 63 const databaseName = "TestGetWithdrawTarget" 64 t.Parallel() 65 66 db := tests.Setup(databaseName, WithdrawModel()) 67 defer tests.Teardown(db, databaseName) 68 69 data := createTestAccountStateData(db) 70 a1 := data.Accounts[0] 71 a2 := data.Accounts[2] 72 73 withdraw, _ := AddWithdraw(db, a1.ID, a2.ID, 0.1, model.BatchModeNormal, "{}") 74 75 ref, _ := AddWithdrawTarget(db, withdraw.ID, model.WithdrawTargetOnChain, "{}") 76 77 type args struct { 78 ID model.WithdrawTargetID 79 } 80 tests := []struct { 81 name string 82 args args 83 want model.WithdrawTarget 84 wantErr bool 85 }{ 86 {"default", args{}, model.WithdrawTarget{}, true}, 87 {"ref", args{ref.ID}, ref, false}, 88 } 89 for _, tt := range tests { 90 tt := tt // capture range variable 91 t.Run(tt.name, func(t *testing.T) { 92 got, err := GetWithdrawTarget(db, tt.args.ID) 93 if (err != nil) != tt.wantErr { 94 t.Errorf("GetWithdrawTarget() error = %v, wantErr %v", err, tt.wantErr) 95 return 96 } 97 if !reflect.DeepEqual(got, tt.want) { 98 t.Errorf("GetWithdrawTarget() = %v, want %v", got, tt.want) 99 } 100 }) 101 } 102 } 103 104 func TestGetWithdrawTargetByWithdrawID(t *testing.T) { 105 const databaseName = "TestGetWithdrawTargetByWithdrawID" 106 t.Parallel() 107 108 db := tests.Setup(databaseName, WithdrawModel()) 109 defer tests.Teardown(db, databaseName) 110 111 data := createTestAccountStateData(db) 112 a1 := data.Accounts[0] 113 a2 := data.Accounts[2] 114 115 withdraw, _ := AddWithdraw(db, a1.ID, a2.ID, 0.1, model.BatchModeNormal, "{}") 116 117 ref, _ := AddWithdrawTarget(db, withdraw.ID, model.WithdrawTargetOnChain, "{}") 118 119 type args struct { 120 withdrawID model.WithdrawID 121 } 122 tests := []struct { 123 name string 124 args args 125 want model.WithdrawTarget 126 wantErr bool 127 }{ 128 {"default", args{}, model.WithdrawTarget{}, true}, 129 {"ref", args{withdraw.ID}, ref, false}, 130 } 131 for _, tt := range tests { 132 tt := tt // capture range variable 133 t.Run(tt.name, func(t *testing.T) { 134 got, err := GetWithdrawTargetByWithdrawID(db, tt.args.withdrawID) 135 if (err != nil) != tt.wantErr { 136 t.Errorf("GetWithdrawTargetByWithdrawID() error = %v, wantErr %v", err, tt.wantErr) 137 return 138 } 139 if !reflect.DeepEqual(got, tt.want) { 140 t.Errorf("GetWithdrawTargetByWithdrawID() = %v, want %v", got, tt.want) 141 } 142 }) 143 } 144 } 145 146 func createWithdrawTarget(withdrawID model.WithdrawID, dataType model.WithdrawTargetType, data model.WithdrawTargetData) model.WithdrawTarget { 147 return model.WithdrawTarget{ 148 WithdrawID: withdrawID, 149 Type: dataType, 150 Data: data, 151 } 152 } 153 154 func TestGetLastWithdrawTargetByStatus(t *testing.T) { 155 const databaseName = "TestGetLastWithdrawTargetByStatus" 156 t.Parallel() 157 158 db := tests.Setup(databaseName, WithdrawModel()) 159 defer tests.Teardown(db, databaseName) 160 161 data := createTestAccountStateData(db) 162 a1 := data.Accounts[0] 163 a2 := data.Accounts[2] 164 165 w1, _ := AddWithdraw(db, a1.ID, a2.ID, 0.1, model.BatchModeNormal, "{}") 166 wt1 := model.FromOnChainData(w1.ID, "bitcoin", model.WithdrawTargetOnChainData{ 167 WithdrawTargetCryptoData: model.WithdrawTargetCryptoData{ 168 PublicKey: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", 169 }, 170 }) 171 { 172 wt1, _ = AddWithdrawTarget(db, w1.ID, wt1.Type, wt1.Data) 173 _, _ = AddWithdrawInfo(db, w1.ID, model.WithdrawStatusCreated, "{}") 174 } 175 176 // add 177 w2, _ := AddWithdraw(db, a1.ID, a2.ID, 0.1, model.BatchModeNormal, "{}") 178 wt2 := model.FromOnChainData(w2.ID, "bitcoin", model.WithdrawTargetOnChainData{ 179 WithdrawTargetCryptoData: model.WithdrawTargetCryptoData{ 180 PublicKey: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", 181 }, 182 }) 183 { 184 wt2, _ = AddWithdrawTarget(db, w2.ID, wt2.Type, wt2.Data) 185 _, _ = AddWithdrawInfo(db, w2.ID, model.WithdrawStatusCreated, "{}") 186 _, _ = AddWithdrawInfo(db, w2.ID, model.WithdrawStatusProcessing, "{}") 187 } 188 type args struct { 189 status model.WithdrawStatus 190 } 191 tests := []struct { 192 name string 193 args args 194 want []model.WithdrawTarget 195 wantErr bool 196 }{ 197 {"default", args{}, nil, true}, 198 {"invalid_status", args{""}, nil, true}, 199 200 {"empty_status", args{model.WithdrawStatusSettled}, nil, false}, 201 {"created", args{model.WithdrawStatusCreated}, []model.WithdrawTarget{wt1}, false}, // do not return wt2 202 {"processing", args{model.WithdrawStatusProcessing}, []model.WithdrawTarget{wt2}, false}, // do not return wt1 203 } 204 for _, tt := range tests { 205 tt := tt // capture range variable 206 t.Run(tt.name, func(t *testing.T) { 207 got, err := GetLastWithdrawTargetByStatus(db, tt.args.status) 208 if (err != nil) != tt.wantErr { 209 t.Errorf("GetLastWithdrawTargetByStatus() error = %v, wantErr %v", err, tt.wantErr) 210 return 211 } 212 if !reflect.DeepEqual(got, tt.want) { 213 t.Errorf("GetLastWithdrawTargetByStatus() = %v, want %v", got, tt.want) 214 } 215 }) 216 } 217 }