@@ -1986,6 +1986,122 @@ func TestParser_Parse(t *testing.T) {
19861986 role#comment
19871987 }#comment` , parse , false )
19881988 })
1989+
1990+ t .Run ("query with description" , func (t * testing.T ) {
1991+ run (`"Fetches a user by ID" query GetUser($id: ID!) { user(id: $id) { id name } }` , parse , false ,
1992+ func (doc * ast.Document , extra interface {}) {
1993+ query := doc .OperationDefinitions [0 ]
1994+ if query .OperationType != ast .OperationTypeQuery {
1995+ panic ("want OperationTypeQuery" )
1996+ }
1997+ if ! query .Description .IsDefined {
1998+ panic ("want description to be defined" )
1999+ }
2000+ description := doc .Input .ByteSliceString (query .Description .Content )
2001+ if description != "Fetches a user by ID" {
2002+ panic (fmt .Errorf ("want 'Fetches a user by ID', got '%s'" , description ))
2003+ }
2004+ if doc .Input .ByteSliceString (query .Name ) != "GetUser" {
2005+ panic ("want GetUser" )
2006+ }
2007+ })
2008+ })
2009+
2010+ t .Run ("query with block string description" , func (t * testing.T ) {
2011+ run (`"""
2012+ Fetches a user by their unique identifier.
2013+ This operation returns detailed user information.
2014+ """
2015+ query GetUser($id: ID!) { user(id: $id) { id name } }` , parse , false ,
2016+ func (doc * ast.Document , extra interface {}) {
2017+ query := doc .OperationDefinitions [0 ]
2018+ if query .OperationType != ast .OperationTypeQuery {
2019+ panic ("want OperationTypeQuery" )
2020+ }
2021+ if ! query .Description .IsDefined {
2022+ panic ("want description to be defined" )
2023+ }
2024+ if ! query .Description .IsBlockString {
2025+ panic ("want block string description" )
2026+ }
2027+ description := doc .Input .ByteSliceString (query .Description .Content )
2028+ expected := "Fetches a user by their unique identifier.\n This operation returns detailed user information."
2029+ if description != expected {
2030+ panic (fmt .Errorf ("want '%s', got '%s'" , expected , description ))
2031+ }
2032+ })
2033+ })
2034+
2035+ t .Run ("mutation with description" , func (t * testing.T ) {
2036+ run (`"Creates a new user" mutation CreateUser($input: UserInput!) { createUser(input: $input) { id } }` , parse , false ,
2037+ func (doc * ast.Document , extra interface {}) {
2038+ mutation := doc .OperationDefinitions [0 ]
2039+ if mutation .OperationType != ast .OperationTypeMutation {
2040+ panic ("want OperationTypeMutation" )
2041+ }
2042+ if ! mutation .Description .IsDefined {
2043+ panic ("want description to be defined" )
2044+ }
2045+ description := doc .Input .ByteSliceString (mutation .Description .Content )
2046+ if description != "Creates a new user" {
2047+ panic (fmt .Errorf ("want 'Creates a new user', got '%s'" , description ))
2048+ }
2049+ })
2050+ })
2051+
2052+ t .Run ("subscription with description" , func (t * testing.T ) {
2053+ run (`"""Subscribes to user updates""" subscription UserUpdated($userId: ID!) { userUpdated(userId: $userId) { id } }` , parse , false ,
2054+ func (doc * ast.Document , extra interface {}) {
2055+ subscription := doc .OperationDefinitions [0 ]
2056+ if subscription .OperationType != ast .OperationTypeSubscription {
2057+ panic ("want OperationTypeSubscription" )
2058+ }
2059+ if ! subscription .Description .IsDefined {
2060+ panic ("want description to be defined" )
2061+ }
2062+ description := doc .Input .ByteSliceString (subscription .Description .Content )
2063+ if description != "Subscribes to user updates" {
2064+ panic (fmt .Errorf ("want 'Subscribes to user updates', got '%s'" , description ))
2065+ }
2066+ })
2067+ })
2068+
2069+ t .Run ("multiple operations with and without descriptions" , func (t * testing.T ) {
2070+ run (`
2071+ "Get user query"
2072+ query GetUser { user { id } }
2073+
2074+ mutation CreateUser { createUser { id } }
2075+
2076+ "Subscribe to updates"
2077+ subscription Updates { updates { id } }
2078+ ` , parse , false ,
2079+ func (doc * ast.Document , extra interface {}) {
2080+ // First operation with description
2081+ query := doc .OperationDefinitions [0 ]
2082+ if ! query .Description .IsDefined {
2083+ panic ("want first operation description to be defined" )
2084+ }
2085+ if doc .Input .ByteSliceString (query .Description .Content ) != "Get user query" {
2086+ panic ("want 'Get user query'" )
2087+ }
2088+
2089+ // Second operation without description
2090+ mutation := doc .OperationDefinitions [1 ]
2091+ if mutation .Description .IsDefined {
2092+ panic ("want second operation description to not be defined" )
2093+ }
2094+
2095+ // Third operation with description
2096+ subscription := doc .OperationDefinitions [2 ]
2097+ if ! subscription .Description .IsDefined {
2098+ panic ("want third operation description to be defined" )
2099+ }
2100+ if doc .Input .ByteSliceString (subscription .Description .Content ) != "Subscribe to updates" {
2101+ panic ("want 'Subscribe to updates'" )
2102+ }
2103+ })
2104+ })
19892105 })
19902106 t .Run ("variable definition" , func (t * testing.T ) {
19912107 t .Run ("simple" , func (t * testing.T ) {
0 commit comments