[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/microsoft/cppgraphqlgen/next/test/ValidationTests.cpp [Back]  [Original]

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

#include 

#include "ValidationMock.h"

#include "graphqlservice/JSONResponse.h"

#include 
#include 

using namespace graphql;

using namespace std::literals;

class ValidationExamplesCase : public ::testing::Test
{
public:
	static void SetUpTestCase()
	{
		_service = std::make_shared(std::make_shared(),
			std::make_shared());
	}

	static void TearDownTestCase()
	{
		_service.reset();
	}

protected:
	static std::shared_ptr _service;
};

std::shared_ptr ValidationExamplesCase::_service;

TEST_F(ValidationExamplesCase, CounterExample102)
{
	// https://spec.graphql.org/October2021/#example-12752
	auto query = R"(query getDogName {
			dog {
				name
				color
			}
		}

		extend type Dog {
			color: String
		})"_graphql;

	auto errors =
		service::buildErrorValues(_service->validate(query)).release();

	ASSERT_EQ(errors.size(), std::size_t { 2 });
	EXPECT_EQ(
		R"js({"message":"Undefined field type: Dog name: color","locations":[{"line":4,"column":5}]})js",
		response::toJSON(std::move(errors[0])))
		validate(query)).release();

	ASSERT_EQ(errors.size(), std::size_t { 1 });
	EXPECT_EQ(
		R"js({"message":"Duplicate operation name: getName","locations":[{"line":7,"column":3}]})js",
		response::toJSON(std::move(errors[0])))
		validate(query)).release();

	ASSERT_EQ(errors.size(), std::size_t { 1 });
	EXPECT_EQ(
		R"js({"message":"Duplicate operation name: dogOperation","locations":[{"line":7,"column":3}]})js",
		response::toJSON(std::move(errors[0])))
		validate(query);

	ASSERT_TRUE(errors.empty());
}

TEST_F(ValidationExamplesCase, CounterExample107)
{
	// https://spec.graphql.org/October2021/#example-44b85
	auto query = R"({
			dog {
				name
			}
		}

		query getName {
			dog {
				owner {
					name
				}
			}
		})"_graphql;

	auto errors =
		service::buildErrorValues(_service->validate(query)).release();

	ASSERT_EQ(errors.size(), std::size_t { 1 });
	EXPECT_EQ(
		R"js({"message":"Anonymous operation not alone","locations":[{"line":1,"column":1}]})js",
		response::toJSON(std::move(errors[0])))
		validate(query);

	ASSERT_TRUE(errors.empty());
}

TEST_F(ValidationExamplesCase, Example109)
{
	// https://spec.graphql.org/October2021/#example-13061
	auto query = R"(subscription sub {
			...newMessageFields
		}

		fragment newMessageFields on Subscription {
			newMessage {
				body
				sender
			}
		})"_graphql;

	auto errors = _service->validate(query);

	ASSERT_TRUE(errors.empty());
}

TEST_F(ValidationExamplesCase, CounterExample110)
{
	// https://spec.graphql.org/October2021/#example-3997d
	auto query = R"(subscription sub {
			newMessage {
				body
				sender
			}
			disallowedSecondRootField
		})"_graphql;

	auto errors =
		service::buildErrorValues(_service->validate(query)).release();

	ASSERT_EQ(errors.size(), std::size_t { 1 });
	EXPECT_EQ(
		R"js({"message":"Subscription with more than one root field name: sub","locations":[{"line":1,"column":1}]})js",
		response::toJSON(std::move(errors[0])))
		validate(query)).release();

	ASSERT_EQ(errors.size(), std::size_t { 1 });
	EXPECT_EQ(
		R"js({"message":"Subscription with more than one root field name: sub","locations":[{"line":1,"column":1}]})js",
		response::toJSON(std::move(errors[0])))
		validate(query)).release();

	ASSERT_EQ(errors.size(), std::size_t { 1 });
	EXPECT_EQ(
		R"js({"message":"Subscription with Introspection root field name: sub","locations":[{"line":1,"column":1}]})js",
		response::toJSON(std::move(errors[0])))
		validate(query)).release();

	EXPECT_EQ(errors.size(), std::size_t { 4 }) 

Web Proxy Viewer  |  New URL  |  Original Page