/
provider_service.go
75 lines (61 loc) · 2.02 KB
/
provider_service.go
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
package pact
import (
"github.com/bennycao/pact-go/consumer"
"github.com/bennycao/pact-go/provider"
)
type ProviderService interface {
Given(state string) ProviderService
UponReceiving(description string) ProviderService
With(request *provider.ProviderRequest) ProviderService
WillRespondWith(response *provider.ProviderResponse) ProviderService
ClearInteractions() ProviderService
VerifyInteractions() error
}
//this can be private, needs to implement the above interface
//look into httptest package, we can create test server from there for a mock server
type MockProviderService struct {
providerRequest *provider.ProviderRequest
providerResponse *provider.ProviderResponse
state string
description string
service *consumer.HttpMockService
}
func NewMockProviderService(config *PactConfig) *MockProviderService {
return &MockProviderService{service: consumer.NewHttpMockService()}
}
func (p *MockProviderService) Given(state string) ProviderService {
p.state = state
return p
}
func (p *MockProviderService) UponReceiving(description string) ProviderService {
p.description = description
return p
}
func (p *MockProviderService) With(providerRequest *provider.ProviderRequest) ProviderService {
p.providerRequest = providerRequest
return p
}
func (p *MockProviderService) WillRespondWith(providerResponse *provider.ProviderResponse) ProviderService {
p.providerResponse = providerResponse
p.registerInteraction()
p.resetTransientState()
return p
}
func (p *MockProviderService) ClearInteractions() ProviderService {
p.service.ClearInteractions()
p.resetTransientState()
return p
}
func (p *MockProviderService) VerifyInteractions() error {
return nil
}
func (p *MockProviderService) registerInteraction() {
interaction := consumer.NewInteraction(p.description, p.state, p.providerRequest, p.providerResponse)
p.service.RegisterInteraction(interaction)
}
func (p *MockProviderService) resetTransientState() {
p.state = ""
p.description = ""
p.providerRequest = nil
p.providerResponse = nil
}