@@ -7,15 +7,154 @@ package apiv1
7
7
import (
8
8
"context"
9
9
"encoding/json"
10
+ "fmt"
10
11
"testing"
11
12
13
+ "github.com/bufbuild/connect-go"
12
14
db "github.com/gitpod-io/gitpod/components/gitpod-db/go"
13
15
"github.com/gitpod-io/gitpod/components/gitpod-db/go/dbtest"
16
+ experimental_v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"
17
+ "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1/v1connect"
18
+ v1 "github.com/gitpod-io/gitpod/usage-api/v1"
19
+ "github.com/gitpod-io/gitpod/usage/pkg/stripe"
14
20
"github.com/google/uuid"
15
21
"github.com/stretchr/testify/require"
16
22
stripe_api "github.com/stripe/stripe-go/v72"
23
+ "gopkg.in/dnaeon/go-vcr.v3/cassette"
24
+ "gopkg.in/dnaeon/go-vcr.v3/recorder"
17
25
)
18
26
27
+ func TestBillingService_OnChargeDispute (t * testing.T ) {
28
+ r := NewStripeRecorder (t , "stripe_on_charge_dispute" )
29
+
30
+ client := r .GetDefaultClient ()
31
+ stripeClient , err := stripe .NewWithHTTPClient (stripe.ClientConfig {
32
+ SecretKey : "testkey" ,
33
+ }, client )
34
+ require .NoError (t , err )
35
+
36
+ stubUserService := & StubUserService {}
37
+ svc := & BillingService {
38
+ stripeClient : stripeClient ,
39
+ teamsService : & StubTeamsService {},
40
+ userService : stubUserService ,
41
+ }
42
+
43
+ _ , err = svc .OnChargeDispute (context .Background (), & v1.OnChargeDisputeRequest {
44
+ DisputeId : "dp_1MrLJpAyBDPbWrhawbWHEIDL" ,
45
+ })
46
+ require .NoError (t , err )
47
+
48
+ require .Equal (t , stubUserService .blockedUsers , []string {"owner_id" })
49
+ }
50
+
51
+ func NewStripeRecorder (t * testing.T , name string ) * recorder.Recorder {
52
+ t .Helper ()
53
+
54
+ r , err := recorder .New (fmt .Sprintf ("fixtures/%s" , name ))
55
+ require .NoError (t , err )
56
+
57
+ t .Cleanup (func () {
58
+ r .Stop ()
59
+ })
60
+
61
+ // Add a hook which removes Authorization headers from all requests
62
+ hook := func (i * cassette.Interaction ) error {
63
+ delete (i .Request .Headers , "Authorization" )
64
+ return nil
65
+ }
66
+ r .AddHook (hook , recorder .AfterCaptureHook )
67
+
68
+ if r .Mode () != recorder .ModeRecordOnce {
69
+ require .Fail (t , "Recorder should be in ModeRecordOnce" )
70
+ }
71
+
72
+ return r
73
+ }
74
+
75
+ type StubTeamsService struct {
76
+ v1connect.TeamsServiceClient
77
+ }
78
+
79
+ func (s * StubTeamsService ) CreateTeam (context.Context , * connect.Request [experimental_v1.CreateTeamRequest ]) (* connect.Response [experimental_v1.CreateTeamResponse ], error ) {
80
+ return nil , nil
81
+ }
82
+
83
+ func (s * StubTeamsService ) GetTeam (ctx context.Context , req * connect.Request [experimental_v1.GetTeamRequest ]) (* connect.Response [experimental_v1.GetTeamResponse ], error ) {
84
+ // generate a stub which returns a team
85
+ team := & experimental_v1.Team {
86
+ Id : req .Msg .GetTeamId (),
87
+ Members : []* experimental_v1.TeamMember {
88
+ {
89
+ UserId : "owner_id" ,
90
+ Role : experimental_v1 .TeamRole_TEAM_ROLE_OWNER ,
91
+ },
92
+ {
93
+ UserId : "non_owner_id" ,
94
+ Role : experimental_v1 .TeamRole_TEAM_ROLE_MEMBER ,
95
+ },
96
+ },
97
+ }
98
+
99
+ return connect .NewResponse (& experimental_v1.GetTeamResponse {
100
+ Team : team ,
101
+ }), nil
102
+ }
103
+
104
+ func (s * StubTeamsService ) ListTeams (context.Context , * connect.Request [experimental_v1.ListTeamsRequest ]) (* connect.Response [experimental_v1.ListTeamsResponse ], error ) {
105
+ return nil , nil
106
+ }
107
+ func (s * StubTeamsService ) DeleteTeam (context.Context , * connect.Request [experimental_v1.DeleteTeamRequest ]) (* connect.Response [experimental_v1.DeleteTeamResponse ], error ) {
108
+ return nil , nil
109
+ }
110
+ func (s * StubTeamsService ) JoinTeam (context.Context , * connect.Request [experimental_v1.JoinTeamRequest ]) (* connect.Response [experimental_v1.JoinTeamResponse ], error ) {
111
+ return nil , nil
112
+ }
113
+ func (s * StubTeamsService ) ResetTeamInvitation (context.Context , * connect.Request [experimental_v1.ResetTeamInvitationRequest ]) (* connect.Response [experimental_v1.ResetTeamInvitationResponse ], error ) {
114
+ return nil , nil
115
+ }
116
+ func (s * StubTeamsService ) UpdateTeamMember (context.Context , * connect.Request [experimental_v1.UpdateTeamMemberRequest ]) (* connect.Response [experimental_v1.UpdateTeamMemberResponse ], error ) {
117
+ return nil , nil
118
+ }
119
+ func (s * StubTeamsService ) DeleteTeamMember (context.Context , * connect.Request [experimental_v1.DeleteTeamMemberRequest ]) (* connect.Response [experimental_v1.DeleteTeamMemberResponse ], error ) {
120
+ return nil , nil
121
+ }
122
+
123
+ type StubUserService struct {
124
+ blockedUsers []string
125
+ }
126
+
127
+ func (s * StubUserService ) GetAuthenticatedUser (context.Context , * connect.Request [experimental_v1.GetAuthenticatedUserRequest ]) (* connect.Response [experimental_v1.GetAuthenticatedUserResponse ], error ) {
128
+ return nil , nil
129
+ }
130
+
131
+ // ListSSHKeys lists the public SSH keys.
132
+ func (s * StubUserService ) ListSSHKeys (context.Context , * connect.Request [experimental_v1.ListSSHKeysRequest ]) (* connect.Response [experimental_v1.ListSSHKeysResponse ], error ) {
133
+ return nil , nil
134
+ }
135
+
136
+ // CreateSSHKey adds a public SSH key.
137
+ func (s * StubUserService ) CreateSSHKey (context.Context , * connect.Request [experimental_v1.CreateSSHKeyRequest ]) (* connect.Response [experimental_v1.CreateSSHKeyResponse ], error ) {
138
+ return nil , nil
139
+ }
140
+
141
+ // GetSSHKey retrieves an ssh key by ID.
142
+ func (s * StubUserService ) GetSSHKey (context.Context , * connect.Request [experimental_v1.GetSSHKeyRequest ]) (* connect.Response [experimental_v1.GetSSHKeyResponse ], error ) {
143
+ return nil , nil
144
+ }
145
+
146
+ // DeleteSSHKey removes a public SSH key.
147
+ func (s * StubUserService ) DeleteSSHKey (context.Context , * connect.Request [experimental_v1.DeleteSSHKeyRequest ]) (* connect.Response [experimental_v1.DeleteSSHKeyResponse ], error ) {
148
+ return nil , nil
149
+ }
150
+ func (s * StubUserService ) GetGitToken (context.Context , * connect.Request [experimental_v1.GetGitTokenRequest ]) (* connect.Response [experimental_v1.GetGitTokenResponse ], error ) {
151
+ return nil , nil
152
+ }
153
+ func (s * StubUserService ) BlockUser (ctx context.Context , req * connect.Request [experimental_v1.BlockUserRequest ]) (* connect.Response [experimental_v1.BlockUserResponse ], error ) {
154
+ s .blockedUsers = append (s .blockedUsers , req .Msg .GetUserId ())
155
+ return connect .NewResponse (& experimental_v1.BlockUserResponse {}), nil
156
+ }
157
+
19
158
func TestBalancesForStripeCostCenters (t * testing.T ) {
20
159
attributionIDForStripe := db .NewUserAttributionID (uuid .New ().String ())
21
160
attributionIDForOther := db .NewTeamAttributionID (uuid .New ().String ())
0 commit comments