Skip to content
Snippets Groups Projects
parser_test.go 5.58 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Copyright 2015 Manish R Jain <manishrjain@gmail.com>
     *
     * 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 gql
    
    import (
    	"fmt"
    
    	"strings"
    
    func checkAttr(g *GraphQuery, attr string) error {
    
    	if g.Attr != attr {
    		return fmt.Errorf("Expected: %v. Got: %v", attr, g.Attr)
    	}
    	return nil
    }
    
    func TestParse(t *testing.T) {
    	query := `
    	query {
    
    	gq, _, err := Parse(query)
    
    	if len(gq.Children) != 4 {
    		t.Errorf("Expected 4 children. Got: %v", len(gq.Children))
    
    	if err := checkAttr(gq.Children[0], "friends"); err != nil {
    
    	if err := checkAttr(gq.Children[1], "gender"); err != nil {
    
    	if err := checkAttr(gq.Children[2], "age"); err != nil {
    
    	if err := checkAttr(gq.Children[3], "hometown"); err != nil {
    
    	if len(child.Children) != 1 {
    		t.Errorf("Expected 1 child of friends. Got: %v", len(child.Children))
    	}
    	if err := checkAttr(child.Children[0], "name"); err != nil {
    		t.Error(err)
    	}
    }
    
    
    	query := `
    	query {
    		user(_uid_: 0x11) {
    			type.object.name
    		}
    	}`
    
    	gq, _, err := Parse(query)
    
    	if len(gq.Children) != 1 {
    		t.Errorf("Expected 1 children. Got: %v", len(gq.Children))
    
    	if err := checkAttr(gq.Children[0], "type.object.name"); err != nil {
    
    func TestParse_error2(t *testing.T) {
    	query := `
    		query {
    			me {
    				name
    			}
    		}
    	`
    	var err error
    
    	_, _, err = Parse(query)
    
    	t.Log(err)
    	if err == nil {
    		t.Error("Expected error")
    	}
    }
    
    func TestParse_pass1(t *testing.T) {
    	query := `
    		{
    
    	gq, _, err := Parse(query)
    
    	if len(gq.Children) != 2 {
    		t.Errorf("Expected 2. Got: %v", len(gq.Children))
    
    	if err := checkAttr(gq.Children[0], "name"); err != nil {
    
    	if err := checkAttr(gq.Children[1], "friends"); err != nil {
    
    		t.Errorf("Expected 0. Got: %v", len(gq.Children))
    
    
    func TestParse_block(t *testing.T) {
    	query := `
    		{
    			root(_uid_: 0x0a) {
    				type.object.name.es-419
    			}
    		}
    	`
    
    	gq, _, err := Parse(query)
    
    	if len(gq.Children) != 1 {
    		t.Errorf("Expected 1. Got: %v", len(gq.Children))
    
    	if err := checkAttr(gq.Children[0], "type.object.name.es-419"); err != nil {
    
    
    func TestParseMutation(t *testing.T) {
    	query := `
    		mutation {
    			set {
    				<name> <is> <something> .
    				<hometown> <is> <san francisco> .
    			}
    			delete {
    				<name> <is> <something-else> .
    			}
    		}
    	`
    	_, mu, err := Parse(query)
    	if err != nil {
    		t.Error(err)
    		return
    	}
    	if strings.Index(mu.Set, "<name> <is> <something> .") == -1 {
    		t.Error("Unable to find mutation content.")
    	}
    	if strings.Index(mu.Set, "<hometown> <is> <san francisco> .") == -1 {
    		t.Error("Unable to find mutation content.")
    	}
    	if strings.Index(mu.Del, "<name> <is> <something-else> .") == -1 {
    		t.Error("Unable to find mutation content.")
    	}
    }
    
    func TestParseMutation_error(t *testing.T) {
    	query := `
    		mutation {
    			set {
    				<name> <is> <something> .
    				<hometown> <is> <san francisco> .
    			}
    			delete {
    				<name> <is> <something-else> .
    		}
    	`
    	_, _, err := Parse(query)
    	if err == nil {
    		t.Error(err)
    		return
    	}
    	t.Log(err)
    }
    
    func TestParseMutation_error2(t *testing.T) {
    	query := `
    		mutation {
    			set {
    				<name> <is> <something> .
    				<hometown> <is> <san francisco> .
    			}
    			delete {
    				<name> <is> <something-else> .
    			}
    		}
    		mutation {
    			set {
    				another one?
    			}
    		}
    
    	`
    	_, _, err := Parse(query)
    	if err == nil {
    		t.Error(err)
    		return
    	}
    	t.Log(err)
    }
    
    func TestParseMutationAndQuery(t *testing.T) {
    	query := `
    		mutation {
    			set {
    				<name> <is> <something> .
    				<hometown> <is> <san francisco> .
    			}
    			delete {
    				<name> <is> <something-else> .
    			}
    		}
    		query {
    			me(_xid_: tomhanks) {
    				name
    				hometown
    			}
    		}
    	`
    	gq, mu, err := Parse(query)
    	if err != nil {
    		t.Error(err)
    		return
    	}
    
    	if mu == nil {
    		t.Error("mutation is nil")
    		return
    	}
    	if strings.Index(mu.Set, "<name> <is> <something> .") == -1 {
    		t.Error("Unable to find mutation content.")
    	}
    	if strings.Index(mu.Set, "<hometown> <is> <san francisco> .") == -1 {
    		t.Error("Unable to find mutation content.")
    	}
    	if strings.Index(mu.Del, "<name> <is> <something-else> .") == -1 {
    		t.Error("Unable to find mutation content.")
    	}
    
    	if gq == nil {
    		t.Error("subgraph is nil")
    		return
    	}
    	if gq.XID != "tomhanks" {
    		t.Error("Expected: tomhanks. Got: %v", gq.XID)
    		return
    	}
    	if len(gq.Children) != 2 {
    		t.Errorf("Expected 2 children. Got: %v", len(gq.Children))
    		return
    	}
    	if err := checkAttr(gq.Children[0], "name"); err != nil {
    		t.Error(err)
    	}
    	if err := checkAttr(gq.Children[1], "hometown"); err != nil {
    		t.Error(err)
    	}
    }