-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmock.go
More file actions
123 lines (107 loc) · 3.88 KB
/
mock.go
File metadata and controls
123 lines (107 loc) · 3.88 KB
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package orchestrator
import (
"encoding/base64"
"encoding/json"
cloudevent "github.com/cloudevents/sdk-go/v2/event"
)
const DefaultMockRequestID = "mockid" // Default Request ID used in PO request mocks.
const DefaultMockContextID = "mockid" // Default Context ID used in PO request mocks.
const DefaultMockResponseTopic = "mocktopic" // Default Topic ID used in PO request mocks.
const DefaultMockPullRequestState = PullRequestStateOpen // Default Pull Request state used in PO request mocks.
const DefaultMockRepositoryName = "mockrepo" // Default Repository name used in PO request mocks.
const DefaultMockRepositoryFullName = "entur/mockrepo" // Default Repository full name used in PO request mocks.
const DefaultMockDefaultBranch = "main" // Default Repository branch used in PO request mocks.
const DefaultMockRepositoryVisibility = RepositoryVisbilityPublic // Default Repository visibility used in PO request mocks.
const DefaultMockSenderType = SenderTypeUser // Default Repository branch used in PO request mocks.
const DefaultMockUsername = "mockuser" // Default Github username used in PO request mocks.
const DefaultMockUserEmail = "mockuser@entur.io" // Default verified user email used in PO request mocks.
const DefaultMockUserPermission = RepositoryPermissionAdmin // Default Repository permissions used in PO request mocks.
const DefaultMockAction = ActionPlan // Default User action used in PO request mocks.
type MockRequestOption func(*Request)
func WithVisibility(visbility RepositoryVisibility) MockRequestOption {
return func(req *Request) {
req.Origin.Repository.Visibility = visbility
}
}
func WithAction(action Action) MockRequestOption {
return func(req *Request) {
req.Action = action
}
}
func WithSender(sender Sender) MockRequestOption {
return func(req *Request) {
req.Sender = sender
}
}
func WithIAMEndpoint(url string) MockRequestOption {
return func(req *Request) {
req.Resources.IAMLookup.URL = url
}
}
func NewMockRequest(manifest any, opts ...MockRequestOption) (*Request, error) {
newManifest, err := json.Marshal(manifest)
if err != nil {
return nil, err
}
req := &Request{
APIVersion: "orchestrator.entur.io/request/v1",
Metadata: RequestMetadata{
RequestID: DefaultMockRequestID,
ContextID: DefaultMockContextID,
},
Origin: Origin{
PullRequest: PullRequest{
State: DefaultMockPullRequestState,
},
Repository: Repository{
Name: DefaultMockRepositoryName,
FullName: DefaultMockRepositoryFullName,
DefaultBranch: DefaultMockDefaultBranch,
Visibility: DefaultMockRepositoryVisibility,
},
},
Sender: Sender{
Username: DefaultMockUsername,
Email: DefaultMockUserEmail,
Type: DefaultMockSenderType,
Permission: DefaultMockUserPermission,
},
Action: DefaultMockAction,
ResponseTopic: DefaultMockResponseTopic,
Manifest: Manifests{
Old: nil,
New: newManifest,
},
}
for _, opt := range opts {
opt(req)
}
return req, err
}
func NewMockCloudEvent(manifest any, opts ...MockRequestOption) (*cloudevent.Event, error) {
req, err := NewMockRequest(manifest, opts...)
if err != nil {
return nil, err
}
reqdata, err := json.Marshal(req)
if err != nil {
return nil, err
}
buf := make([]byte, base64.StdEncoding.EncodedLen(len(reqdata)))
base64.StdEncoding.Encode(buf, reqdata)
data, err := json.Marshal(&CloudEventData{
Message: PubSubMessage{
Data: reqdata,
ID: "id",
PublishTime: "time",
Attributes: PubSubMessageAttributes{},
},
Subscription: "sub",
})
if err != nil {
return nil, err
}
e := cloudevent.New(cloudevent.CloudEventsVersionV03)
e.DataEncoded = data
return &e, nil
}