Skip to content
This repository was archived by the owner on Mar 24, 2023. It is now read-only.

Commit 4f2461e

Browse files
authored
Merge pull request #1017 from laverya/test-register-install-query
add a pact test for the graphql register install query
2 parents 6583308 + e8056c9 commit 4f2461e

File tree

2 files changed

+76
-7
lines changed

2 files changed

+76
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package replicatedapp
2+
3+
import (
4+
"encoding/base64"
5+
"fmt"
6+
"net/http"
7+
"testing"
8+
9+
"github.com/pact-foundation/pact-go/dsl"
10+
"github.com/spf13/viper"
11+
"github.com/stretchr/testify/require"
12+
13+
replapp "github.com/replicatedhq/ship/pkg/specs/replicatedapp"
14+
)
15+
16+
func Test_RegisterInstall(t *testing.T) {
17+
customerID := "ship-register-customer-0"
18+
installationID := "ship-register-installation-0"
19+
channelID := "ship-register-channel-0"
20+
releaseID := "ship-register-release-0"
21+
var test = func() (err error) {
22+
req := require.New(t)
23+
24+
v := viper.New()
25+
v.Set("customer-endpoint", fmt.Sprintf("http://localhost:%d/graphql", pact.Server.Port))
26+
27+
gqlClient, err := replapp.NewGraphqlClient(v, http.DefaultClient)
28+
req.NoError(err)
29+
30+
err = gqlClient.RegisterInstall(customerID, installationID, channelID, releaseID)
31+
req.NoError(err)
32+
33+
return nil
34+
}
35+
36+
pact.AddInteraction().
37+
Given("A request to register an install").
38+
UponReceiving("A request to register an install").
39+
WithRequest(dsl.Request{
40+
Method: "POST",
41+
Path: dsl.String("/graphql"),
42+
Headers: dsl.MapMatcher{
43+
"Authorization": dsl.String(fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", customerID, installationID))))),
44+
"Content-Type": dsl.String("application/json"),
45+
},
46+
Body: map[string]interface{}{
47+
"operationName": "",
48+
"query": replapp.RegisterInstallQuery,
49+
"variables": map[string]interface{}{
50+
"channelId": channelID,
51+
"releaseId": releaseID,
52+
},
53+
},
54+
}).
55+
WillRespondWith(dsl.Response{
56+
Status: 200,
57+
Body: map[string]interface{}{
58+
"data": map[string]interface{}{
59+
"shipRegisterInstall": dsl.Like(true),
60+
},
61+
},
62+
})
63+
64+
if err := pact.Verify(test); err != nil {
65+
t.Fatalf("Error on Verify: %v", err)
66+
}
67+
}

pkg/specs/replicatedapp/graphql.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ query($licenseId: String) {
9595
}
9696
}`
9797

98+
const RegisterInstallQuery = `
99+
mutation($channelId: String!, $releaseId: String!) {
100+
shipRegisterInstall(
101+
channelId: $channelId
102+
releaseId: $releaseId
103+
)
104+
}`
105+
98106
// GraphQLClient is a client for the graphql Payload API
99107
type GraphQLClient struct {
100108
GQLServer *url.URL
@@ -312,13 +320,7 @@ func (c *GraphQLClient) GetLicense(selector *Selector) (*license, error) {
312320

313321
func (c *GraphQLClient) RegisterInstall(customerID, installationID, channelID, releaseID string) error {
314322
requestObj := GraphQLRequest{
315-
Query: `
316-
mutation($channelId: String!, $releaseId: String!) {
317-
shipRegisterInstall(
318-
channelId: $channelId
319-
releaseId: $releaseId
320-
)
321-
}`,
323+
Query: RegisterInstallQuery,
322324
Variables: map[string]string{
323325
"channelId": channelID,
324326
"releaseId": releaseID,

0 commit comments

Comments
 (0)