GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( ade00f...013a6a )
by
unknown
01:57 queued 14s
created

mollie.TestOrdersService_Update   C

Complexity

Conditions 9

Size

Total Lines 115
Code Lines 86

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 86
nop 1
dl 0
loc 115
rs 5.1247
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
package mollie
2
3
import (
4
	"context"
5
	"fmt"
6
	"net/http"
7
	"testing"
8
9
	"github.com/VictorAvelar/mollie-api-go/v4/testdata"
10
	"github.com/stretchr/testify/assert"
11
)
12
13
func TestOrdersService_Get(t *testing.T) {
14
	setEnv()
15
	defer unsetEnv()
16
17
	type args struct {
18
		ctx     context.Context
19
		order   string
20
		options *OrderOptions
21
	}
22
	cases := []struct {
23
		name    string
24
		args    args
25
		wantErr bool
26
		err     error
27
		pre     func()
28
		handler http.HandlerFunc
29
	}{
30
		{
31
			"get orders works as expected.",
32
			args{
33
				context.Background(),
34
				"ord_kEn1PlbGa",
35
				&OrderOptions{
36
					ProfileID: "pfl_1236h213bv1",
37
				},
38
			},
39
			false,
40
			nil,
41
			noPre,
42
			func(w http.ResponseWriter, r *http.Request) {
43
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
44
				testMethod(t, r, "GET")
45
				testQuery(t, r, "profileId=pfl_1236h213bv1")
46
47
				if _, ok := r.Header[AuthHeader]; !ok {
48
					w.WriteHeader(http.StatusUnauthorized)
49
				}
50
				_, _ = w.Write([]byte(testdata.GetOrderResponse))
51
			},
52
		},
53
		{
54
			"get orders, an error is returned from the server",
55
			args{
56
				context.Background(),
57
				"ord_kEn1PlbGa",
58
				nil,
59
			},
60
			true,
61
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
62
			noPre,
63
			errorHandler,
64
		},
65
		{
66
			"get orders, an error occurs when parsing json",
67
			args{
68
				context.Background(),
69
				"ord_kEn1PlbGa",
70
				nil,
71
			},
72
			true,
73
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
74
			noPre,
75
			encodingHandler,
76
		},
77
		{
78
			"get orders, invalid url when building request",
79
			args{
80
				context.Background(),
81
				"ord_kEn1PlbGa",
82
				nil,
83
			},
84
			true,
85
			errBadBaseURL,
86
			crashSrv,
87
			errorHandler,
88
		},
89
	}
90
91
	for _, c := range cases {
92
		setup()
93
		defer teardown()
94
95
		t.Run(c.name, func(t *testing.T) {
96
			c.pre()
97
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s", c.args.order), c.handler)
98
99
			res, m, err := tClient.Orders.Get(c.args.ctx, c.args.order, c.args.options)
100
			if c.wantErr {
101
				assert.NotNil(t, err)
102
				assert.EqualError(t, err, c.err.Error())
103
			} else {
104
				assert.Nil(t, err)
105
				assert.IsType(t, &Order{}, m)
106
				assert.IsType(t, &http.Response{}, res.Response)
107
			}
108
		})
109
	}
110
}
111
112
func TestOrdersService_List(t *testing.T) {
113
	setEnv()
114
	defer unsetEnv()
115
116
	type args struct {
117
		ctx     context.Context
118
		order   string
119
		options *OrderListOptions
120
	}
121
	cases := []struct {
122
		name    string
123
		args    args
124
		wantErr bool
125
		err     error
126
		pre     func()
127
		handler http.HandlerFunc
128
	}{
129
		{
130
			"list orders works as expected.",
131
			args{
132
				context.Background(),
133
				"ord_kEn1PlbGa",
134
				&OrderListOptions{
135
					ProfileID: "pfl_1236h213bv1",
136
				},
137
			},
138
			false,
139
			nil,
140
			noPre,
141
			func(w http.ResponseWriter, r *http.Request) {
142
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
143
				testMethod(t, r, "GET")
144
				testQuery(t, r, "profileId=pfl_1236h213bv1")
145
146
				if _, ok := r.Header[AuthHeader]; !ok {
147
					w.WriteHeader(http.StatusUnauthorized)
148
				}
149
				_, _ = w.Write([]byte(testdata.GetOrderResponse))
150
			},
151
		},
152
		{
153
			"list orders, an error is returned from the server",
154
			args{
155
				context.Background(),
156
				"ord_kEn1PlbGa",
157
				nil,
158
			},
159
			true,
160
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
161
			noPre,
162
			errorHandler,
163
		},
164
		{
165
			"list orders, an error occurs when parsing json",
166
			args{
167
				context.Background(),
168
				"ord_kEn1PlbGa",
169
				nil,
170
			},
171
			true,
172
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
173
			noPre,
174
			encodingHandler,
175
		},
176
		{
177
			"list orders, invalid url when building request",
178
			args{
179
				context.Background(),
180
				"ord_kEn1PlbGa",
181
				nil,
182
			},
183
			true,
184
			errBadBaseURL,
185
			crashSrv,
186
			errorHandler,
187
		},
188
	}
189
190
	for _, c := range cases {
191
		setup()
192
		defer teardown()
193
194
		t.Run(c.name, func(t *testing.T) {
195
			c.pre()
196
			tMux.HandleFunc("/v2/orders", c.handler)
197
198
			res, m, err := tClient.Orders.List(c.args.ctx, c.args.options)
199
			if c.wantErr {
200
				assert.NotNil(t, err)
201
				assert.EqualError(t, err, c.err.Error())
202
			} else {
203
				assert.Nil(t, err)
204
				assert.IsType(t, &OrderList{}, m)
205
				assert.IsType(t, &http.Response{}, res.Response)
206
			}
207
		})
208
	}
209
}
210
211
func TestOrdersService_Create(t *testing.T) {
212
	setEnv()
213
	defer unsetEnv()
214
215
	type args struct {
216
		ctx     context.Context
217
		order   CreateOrder
218
		options *OrderOptions
219
	}
220
	cases := []struct {
221
		name    string
222
		args    args
223
		wantErr bool
224
		err     error
225
		pre     func()
226
		handler http.HandlerFunc
227
	}{
228
		{
229
			"create orders works as expected.",
230
			args{
231
				context.Background(),
232
				CreateOrder{
233
					Method: []PaymentMethod{PayPal},
234
				},
235
				&OrderOptions{},
236
			},
237
			false,
238
			nil,
239
			noPre,
240
			func(w http.ResponseWriter, r *http.Request) {
241
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
242
				testMethod(t, r, "POST")
243
244
				if _, ok := r.Header[AuthHeader]; !ok {
245
					w.WriteHeader(http.StatusUnauthorized)
246
				}
247
				_, _ = w.Write([]byte(testdata.GetOrderResponse))
248
			},
249
		},
250
		{
251
			"create orders works as expected.",
252
			args{
253
				context.Background(),
254
				CreateOrder{
255
					Method: []PaymentMethod{PayPal},
256
				},
257
				&OrderOptions{},
258
			},
259
			false,
260
			nil,
261
			func() {
262
				tClient.WithAuthenticationValue("access_token_test")
263
			},
264
			func(w http.ResponseWriter, r *http.Request) {
265
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
266
				testMethod(t, r, "POST")
267
268
				if _, ok := r.Header[AuthHeader]; !ok {
269
					w.WriteHeader(http.StatusUnauthorized)
270
				}
271
				_, _ = w.Write([]byte(testdata.GetOrderResponse))
272
			},
273
		},
274
		{
275
			"create orders, an error is returned from the server",
276
			args{
277
				context.Background(),
278
				CreateOrder{
279
					Method: []PaymentMethod{PayPal},
280
				},
281
				nil,
282
			},
283
			true,
284
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
285
			noPre,
286
			errorHandler,
287
		},
288
		{
289
			"create orders, an error occurs when parsing json",
290
			args{
291
				context.Background(),
292
				CreateOrder{
293
					Method: []PaymentMethod{PayPal},
294
				},
295
				nil,
296
			},
297
			true,
298
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
299
			noPre,
300
			encodingHandler,
301
		},
302
		{
303
			"create orders, invalid url when building request",
304
			args{
305
				context.Background(),
306
				CreateOrder{
307
					Method: []PaymentMethod{PayPal},
308
				},
309
				nil,
310
			},
311
			true,
312
			errBadBaseURL,
313
			crashSrv,
314
			errorHandler,
315
		},
316
	}
317
318
	for _, c := range cases {
319
		setup()
320
		defer teardown()
321
322
		t.Run(c.name, func(t *testing.T) {
323
			c.pre()
324
			tMux.HandleFunc("/v2/orders", c.handler)
325
326
			res, m, err := tClient.Orders.Create(c.args.ctx, c.args.order, c.args.options)
327
			if c.wantErr {
328
				assert.NotNil(t, err)
329
				assert.EqualError(t, err, c.err.Error())
330
			} else {
331
				assert.Nil(t, err)
332
				assert.IsType(t, &Order{}, m)
333
				assert.IsType(t, &http.Response{}, res.Response)
334
			}
335
		})
336
	}
337
}
338
339
func TestOrdersService_Update(t *testing.T) {
340
	setEnv()
341
	defer unsetEnv()
342
343
	type args struct {
344
		ctx     context.Context
345
		order   UpdateOrder
346
		options *OrderOptions
347
	}
348
	cases := []struct {
349
		name    string
350
		args    args
351
		wantErr bool
352
		err     error
353
		pre     func()
354
		handler http.HandlerFunc
355
	}{
356
		{
357
			"update orders works as expected.",
358
			args{
359
				context.Background(),
360
				UpdateOrder{
361
					OrderNumber: "ord_kEn1PlbGa",
362
				},
363
				&OrderOptions{},
364
			},
365
			false,
366
			nil,
367
			noPre,
368
			func(w http.ResponseWriter, r *http.Request) {
369
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
370
				testMethod(t, r, "PATCH")
371
372
				if _, ok := r.Header[AuthHeader]; !ok {
373
					w.WriteHeader(http.StatusUnauthorized)
374
				}
375
				_, _ = w.Write([]byte(testdata.UpdateOrderResponse))
376
			},
377
		},
378
		{
379
			"update orders works as expected.",
380
			args{
381
				context.Background(),
382
				UpdateOrder{},
383
				&OrderOptions{},
384
			},
385
			false,
386
			nil,
387
			func() {
388
				tClient.WithAuthenticationValue("access_token_test")
389
			},
390
			func(w http.ResponseWriter, r *http.Request) {
391
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
392
				testMethod(t, r, "PATCH")
393
394
				if _, ok := r.Header[AuthHeader]; !ok {
395
					w.WriteHeader(http.StatusUnauthorized)
396
				}
397
				_, _ = w.Write([]byte(testdata.UpdateOrderResponse))
398
			},
399
		},
400
		{
401
			"update orders, an error is returned from the server",
402
			args{
403
				context.Background(),
404
				UpdateOrder{},
405
				nil,
406
			},
407
			true,
408
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
409
			noPre,
410
			errorHandler,
411
		},
412
		{
413
			"update orders, an error occurs when parsing json",
414
			args{
415
				context.Background(),
416
				UpdateOrder{},
417
				nil,
418
			},
419
			true,
420
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
421
			noPre,
422
			encodingHandler,
423
		},
424
		{
425
			"update orders, invalid url when building request",
426
			args{
427
				context.Background(),
428
				UpdateOrder{},
429
				nil,
430
			},
431
			true,
432
			errBadBaseURL,
433
			crashSrv,
434
			errorHandler,
435
		},
436
	}
437
438
	for _, c := range cases {
439
		setup()
440
		defer teardown()
441
442
		t.Run(c.name, func(t *testing.T) {
443
			c.pre()
444
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s", c.args.order.OrderNumber), c.handler)
445
446
			res, m, err := tClient.Orders.Update(c.args.ctx, c.args.order.OrderNumber, c.args.order)
447
			if c.wantErr {
448
				assert.NotNil(t, err)
449
				assert.EqualError(t, err, c.err.Error())
450
			} else {
451
				assert.Nil(t, err)
452
				assert.IsType(t, &Order{}, m)
453
				assert.IsType(t, &http.Response{}, res.Response)
454
			}
455
		})
456
	}
457
}
458
459
func TestOrdersService_Cancel(t *testing.T) {
460
	setEnv()
461
	defer unsetEnv()
462
463
	type args struct {
464
		ctx     context.Context
465
		order   Order
466
		options *OrderOptions
467
	}
468
	cases := []struct {
469
		name    string
470
		args    args
471
		wantErr bool
472
		err     error
473
		pre     func()
474
		handler http.HandlerFunc
475
	}{
476
		{
477
			"cancel orders works as expected.",
478
			args{
479
				context.Background(),
480
				Order{
481
					Method: PayPal,
482
					ID:     "ord_kEn1PlbGa",
483
				},
484
				&OrderOptions{},
485
			},
486
			false,
487
			nil,
488
			noPre,
489
			func(w http.ResponseWriter, r *http.Request) {
490
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
491
				testMethod(t, r, "DELETE")
492
493
				if _, ok := r.Header[AuthHeader]; !ok {
494
					w.WriteHeader(http.StatusUnauthorized)
495
				}
496
				_, _ = w.Write([]byte(testdata.CancelOrderResponse))
497
			},
498
		},
499
		{
500
			"cancel orders works as expected.",
501
			args{
502
				context.Background(),
503
				Order{
504
					Method: PayPal,
505
				},
506
				&OrderOptions{},
507
			},
508
			false,
509
			nil,
510
			func() {
511
				tClient.WithAuthenticationValue("access_token_test")
512
			},
513
			func(w http.ResponseWriter, r *http.Request) {
514
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
515
				testMethod(t, r, "DELETE")
516
517
				if _, ok := r.Header[AuthHeader]; !ok {
518
					w.WriteHeader(http.StatusUnauthorized)
519
				}
520
				_, _ = w.Write([]byte(testdata.CancelOrderResponse))
521
			},
522
		},
523
		{
524
			"cancel orders, an error is returned from the server",
525
			args{
526
				context.Background(),
527
				Order{
528
					Method: PayPal,
529
				},
530
				nil,
531
			},
532
			true,
533
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
534
			noPre,
535
			errorHandler,
536
		},
537
		{
538
			"cancel orders, an error occurs when parsing json",
539
			args{
540
				context.Background(),
541
				Order{
542
					Method: PayPal,
543
				},
544
				nil,
545
			},
546
			true,
547
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
548
			noPre,
549
			encodingHandler,
550
		},
551
		{
552
			"cancel orders, invalid url when building request",
553
			args{
554
				context.Background(),
555
				Order{
556
					Method: PayPal,
557
				},
558
				nil,
559
			},
560
			true,
561
			errBadBaseURL,
562
			crashSrv,
563
			errorHandler,
564
		},
565
	}
566
567
	for _, c := range cases {
568
		setup()
569
		defer teardown()
570
571
		t.Run(c.name, func(t *testing.T) {
572
			c.pre()
573
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s", c.args.order.ID), c.handler)
574
575
			res, m, err := tClient.Orders.Cancel(c.args.ctx, c.args.order.ID)
576
			if c.wantErr {
577
				assert.NotNil(t, err)
578
				assert.EqualError(t, err, c.err.Error())
579
			} else {
580
				assert.Nil(t, err)
581
				assert.IsType(t, &Order{}, m)
582
				assert.IsType(t, &http.Response{}, res.Response)
583
			}
584
		})
585
	}
586
}
587
588
func TestOrdersService_UpdateOrderLine(t *testing.T) {
589
	setEnv()
590
	defer unsetEnv()
591
592
	type args struct {
593
		ctx       context.Context
594
		order     string
595
		orderLine string
596
		line      UpdateOrderLine
597
	}
598
	cases := []struct {
599
		name    string
600
		args    args
601
		wantErr bool
602
		err     error
603
		pre     func()
604
		handler http.HandlerFunc
605
	}{
606
		{
607
			"update orders works as expected.",
608
			args{
609
				context.Background(),
610
				"ord_kEn1PlbGa",
611
				"odl_dgtxyl",
612
				UpdateOrderLine{
613
					Name: "new order line",
614
				},
615
			},
616
			false,
617
			nil,
618
			noPre,
619
			func(w http.ResponseWriter, r *http.Request) {
620
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
621
				testMethod(t, r, "PATCH")
622
623
				if _, ok := r.Header[AuthHeader]; !ok {
624
					w.WriteHeader(http.StatusUnauthorized)
625
				}
626
				_, _ = w.Write([]byte(testdata.UpdateOrderLineResponse))
627
			},
628
		},
629
		{
630
			"update order lines works as expected.",
631
			args{
632
				context.Background(),
633
				"ord_kEn1PlbGa",
634
				"odl_dgtxyl",
635
				UpdateOrderLine{
636
					Name: "new order line",
637
				},
638
			},
639
			false,
640
			nil,
641
			func() {
642
				tClient.WithAuthenticationValue("access_token_test")
643
			},
644
			func(w http.ResponseWriter, r *http.Request) {
645
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
646
				testMethod(t, r, "PATCH")
647
648
				if _, ok := r.Header[AuthHeader]; !ok {
649
					w.WriteHeader(http.StatusUnauthorized)
650
				}
651
				_, _ = w.Write([]byte(testdata.UpdateOrderLineResponse))
652
			},
653
		},
654
		{
655
			"update order lines, an error is returned from the server",
656
			args{
657
				context.Background(),
658
				"ord_kEn1PlbGa",
659
				"odl_dgtxyl",
660
				UpdateOrderLine{},
661
			},
662
			true,
663
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
664
			noPre,
665
			errorHandler,
666
		},
667
		{
668
			"update order lines, an error occurs when parsing json",
669
			args{
670
				context.Background(),
671
				"ord_kEn1PlbGa",
672
				"odl_dgtxyl",
673
				UpdateOrderLine{},
674
			},
675
			true,
676
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
677
			noPre,
678
			encodingHandler,
679
		},
680
		{
681
			"update order lines, invalid url when building request",
682
			args{
683
				context.Background(),
684
				"ord_kEn1PlbGa",
685
				"odl_dgtxyl",
686
				UpdateOrderLine{},
687
			},
688
			true,
689
			errBadBaseURL,
690
			crashSrv,
691
			errorHandler,
692
		},
693
	}
694
695
	for _, c := range cases {
696
		setup()
697
		defer teardown()
698
699
		t.Run(c.name, func(t *testing.T) {
700
			c.pre()
701
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s/lines/%s", c.args.order, c.args.orderLine), c.handler)
702
703
			res, m, err := tClient.Orders.UpdateOrderLine(c.args.ctx, c.args.order, c.args.orderLine, c.args.line)
704
			if c.wantErr {
705
				assert.NotNil(t, err)
706
				assert.EqualError(t, err, c.err.Error())
707
			} else {
708
				assert.Nil(t, err)
709
				assert.IsType(t, &Order{}, m)
710
				assert.IsType(t, &http.Response{}, res.Response)
711
			}
712
		})
713
	}
714
}
715
716
func TestOrdersService_CancelOrderLine(t *testing.T) {
717
	setEnv()
718
	defer unsetEnv()
719
720
	type args struct {
721
		ctx   context.Context
722
		order string
723
		line  OrderLine
724
	}
725
	cases := []struct {
726
		name    string
727
		args    args
728
		wantErr bool
729
		err     error
730
		pre     func()
731
		handler http.HandlerFunc
732
	}{
733
		{
734
			"update orders works as expected.",
735
			args{
736
				context.Background(),
737
				"ord_kEn1PlbGa",
738
				OrderLine{
739
					ID:     "odl_dgtxyl",
740
					Status: OrderLinePaid,
741
				},
742
			},
743
			false,
744
			nil,
745
			noPre,
746
			func(w http.ResponseWriter, r *http.Request) {
747
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
748
				testMethod(t, r, "DELETE")
749
750
				if _, ok := r.Header[AuthHeader]; !ok {
751
					w.WriteHeader(http.StatusUnauthorized)
752
				}
753
				_, _ = w.Write([]byte(testdata.UpdateOrderLineResponse))
754
			},
755
		},
756
		{
757
			"update order lines works as expected.",
758
			args{
759
				context.Background(),
760
				"ord_kEn1PlbGa",
761
				OrderLine{
762
					ID:     "odl_dgtxyl",
763
					Status: OrderLinePaid,
764
				},
765
			},
766
			false,
767
			nil,
768
			func() {
769
				tClient.WithAuthenticationValue("access_token_test")
770
			},
771
			func(w http.ResponseWriter, r *http.Request) {
772
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
773
				testMethod(t, r, "DELETE")
774
775
				if _, ok := r.Header[AuthHeader]; !ok {
776
					w.WriteHeader(http.StatusUnauthorized)
777
				}
778
				_, _ = w.Write([]byte(testdata.UpdateOrderLineResponse))
779
			},
780
		},
781
		{
782
			"update order lines, an error is returned from the server",
783
			args{
784
				context.Background(),
785
				"ord_kEn1PlbGa",
786
				OrderLine{
787
					ID:     "odl_dgtxyl",
788
					Status: OrderLinePaid,
789
				},
790
			},
791
			true,
792
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
793
			noPre,
794
			errorHandler,
795
		},
796
		{
797
			"update order lines, invalid url when building request",
798
			args{
799
				context.Background(),
800
				"ord_kEn1PlbGa",
801
				OrderLine{
802
					ID:     "odl_dgtxyl",
803
					Status: OrderLinePaid,
804
				},
805
			},
806
			true,
807
			errBadBaseURL,
808
			crashSrv,
809
			errorHandler,
810
		},
811
	}
812
813
	for _, c := range cases {
814
		setup()
815
		defer teardown()
816
817
		t.Run(c.name, func(t *testing.T) {
818
			c.pre()
819
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s/lines", c.args.order), c.handler)
820
821
			l := []OrderLine{
822
				c.args.line,
823
			}
824
825
			res, err := tClient.Orders.CancelOrderLines(c.args.ctx, c.args.order, l)
826
			if c.wantErr {
827
				assert.NotNil(t, err)
828
				assert.EqualError(t, err, c.err.Error())
829
			} else {
830
				assert.Nil(t, err)
831
				assert.IsType(t, &http.Response{}, res.Response)
832
			}
833
		})
834
	}
835
}
836
837
func TestOrdersService_CreateOrderPayment(t *testing.T) {
838
	setEnv()
839
	defer unsetEnv()
840
841
	type args struct {
842
		ctx     context.Context
843
		order   string
844
		payment *OrderPayment
845
	}
846
	cases := []struct {
847
		name    string
848
		args    args
849
		wantErr bool
850
		err     error
851
		pre     func()
852
		handler http.HandlerFunc
853
	}{
854
		{
855
			"create order payments works as expected.",
856
			args{
857
				context.Background(),
858
				"ord_8wmqcHMN4U",
859
				&OrderPayment{
860
					CustomerReference: "customer_123",
861
					Method:            []PaymentMethod{BankTransfer},
862
				},
863
			},
864
			false,
865
			nil,
866
			noPre,
867
			func(w http.ResponseWriter, r *http.Request) {
868
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
869
				testMethod(t, r, "POST")
870
871
				if _, ok := r.Header[AuthHeader]; !ok {
872
					w.WriteHeader(http.StatusUnauthorized)
873
				}
874
				_, _ = w.Write([]byte(testdata.CreateOrderPaymentResponse))
875
			},
876
		},
877
		{
878
			"create order payments works as expected.",
879
			args{
880
				context.Background(),
881
				"ord_8wmqcHMN4U",
882
				&OrderPayment{
883
					TerminalID: "term_12312312",
884
				},
885
			},
886
			false,
887
			nil,
888
			func() {
889
				tClient.WithAuthenticationValue("access_token_test")
890
			},
891
			func(w http.ResponseWriter, r *http.Request) {
892
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
893
				testMethod(t, r, "POST")
894
895
				if _, ok := r.Header[AuthHeader]; !ok {
896
					w.WriteHeader(http.StatusUnauthorized)
897
				}
898
				_, _ = w.Write([]byte(testdata.CreateOrderPaymentResponse))
899
			},
900
		},
901
		{
902
			"create order payments, an error is returned from the server",
903
			args{
904
				context.Background(),
905
				"ord_8wmqcHMN4U",
906
				nil,
907
			},
908
			true,
909
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
910
			noPre,
911
			errorHandler,
912
		},
913
		{
914
			"create order payments, an error occurs when parsing json",
915
			args{
916
				context.Background(),
917
				"ord_8wmqcHMN4U",
918
				nil,
919
			},
920
			true,
921
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
922
			noPre,
923
			encodingHandler,
924
		},
925
		{
926
			"create order payments, invalid url when building request",
927
			args{
928
				context.Background(),
929
				"ord_8wmqcHMN4U",
930
				nil,
931
			},
932
			true,
933
			errBadBaseURL,
934
			crashSrv,
935
			errorHandler,
936
		},
937
	}
938
939
	for _, c := range cases {
940
		setup()
941
		defer teardown()
942
943
		t.Run(c.name, func(t *testing.T) {
944
			c.pre()
945
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s/payments", c.args.order), c.handler)
946
947
			res, m, err := tClient.Orders.CreateOrderPayment(c.args.ctx, c.args.order, c.args.payment)
948
			if c.wantErr {
949
				assert.NotNil(t, err)
950
				assert.EqualError(t, err, c.err.Error())
951
			} else {
952
				assert.Nil(t, err)
953
				assert.IsType(t, &Payment{}, m)
954
				assert.IsType(t, &http.Response{}, res.Response)
955
			}
956
		})
957
	}
958
}
959
960
func TestOrdersService_CreateOrderRefund(t *testing.T) {
961
	setEnv()
962
	defer unsetEnv()
963
964
	type args struct {
965
		ctx   context.Context
966
		order *Order
967
	}
968
	cases := []struct {
969
		name    string
970
		args    args
971
		wantErr bool
972
		err     error
973
		pre     func()
974
		handler http.HandlerFunc
975
	}{
976
		{
977
			"create order refund works as expected.",
978
			args{
979
				context.Background(),
980
				&Order{ID: "ord_8wmqcHMN4U"},
981
			},
982
			false,
983
			nil,
984
			noPre,
985
			func(w http.ResponseWriter, r *http.Request) {
986
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
987
				testMethod(t, r, "POST")
988
989
				if _, ok := r.Header[AuthHeader]; !ok {
990
					w.WriteHeader(http.StatusUnauthorized)
991
				}
992
				_, _ = w.Write([]byte(testdata.CreateOrderRefundResponse))
993
			},
994
		},
995
		{
996
			"create order refund works as expected.",
997
			args{
998
				context.Background(),
999
				&Order{ID: "ord_8wmqcHMN4U"},
1000
			},
1001
			false,
1002
			nil,
1003
			func() {
1004
				tClient.WithAuthenticationValue("access_token_test")
1005
			},
1006
			func(w http.ResponseWriter, r *http.Request) {
1007
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
1008
				testMethod(t, r, "POST")
1009
1010
				if _, ok := r.Header[AuthHeader]; !ok {
1011
					w.WriteHeader(http.StatusUnauthorized)
1012
				}
1013
				_, _ = w.Write([]byte(testdata.CreateOrderRefundResponse))
1014
			},
1015
		},
1016
		{
1017
			"create order refund, an error is returned from the server",
1018
			args{
1019
				context.Background(),
1020
				&Order{ID: "ord_8wmqcHMN4U"},
1021
			},
1022
			true,
1023
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
1024
			noPre,
1025
			errorHandler,
1026
		},
1027
		{
1028
			"create order refund, an error occurs when parsing json",
1029
			args{
1030
				context.Background(),
1031
				&Order{ID: "ord_8wmqcHMN4U"},
1032
			},
1033
			true,
1034
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
1035
			noPre,
1036
			encodingHandler,
1037
		},
1038
		{
1039
			"create order refund, invalid url when building request",
1040
			args{
1041
				context.Background(),
1042
				&Order{ID: "ord_8wmqcHMN4U"},
1043
			},
1044
			true,
1045
			errBadBaseURL,
1046
			crashSrv,
1047
			errorHandler,
1048
		},
1049
	}
1050
1051
	for _, c := range cases {
1052
		setup()
1053
		defer teardown()
1054
1055
		t.Run(c.name, func(t *testing.T) {
1056
			c.pre()
1057
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s/refunds", c.args.order.ID), c.handler)
1058
1059
			res, m, err := tClient.Orders.CreateOrderRefund(c.args.ctx, c.args.order.ID, c.args.order)
1060
			if c.wantErr {
1061
				assert.NotNil(t, err)
1062
				assert.EqualError(t, err, c.err.Error())
1063
			} else {
1064
				assert.Nil(t, err)
1065
				assert.IsType(t, &Refund{}, m)
1066
				assert.IsType(t, &http.Response{}, res.Response)
1067
			}
1068
		})
1069
	}
1070
}
1071
1072
func TestOrdersService_ListOrderRefund(t *testing.T) {
1073
	setEnv()
1074
	defer unsetEnv()
1075
1076
	type args struct {
1077
		ctx     context.Context
1078
		order   *Order
1079
		options *OrderListRefundOptions
1080
	}
1081
	cases := []struct {
1082
		name    string
1083
		args    args
1084
		wantErr bool
1085
		err     error
1086
		pre     func()
1087
		handler http.HandlerFunc
1088
	}{
1089
		{
1090
			"list order refunds works as expected.",
1091
			args{
1092
				context.Background(),
1093
				&Order{ID: "ord_8wmqcHMN4U"},
1094
				&OrderListRefundOptions{Limit: 100},
1095
			},
1096
			false,
1097
			nil,
1098
			noPre,
1099
			func(w http.ResponseWriter, r *http.Request) {
1100
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
1101
				testMethod(t, r, "GET")
1102
				testQuery(t, r, "limit=100")
1103
1104
				if _, ok := r.Header[AuthHeader]; !ok {
1105
					w.WriteHeader(http.StatusUnauthorized)
1106
				}
1107
				_, _ = w.Write([]byte(testdata.CreateOrderRefundResponse))
1108
			},
1109
		},
1110
		{
1111
			"list order refunds works as expected.",
1112
			args{
1113
				context.Background(),
1114
				&Order{ID: "ord_8wmqcHMN4U"},
1115
				nil,
1116
			},
1117
			false,
1118
			nil,
1119
			func() {
1120
				tClient.WithAuthenticationValue("access_token_test")
1121
			},
1122
			func(w http.ResponseWriter, r *http.Request) {
1123
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
1124
				testMethod(t, r, "GET")
1125
1126
				if _, ok := r.Header[AuthHeader]; !ok {
1127
					w.WriteHeader(http.StatusUnauthorized)
1128
				}
1129
				_, _ = w.Write([]byte(testdata.CreateOrderRefundResponse))
1130
			},
1131
		},
1132
		{
1133
			"list order refunds, an error is returned from the server",
1134
			args{
1135
				context.Background(),
1136
				&Order{ID: "ord_8wmqcHMN4U"},
1137
				nil,
1138
			},
1139
			true,
1140
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
1141
			noPre,
1142
			errorHandler,
1143
		},
1144
		{
1145
			"list order refunds, an error occurs when parsing json",
1146
			args{
1147
				context.Background(),
1148
				&Order{ID: "ord_8wmqcHMN4U"},
1149
				nil,
1150
			},
1151
			true,
1152
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
1153
			noPre,
1154
			encodingHandler,
1155
		},
1156
		{
1157
			"list order refunds, invalid url when building request",
1158
			args{
1159
				context.Background(),
1160
				&Order{ID: "ord_8wmqcHMN4U"},
1161
				nil,
1162
			},
1163
			true,
1164
			errBadBaseURL,
1165
			crashSrv,
1166
			errorHandler,
1167
		},
1168
	}
1169
1170
	for _, c := range cases {
1171
		setup()
1172
		defer teardown()
1173
1174
		t.Run(c.name, func(t *testing.T) {
1175
			c.pre()
1176
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s/refunds", c.args.order.ID), c.handler)
1177
1178
			res, m, err := tClient.Orders.ListOrderRefunds(c.args.ctx, c.args.order.ID, c.args.options)
1179
			if c.wantErr {
1180
				assert.NotNil(t, err)
1181
				assert.EqualError(t, err, c.err.Error())
1182
			} else {
1183
				assert.Nil(t, err)
1184
				assert.IsType(t, &OrderListRefund{}, m)
1185
				assert.IsType(t, &http.Response{}, res.Response)
1186
			}
1187
		})
1188
	}
1189
}
1190
1191
func TestOrdersService_ManageOrderLines(t *testing.T) {
1192
	setEnv()
1193
	defer unsetEnv()
1194
1195
	type args struct {
1196
		ctx        context.Context
1197
		order      string
1198
		operations *OrderLineOperations
1199
	}
1200
	cases := []struct {
1201
		name    string
1202
		args    args
1203
		wantErr bool
1204
		err     error
1205
		pre     func()
1206
		handler http.HandlerFunc
1207
	}{
1208
		{
1209
			"manage order line works as expected.",
1210
			args{
1211
				context.Background(),
1212
				"ord_pbjz8x",
1213
				&OrderLineOperations{
1214
					Operations: []*OrderLineChangeInstruction{
1215
						{
1216
							Operation: AddOrderLineOperation,
1217
							Data: &OrderLineOperationData{
1218
								ID:   "odl_1.1l9vx0",
1219
								Name: "new order line",
1220
							},
1221
						},
1222
					},
1223
				},
1224
			},
1225
			false,
1226
			nil,
1227
			noPre,
1228
			func(w http.ResponseWriter, r *http.Request) {
1229
				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
1230
				testMethod(t, r, "PATCH")
1231
1232
				if _, ok := r.Header[AuthHeader]; !ok {
1233
					w.WriteHeader(http.StatusUnauthorized)
1234
				}
1235
				_, _ = w.Write([]byte(testdata.ManageOrderLinesResponse))
1236
			},
1237
		},
1238
		{
1239
			"update order lines works as expected.",
1240
			args{
1241
				context.Background(),
1242
				"ord_kEn1PlbGa",
1243
				&OrderLineOperations{
1244
					Operations: []*OrderLineChangeInstruction{
1245
						{
1246
							Operation: AddOrderLineOperation,
1247
							Data: &OrderLineOperationData{
1248
								ID:   "odl_1.1l9vx0",
1249
								Name: "new order line",
1250
							},
1251
						},
1252
					},
1253
				},
1254
			},
1255
			false,
1256
			nil,
1257
			func() {
1258
				tClient.WithAuthenticationValue("access_token_test")
1259
			},
1260
			func(w http.ResponseWriter, r *http.Request) {
1261
				testHeader(t, r, AuthHeader, "Bearer access_token_test")
1262
				testMethod(t, r, "PATCH")
1263
1264
				if _, ok := r.Header[AuthHeader]; !ok {
1265
					w.WriteHeader(http.StatusUnauthorized)
1266
				}
1267
				_, _ = w.Write([]byte(testdata.UpdateOrderLineResponse))
1268
			},
1269
		},
1270
		{
1271
			"update order lines, an error is returned from the server",
1272
			args{
1273
				context.Background(),
1274
				"ord_kEn1PlbGa",
1275
				&OrderLineOperations{
1276
					Operations: []*OrderLineChangeInstruction{
1277
						{
1278
							Operation: AddOrderLineOperation,
1279
							Data: &OrderLineOperationData{
1280
								ID:   "odl_1.1l9vx0",
1281
								Name: "new order line",
1282
							},
1283
						},
1284
					},
1285
				},
1286
			},
1287
			true,
1288
			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
1289
			noPre,
1290
			errorHandler,
1291
		},
1292
		{
1293
			"update order lines, an error occurs when parsing json",
1294
			args{
1295
				context.Background(),
1296
				"ord_kEn1PlbGa",
1297
				&OrderLineOperations{
1298
					Operations: []*OrderLineChangeInstruction{
1299
						{
1300
							Operation: AddOrderLineOperation,
1301
							Data: &OrderLineOperationData{
1302
								ID:   "odl_1.1l9vx0",
1303
								Name: "new order line",
1304
							},
1305
						},
1306
					},
1307
				},
1308
			},
1309
			true,
1310
			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
1311
			noPre,
1312
			encodingHandler,
1313
		},
1314
		{
1315
			"update order lines, invalid url when building request",
1316
			args{
1317
				context.Background(),
1318
				"ord_kEn1PlbGa",
1319
				&OrderLineOperations{
1320
					Operations: []*OrderLineChangeInstruction{
1321
						{
1322
							Operation: AddOrderLineOperation,
1323
							Data: &OrderLineOperationData{
1324
								ID:   "odl_1.1l9vx0",
1325
								Name: "new order line",
1326
							},
1327
						},
1328
					},
1329
				},
1330
			},
1331
			true,
1332
			errBadBaseURL,
1333
			crashSrv,
1334
			errorHandler,
1335
		},
1336
	}
1337
1338
	for _, c := range cases {
1339
		setup()
1340
		defer teardown()
1341
1342
		t.Run(c.name, func(t *testing.T) {
1343
			c.pre()
1344
			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s/lines", c.args.order), c.handler)
1345
1346
			res, m, err := tClient.Orders.ManageOrderLines(c.args.ctx, c.args.order, c.args.operations)
1347
			if c.wantErr {
1348
				assert.NotNil(t, err)
1349
				assert.EqualError(t, err, c.err.Error())
1350
			} else {
1351
				assert.Nil(t, err)
1352
				assert.IsType(t, &Order{}, m)
1353
				assert.IsType(t, &http.Response{}, res.Response)
1354
			}
1355
		})
1356
	}
1357
}
1358