-
Notifications
You must be signed in to change notification settings - Fork 64
/
Copy path01_dataloader_tests.bal
125 lines (117 loc) · 5.57 KB
/
01_dataloader_tests.bal
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
124
125
// Copyright (c) 2023 WSO2 LLC. (http://www.wso2.com) All Rights Reserved.
//
// WSO2 LLC. licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except
// in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import ballerina/graphql;
import ballerina/graphql_test_common as common;
import ballerina/test;
import ballerina/websocket;
@test:Config {
groups: ["dataloader", "query"],
after: resetDispatchCounters
}
isolated function testDataLoaderWithQuery() returns error? {
graphql:Client graphqlClient = check new ("localhost:9090/dataloader");
string document = check common:getGraphqlDocumentFromFile("dataloader_with_query");
json response = check graphqlClient->execute(document);
json expectedPayload = check common:getJsonContentFromFile("dataloader_with_query");
common:assertJsonValuesWithOrder(response, expectedPayload);
assertDispatchCountForAuthorLoader(1);
assertDispatchCountForBookLoader(1);
}
@test:Config {
groups: ["dataloader", "query"],
after: resetDispatchCounters
}
isolated function testDataLoaderWithDifferentAliasForSameField() returns error? {
graphql:Client graphqlClient = check new ("localhost:9090/dataloader");
string document = check common:getGraphqlDocumentFromFile("dataloader_with_different_alias_for_same_field");
json response = check graphqlClient->execute(document);
json expectedPayload = check common:getJsonContentFromFile("dataloader_with_different_alias_for_same_field");
common:assertJsonValuesWithOrder(response, expectedPayload);
assertDispatchCountForAuthorLoader(1);
assertDispatchCountForBookLoader(1);
}
@test:Config {
enable: false,
groups: ["subscriptions", "dataloader"],
after: resetDispatchCounters
}
isolated function testDataLoaderWithSubscription() returns error? {
string document = check common:getGraphqlDocumentFromFile("dataloader_with_subscription");
websocket:ClientConfiguration config = {subProtocols: [common:GRAPHQL_TRANSPORT_WS]};
websocket:Client wsClient = check new ("ws://localhost:9090/dataloader", config);
check common:initiateGraphqlWsConnection(wsClient);
check common:sendSubscriptionMessage(wsClient, document, "1");
json[] authorSequence = check common:getJsonContentFromFile("data_loader_with_subscription").ensureType();
foreach int i in 0 ..< 5 {
json expectedMsgPayload = {data: {authors: authorSequence[i]}};
check common:validateNextMessage(wsClient, expectedMsgPayload, id = "1");
}
assertDispatchCountForBookLoader(5);
}
@test:Config {
groups: ["dataloader", "mutation"],
dependsOn: [
testDataLoaderWithQuery
// ,testDataLoaderWithSubscription
],
after: resetDispatchCounters
}
isolated function testDataLoaderWithMutation() returns error? {
graphql:Client graphqlClient = check new ("localhost:9090/dataloader");
string document = check common:getGraphqlDocumentFromFile("dataloader_with_mutation");
json response = check graphqlClient->execute(document);
json expectedPayload = check common:getJsonContentFromFile("dataloader_with_mutation");
common:assertJsonValuesWithOrder(response, expectedPayload);
assertDispatchCountForUpdateAuthorLoader(1);
assertDispatchCountForBookLoader(1);
}
@test:Config {
groups: ["dataloader", "interceptor"],
after: resetDispatchCounters
}
isolated function testDataLoaderWithInterceptors() returns error? {
graphql:Client graphqlClient = check new ("localhost:9090/dataloader_with_interceptor");
string document = check common:getGraphqlDocumentFromFile("dataloader_with_interceptor");
json response = check graphqlClient->execute(document);
json expectedPayload = check common:getJsonContentFromFile("dataloader_with_interceptor");
common:assertJsonValuesWithOrder(response, expectedPayload);
assertDispatchCountForAuthorLoader(1);
assertDispatchCountForBookLoader(1);
}
@test:Config {
groups: ["dataloader", "dispatch-error"],
after: resetDispatchCounters
}
isolated function testBatchFunctionReturningErrors() returns error? {
graphql:Client graphqlClient = check new ("localhost:9090/dataloader");
string document = check common:getGraphqlDocumentFromFile("batch_function_returing_errors");
json response = check graphqlClient->execute(document);
json expectedPayload = check common:getJsonContentFromFile("batch_function_returing_errors");
common:assertJsonValuesWithOrder(response, expectedPayload);
assertDispatchCountForAuthorLoader(1);
assertDispatchCountForBookLoader(0);
}
@test:Config {
groups: ["dataloader", "dispatch-error"],
after: resetDispatchCounters
}
isolated function testBatchFunctionReturingNonMatchingNumberOfResults() returns error? {
graphql:Client graphqlClient = check new ("localhost:9090/dataloader_with_faulty_batch_function");
string document = check common:getGraphqlDocumentFromFile("batch_function_returning_non_matcing_number_of_results");
json response = check graphqlClient->execute(document);
json expectedPayload = check common:getJsonContentFromFile("batch_function_returning_non_matcing_number_of_results");
common:assertJsonValuesWithOrder(response, expectedPayload);
}