aboutsummaryrefslogblamecommitdiffstats
path: root/graphql/graphql_test.go
blob: 0b522b5e25941a5a0c25f803a030f982568f0861 (plain) (tree)
1
2
3
4
5
6
7
8
9
               




                           
                                                       

                                                         
                                                  


                                         











                                                                 
                                
                                    
 
                                        






















                                          









                            





























































                                               
                              









                                                        








                                                                              











                                                                        
                                                                        
















                                                                        
package graphql

import (
	"net/http/httptest"
	"testing"

	"github.com/MichaelMure/git-bug/graphql/models"
	"github.com/MichaelMure/git-bug/misc/random_bugs"
	"github.com/MichaelMure/git-bug/repository"
	"github.com/MichaelMure/git-bug/util/test"
	"github.com/vektah/gqlgen/client"
)

func CreateFilledRepo(bugNumber int) repository.ClockedRepo {
	repo := test.CreateRepo(false)

	var seed int64 = 42
	options := random_bugs.DefaultOptions()

	options.BugNumber = bugNumber

	random_bugs.CommitRandomBugsWithSeed(repo, options, seed)
	return repo
}

func TestQueries(t *testing.T) {
	repo := CreateFilledRepo(10)

	handler, err := NewHandler(repo)
	if err != nil {
		t.Fatal(err)
	}

	srv := httptest.NewServer(handler)
	c := client.New(srv.URL)

	query := `
      query {
        defaultRepository {
          allBugs(first: 2) {
            pageInfo {
              endCursor
              hasNextPage
              startCursor
              hasPreviousPage
            }
            nodes{
              author {
                name
                email
                avatarUrl
              }
              actors {
                name
                email
                avatarUrl
              }
              participants {
                name
                email
                avatarUrl
              }
      
              createdAt
              humanId
              id
              lastEdit
              status
              title
      
              comments(first: 2) {
                pageInfo {
                  endCursor
                  hasNextPage
                  startCursor
                  hasPreviousPage
                }
                nodes {
                  files
                  message
                }
              }
      
              operations(first: 20) {
                pageInfo {
                  endCursor
                  hasNextPage
                  startCursor
                  hasPreviousPage
                }
                nodes {
                  author {
                    name
                    email
                    avatarUrl
                  }
                  date
                  ... on CreateOperation {
                    title
                    message
                    files
                  }
                  ... on SetTitleOperation {
                    title
                    was
                  }
                  ... on AddCommentOperation {
                    files
                    message
                  }
                  ... on SetStatusOperation {
                    status
                  }
                  ... on LabelChangeOperation {
                    added
                    removed
                  }
                }
              }
            }
          }
        }
      }`

	type Identity struct {
		Name      string `json:"name"`
		Email     string `json:"email"`
		AvatarUrl string `json:"avatarUrl"`
	}

	var resp struct {
		DefaultRepository struct {
			AllBugs struct {
				PageInfo models.PageInfo
				Nodes    []struct {
					Author       Identity
					Actors       []Identity
					Participants []Identity
					CreatedAt    string `json:"createdAt"`
					HumanId      string `json:"humanId"`
					Id           string
					LastEdit     string `json:"lastEdit"`
					Status       string
					Title        string

					Comments struct {
						PageInfo models.PageInfo
						Nodes    []struct {
							Files   []string
							Message string
						}
					}

					Operations struct {
						PageInfo models.PageInfo
						Nodes    []struct {
							Author  Identity
							Date    string
							Title   string
							Files   []string
							Message string
							Was     string
							Status  string
							Added   []string
							Removed []string
						}
					}
				}
			}
		}
	}

	c.MustPost(query, &resp)
}