# load_all(); testthat::test_file(file.path("tests", "testthat", "test-z-execute-mutation-simple.R")); # nolint
test_that("small counter", {
count_total <- 0
"
type Counter {
value: Int
}
type AddCounter {
value: Int
}
schema {
query: Counter
mutation: AddCounter
}
" %>%
gqlr_schema(
Counter = list(
resolve = function(...) {
list(value = count_total)
}
),
AddCounter = list(
resolve = function(...) {
list(
value = function(z1, z2, schema) {
count_total <<- count_total + 1
count_total
}
)
}
)
) ->
mutation_schema_doc
do_query <- function(i) {
ans <- execute_request(
"{
value
}",
mutation_schema_doc
)
expect_true(ans$error_list$has_no_errors())
expect_equal(ans$data$value, i)
expect_equal(format(ans, pretty = FALSE), str_c("{\"data\":{\"value\":", i, "}}"))
}
do_mutation <- function(i) {
ans <- execute_request(
"mutation add_value{
value
}",
mutation_schema_doc
)
expect_true(ans$error_list$has_no_errors())
expect_equal(ans$data$value, i)
expect_output(print(ans, pretty = FALSE), as.character(i))
}
for (i in 0:10) {
do_query(i)
do_mutation(i + 1)
}
})
# Altered from: https://github.com/schloerke/gqlr/issues/8
test_that("mutation works with names that are not query names", {
votes <- 3
"
type Query {
votes: Int!
}
type Mutation {
castVote: Boolean!
}
schema {
query: Query
mutation: Mutation
}
" %>%
gqlr_schema(
Query = function(...) {
list(votes = function(...) {
votes
})
},
Mutation = function(...) {
list(castVote = function(...) {
votes <<- 42
# Return TRUE to indicate that the mutation was successful
TRUE
})
}
) ->
votes_schema
expect_votes_request <- function(...) {
expect_request(..., schema = votes_schema)
}
"{votes}" %>%
expect_votes_request('{ "data": { "votes": 3 } }')
"mutation Cast { castVote }" %>%
expect_votes_request('{ "data": { "castVote": true } }')
"{votes}" %>%
expect_votes_request('{ "data": { "votes": 42 } }')
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.