@@ -7,15 +7,154 @@ package apiv1
77import (
88 "context"
99 "encoding/json"
10+ "fmt"
1011 "testing"
1112
13+ "github.com/bufbuild/connect-go"
1214 db "github.com/gitpod-io/gitpod/components/gitpod-db/go"
1315 "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"
1420 "github.com/google/uuid"
1521 "github.com/stretchr/testify/require"
1622 stripe_api "github.com/stripe/stripe-go/v72"
23+ "gopkg.in/dnaeon/go-vcr.v3/cassette"
24+ "gopkg.in/dnaeon/go-vcr.v3/recorder"
1725)
1826
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+
19158func TestBalancesForStripeCostCenters (t * testing.T ) {
20159 attributionIDForStripe := db .NewUserAttributionID (uuid .New ().String ())
21160 attributionIDForOther := db .NewTeamAttributionID (uuid .New ().String ())
0 commit comments