From 7ce00efe4954d6bf31ab79e9e6d5ae086a3caf94 Mon Sep 17 00:00:00 2001 From: Conor Landry Date: Wed, 20 Oct 2021 16:58:28 -0400 Subject: [PATCH] override equals method for TypedGraphQLError --- .../types/errors/TypedGraphQLError.java | 16 ++++ .../types/errors/TypedGraphQLErrorTest.java | 81 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 graphql-error-types/src/test/java/com/netflix/graphql/types/errors/TypedGraphQLErrorTest.java diff --git a/graphql-error-types/src/main/java/com/netflix/graphql/types/errors/TypedGraphQLError.java b/graphql-error-types/src/main/java/com/netflix/graphql/types/errors/TypedGraphQLError.java index 2355a8033..7616d30bf 100644 --- a/graphql-error-types/src/main/java/com/netflix/graphql/types/errors/TypedGraphQLError.java +++ b/graphql-error-types/src/main/java/com/netflix/graphql/types/errors/TypedGraphQLError.java @@ -244,6 +244,22 @@ public String toString() { '}'; } + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null) return false; + if (obj.getClass() != this.getClass()) return false; + + TypedGraphQLError e = (TypedGraphQLError)obj; + + if (!message.equals(e.message)) return false; + if (!locations.equals(e.locations)) return false; + if (!path.equals(e.path)) return false; + if (!extensions.equals(e.extensions)) return false; + + return true; + } + public static class Builder { private String message; private List path; diff --git a/graphql-error-types/src/test/java/com/netflix/graphql/types/errors/TypedGraphQLErrorTest.java b/graphql-error-types/src/test/java/com/netflix/graphql/types/errors/TypedGraphQLErrorTest.java new file mode 100644 index 000000000..a79e4f456 --- /dev/null +++ b/graphql-error-types/src/test/java/com/netflix/graphql/types/errors/TypedGraphQLErrorTest.java @@ -0,0 +1,81 @@ +/* + * Copyright 2021 Netflix, Inc. + * + * Licensed 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. + */ + +package com.netflix.graphql.types.errors; + +import graphql.execution.ResultPath; +import graphql.language.SourceLocation; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; + +public class TypedGraphQLErrorTest { + @Test + void equalsTest() { + TypedGraphQLError baseError = TypedGraphQLError.newPermissionDeniedBuilder() + .message("org.springframework.security.access.AccessDeniedException: Access is denied") + .path(ResultPath.parse("/graphqlEndpoint")) + .build(); + + TypedGraphQLError sameError = TypedGraphQLError.newPermissionDeniedBuilder() + .message("org.springframework.security.access.AccessDeniedException: Access is denied") + .path(ResultPath.parse("/graphqlEndpoint")) + .build(); + + Assertions.assertEquals(baseError, sameError); + } + + @Test + void notEqualsTest() { + TypedGraphQLError baseError = TypedGraphQLError.newPermissionDeniedBuilder() + .message("org.springframework.security.access.AccessDeniedException: Access is denied") + .path(ResultPath.parse("/graphqlEndpoint")) + .build(); + + TypedGraphQLError differentMessageError = TypedGraphQLError.newPermissionDeniedBuilder() + .message("Different Error Message") + .path(ResultPath.parse("/graphqlEndpoint")) + .build(); + + Assertions.assertNotEquals(baseError, differentMessageError); + + TypedGraphQLError differentLocationsError = TypedGraphQLError.newPermissionDeniedBuilder() + .message("Different Error Message") + .location(new SourceLocation(0, 0)) + .path(ResultPath.parse("/graphqlEndpoint")) + .build(); + + Assertions.assertNotEquals(baseError, differentLocationsError); + + TypedGraphQLError differentPathError = TypedGraphQLError.newPermissionDeniedBuilder() + .message("org.springframework.security.access.AccessDeniedException: Access is denied") + .path(ResultPath.parse("/differentGraphQlEndpoint")) + .build(); + + Assertions.assertNotEquals(baseError, differentPathError); + + TypedGraphQLError differentExtensionsError = TypedGraphQLError.newPermissionDeniedBuilder() + .message("org.springframework.security.access.AccessDeniedException: Access is denied") + .path(ResultPath.parse("/differentGraphQlEndpoint")) + .extensions(new HashMap() {{ + put("key", "value"); + }}) + .build(); + + Assertions.assertNotEquals(baseError, differentExtensionsError); + } +}